等保针对 ‌Nginx‌ 和 ‌MySQL‌ 的专项安全加固配置指南

以下是针对 ‌Nginx‌ 和 ‌MySQL‌ 的专项安全加固配置指南,涵盖协议安全、权限控制、日志审计等关键环节:

一、Nginx 加固配置‌

  1. 禁用高风险HTTP方法‌

nginx.conf 或对应站点配置文件

server {
    # 仅允许必要的HTTP方法(GET/POST/HEAD)
    if ($request_method !~ ^(GET|POST|HEAD)$ ) {
        return 444;  # 返回空响应,拒绝请求
    }
}
  1. 配置安全响应头‌
server {
    add_header X-Content-Type-Options "nosniff" always;   # 禁止MIME类型嗅探
    add_header X-Frame-Options "SAMEORIGIN" always;       # 防止点击劫持
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'";  # 限制资源加载源
    add_header X-XSS-Protection "1; mode=block";           # 启用XSS过滤器
    add_header Referrer-Policy "no-referrer-when-downgrade";  # 控制Referer泄露
}
  1. SSL/TLS 强化‌
server {
    ssl_protocols TLSv1.2 TLSv1.3;   # 禁用SSLv3/TLSv1.0/v1.1
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;    # 优先使用服务端加密套件
    ssl_session_timeout 1d;          # SSL会话缓存有效期
    ssl_session_cache shared:SSL:50m;
    ssl_stapling on;                 # 启用OCSP Stapling
    ssl_stapling_verify on;
    
    # 启用HSTS(强制HTTPS)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}
  1. 访问控制与日志‌
# 限制客户端请求大小和超时
client_max_body_size 10m;          # 限制上传文件大小
client_body_timeout 10s;
client_header_timeout 10s;

# 限制并发连接数(根据服务器性能调整)
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 100;

# 记录完整访问日志(追踪异常请求)
access_log /var/log/nginx/access.log combined buffer=32k;
  1. 隐藏敏感信息‌
server {
    server_tokens off;   # 隐藏Nginx版本号
    location / {
        autoindex off;   # 禁止目录列表
    }
    
    # 限制敏感文件访问(如.git/.env)
    location ~ /\.(env|git|svn|ht) {
        deny all;
        return 404;
    }
}

二、MySQL 加固配置‌

  1. 权限最小化‌
-- 创建专用应用账户(禁止远程root登录)
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;

-- 删除测试数据库和匿名账户
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.user WHERE User='';
  1. 配置文件安全‌
# /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
user = mysql                      # 以非root用户运行
skip_symbolic_links = ON          # 禁用符号链接防止提权
local_infile = OFF                # 禁用本地文件加载
skip_name_resolve = ON            # 禁用DNS反向解析
secure_file_priv = /var/lib/mysql  # 限制文件导出路径

# 日志审计
log_error = /var/log/mysql/error.log
general_log = ON
general_log_file = /var/log/mysql/query.log
  1. 密码策略‌
-- 启用密码复杂度插件(MySQL 5.7+)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
SET GLOBAL validate_password_policy = MEDIUM;  # 要求包含数字、大小写、特殊字符
SET GLOBAL validate_password_length = 10;

-- 设置密码有效期(需启用密码过期插件)
ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
  1. SSL 加密通信‌
-- 检查SSL支持
SHOW VARIABLES LIKE '%ssl%';

-- 强制用户使用SSL连接
ALTER USER 'app_user'@'localhost' REQUIRE SSL;

-- 生成证书(如果未配置):
openssl req -x509 -newkey rsa:2048 -nodes -keyout server-key.pem -out server-cert.pem
  1. 防SQL注入与连接控制‌

my.cnf 中配置

[mysqld]
max_connections = 500             # 限制最大连接数
wait_timeout = 600                # 空闲连接超时断开
interactive_timeout = 600

# 启用查询缓存限制(防止大查询拖垮服务)
query_cache_size = 64M
query_cache_limit = 2M

三、验证与维护‌

Nginx 验证工具‌:

SSL 配置检查:ssllabs.com/ssltest
安全头检查:curl -I https://your-domain.com

MySQL 安全检查‌:

SELECT user, host, ssl_type FROM mysql.user;  -- 确认SSL启用状态
SHOW VARIABLES LIKE 'validate_password%';    -- 检查密码策略

定期维护‌:

每月更新SSL证书(Let’s Encrypt证书需续签)。
每日检查备份文件完整性(如 md5sum backup.sql)。
每周清理日志文件(使用 logrotate 工具)。
注意事项‌
回滚测试‌:修改关键配置前备份原文件(如 cp /etc/nginx/nginx.conf{,.bak})。
灰度发布‌:先在测试环境验证配置兼容性。
性能监控‌:加固后使用 top/htop 观察CPU和内存占用,避免过度限制影响业务。

如需针对特定场景(如高并发业务)优化安全配置,可进一步细化调整参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值