在Ubuntu下iptables 下次開機套用上次規則

上一篇我們說到利用 iptables 來防止SSH/POP3暴力攻擊竊取你系統密碼,這方法運作的很好,但有一點小瑕疵。就是 iptables 在下次系統重開機時,並不會記錄上次規則。所以你每次開機就得重新手動輸入一次。我們先做一個小實驗,首先我們輸入剛剛 iptables 禁止暴力攻擊的命令(如果有輸入過請不要再輸入一次,會有副作用,也不好刪除)。

#iptables -I INPUT 1 -p tcp --dport 22 -m state --state NEW -m recent --name ssh --update --seconds 60 --hitcount 3 -j REJECT
#iptables -I INPUT 2 -p tcp --dport 22 -m state --state NEW -m recent --name ssh --set

然後看看目前 iptables 的規則,利用 22 這個 Port號碼關鍵字濾掉一些雜七雜八的設定。

#iptables -nvL | grep "22"

你應該可以看到類似這樣轉譯過給 iptable 的設定

18 864 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW recent: UPDATE seconds: 60 hit_count: 3 name: ssh side: source reject-with icmp-port-unreachable
37 1812 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW recent: SET name: ssh side: source

然後 reboot 重新開再輸入一次 iptables -nvL | grep “22”,是不是發現剛剛的設定不見了。沒錯,系統並不會幫你記錄下來,所以下次重新開機時, iptables 的規則又重新來一次了。所以我們必須把這個規則先給紀錄在某個地方,然後在開機時把它給還原回來。我們要用 iptables-save (紀錄)和 iptables-restore(還原)這兩個指令。首先先記錄在 /etc/iptables.rules (紀錄檔案名稱可以自取,不限定)

#iptables-save > /etc/iptables.rules

你可以嘗試編輯這個檔案,內容應該是像 sendmail.cf 這種天書吧,那就別管它了。只要注意權限是否正確及可。

#chown root.root /etc/iptables.rules
#chmod 644 /etc/iptables.rules

然後到 /etc/network/目錄下找 /etc/network/interface 這個檔案,這是有關網路介面連結上或是失去連線的設定檔,所以只要有連線,開機時一定會讀取這個檔案的。使用你慣用的編輯器來編輯一下,到檔案尾端加上這些資訊。

# iptables
pre-up iptables-restore < /etc/iptables.rules

這行命令的意思就是告訴系統當某個網路介面連結上時,就用 iptables-restore把剛剛設定的/etc/ iptables.rules 給還原回去。編輯完之後,重新開機檢查看看是否剛剛設定的 iptables 規則已經套用了呢?(必須要有網路連結上)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *