linux系統核心内建了netfilter防火牆機制。netfilter(資料包過濾機制),所謂的資料包過濾,就是分析進入主機的網絡資料包,将資料包的頭部資料提取出來進行分析,以決該連接配接為放行或阻擋的機制。netfilter提供了iptables這個程式來作為防火牆資料包過濾的指令。netfilter是内建的,效率非常高。
我們可以通過iptables指令來設定netfilter的過濾機制。
iptables裡有3張表:
> filter(過濾器),進入linux本機的資料包有關,是預設的表。
> nat(位址轉換),與linux本機無關,主要與linux主機後的區域網路内計算機相關。
> mangle(破壞者),這個表格主要是與特殊的資料包的路由标志有關(通常不用涉及到這個表的修改,對這個表的修改破壞性很大,慎改之)。
每張表裡都還有多條鍊:
filter:input, output, forward
nat:prerouting, postrouting, output
mangle:prerouting, output, input, forward
如下為iptables内建各表與鍊的相關性
當一個資料包轉給netfilter後,netfilter會按上面的流程依次比對每一張表。如果資料包符合表中所述,則進行相應的處理。
基本格式: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