使用 iptables 防止 SSH 暴力攻击和 DDOS 攻击

使用 iptables 防止 SSH 暴力攻击和 DDOS 攻击

我在 iptables 的最顶部有以下几行,它们用于防止 SSH 暴力攻击和 DDOS 攻击: iptables 段防止 SSH 暴力攻击和 DDOS 攻击

让我困扰的是这三个都使用“name: DEFAULT”,我只是想知道它们是否都能正常工作,还是其中一个会覆盖另一个?有什么想法可以测试吗?

另外,我正在使用 Nginx 作为 Apache 的反向代理,我在这里使用端口 80 和 443(即 Nginx 正在运行的端口)是否正确,或者我应该在 iptables 中使用 Apache 端口 7080 和 7081?

这是在装有 Plesk Onyx 和 Ubuntu 14.04 的 VPS 上运行的。

感谢您的帮助!


下面是我用来将这些行添加到 iptables 的命令:

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 -j DROP
iptables -I INPUT -p tcp --dport 443 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 -j DROP
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent  --update --seconds 60 --hitcount 5 -j DROP 

答案1

实现此目的的最简单方法是安装 fail2ban。它将默认监控 SSH,并动态禁止经常失败的 IP。但是,您可以将其配置为监控任何日志文件。因此,您也可以包括 HTTP 和 HTTPS。

答案2

回复:“让我困扰的是这三个命令中的“name: DEFAULT”,我只是想知道它们是否都能正常工作,还是其中一个会覆盖另一个?”添加“--name UNIQUE-NAME”可解决此问题(如果这是一个问题)。以下是更新后的指令:

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent  --update --seconds 60 --hitcount 5 --name SSH -j DROP
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name DDOS-HHTP
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --name DDOS-HHTP -j DROP
iptables -I INPUT -p tcp --dport 443 -m state --state NEW -m recent --set --name DDOS-HHTPS
iptables -I INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --name DDOS-HHTPS -j DROP

答案3

就像是

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m sshbrute --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m sshbrute --update --seconds 60 --hitcount 4 -j DROP

可能对你有用。所有 ssh 连接(或者更确切地说是端口 22 连接)都会被标记为“sshbrute”,如果一分钟内来自特定 IP 的新连接超过 4 个,第二个命令将删除任何新的 ssh 连接。不要弄乱你的密码,如果弄乱了,请慢慢来。

相关内容