我有以下IPTables
IPSet
作为规则来源阻止攻击IP
,但当我向IP
添加攻击IPSet
时,我的nginx
IP
访问日志,我仍然可以看到持续访问攻击IP
。过了一会儿,也许3到5分钟,~$ sudo iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 317K packets, 230M bytes)
num pkts bytes target prot opt in out source destination
1 106K 6004K DROP all -- * * 0.0.0.0/0 0.0.0.0/0 match-set Blacklist src
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 match-set Blacklist src
Chain OUTPUT (policy ACCEPT 350K packets, 58M bytes)
num pkts bytes target prot opt in out source destination
被阻止了。
的iptables
sudo ipset -L
Name: Blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536 timeout 60
Size in memory: 13280
References: 2
Members:
xxx.xxx.xxx.xxx(attacker ip) timeout 0
IPSET
ipset
我不知道为什么规则没有立即生效,这让我疯狂就像攻击者在嘲笑我一样。
我使用iptables
选项将-I
添加到Chain INPUT(policy Accept)
规则,该规则应将规则保留在第一个位置。那么也许Nginx+Djano/uWSGI
可以做到这一点?
请帮帮我,非常感谢。
BTW。
我使用Blacklist ipset
来部署我的应用程序,并使用shell脚本来分析nginx日志,将邪恶的ip放到[taglist[i % len(taglist)] for i in range(n)]
。
答案 0 :(得分:3)
防火墙规则可能对阻止流量没有立竿见影的原因可能是由于 有状态 检查数据包。
防火墙分析到达该线路的每个数据包可能效率低下,因此,出于性能原因,所发生的情况是用户创建的规则通常仅适用于建立连接的初始数据包(称为TCP console.log
,SYN
+ SYN
,ACK
) - 随后,所述连接会自动列入白名单(更确切地说,它是原始状态规则已创建白名单,直到终止(ACK
)。
这里可能发生的是,由于nginx擅长的流水线和保持连接,单个连接可用于发出和处理多个独立的HTTP请求。
因此,为了解决问题,您可以在nginx中禁用流水线操作和保持活动(不是一个好主意,因为它会影响性能),或者 删除现有的白名单连接 ,例如tcpdrop(8)
on *BSD之类的东西 - 当然也必须有Linux等效工具。
但是,如果您只是遇到单个客户端执行过多请求的问题,并因此使您的后端过载,那么适当的操作方法可能是 rate-limit < / em> 基于IP地址的客户端,在标准limit-req
directive of nginx的帮助下。 (但是,请注意,您的某些客户可能落后于运营商级NAT,因此,请注意您应用限制的程度,以确保误报不会成为问题。)
答案 1 :(得分:0)
你有没看过这篇文章:https://serverfault.com/questions/523021/why-is-iptables-not-blocking-an-ip-address
此帖显示使用-A INPUT -p tcp --dport 80 -j LOG -log-prefix&#34; HTTP:&#34;
显示该人的IP被删除我个人没有遇到过这个问题,所以请告诉我这是否有用,祝你好运。