我尝试在主 Nginx 配置文件中使用以下命令来限制 ip 的连接数:
limit_conn_zone $binary_remote_addr zone=alpha:8m;
limit_req_zone $binary_remote_addr zone=delta:8m rate=30r/s;
在我的域 nginx 配置文件中如下:
limit_conn alpha 10;
limit_req zone=delta burst=50 nodelay;
一切运行良好!
但是现在我想将 Cloudflare ip 排除在外,因为我从它们那里获得了很多连接,我不想让它们被阻止,但是该怎么做呢?
Cloudflare 的 IP:
192.168.1.0/24
199.27.128.0/21
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/12
答案1
如果你想封锁 IP,你必须使用类似 fail2ban 的工具。只需安装 fail2ban 并创建一个 nginx 过滤器文件:
vim /etc/fail2ban/filter.d/nginx-req-limit.conf
在其中添加以下内容:
[Definition]
failregex = limiting requests, excess:.* by zone.*client: <HOST>
在以下位置创建一个新的监狱配置:
vim /etc/fail2ban/jail.local
如果您没有看到 jail.local,只需运行:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
在末尾添加以下内容:
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10
findtime 和 maxretry 值很重要。它们共同决定了违规 IP 被禁止的频率。如果你将这些值调小,IP 被禁止的频率就会更高。根据需要进行调整。
保存两个配置文件后,使用以下命令重新启动 fail2ban:
service fail2ban restart
您还可以使用fail2ban-client通过以下命令查找特定监狱的状态:
fail2ban-client status nginx-req-limit