各位 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 將忽略您尚未開啟的連接埠的所有傳入流量,並且這些規則將在重新啟動後持續存在,因此您無需執行其他操作。我想享受額外的空閒時間吧!
如果您想撤銷所有更改,請顛倒上述所有步驟
如果您因為某些原因不想繼續使用此方法,您可以快速撤銷所有操作。不建議這樣做,但這是您的機器,因此方法如下:
- 刷新所有 Iptables 規則並接受所有連接埠上的所有流量
sudo iptables -P INPUT ACCEPT && sudo iptables -F
(您必須執行此操作以刪除最後的 DROP 規則,否則您將被鎖定) - 刪除先前安裝的軟體包及其設定
sudo aptitude purge fail2ban iptables-persistent
(或者可能netfilter-persistent
,取決於您的 Ubuntu 伺服器版本)。重新啟動後,您應該回到先前的狀態 - 減去任何自訂 Iptables 設置,您需要像目前一樣手動重新新增這些設定。