configurationiptables:在SSH上阻塞

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

  • 允许连接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被阻止。 我在做什么错误的configuration? 提前致谢!

我很高兴看到你已经澄清了有关端口号的问题。 现在,我所做的只是将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链有一堆关于速率限制的逻辑,并且拒绝任何超过速率限制的数据包 – 但是它从来没有为那些没有通过速率限制testing的新数据包作任何规定,所以它们通过整个链条和死亡的政策(DROP)。

我只想提出vasco.debian的答案,但这个新的路线的地位是重要的。 由于iptables是以第一种方式匹配胜出的,所以新的线路必须限速线之后。 否则所有新的数据包将匹配这条新的线路,并且从不首先对比限制线进行testing。

显而易见的问题是,你打开22端口,但是把ssh监听端口56988.这是你需要改变。

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

尝试以下。

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

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