Nginx 是一款高性能的 HTTP 和反向代理服务器,经常被用于网站和应用服务器的构建中。由于其在互联网中的广泛应用,Nginx 也可能成为攻击者攻击的目标。特别是对于使用常见框架的网站,如 Laravel、Symfony、Django 等,注入脚本攻击(如 XSS、SQL 注入等)是常见的威胁。以下是一些配置 Nginx 以防御这些攻击的策略。
一、限制请求体大小
首先,为了防止恶意用户通过发送过大的请求体来进行攻击,可以通过配置 client_max_body_size 限制请求体大小。
http {
server {
client_max_body_size 10m; # 限制请求体大小为10MB
}
}
二、设置请求头限制
通过设置请求头限制,可以防止一些特定的请求头被使用,这些请求头可能被用于注入攻击。
http {
server {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; # 限制请求速率
location / {
limit_req zone=mylimit burst=5; # 突破速率限制的请求数量
# 限制特定的请求头
if ($http_x_forwarded_for = ~*.*\.example\.com) {
return 403;
}
# 其他配置...
}
}
}
三、开启安全相关的 Nginx 模块
Nginx 提供了一些安全相关的模块,如 ngx_http_secure_link_module,可以帮助防御 XSS 攻击。
http {
server {
# 开启 secure_link 模块
secure_link on;
secure_link_max_age 3600; # 限制链接有效期
secure_link脑血管 1234; # 加密密钥
# 其他配置...
}
}
四、配置防 SQL 注入
对于使用数据库的网站,可以通过配置 Nginx 来防止 SQL 注入攻击。
http {
server {
location ~* \.(php|jsp|asp)$ {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $server_name;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 使用参数化查询或预编译语句来防止SQL注入
proxy_pass http://backend_server;
}
# 其他配置...
}
}
五、利用防火墙规则
除了 Nginx 的配置,还可以在防火墙层面设置规则来增强安全性。
http {
server {
# 配置防火墙规则,如:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
location / {
limit_req zone=mylimit burst=5;
# 其他配置...
}
# 防火墙配置示例(需结合实际防火墙设备配置)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol=tcp port=80 accept'
}
}
六、定期更新和监控
最后,定期更新 Nginx 和其依赖的库,以及监控服务器日志,可以帮助及时发现和防御新的攻击。
通过以上这些配置,可以有效提高 Nginx 服务器的安全性,防御常见的框架注入脚本攻击。然而,安全配置是一个持续的过程,需要根据实际情况不断调整和优化。
