Nginx在Debian上的安全设置指南
Nginx在Debian上的安全设置指南
一、基础系统准备
1. 更新系统与软件包
保持Debian系统及Nginx软件包为最新版本,及时修补已知安全漏洞。执行以下命令:
sudo apt update &
&
sudo apt upgrade -y
安装Nginx时,优先选择官方仓库的最新稳定版:
sudo apt install nginx -y
二、Nginx核心安全配置
1. 隐藏版本信息
修改Nginx主配置文件(/etc/nginx/nginx.conf
),在http
块中添加:
server_tokens off;
此设置会移除响应头中的Nginx版本号,防止攻击者通过版本信息针对性利用漏洞。
2. 配置安全HTTP响应头
在server
或http
块中添加以下指令,增强浏览器端安全防护:
add_header X-Frame-Options "SAMEORIGIN";
# 防止点击劫持(仅允许同源页面嵌入)
add_header X-XSS-Protection "1;
mode=block";
# 启用浏览器XSS过滤
add_header X-Content-Type-Options "nosniff";
# 防止资源类型混淆攻击
add_header Referrer-Policy "strict-origin-when-cross-origin";
# 控制Referer信息传递
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'";
# 限制资源加载来源
这些头信息可有效降低XSS、点击劫持等前端攻击风险。
3. 优化访问控制
限制连接数与请求频率
在http
块中定义共享内存区域,限制单个IP的并发连接数和请求速率:
limit_conn_zone $binary_remote_addr zone=addr:10m;
# 定义IP地址共享内存区域(10MB)
limit_conn addr 100;
# 单个IP最大并发连接数100
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s burst=20 nodelay;
# 限速10r/s,突发20请求
limit_req zone=req_zone burst=20 nodelay;
# 应用限速规则
此配置可缓解DDoS、暴力破解等流量型攻击。
配置敏感区域白名单
对于管理后台(如/admin/
)、API接口等敏感路径,通过allow/deny
指令限制访问IP,并启用基础认证:
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
。
三、SSL/TLS安全强化
1. 强制HTTPS访问
监听443端口并启用SSL,将HTTP请求重定向至HTTPS:
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
# 永久重定向至HTTPS
}
server {
listen 443 ssl http2;
# 启用HTTP/2提升性能
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
# 证书路径(如Let's Encrypt证书)
ssl_certificate_key /path/to/key.pem;
# 私钥路径
}
使用Certbot免费获取SSL证书:
sudo apt install certbot python3-certbot-nginx &
&
sudo certbot --nginx -d yourdomain.com
。
2. 优化SSL配置
在server
块中添加以下指令,禁用不安全的协议与加密套件:
ssl_protocols TLSv1.2 TLSv1.3;
# 仅允许TLS 1.2及以上版本
ssl_ciphers 'HIGH:!aNULL:!MD5:!RC4:!3DES';
# 使用强加密套件
ssl_prefer_server_ciphers on;
# 优先使用服务器端加密套件
ssl_session_cache shared:SSL:10m;
# 启用会话缓存提升性能
ssl_session_timeout 1h;
# 会话超时时间1小时
避免使用SSLv2、SSLv3及TLS 1.0/1.1等存在漏洞的协议。
3. 启用HSTS与OCSP Stapling
添加HSTS头强制浏览器使用HTTPS,减少中间人攻击风险:
add_header Strict-Transport-Security "max-age=31536000;
includeSubDomains" always;
启用OCSP Stapling加速证书验证,提升HTTPS连接速度:
ssl_stapling on;
# 开启OCSP Stapling
ssl_stapling_verify on;
# 验证OCSP响应有效性
resolver 8.8.8.8 8.8.4.4 valid=300s;
# 指定DNS解析器
resolver_timeout 5s;
# 解析超时时间5秒
```。
## 四、防火墙与网络隔离
### 1. 配置UFW防火墙
安装并启用UFW(Uncomplicated Firewall),仅允许必要端口(HTTP 80、HTTPS 443、SSH 22):
```bash
sudo apt install ufw -y
sudo ufw allow 'Nginx Full' # 允许HTTP/HTTPS
sudo ufw allow 22/tcp # 允许SSH
sudo ufw enable # 启用防火墙
查看防火墙状态:sudo ufw status verbose
。
2. 配置SSH安全
修改SSH配置文件(/etc/ssh/sshd_config
),提升远程登录安全性:
Port 2222 # 更改默认SSH端口(如2222)
PermitRootLogin no # 禁止root用户直接登录
PasswordAuthentication no # 禁用密码认证(仅允许密钥认证)
PubkeyAuthentication yes # 启用公钥认证
重启SSH服务使配置生效:sudo systemctl restart sshd
。
五、日常运维与监控
1. 定期更新与补丁管理
每周执行一次系统更新,及时安装安全补丁:
sudo apt update &
&
sudo apt upgrade -y
对于Nginx,可使用unattended-upgrades
实现自动更新:
sudo apt install unattended-upgrades &
&
sudo dpkg-reconfigure --priority=low unattended-upgrades
。
2. 日志管理与监控
开启Nginx访问日志与错误日志,定期分析异常行为:
access_log /var/log/nginx/yourdomain.com.access.log;
# 访问日志路径
error_log /var/log/nginx/yourdomain.com.error.log;
# 错误日志路径
使用Fail2Ban自动封禁恶意IP(如频繁访问404页面的IP):
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
配置Fail2Ban规则(修改/etc/fail2ban/jail.local
):
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 600
```。
## 六、额外安全建议
- **使用非root用户运行Nginx**:创建专用用户(如`nginx`),修改Nginx配置文件中的`user`指令,并调整文件权限:
`sudo useradd -m nginx &
&
sudo usermod -aG www-data nginx`
`sudo chown -R nginx:www-data /var/www/html`
`sudo systemctl edit nginx`(添加`User=nginx`)。
- **限制请求体大小**:防止上传恶意大文件,添加`client_max_body_size`指令(如50MB):
`client_max_body_size 50M;
`。
- **禁用不必要的HTTP方法**:仅允许GET、HEAD、POST方法,拒绝PUT、DELETE等危险方法:
```nginx
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
# 返回方法不允许状态码
}
```。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Nginx在Debian上的安全设置指南
本文地址: https://pptw.com/jishu/724101.html