Linux

配置 iptables:在 SSH 上被屏蔽

  • March 27, 2013

我正在嘗試配置基於 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 屏蔽了。我在這個配置上做錯了什麼?提前致謝!

我很高興看到您已經澄清了有關埠號的問題。現在,我所做的只是將 Karma Fusebox 和 Laurentiu Roescu 的評論正式化,因為他們已經確定了實際問題:您指定要丟棄哪些 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 以先決勝負的方式工作,所以新行必須速率限制行之後;否則所有NEW 數據包都將匹配這條新行,並且永遠不會首先針對速率限制行進行測試。

引用自:https://serverfault.com/questions/491628