![如果来自 IP 的命中次数超过阈值,则丢弃每个 IP 的数据包](https://linux22.com/image/1089473/%E5%A6%82%E6%9E%9C%E6%9D%A5%E8%87%AA%20IP%20%E7%9A%84%E5%91%BD%E4%B8%AD%E6%AC%A1%E6%95%B0%E8%B6%85%E8%BF%87%E9%98%88%E5%80%BC%EF%BC%8C%E5%88%99%E4%B8%A2%E5%BC%83%E6%AF%8F%E4%B8%AA%20IP%20%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85.png)
现在,如果某个 IP 在一分钟内向我的主机发出 5 次请求,我想阻止该 IP(或丢弃来自该 IP 的数据包)。该怎么做?您能告诉我关于所述问题应该使用什么工具或命令吗?
经过搜索,我找到了带有 -m 限制模块的 iptables。但是它不考虑 IP 地址。也就是说,如果我将端口 22 上的限制设置为 5,即每 60 秒命中 5 次,那么无论源 IP 是什么(无论是单个 IP 还是 5 台不同的机器),如果有 5 次命中命中服务器,这将阻止连接。我还遇到了 tc 来调整流量带宽,但我不确定这是否是我应该查看的工具。
请通过发布链接和解决方案来帮助我。我总是喜欢阅读更多内容。
提前致谢。
更新:我不能在这里使用 fail2ban,因为 fail2ban 要求日志中存在某种已知格式的日期和时间。但 freeswitch 的日志并非如此。
答案1
好的,我找到了我的问题的答案,并在这里分享,以便其他人从中受益(即使浏览量并没有说明这一点:))。
我的解决方案是利用 iptables 和 fail2ban 来解决相关问题。
启动并运行防火墙。不要忘记打开 freeswitch 所需的端口,以便成功执行 VoIP 操作:
firewall-cmd --add-port=5080-5081/tcp --add-port=5060-5061/tcp --add-port=5066/tcp --add-port=8080-8082/tcp --add-port=7443/tcp --add-port=16384-32768/udp
仅此一步就可以过滤掉大量攻击,因为大多数攻击都是通过 UDP 和 TCP 预期端口进行的。
要求 iptables 在连接到信令端口时存储 tcp 连接相关信息:
iptables -I INPUT 5 -i eth0 -p tcp -m multiport --dports 5080,5081,5060,5061,7443,5066,8080:8082 -m recent --set --name FREESWITCH_BADGUY -j ACCEP iptables -I INPUT 5 -i eth0 -p tcp -m recent --update --hitcount 1 --seconds 120 --name FREESWITCH_BADGUY -j LOG --log-prefix "FREESWITCH BAD: " --log-level info
笔记INPUT 链中的索引/顺序 5。我使用 5 是因为它正好位于接受所列端口上的连接的规则之前(来自第一步中的命令)。因此,您应该将它们放在第一步中的规则之前但在 fail2ban ssh 规则之后的任何位置。
在以下位置创建一个新的 fail2ban 过滤器
/etc/fail2ban/filter.d/freeswitch-customized.conf
:[Definition] failregex = FREESWITCH BAD.*SRC=<HOST> ignoreregex =
添加以下内容
/etc/fail2ban/jail.local
:(将日志路径更改为系统日志文件。我的是/var/log/messages
。但在您的情况下也可以是,例如/var/log/syslog
)。[freeswitch-customized] enabled = true port = 5060,5061,5080,5081,7443,5066 logpath = /var/log/messages filter = freeswitch-customzied
重新启动fail2ban:
systemctl restart fail2ban
这对我有用。