Ssh

如何通過 Iptables 阻止 SSH Brute Force 以及它是如何工作的?

  • November 3, 2015

我計劃添加以下規則來iptables阻止當今常見的 ssh 暴力攻擊。

-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m state --state NEW -m recent --set --name SSH --rsource    
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m recent --rcheck --seconds 30 --hitcount 4 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset    
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m recent --rcheck --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j LOG --log-prefix "SSH brute force "    
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m recent --update --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset    
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -j ACCEPT

我了解第二、第三和第四條規則負責在 30 秒內記錄和阻止來自同一 IP 的攻擊。間隔。

問題

  1. 當文件說“將其記錄到系統日誌一次,然後立即拒絕並忘記它”時,忘記它是什麼意思?
  2. 永遠忘記它?
  3. 是否有 iptables 檢查的黑名單?
  4. 如果一個 IP 被拒絕,但一個小時後又嘗試了另一個連接,那麼該 IP 還會再嘗試 3 次嗎?
  5. 如果是這種情況,那麼只要iptables沒有一些黑名單計數,這不是阻止而是減緩攻擊?

**問題#1:**當文件說“將其記錄到系統日誌一次,然後立即拒絕並忘記它”時,忘記它是什麼意思?

意味著該消息將顯示在日誌中,但僅顯示一次,因此您的日誌不會在每次觸發規則時被連續的消息流污染。

**問題2:**永遠忘記它?

不,不是永遠。有一個時間段與這些消息在日誌中出現的頻率有關。

**問題 #3:**是否有 iptables 檢查的黑名單?

不,沒有iptables“檢查”的黑名單。從某種意義上說,它只會過濾您告訴它的內容,並且只允許您告訴它的內容通過,這很愚蠢。

**問題 #4:**如果一個 IP 被拒絕,但一個小時後又嘗試了另一個連接,那麼該 IP 還會再嘗試 3 次嗎?

這取決於什麼是過度拱形超時。如果發生了額外的嘗試,並且從最初的嘗試開始並沒有超過原來的超時時間,那麼日誌中不應該有額外的消息,也不應該有允許的連接。但是,如果該超時已過,那麼是的,您將看到有關這些後續嘗試的其他消息。

我鼓勵您查看 Iptablerecent模組的文件,以了解有關其工作原理的更多詳細資訊。

埠掃描

IP 保留在“壞人”列表中的時間長度將由您的規則結構控制,如下所示:

iptables -A INPUT -i $OUTS -m recent --name badguys --update --seconds 3600 -j DROP
iptables ...
.
.
.
iptables -A INPUT  -t filter -i $OUTS -j DROP -m recent --set --name badguys

第一條規則將檢查傳入的數據包是否已經在“壞人”列表中。如果是這樣,那麼時鐘將被--update交換機“重置”,並且 badguy 的 IP 將在此列表中保留長達 1 小時(3600 秒)。每次後續嘗試都會重置這個 1 小時的視窗!

***注意:***按照這樣的規則結構,違規者必須完全保持沉默一小時才能再次與我們交流

SSH

對於 SSH 連接,策略略有不同。與 IP 進入我們的“壞人”列表相關的超時仍然是 1 小時,並且仍然會在 1 小時視窗內每次重新連接時重置。

對於 SSH,我們需要計算每個--syn連接。這是一個 TCP SYN 數據包,在 TCP 3 次握手中發生。通過計算這些,我們可以“跟踪”每次連接嘗試。如果您在 30 秒的視窗內嘗試與我們聯繫超過 2 次,我們會丟棄您。

為了讓這些不斷嘗試連接的 IP 在“壞人”列表中,我們可以合併另一個規則,如果他們在 5 分鐘視窗(300 秒)內嘗試連接我們 6 次,則添加它們。

以下是相應的規則——它們的順序很關鍵!

iptables -N BADGUY
iptables -t filter -I BADGUY -m recent --set --name badguys

iptables -A INPUT -i $OUTS -p tcp --syn --dport ssh -m recent --name ssh --set
iptables -A INPUT -i $OUTS -p tcp --syn --dport ssh -m recent --name ssh --rcheck --seconds 300 --hitcount 6 -j BADGUY
iptables -A INPUT -i $OUTS -p tcp --syn --dport ssh -m recent --name ssh --rcheck --seconds  30 --hitcount 2 -j DROP

***注意:***您可以在 下查看“壞人”列表/proc/net/ipt_recent。那裡應該有一個帶有列表名稱的文件,badguys.

**問題#5:**如果是這種情況,那麼只要 iptables 沒有一些黑名單計數,這不是阻止而是減緩攻擊?

我想您會發現,從 iptable 的角度來看,通常有 3 種方法可以處理連接嘗試。

  1. 允許已知可接受的流量
  2. 禁止已知不可接受的流量
  3. 潛在不良的流量,減慢和/或無限期或“超時”期間拒絕。如果已使用“超時”處理所述行為,請在超時後重新允許它。

#3是大部分複雜性來自於設置iptables和/或一般防火牆的地方。由於網際網路上的大部分流量都可以,在某種程度上,當流量表現出“強迫性”行為時,從某種意義上說,單個 IP 嘗試連接到伺服器的埠 X 次成為問題。

參考

引用自:https://unix.stackexchange.com/questions/110453