如何通過 Iptables 阻止 SSH Brute Force 以及它是如何工作的?
我計劃添加以下規則來
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 的攻擊。間隔。
問題
- 當文件說“將其記錄到系統日誌一次,然後立即拒絕並忘記它”時,忘記它是什麼意思?
- 永遠忘記它?
- 是否有 iptables 檢查的黑名單?
- 如果一個 IP 被拒絕,但一個小時後又嘗試了另一個連接,那麼該 IP 還會再嘗試 3 次嗎?
- 如果是這種情況,那麼只要
iptables
沒有一些黑名單計數,這不是阻止而是減緩攻擊?
**問題#1:**當文件說“將其記錄到系統日誌一次,然後立即拒絕並忘記它”時,忘記它是什麼意思?
意味著該消息將顯示在日誌中,但僅顯示一次,因此您的日誌不會在每次觸發規則時被連續的消息流污染。
**問題2:**永遠忘記它?
不,不是永遠。有一個時間段與這些消息在日誌中出現的頻率有關。
**問題 #3:**是否有 iptables 檢查的黑名單?
不,沒有iptables“檢查”的黑名單。從某種意義上說,它只會過濾您告訴它的內容,並且只允許您告訴它的內容通過,這很愚蠢。
**問題 #4:**如果一個 IP 被拒絕,但一個小時後又嘗試了另一個連接,那麼該 IP 還會再嘗試 3 次嗎?
這取決於什麼是過度拱形超時。如果發生了額外的嘗試,並且從最初的嘗試開始並沒有超過原來的超時時間,那麼日誌中不應該有額外的消息,也不應該有允許的連接。但是,如果該超時已過,那麼是的,您將看到有關這些後續嘗試的其他消息。
我鼓勵您查看 Iptable
recent
模組的文件,以了解有關其工作原理的更多詳細資訊。埠掃描
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 種方法可以處理連接嘗試。
- 允許已知可接受的流量
- 禁止已知不可接受的流量
- 潛在不良的流量,減慢和/或無限期或“超時”期間拒絕。如果已使用“超時”處理所述行為,請在超時後重新允許它。
#3是大部分複雜性來自於設置
iptables
和/或一般防火牆的地方。由於網際網路上的大部分流量都可以,在某種程度上,當流量表現出“強迫性”行為時,從某種意義上說,單個 IP 嘗試連接到伺服器的埠 X 次成為問題。參考