Nginx限制恶意IP访问的方法包括:使用allow/deny指令设置黑白名单,通过geo模块按区域控制,借助第三方模块实现地理IP拦截,利用iptables防火墙规则,以及部署Fail2Ban自动封禁暴力破解IP。不同方案可根据安全需求灵活选择或组合使用。
在Nginx的实际运维中,针对恶意IP的访问控制已有多种成熟方案。这些方法各有侧重,从简单的IP黑白名单到智能自动封禁,可根据安全需求灵活选用。下面逐一解析,介绍几种常用且有效的思路。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
allow 和 deny 指令这是Nginx内置、最基础的访问控制手段,配置直观。在 server 或 location 块中,直接声明允许哪些IP,然后拒绝其他所有访问。如同在门口设置门禁,白名单之外一律禁止进入。
server {
listen 80;
server_name example.com;
location / {
allow 192.168.1.1; # 允许特定IP
deny all; # 拒绝其他所有
}
}
geo 模块按区域控制如需管理较大IP范围,或者针对多个IP段进行差异化控制,geo 模块更为高效。它可在 http 块中预先定义IP地址与规则变量的映射关系,然后在具体配置中引用该变量决定放行或拦截。
http {
geo $block_ip {
default 1; # 默认拒绝
192.168.1.1 0; # 允许特定IP
}
server {
listen 80;
server_name example.com;
location / {
if ($block_ip) {
return 403; # 封禁
}
# 其他正常配置
}
}
}
ngx_http_access_module该模块内置在Nginx中,与第一种方法本质相同,同样在 server 或 location 块中使用 allow 和 deny 指令。它提供最底层的基于主机的访问控制能力,简单实用,适合快速部署。
server {
listen 80;
server_name example.com;
location / {
allow 192.168.1.1;
deny all;
}
}
若恶意IP主要集中在某些国家或地区,可引入 ngx_http_geoip_module 等第三方模块,根据IP地理位置进行细粒度控制。例如,轻松拒绝来自某个国家的所有访问。
http {
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
auto_reload 60m;
$geoip2_data_country_code default=XX country iso_code;
}
server {
listen 80;
server_name example.com;
location / {
if ($geoip2_data_country_code = "CN") {
return 403; # 拒绝中国IP访问
}
# 其他配置
}
}
}
有时应用层控制不够彻底,或者希望将恶意流量直接挡在系统之外。此时可直接使用操作系统防火墙工具,如 iptables。在服务端口上设置规则,对特定IP放行或丢弃,效率更高。
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
面对频繁变化的攻击IP,手动添加规则不现实。Fail2Ban 这类入侵防御工具可监控Nginx访问日志,当检测到某个IP在短时间内多次失败尝试(如暴力破解),自动触发防火墙规则暂时封禁。
sudo apt-get install fail2ban
sudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak
sudo nano /etc/fail2ban/jail.local
在 jail.local 文件中添加针对Nginx的配置:
[DEFAULT]
bantime = 600 # 封禁时长(秒)
findtime = 600 # 检查时间窗口(秒)
maxretry = 3 # 最大失败次数
[nginx]
enabled = true
filter = nginx-badbots
action = iptables-multiport[name=All, port="http,https", protocol=tcp]
logpath = /var/log/nginx/access.log
配置完成后重启服务:
sudo systemctl restart fail2ban
总体而言,每种方案都有其适用场景。日常维护中,可根据攻击复杂度、运维习惯及性能要求,选择组合或单独使用。最直接的是用 allow/deny 做规则守门;如需弹性且自动化的防御,Fail2Ban 则是不错的选择。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述