这与其他关于暴力攻击的帖子类似,但更具体一些:
一般来说,我们能够强制使用合理的密码,并且用户名策略也可以避免成为 99.9% 暴力 FTP 攻击的牺牲品......但我认为没有理由允许无休止地进行数千次尝试,有时它们会使日志文件充满大量噪音,这使得找到可能更有针对性的东西变得更加困难。
那么,对于被动 FTP,在 iptables 中对传入 TCP 21 进行一些合理的速率限制是否能够合理有效地切断大量失败尝试,同时又不会妨碍正常使用?我推测这将通过限制从同一 IP 到 TCP 21 的连接速率来实现。对吗?是否存在我没有想到的问题?
那么,接下来,您建议在堡垒防火墙/路由器上使用简单的 iptables 命令来防御最严重/最快的暴力攻击吗?我的想法是在一分钟左右的时间内触发 25 个连接(基于成功登录只是与 TCP 21 的单个连接的原则),然后阻止半小时。这些数字看起来合理吗?
(其他信息:这是用于保护混合操作系统的 DMZ 的 Debian 防火墙/路由器)
答案1
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent \
--name ftpattack --set
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent \
--name ftpattack --rcheck --seconds 60 --hitcount 4 -j LOG \
--log-prefix 'FTP REJECT: '
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent \
--name ftpattack --rcheck --seconds 60 --hitcount 4 -j REJECT \
--reject-with tcp-reset
这些规则规则集的顶部或附近在连续 60 秒的窗口中,将仅允许从任何给定 IP 地址到端口 21 的三个连接。要允许 n,请使用--hitcount n+1
;要使用大于 60 秒的窗口,请增加--seconds 60
。
答案2
正如 MadHatter 所提到的,您想要使用的模块是最近的模块,但是您还需要能够限制用户在单个 TCP 连接中可以尝试的登录尝试次数。如果用户可以在被迫断开连接并重新连接之前尝试 1000 次,那么通过最近的模块限制连接是毫无意义的。您需要说(通过配置 FTP 守护程序 - 请参阅文档)用户只允许在每个连接上尝试登录 5 次,然后使用最近的规则来规定如果他们在一分钟内连接超过 5 次,则阻止他们。是的,允许 25 次尝试听起来确实很高,但对于暴力破解来说还远远不够,并且有助于避免很多误报。我对 SSH 和 OpenSSH 服务器选项 MaxAuthTries 使用类似的规则。希望这能有所帮助。
答案3
使用 Denyhosts... 3 次打击 – 你出局了!
它非常有效。
或者..更硬核..带有 Snort/IDS 的专用防火墙
希望这可以帮助