支持CentOS7+、Ubuntu18.04+、Debian10+,内核版本≥3.10即可,无需额外硬件资源。云服务器用户需提前在控制台安全组放行80、443、22端口,避免配置后无法访问服务器。
CentOS系统执行以下命令:
```bash yum install -y nginx iptables iptables-services ```Ubuntu/Debian系统执行以下命令:
```bash apt update && apt install -y nginx iptables iptables-persistent ```安装完成后执行`nginx -v`和`iptables -V`,确认返回版本号即为安装成功。
适用于站点层面的IP、UA、路径拦截,支持自定义返回状态码,规则修改无需重启服务器。Nginx默认站点配置路径为`/etc/nginx/conf.d/default.conf`,全局配置路径为`/etc/nginx/nginx.conf`。
在对应站点的server块中添加以下规则,规则优先级从上到下,拦截规则需放在允许规则之前:
```nginx 拦截单个IP deny 192.168.1.100; 拦截IP段 deny 192.168.1.0/24; 放行所有其他IP allow all; ```在Nginx全局配置的http块中添加以下map规则,可自定义要拦截的UA标识,竖线分隔:
```nginx map $http_user_agent $block_ua { default 0; ~Scrapy|curl|python-requests|wget|ByteDanceSpider 1; } ```再在对应站点的server块中添加拦截规则:
```nginx if ($block_ua = 1) { return 403; } ```
拦截指定路径的非信任IP访问,示例为仅允许内网IP访问/admin路径:
```nginx location ^~ /admin { allow 10.0.0.0/24; deny all; } ```所有规则配置完成后,执行`nginx -t`确认返回test is successful,再执行`systemctl reload nginx`即可生效。如果站点使用了CDN,需在http块中添加以下配置获取用户真实IP,否则拦截的是CDN节点IP:
```nginx 替换为对应CDN服务商的官方IP段 set_real_ip_from 106.11.0.0/16; set_real_ip_from 123.125.0.0/16; real_ip_header X-Forwarded-For; real_ip_recursive on; ```适用于系统层面的IP、端口、报文拦截,性能远高于七层拦截,拦截后流量直接丢弃无响应。iptables规则从上到下匹配,命中即停止,新增规则默认放在链首。
规则配置完成后必须执行保存操作,否则服务器重启后规则会丢失。CentOS系统执行:`iptables-save > /etc/sysconfig/iptables && systemctl enable iptables`;Ubuntu/Debian系统执行:`netfilter-persistent save && systemctl enable netfilter-persistent`。
如需删除已配置的规则,先执行`iptables -nL --line-numbers`查看规则序号,再执行`iptables -D INPUT 规则序号`即可删除对应规则。
七层拦截验证:使用被拦截IP访问站点,确认返回403状态码;或执行`curl -A "Scrapy" 你的域名`,确认返回403。
四层拦截验证:使用被拦截IP ping服务器,或执行`telnet 服务器IP 22`,确认请求超时无响应。
Nginx自动拦截高频访问IP脚本,可加入crontab每日定时执行:
```bash !/bin/bash 提取24小时内访问超过1000次的IP加入黑名单 grep "$(date -d "-1 day" +%d/%b/%Y)" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | awk '$1>1000{print "deny "$2";"}' >> /etc/nginx/blacklist.conf 规则去重 awk '!a[$0]++' /etc/nginx/blacklist.conf > /etc/nginx/blacklist.conf.tmp && mv /etc/nginx/blacklist.conf.tmp /etc/nginx/blacklist.conf 生效规则 nginx -t && systemctl reload nginx ```iptables批量导入黑名单脚本,将待拦截IP每行一个存入`ip_blacklist.txt`即可执行:
```bash !/bin/bash for ip in $(cat ip_blacklist.txt); do iptables -I INPUT -s $ip -j DROP done CentOS保存规则 iptables-save > /etc/sysconfig/iptables Ubuntu保存规则 netfilter-persistent save ```易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图