跨境站Nginx安全加固防扫描:跨境站Nginx安全加固
跨境站Nginx安全加固:防止恶意扫描的5个关键配置
运营跨境网站时,每天被大量扫描程序试探漏洞是常态。
如果不做防护,敏感路径、后台地址、API接口可能被遍历,甚至引发数据泄露。
本文面向零基础用户,用最直接的操作帮你加固Nginx,挡住大部分恶意扫描。
动手加固前确认你的环境
- 你已经通过SSH登录到服务器(推荐使用 Xshell、Termius 或系统自带终端)。
- 确认Nginx已安装并正常运行:运行
nginx -v能看到版本号即可。 - 编辑Nginx配置文件前,先备份:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak。 - 所有配置修改后,都要重载Nginx:
nginx -s reload(若报错先nginx -t测试语法)。
逐一配置五个防护项
1. 隐藏Nginx版本号
扫描器常根据版本号寻找已知漏洞。首先屏蔽版本显示。
编辑 /etc/nginx/nginx.conf,在 http 块内添加:
server_tokens off;
保存后重载Nginx。
再次访问错误页时,不会暴露版本。
2. 禁止访问常见扫描路径
很多扫描器会尝试访问 /wp-admin、/phpmyadmin、/admin、/backup、/.git 等路径。
在 server 块内加入:
location ~* /(wp-admin|phpmyadmin|admin|backup|\.git|\.env) {
deny all;
return 444;
}
deny all拒绝所有IP。return 444直接断开连接,不给任何响应,让扫描器吃闭门羹。
你可以根据自己站点实际路径增减规则。
3. 限制单个IP的请求频率
防止CC攻击和密集扫描。
在 http 块定义速率:
limit_req_zone $binary_remote_addr zone=scan:10m rate=30r/m;
然后在你需要防护的 server 或 location 块中引用:
limit_req zone=scan burst=5 nodelay;
这里 rate=30r/m 表示每分钟最多30个请求,burst=5 允许突发5个请求排队。
你可以按网站实际流量调整。
4. 禁用不安全的HTTP方法
只保留 GET、POST、HEAD,关闭 PUT、DELETE、TRACE、OPTIONS 等。
在 server 块添加:
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}
注意:跨境站如果使用 API 且需要 PUT/DELETE,请只对特定 location 放行,不要全局禁用。
5. 过滤常见扫描User-Agent
很多扫描工具使用固定UA,比如 python-requests、Go-http-client、curl(正常curl不影响,但可选择性过滤)。
在 http 块内:
map $http_user_agent $bad_ua {
default 0;
~*(python-requests|Go-http-client|Nmap|sqlmap|nikto) 1;
}
server {
if ($bad_ua) { return 444; }
}
只过滤已知恶意UA,避免误伤正常用户。
小心这些配置陷阱
- 限制频率导致正常用户被拦:
rate值设太小会影响正常访问。建议上线前用浏览器正常浏览5分钟,确认没收到503后再调低。 - 禁用方法影响接口:如果站点有 API 需要其他方法,请用白名单方式只允许特定
location执行。 - UA过滤太严:某些合法爬虫(如Googlebot)可能被误伤,请检查
$http_user_agent后谨慎添加规则。 - 禁止路径误拦截:如果你的网站正好需要
/admin作为后台路径,可以改用location ~* /(phpmyadmin|backup|\.git)并放行自己的IP。
怎么确认加固生效了
- 测试版本隐藏:
curl -I http://你的域名查看Server响应头,如果看到nginx后面没有版本号即成功。 - 测试禁止路径:
curl -o /dev/null -w "%{http_code}" http://你的域名/wp-admin应返回000(因为return 444没有标准状态码,curl会显示000)。 - 测试频率限制:用脚本快速发请求:
for i in {1..40}; do curl -s http://你的域名 >/dev/null; done,正常情况会输出几个503(速率超出)。 - 查看Nginx访问日志:
tail -f /var/log/nginx/access.log观察是否有大量444或503记录,说明规则已拦截扫描。
高频问题解答
Q:我修改了配置后重载报错,怎么办?
A:运行 nginx -t 查看具体错误行,常见问题:忘记加分号或大括号未闭合。修正后再重载。
Q:我自己访问被限制住了怎么办?
A:如果设置频率限制后自己也无法访问,可以先把 rate 调大(如 60r/m),或者将你的IP加入白名单(使用 geo 模块)。
Q:为什么用 return 444 而不是 403?
A:403会返回一个页面告诉扫描器“此目录存在但不让你访问”,而444直接不响应,能让扫描器误以为路径不存在,更有效。
如果你正在处理跨境站Nginx安全加固防扫描,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。