無論如何,iptables是一個需要特別謹慎設置的東西,萬一服務器不在你身邊,而你貿然設置導致無法SSH,那就等著被老板罵吧,呵呵。。。
一下內容是為了防止這種情況發生而寫的,當然很初級,不過一般服務器也夠用了:
1.首先介紹一下指令和相關配置文件
2.下面介紹一些指令用法(主要還是man iptables看下相關資料才行)
3.如果我不像修改文件直接打命令可以嗎,當然沒問題,步驟如下:
4.接下來說明一下步驟,如果機器不在我身邊,我只能SSH進去做iptables規則,那麼我必須注意每一步,千萬別搞錯了,否則就SSH鏈接不上都有可能!
首先要做的是給咱的SSH進行ACCEPT配置,以免直接無法連接的情況發生: 1.如果SSH端口是22(這裡不建議用默認端口最好改掉SSH端口) iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 注意要/etc/rc.d/init.d/iptables save,以下每一步都最好執行一遍此語句,以下不再累述。 2.vim /etc/sysconfig/iptables確定是否已經加入配置,可以的話執行service iptables restart重啟後生效 3.下面是很危險的操作,如果你第一步沒做就會直接可能導致你連不上SSH,此步驟前切記執行第一步!!! iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP 這個步驟是把所有不符合自己配置的規則ACCEPT的連接全部DROP掉,執行完以後如果咱SSH還沒掉,那麼謝天謝地,安全了,重啟下iptables後繼���下面的配置! 4.下面咱就不細說了,具體就是看自己服務器要開放哪些端口或者是要訪問哪些端口來做具體的配置,下面是我自己的機器的配置: /etc/sysconfig/iptables文件配置如下: # Generated by iptables-save v1.4.7 on Fri Mar 2 19:59:43 2012 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [8:496] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #ping使用的端口 -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT -A INPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT #允許服務器自己的SSH(對外部請求來說服務器是目標所以使用--dport) -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #80端口不用說了吧,服務器網站訪問端口 -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -p tcp -m tcp --dport 11211 -j ACCEPT -A INPUT -p tcp -m tcp --dport 11212 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited #53端口是DNS相關,TCP和UDP都要配置 -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m udp --dport 53 -j ACCEPT #ping使用的端口 -A OUTPUT -p icmp -j ACCEPT -A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT -A OUTPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT #允許服務器SSH到其他機器(使用外部端口就使用--dport) -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT #允許服務器自己的SSH(自已為源輸出就使用--sport) -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT #訪問外部網站80端口(使用外部端口就使用--dport) -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT #如果服務器需要訪問外部網站,那麼OUTPUT也需要配置53端口(使用外部端口就使用--dport) -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT #如果有訪問外部郵箱,那麼打開郵箱相關端口(使用外部端口就使用--dport) -A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT #服務器網站訪問端口(自已為源輸出就使用--sport) -A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 11211 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 11212 -j ACCEPT COMMIT # Completed on Fri Mar 2 19:59:43 2012
5.可能有時候需要刪除規則,最簡單就是修改一下/etc/sysconfig/iptables然後service iptables restart,最後/etc/rc.d/init.d/iptables save即可。
當然也可以使用指令完成:
在網上找了一下,刪除規則的方法: 語法是: iptables -D chain rulenum [options] 其中: chain 是鏈的意思,就是INPUT FORWARD 之類的 rulenum 是規則的編號。從1 開始。可以使用 --line-numbers 列出規則的編號 所以,例如上面要刪除一個INPUT鏈的規則的話可以這樣:iptables -D INPUT 3 意思是刪除第3條規則。 還有第二種方法。第二種辦法是 -A 命令的映射,不過用-D替換-A。當你的鏈中規則很復雜,而你不想計算它們的編號的時候這就十分有用了。也就是說,你如何用iptables -A.... 語句定義了一個規則,則刪除此規則時就用 -D 來代替- A 其余的都不變即可。 ====================== 說一下上面的 --line-numbers 選項,如下面的命令: iptables -L INPUT --line-numbers 列出INPUT 鏈所有的規則 num target prot opt source destination 1 REJECT tcp -- anywhere anywhere tcp dpt:microsoft-ds reject-with icmp-port-unreachable 2 REJECT tcp -- anywhere anywhere tcp dpt:135 reject-with icmp-port-unreachable 3 REJECT tcp -- anywhere anywhere tcp dpt:netbios-ssn reject-with icmp-port-unreachable ... ... 刪除指定行規則: [root@localhost rc.d]# iptables -D INPUT 4
6.最後補充一下,如果想針對某IP進行單獨開放端口可以如下配置:
7.徹底禁止某IP訪問: