在使用Linux服務器的時候,咱們會老是會遇到防火牆的一些配置問題。這裏就來詳細說一下Linux下防火牆的配置。java
經過iptables咱們能夠爲咱們的Linux服務器配置有動態的防火牆,可以指定並記住爲發送或接收信息包所創建的鏈接的狀態,是一套用來設置、維護和檢查Linux內核的IP包過濾規則的命令包。iptables定義規則的方式比較複雜,本文對Linux防火牆iptables規則寫法進行詳細介紹:安全
一、iptables規則寫法的基本格式是:服務器
iptbales [-ttable] COMMAND chain CRETIRIA -j ACTION
二、iptables規則相關參數說明:網絡
-t table: 3個filter nat mangle;tcp
COMMAND:定義如何對規則進行管理;工具
chain:指定你接下來的規則究竟是在哪一個鏈上操做的,當定義策略的時候,是能夠省略的;oop
CRETIRIA:指定匹配標準;spa
-j ACTION:指定如何進行處理。rest
三、iptables規則其餘寫法及說明:code
iptables -L -n #查看定義規則的詳細信息
iptables是Linux服務器上防火牆配置必備的設置工具,是咱們在作好服務器安全及部署大型網絡時,常會用到的重要工具,很好的掌握iptables,可讓咱們對Linux服務器整個網絡的結構有一個比較透徹的瞭解,更可以很好的掌握Linux服務器的安全配置技巧。
咱們來配置一個filter表的防火牆。
1.查看本機關於iptables的設置狀況
[root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination</p> <p>Chain FORWARD (policy ACCEPT) target prot opt source destination</p> <p>Chain OUTPUT (policy ACCEPT) target prot opt source destination</p> <p>Chain RH-Firewall-1-INPUT (0 references) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0 ACCEPTah--0.0.0.0/00.0.0.0/0 ACCEPTudp--0.0.0.0/0224.0.0.251udpdpt:5353 ACCEPTudp--0.0.0.0/00.0.0.0/0udpdpt:631 ACCEPTall--0.0.0.0/00.0.0.0/0stateRELATED,ESTABLISHED ACCEPTtcp--0.0.0.0/00.0.0.0/0stateNEWtcpdpt:22 ACCEPTtcp--0.0.0.0/00.0.0.0/0stateNEWtcpdpt:80 ACCEPTtcp--0.0.0.0/00.0.0.0/0stateNEWtcpdpt:25 REJECTall--0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibited
能夠看到咱們已經開放了的端口,2二、80、25
若是沒有啓動防火牆,是這樣的,什麼規則都沒有
[root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination </p> <p>Chain FORWARD (policy ACCEPT) target prot opt source destination </p> <p>Chain OUTPUT (policy ACCEPT) target prot opt source destination
2.清除全部規則
若是你想配置本身的防火牆,能夠先清除如今filter的全部規則。
[root@tp ~]# iptables -F 清除預設表filter中的全部規則鏈的規則 [root@tp ~]# iptables -X 清除預設表filter中使用者自定鏈中的規則
而後再查看防火牆設置的時候,結果就是什麼規則都沒有了。清除以後記得保存修改!!!!
[root@tp ~]# service iptables restart
如今iptables配置表裏就什麼配置都沒有了,就能夠開始咱們本身的配置了。
3.設定預設規則
[root@tp ~]# iptables -P INPUT DROP [root@tp ~]# iptables -P OUTPUT ACCEPT [root@tp ~]# iptables -P FORWARD DROP
上面的意思是,當超出了iptables裏filter表裏的兩個鏈規則(INPUT,FORWARD)時,不在這兩個規則裏的數據包怎麼處理呢,那就是DROP(放棄)。應該說這樣配置是很安全的,咱們要控制流入數據包。
而對於OUTPUT鏈,也就是流出的包咱們不用作太多的限制,而是採起ACCEPT,也就是說,不在這個規則裏的包就經過。
能夠看出INPUT,FORWARD兩個鏈採用的容許什麼包經過,而OUTPUT鏈採用的是不容許什麼包經過。
這樣設置仍是挺合理的,固然你也能夠三個鏈都DROP,但這樣作我認爲是沒有必要的,並且要寫的規則就會增長。但若是你只想要有限的幾個規則時,如只作WEB服務器。仍是推薦三個連鏈都是DROP。
注:若是你是遠程SSH登陸的話,當你輸入第一個命令回車的時候就應該掉了。由於你沒有設置任何規則,此時你就要去本機操做了。
4.添加規則
首先添加INPUT鏈,INPUT鏈的默認規則是DROP,因此咱們就寫須要ACCEPT(經過)的鏈,爲了可以採用遠程SSH登陸,咱們要開啓22端口。
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT [root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
(注:這個規則,若是你把OUTPUT設置成DROP的就要寫上這一部,好多人都是忘了寫這一部規則致使,始終沒法SSH,在遠程一下,就能夠了。)
其餘的端口也是同樣的,若是開啓了WEB服務器,OUTPUT設置成DROP的話,一樣也要添加一條鏈:
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT [root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
若是作郵件服務器,還須要開啓25,110端口,命令同上。若是作FTP服務器,則須要開啓21端口。若是作DNS服務器,則須要開啓53端口。其餘端口更具本身的須要設置就好了。
凡是不在規則裏的,都DROP,容許icmp包經過,也就是容許Ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設置成DROP的話) [root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT設置成DROP的話)
容許loopback(否則會致使DNS沒法正常關閉等問題)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (若是是INPUT DROP) IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(若是是OUTPUT DROP)
下面寫OUTPUT鏈,OUTPUT鏈默認規則是ACCEPT,因此咱們就寫須要DROP(放棄)的鏈。減小不安全的端口鏈接。
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP [root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
出於安全的考慮,咱們每每須要更多的規則,下面來分享一些更細緻的規則(限制到某臺機器):
只容許192.168.0.100的機器進行SSH鏈接:
[root@tp ~]# iptables -A INPUT -s 192.168.0.100 -p tcp --dport 22 -j ACCEPT
若是要容許或這限制一段IP地址可用192.168.1.0/24表示192.168.0.1-255端的全部IP。
24表示子網掩碼數,可是要記得把/etc/stsconfig/iptables裏的這一行刪了
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT .由於他表示全部地址均可以登錄。或採用命令方式:
root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
可是採用命令的方法只會在當時生效,若是須要計算機重啓後生效,就要寫入到/etc/sysconfig/iptables文件裏,而且保存
[root@tp ~]# /etc/rc.d/init.d/iptables save