iptables防火牆能夠用於建立過濾(filter)與NAT規則。全部Linux發行版都能使用iptables。
iptables的結構:iptables-->Tables-->Chains-->Rules,tables則chains組成,chains由rules組成。linux
勾子函數(hook function)netfilter規則鏈:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
iptables具備Filter,NAT,Mangle,Raw四種內建表(四種功能)
1.Raw表
Raw表用於處理異常,它具備2個內建鏈
PREROUTING chain
OUTPUT chain
2.Mangle表
Mangle表用於指定如何處理數據包。它能改變TCP頭中的QoS位。Mangle表具備5個內建鏈:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING
3.NAT表
NAT表有三種內建鏈
PREROUTING鏈-處理剛到達本機並在路由轉發前的數據包。它會轉換數據包中的目標IP地址(destination ip address),一般用於DNAT。
POSTROUTING鏈-處理即將離開本機的數據包。它會轉換數據包中的源IP地址,一般用於SNAT。
OUTPUT鏈-處理本機產生的數據包
4.Filter表
Filter表示iptables的默認表,所以若是你沒有自定義表,那麼就默認使用filter表,它具備如下三種內建鏈:
INPUT-處理來自外部的數據
OUTPUT鏈-處理向外發送的數據
FORWARD鏈-將數據轉發到本機的其餘網卡設備上ubuntu
牢記如下三點是理解iptables規則的關鍵:
Rules包括一個條件和一個目標(target)
若是知足條件,就執行目標(target)中的規則或者特定值。
若是不知足條件,就判斷下一條Rules。
目標值(Target Values)
如下是能夠在target裏指定的特殊值:
ACCEPT-容許防火牆接收數據包
DROP-防火牆丟充包
QUEUE-防火牆將數據包移交到用戶空間
RETURN-防火牆中止執行當前鏈中的後續Rules,交返回到調用鏈(the calling chain)中。
查看可用的規則:centos
iptables -t filter --list iptables -t mangle --list iptables -t nat --list iptables -t raw --list
在配置iptables以前,須要使用iptables --list查看現有的規則
iptables --flush
或者
iptables -F
有的linux發行版上這個命令並不會清除NAT中的規則,此時只能手動清除:
iptables -t NAT -Fbash
當刪除、添加規則後,這些更改並不能永久生效,這些規則在重啓系統或服務後會消失,爲了讓配置永久生效,根據平臺的不一樣,具體操做也不一樣。服務器
首先保存現有的規則
iptables-save > /etc/iptables.rules
新建一個bash腳本,並保存到/etc/network/if-pre-up.d/目錄下:網絡
#!bin/bash iptables-restore < /etc/iptables.rules
這樣,每次系統重啓後iptables規則都會被自動加載。
注意:不要嘗試在.bashrc 或者.profile中執行以上命令,由於用戶一般不是root,並且這隻能在登陸時加載iptables規則。ssh
保存iptables規則
service iptables save
查看當前規則:
cat /etc/sysconfig/iptablestcp
可使用iptables -A 命令追加新規則,其中-A表示Append。所以,新的規則將追加到鏈尾。函數
iptables -A chain firewall-rule
-A chain-指定要追加規則的鏈
firewall-rule-具體的規則參數性能
-p 協議(protocol)
指定規則的協議,如tcp,udp,icmp等,可使用all來指定全部協議;
若是不指定-p參數,默認是all值;
可使用協議名(如tcp),或者是協議值(好比6表明TCP)來指定協議。映射關係請查看/etc/protocols;
還可使用-protocol參數代替-p參數;
-s源地址(source)
指定數據包的源地址;
參數可使用IP地址,網絡地址,主機名;
例如:-s 192.168.1.101指定IP地址;
例如:-s 192.168.1.0/24指定網絡地址;
若是不指定-s參數,就表明全部地址;
還可使用-src或者-source
-d 目的地址(destination)
指定目的地址;
參數和-s相同;
還可使用-dst或者-destination;
-j 執行目標(jump to target)
-j 表明「jump to target」;
-j指定了當與規則(Rule)匹配時如何處理數據包;
可能的值是ACCEPT,DROP,QUEUE,RETURN;
還能夠指定其餘鏈(Chain)做爲目標;
-i輸入接口(input interfqace)
-i表明輸入接口(input interface);
-i指定了要處理來自哪一個接口的數據包;
這些數據包即將進入INPUT,FORWARD,PREROUTE鏈;
若是不指定-i,那麼處理進入全部接口的數據包;
若是出現!-i eth0,那麼將處理全部綱目eth0之外接口進入的數據包;
若是再現-i eth+,將處理經由eth開頭的接口進入的數據包;
還可使用-in-interface參數;
-o 輸出(out interface)
-o表明"output interface";
-o指定了數據包由哪一個接口輸出;
這些數據包即將進入FORWARD,OUTPUT,POSTROUTING鏈;
若是不指定-o選項,那麼系統上全部接口均可以做爲輸出接口;
若是出現! -o eth0,那麼將從eth0之外的接口輸出;
若是出現-i eth+,那麼將僅從eth開關的接口輸出;
還可使用-out-interface參數;
--sport源端口(source port),針對-p tcp或者-p udp
缺省狀況下,將匹配全部端口;
能夠指定端口號或者端口史稱,例如"--sport 22"或者"--sport ssh";
/etc/services文件描述了上述映射關係;
從性能上講,使用端口號更好;
使用冒號能夠匹配端口範圍,如「-sport 22:100";
還可使用"-source-port";
*--dport目的端口(destination port)針對-p tcp或者-p udp
參數和--sport相似;
還可使用"--destination-port";
--tcp-flags TCP標誌,針對-p tcp
能夠指定由逗號分隔的多個參數;
有效值能夠是:SYN,ACK,FIN,RST,URG,PSH;
可使用ALL或者NONE;
--icmp-type ICMP類型,針對-p icmp**
--icmp-type 0表示Echo Reply;
--icmp-type 8表示Echo Request;
1.清空全部iptables規則
iptables -F
2.接收目標端口爲22的數據包
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
3.拒絕全部其餘數據包
iptables -A INPUT -j DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
1.容許接收遠程主機的SSH請求
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
2.容許發送本地主機的SSH響應
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-m state:啓動狀態匹配模塊(state matching module)
--state:狀態匹配模塊的參數。當SSH客戶端第一個數據包到達服務器時,狀態字段爲NEW;創建鏈接後數據包的狀態字段都是ESTABLISHED
--sport 22:sshd監聽22端口,同時也經過該端口和客戶端創建鏈接、傳送數據。所以對於SSH服務而言,源端口就是22
--dport 22:ssh客戶端程序能夠從本機的隨機端口與服務器的22端口創建鏈接。所以對於SSH客戶端而言,目的端口就是22
若是服務器也須要使用SSH鏈接其餘遠程主機,則還須要增長如下配置:
1.送出的數據包目的端口爲22:
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state --state NEW,ESTABLISHED -j ACCEPT
2.接收的數據包源端口爲22
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state --state ESTABLISHED -j ACCEPT
1.容許攔收遠程主機的HTTP請求 iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 2.容許發送本地主機的HTTP響應 iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT