Nginx在Ubuntu上如何进行安全加固
导读:Nginx在Ubuntu上的安全加固指南 1. 系统层基础强化 更新系统与软件:运行sudo apt update && sudo apt upgrade -y更新所有系统包及Nginx至最新稳定版,修补已知漏洞。 配置防...
Nginx在Ubuntu上的安全加固指南
1. 系统层基础强化
- 更新系统与软件:运行
sudo apt update & & sudo apt upgrade -y
更新所有系统包及Nginx至最新稳定版,修补已知漏洞。 - 配置防火墙(UFW):
sudo ufw default deny incoming # 拒绝所有入站连接 sudo ufw default allow outgoing # 允许所有出站连接 sudo ufw allow OpenSSH # 允许SSH登录(避免被锁) sudo ufw allow 80/tcp # 允许HTTP(临时,后续强制HTTPS) sudo ufw allow 443/tcp # 允许HTTPS sudo ufw enable # 启用防火墙
- 安装Fail2Ban:防范暴力破解(如SSH、Nginx登录):
sudo apt install fail2ban -y sudo systemctl enable --now fail2ban
2. Nginx核心配置加固
2.1 隐藏版本信息与敏感头
- 编辑
/etc/nginx/nginx.conf
,在http
块中添加:server_tokens off; # 隐藏Nginx版本号
- 添加安全头部,防范点击劫持、MIME嗅探等攻击:
add_header X-Frame-Options "SAMEORIGIN" always; # 防止iframe嵌入 add_header X-Content-Type-Options "nosniff" always; # 禁止内容类型嗅探 add_header X-XSS-Protection "1; mode=block" always; # 启用XSS防护 add_header Referrer-Policy "strict-origin-when-cross-origin" always; # 限制Referer泄露 add_header Permissions-Policy "geolocation=(), microphone=()" always; # 限制权限
2.2 限制请求与连接
- 限制请求频率:在
http
块中定义限流区域,防止单个IP滥用:
在limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s; # 每秒10个请求
server
或location
块中应用(如API接口):location /api/ { limit_req zone=req_limit burst=20 nodelay; # 允许突发20个请求,立即拒绝超限 }
- 限制并发连接数:在
http
块中定义共享内存,限制每个IP的并发连接:limit_conn_zone $binary_remote_addr zone=conn_limit:10m; server { location / { limit_conn conn_limit 10; # 每个IP最多10个并发连接 } }
- 限制请求体大小:防止大文件上传耗尽磁盘空间:
client_max_body_size 10M; # 限制为10MB
2.3 访问控制
- IP黑白名单:通过
allow/deny
指令限制敏感路径访问(如管理后台):location /admin/ { allow 192.168.1.0/24; # 允许内网IP allow 10.0.0.0/8; # 允许私有IP deny all; # 拒绝其他所有IP }
- 禁用不必要的HTTP方法:仅允许GET、HEAD、POST(阻止PUT、DELETE等危险方法):
if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; # 直接关闭连接(Nginx特有状态码) }
2.4 HTTPS配置
- 安装Certbot获取免费证书:
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 替换为你的域名
- 优化SSL配置:编辑Nginx的SSL
server
块,使用强加密套件并启用HSTS:ssl_protocols TLSv1.2 TLSv1.3; # 仅使用TLS 1.2及以上 ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; # 强加密套件 ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # 强制HTTPS
3. 日志与监控
- 配置详细日志:在
http
块中定义日志格式,记录客户端IP、请求方法、状态码等信息:log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn;
- 定期审查日志:使用
grep
、awk
等工具分析日志,查找异常请求(如大量404、403错误):sudo grep " 404 " /var/log/nginx/access.log | awk '{ print $1} ' | sort | uniq -c | sort -nr # 统计404错误的IP
4. 持续维护
- 定期更新:开启自动安全更新(Ubuntu):
sudo apt install unattended-upgrades sudo dpkg-reconfigure --priority=low unattended-upgrades
- 备份配置:定期备份Nginx配置与日志,防止配置丢失:
sudo tar -czvf nginx-backup-$(date +%F).tar.gz /etc/nginx /var/log/nginx
- 测试配置:每次修改Nginx配置后,使用
nginx -t
检查语法,避免配置错误导致服务中断:sudo nginx -t sudo systemctl reload nginx # 重新加载配置(不重启服务)
通过以上步骤,可显著提升Ubuntu上Nginx的安全性,防范常见攻击(如版本探测、DDoS、SQL注入、XSS等)。安全是持续过程,需定期审查配置并根据业务需求调整。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Nginx在Ubuntu上如何进行安全加固
本文地址: https://pptw.com/jishu/733962.html