我手裏有本《鳥哥的Linux私房菜-服務器架設篇》。其中的第9章詳細講解了防火牆的原理與配置方式。html
Linux系統內核內建了netfilter防火牆機制。Netfilter(數據包過濾機制),所謂的數據包過濾,就是分析進入主機的網絡數據包,將數據包的頭部數據提取出來進行分析,以決該鏈接爲放行或阻擋的機制。Netfilter提供了iptables這個程序來做爲防火牆數據包過濾的命令。Netfilter是內建的,效率很是高。服務器
咱們能夠經過iptables命令來設置netfilter的過濾機制。網絡
iptables裏有3張表:tcp
> Filter(過濾器),進入Linux本機的數據包有關,是默認的表。
> NAT(地址轉換),與Linux本機無關,主要與Linux主機後的局域網內計算機相關。
> Mangle(破壞者),這個表格主要是與特殊的數據包的路由標誌有關(一般不用涉及到這個表的修改,對這個表的修改破壞性很大,慎改之)。spa
每張表裏都還有多條鏈:htm
Filter:INPUT, OUTPUT, FORWARD
NAT:PREROUTING, POSTROUTING, OUTPUT
Mangle:PREROUTING, OUTPUT, INPUT, FORWARDblog
以下爲iptables內建各表與鏈的相關性
接口
當一個數據包轉給Netfilter後,Netfilter會按上面的流程依次比對每一張表。若是數據包符合表中所述,則進行相應的處理。ip
基本格式:iptables [-t table] -CMD chain CRETIRIA -j ACTION路由
-t table:3張表中的其中一種filter, nat, mangle,若是沒有指定,默認是filter。
CMD:操做命令。查看、添加、替換、刪除等。
chain:鏈。指定是對錶中的哪條鏈進行操做,如filter表中的INPUT鏈。
CRETIRIA:匹配模式。對要過濾的數據包進行描述
ACTION:操做。接受、拒絕、丟棄等。
格式:iptables [-t table] -L [-nv]
格式:iptables [-t table] -A chain CRETIRIA -j ACTION
將新規則加入到表table(默認filter)的chain鏈的最後位置
格式:iptables [-t table] -I chain pos CRETIRIA -j ACTION
將新規則插入到table表(默認filter)chain鏈的pos位置。原來以後的規則都日後推一位。pos的有效範圍爲:1 ~ num+1
格式:iptables [-t table] -R chain pos CRETIRIA -j ACTION
用新規則替換table表(默認filter)chain鏈的pos位置的規則。pos的有效範圍爲:1 ~ num
格式:iptables [-t table] -D chain pos
刪除table表(默認filter)chain鏈的pos位置的規則。pos的有效範圍爲:1 ~ num
上面沒有介紹CRETIRIA的規則,在這小節裏詳細介紹。包匹配就是用於描述須要過濾的數據包包頭特殊的字段。
指定網口:
-i :數據包所進入的那個網絡接口,例如 eth0、lo等,需與INPUT鏈配合
-o: 數據包所傳出的那麼網絡接口,需與OUTPUT鏈配合
指定協議:
-p:tcp, udp, icmp或all
指定IP網絡:
-s:來源網絡。能夠是IP或網絡
IP: 192.168.0.100
網絡: 192.168.0.0/24 或 192.168.0.0/255.255.255.0 都可
能夠在前加 ! 表示取反
-d:目標網格。同 -s
指定端口:
--sport:指定來源端口。能夠是單個端口,還能夠是連續的端口,例如:1024:65535。
--dport:指定目標端口。同--sport
注意:要指定了tcp或udp協議纔會有效。
指定MAC地址:
-m mac --mac-source aa:bb:cc:dd:ee:ff
指定狀態:
-m state --state STATUS
STATUS能夠是:
> INVALID,無效包
> ESTABLISHED,已經鏈接成功的鏈接狀態
> NEW,想要新立鏈接的數據包
> RELATED,這個數據包與主機發送出去的數據包有關,(最經常使用)
例如:只要已創建鏈接或與已發出請求相關的數據包就予以經過,不合法數據包就丟棄
-m state --state RELATED,ESTABLISHED
ping操做發送的是ICMP包,若是不想被ping到,就能夠拒絕。
--icmp-type TYPE
TYPE以下:
8 echo-request(請求)
0 echo-reply(響應)
注意:須要與 -p icmp 配合使用。
DROP,丟棄
ACCEPT,接受
REJECT,拒絕
LOG,跟蹤記錄,將訪問記錄寫入 /var/log/messages
將新設置的規則保存到文件
格式:iptables-save [-t table]
將當前的配置保存到 /etc/sysconfig/iptables
格式:iptables [-t table] [-FXZ]
-F :請除全部的已制訂的規則
-X :除掉全部用戶「自定義」的chain
-Z :將全部的統計值清0
應用實例:http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html