配置 iptables:阻止 SSH

配置 iptables:阻止 SSH

我正在尝试配置基于 CentOS 6.4 的测试服务器。我已将默认 SSH 端口更改为另一个端口 56988。现在,我正在尝试创建一组规则以便:

  • 允许最大连接数为 56988(以防止暴力破解)
  • 接受 80 和 443 上的传入和传出连接,限制以防止 DOS 攻击
  • 阻止其他一切

为了实现这一点,我编写了一个小型 bash 脚本:

#!
iptables -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables -A INPUT -p tcp --dport 56988 -m state --state NEW -m recent --set --name ssh -rsource
iptables -A INPUT -p tcp --dport 56988 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name ssh -j DROP
iptables -A OUTPUT -p tcp --sport 56988 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sports 80,443 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sports 80,443 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --dports 80,443 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT

/etc/init.d/iptables save

但是运行完这个之后,我被 SSH 阻止了。我在这个配置上做错了什么?提前谢谢!

答案1

我很高兴看到您澄清了有关端口号的问题。现在,我所做的就是正式化 Karma Fusebox 和 Laurentiu Roescu 的评论,因为他们已经确定了实际问题:您指定要丢弃哪些 ssh 数据包,但从未指定要接受哪些 ssh 数据包。您需要插入一行,如下所示:

iptables -A INPUT -p tcp --dport 56988 -m state --state NEW -m recent --set --name ssh -rsource
iptables -A INPUT -p tcp --dport 56988 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name ssh -j DROP
###### new line is the next one #########
iptables -A INPUT -p tcp --dport 56988 -j ACCEPT
###### new line was the previous one ####
iptables -A OUTPUT -p tcp --sport 56988 -m state --state ESTABLISHED -j ACCEPT

你明白为什么吗?你的 INPUT 链有一堆关于速率限制的逻辑,并拒绝任何超过速率限制的数据包 - 但它从不为那些新的数据包做任何准备,未通过速率限制测试,因此它们将通过整个链并因策略而死亡(DROP)。

我本来会赞成 vasco.debian 的答案,但是位置这一行很重要。因为 iptables 的工作方式是先决条件匹配获胜,所以新行必须限速线;否则全部新的数据包将与这条新线路匹配,并且永远不会首先根据速率限制线路进行测试。

答案2

明显的问题是你打开了端口 22,但是却让 ssh 监听端口 56988。这就是你需要改变的。

答案3

是否正在sshd监听端口 56988?默认情况下,SELinux 会阻止sshd绑定到非标准端口。

答案4

尝试关注。

/sbin/iptable -I INPUT -p tcp --dport 56988 -j ACCEPT

这将在 INPUT 链的顶部插入规则

相关内容