在linux中配置防火牆是一件比較有風險的事情,尤其是在ECS中,一個不當心的操作,可能就會需要重置服務器。
包括阿里雲的官方建議,不要配置防火牆,沒有必要什么的吧啦吧啦……
(http://bbs.aliyun.com/read/144977.html?spm=5176.7114037.1996646101.1.b6lbJx)
但是如果真的無此必要,又何必存在這個軟件?又為何蠻多IDC將硬件防火牆作為一個噱頭來叫賣?
如果我想在公網關閉db端口,僅在內網可訪問呢?
當然如上有些吹毛求疵,但是至少我個人覺得,在服務器上開啟防火牆還是很有必要的。
1.更新防火牆軟件、檢查當前狀態
yum update iptables /etc/init.d/iptables status

上圖表示防火牆運行中,使用命令
/etc/init.d/iptables stop
或
service iptables stop
關閉防火牆,確保狀態如下圖所示:

設置系統服務,禁止iptables自動啟動
chkconfig iptables off
chkconfig --list iptables

如上圖標示,在所有運行級別上均關閉防火牆自動啟動。
如此一來,即使設置出錯,至少還可以重啟服務器來關閉防火牆。
清除iptables的內置規則和自定義規則
iptabls -F
iptabls -X
2.iptables內置filter、nat和mangle三張表,首先設定默認的通用規則
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
注意,第一條規則鏈一定要先添加,否則,當執行完第二條命令后,你的ssh就會斷開,之前的設置自然也不會保存。該句的意思是,過濾所有的進入(INPUT)數據,並丟棄(DROP)。
下面的兩句類似,OUPUT全部接受,FORWARD丟棄
3.設置filter表規則,如果不使用-T 參數指定表,則默認為filter表
如果要僅允許指定的ip地址接入ssh,則使用
iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果是一個網段,上面的192.168.0.3地址,可換為192.168.0.0/24類似的網段地址。
請注意,如果上面設置了OUTPUT的規則也為DROP,則務必也設置對應的規則,允許ssh數據流出
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
添加其他常用規則
iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT
設置了如上的基本規則之后,則可以保存配置文件,啟動防火牆服務,來測試配置是否成功
/etc/init.d/iptables save /etc/init.d/iptables restart /etc/init.d/iptables status
4.總結
4.1.配置防火牆一定要很小心,如果操作不當,可能直接無法遠程連接,對於硬件服務器只要去機器面前操作即可,如果是阿里雲的,就只能重啟或者重置了,一定要當心
4.2.配置防火牆的目的就是為了屏蔽端口,如果全部INPUT都ACCEPT,還不如不設置
4.3.當iptables stop之后,默認修改規則並save后,會覆蓋之前的規則,因此可以在iptables運行的時候,修改並保存配置,或者iptables-save > /etc/iptables.rules保存到默認規則中
4.4.參考地址:
http://www.liusuping.com/ubuntu-linux/iptables-firewall-setting.html
http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html
如果覺得命令麻煩,可以安裝如下的組件,使用setup命令配置:
yum install setuptool ntsysv system-config-network system-config-keyboard system-config-network-tui system-config-firewall system-config-firewall-tui
