Debian中Nginx安全设置指南
编辑Nginx主配置文件(/etc/nginx/nginx.conf
),在http
块中添加server_tokens off;
指令,关闭响应头中的Nginx版本号显示,防止攻击者通过版本号查找针对性漏洞。
在server
或http
块中添加以下指令,增强Web应用安全性:
add_header X-Frame-Options "SAMEORIGIN";
:防止点击劫持攻击(禁止页面被嵌入iframe);add_header X-XSS-Protection "1; mode=block";
:启用浏览器XSS(跨站脚本)防护;add_header X-Content-Type-Options "nosniff";
:防止资源类型混淆攻击(如MIME类型嗅探);add_header Referrer-Policy "strict-origin-when-cross-origin";
:控制Referrer信息传递(仅发送同源或安全跨源的Referer);add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'";
:限制资源加载来源(默认仅允许同源,允许必要的数据协议和内联样式)。http
块中定义共享内存区域(用于存储IP连接信息),并通过limit_conn
、limit_req
指令限制单个IP的并发连接数和请求速率。例如:limit_conn_zone $binary_remote_addr zone=addr:10m; # 定义10MB共享内存存储IP连接数 limit_conn addr 100; # 单个IP最多100个并发连接 limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s burst=20 nodelay; # 限制请求速率为10次/秒,突发20次
这些配置可有效缓解DDoS攻击、暴力破解等场景的压力。/admin/
)、API接口等敏感路径,使用allow
/deny
指令限制IP访问范围,并启用基础认证(auth_basic
)。例如:location /admin/ { allow 192.168.1.0/24; # 允许内网IP段 allow 10.0.0.0/8; # 允许另一个内网IP段 deny all; # 拒绝其他所有IP auth_basic "Restricted Access"; # 启用基础认证(弹出用户名密码窗口) auth_basic_user_file /etc/nginx/.htpasswd; # 指定密码文件路径(需提前创建) }
密码文件可通过htpasswd
命令生成(如sudo htpasswd -c /etc/nginx/.htpasswd username
)。listen 443 ssl http2; # 启用HTTPS和HTTP/2协议 ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # 证书路径 ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 私钥路径
if ($scheme != "https") { return 301 https://$server_name$request_uri; }
Let’s Encrypt证书可通过certbot
工具自动获取和续期(sudo certbot --nginx -d yourdomain.com
)。ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5:!RC4:!3DES; ssl_prefer_server_ciphers on; # 优先使用服务器端密码套件
ssl_stapling on; # 启用OCSP Stapling ssl_stapling_verify on; # 验证OCSP响应的有效性 resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS解析器(用于OCSP查询) resolver_timeout 5s; # 解析超时时间
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
注意:启用HSTS后,若站点证书过期或配置错误,会导致用户无法访问,需谨慎测试。使用ufw
(Uncomplicated Firewall)限制开放端口,仅允许HTTP(80)、HTTPS(443)和SSH(22)等必要服务:
sudo apt install ufw # 安装ufw sudo ufw allow 'Nginx Full' # 允许Nginx的HTTP和HTTPS流量 sudo ufw allow 22/tcp # 允许SSH(用于远程管理) sudo ufw enable # 启用防火墙
或通过iptables
设置底层规则(如允许SSH、HTTP、HTTPS,拒绝其他入站流量)。
sudo apt update && sudo apt upgrade
,修补Nginx、内核及其他依赖组件的安全漏洞。/var/log/nginx/error.log
)和访问日志(/var/log/nginx/access.log
),使用工具(如ELK Stack、Prometheus+Grafana)分析异常请求(如大量404、高频POST请求),及时发现潜在攻击。/etc/ssh/sshd_config
),设置PermitRootLogin no
,使用普通用户+sudo
提升权限,降低root账户泄露风险。pam_pwquality
)要求用户设置复杂密码(包含大小写字母、数字、特殊字符,长度≥8位)。