iptables 和黑客預防

iptables 和黑客預防

各位 Ubuntu 用戶大家好!

這是我的 iptables.rules 檔案的範例:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:f2b-sshd - [0:0]
:f2b-sshd-ddos - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -s 202.215.160.75/32 -j DROP
-A INPUT -s 66.210.251.136/32 -j DROP
-A INPUT -s 61.40.0.0/16 -j DROP
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -i tap0 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -i br0 -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A f2b-sshd -j RETURN
-A f2b-sshd-ddos -j RETURN
COMMIT

請注意,這是我的文件的壓縮版本。我可能有大約 100 個左右的 IP/網域被我丟棄。

我的問題是,當我刪除像 xxxx 這樣的新 IP 時,它會按如下方式添加它:

-A INPUT -i br0 -j ACCEPT
-A INPUT -s x.x.x.x/32 -j DROP
-A FORWARD -i br0 -j ACCEPT

不知何故,這實際上並沒有像我想要的那樣刪除 IP 位址。我有一個用於刪除用戶/網域的 shell 腳本:

./drop-用戶

sudo iptables -A INPUT -s $1 -j DROP
sudo sh -c "iptables-save > /etc/iptables.rules" 

./drop 域

 sudo iptables -A INPUT -s $1/16 -j DROP
 sudo sh -c "iptables-save > /etc/iptables.rules"

為了解決這個問題,我手動編輯 /etc/iptables.rules 檔案以將 xxxx ip 移至此行上方:

 -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos

然後調用:

sudo iptables-restore < /etc/iptables.rules

我的流程有問題嗎?有沒有更好的辦法?每天我花大約 10 分鐘處理駭客攻擊,其中大部分時間是編輯 iptables.rules 文件,然後透過 iptables-restore 恢復它。我希望能夠只呼叫 ./drop-user 或 ./drop-domain 並完成它,但我覺得我對 iptables 沒有足夠的了解。

我應該在 iptables-restore 之前執行以下命令嗎?

 sudo iptables -F
 sudo iptables -Z

先致謝!

答案1

我強烈建議您使用 自動化禁止流程fail2ban,它在預設配置下運作得非常好,如果您希望它監控更多服務,可以進一步自訂。

與 結合使用時iptables-persistent,它將在重新啟動後保留規則,這很有幫助。

以下是我對 Ubuntu 伺服器所做的操作的基本概述:

安裝並配置fail2ban

sudo aptitude install fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local

這將安裝它並將設定檔複製到新檔案以供您進行自訂。這是最佳實踐,因為它可以防止您的編輯在套件更新時被覆蓋。

我個人的偏好是延長禁止時間找時間從預設值。禁止時間是攻擊者被禁止的時間,發現時間是計算攻擊者嘗試的時間窗口,以防他們對攻擊進行速率限制。尋找和編輯bantime = 21600(增加到六個小時,時間值以秒為單位)以及findtime = 3600(每小時最多 3 次攻擊嘗試)。

刷新現有的 Iptables 規則並設定新的預設值

這是一個單行程式碼,旨在用於典型的 Web 伺服器,其入站連接埠僅偵聽連接埠 22 (SSH)、連接埠 80 (HTTP) 和連接埠 443 (HTTPS)。這個 DigitalOcean 教學對於如何建立自己的或自訂我的,這是一個很好的參考。小心使用 Iptables 和設定 DROP 規則,如果順序錯誤,您將永久被鎖定!也就是說,我使用的就是這個單襯,它是安全的、經過測試的並且工作完美:

sudo iptables -P INPUT ACCEPT && sudo iptables -F && sudo iptables -A INPUT -i lo -j ACCEPT && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT && sudo iptables -A INPUT -j LOG && sudo iptables -A FORWARD -j LOG && sudo ip6tables -A INPUT -j LOG && sudo ip6tables -A FORWARD -j LOG && sudo iptables -A INPUT -j DROP

使變更在重新啟動後保持不變

最後一步是安裝和設定該iptables-persistent軟體包,它將在重新啟動時自動儲存和復原規則。

sudo aptitude install iptables-persistent && sudo service iptables-persistent start

它將提示您確認 IPV4 和 IPV6 規則,您應該使用 Tab 鍵為每個規則選擇「是」並儲存。重新啟動時它將自動啟動,因此您無需擔心進一步配置它。

關於使規則持久化需要注意的一件事是,您需要手動告知您已新增或編輯的任何新規則(例如,如果您在連接埠 443 上新增或刪除了 HTTPS)。為此,請執行sudo service iptables-persistent save它將更新當前的規則集。我認為該命令在 14.04 之後的版本中已更改為“netfilter-persistent”,因此sudo service netfilter-persistent save如果第一個命令不起作用,請使用該命令。

概括

現在fail2ban將監控SSH攻擊並根據您設定的參數自動新增和減少IP位址。 Iptables 將忽略您尚未開啟的連接埠的所有傳入流量,並且這些規則將在重新啟動後持續存在,因此您無需執行其他操作。我想享受額外的空閒時間吧!

如果您想撤銷所有更改,請顛倒上述所有步驟

如果您因為某些原因不想繼續使用此方法,您可以快速撤銷所有操作。不建議這樣做,但這是您的機器,因此方法如下:

  1. 刷新所有 Iptables 規則並接受所有連接埠上的所有流量sudo iptables -P INPUT ACCEPT && sudo iptables -F(您必須執行此操作以刪除最後的 DROP 規則,否則您將被鎖定)
  2. 刪除先前安裝的軟體包及其設定sudo aptitude purge fail2ban iptables-persistent(或者可能netfilter-persistent,取決於您的 Ubuntu 伺服器版本)。重新啟動後,您應該回到先前的狀態 - 減去任何自訂 Iptables 設置,您需要像目前一樣手動重新新增這些設定。

相關內容