iptables被稱爲數據包過濾器,只能檢查數據鏈路層,IP層以及傳輸層的協議
iptables有五個內置鏈:
PREROUTING:路由錢(不能做過濾)
INPUT:報文轉發到本機
FORWARD:報文轉發輸出到其它機器
OUTPUT:經由本機進程轉發
POSTROUTING:路由決策發生以後
iptables的功能:
filter:過濾,防火牆
nat:用於修改源IP或目標IP,也可以修改端口;
mangle:拆解報文,作出修改後,並重新封裝起來;
raw:關閉nat表上啓用的連接追蹤機制
功能<-->鏈的對應關係:
功能只能應用到那些鏈上面
raw:PREROUTING,OUTPUT
mangle:PREOUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,{Centos 7 INPUT}OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT
報文流向:
流入本機:PREROUTING-->INPUT
由本機流出:OUTPUT-->POSTROUTING
轉發:PREROUTING-->FORWARD-->POSTROUTING
iptables(管理工具,命令行配置)/netfilter(內核模塊,具體功能它來實現)
組成部分:根據規則匹配條件來嘗試匹配報文,一旦匹配成功,就有規則定義的處理動作做出處理;
匹配條件:
基本匹配條件
擴展匹配條件
處理動作:
基本處理動作
擴展處理動作
自定義處理動作
添加過則的考量點:
(1)要實現那種功能:判斷添加到哪個表上;
(2)報文流經的路徑:判斷添加到哪個鏈上;
鏈:鏈上 的規則次序,即爲檢查的次序;因此,隱含一定的應用法則;
(1)同類規則(訪問同一應用),匹配範圍小的放上面;
(2)不同類的規則(訪問不同應用),匹配到報文頻率較大的放上面;
(3)將那些可由一條規則描述的多個規則合併起來;
(4)設置默認策略;
iptables規則格式:
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname[per-target-options]
-t table: 不加-t選項的默認爲filter
raw,mangle,nat,filter
COMMAND:
鏈管理:
-N:new,自定義一條新的規則鏈;
-X:delete,刪除自定義的規則鏈;
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有;
ACCEPT:接受
DROP:丟棄
REJECt:拒絕
-E:重命名自定義鏈;引用計數不爲0的自定義鏈不能夠被重命名,也不能被刪除;
規則管理:
-A:append,追加;
-I:Insert,插入,要指明位置,省略時表示第一條;
-D:delete,刪除;
(1)指明規則序號;
(2)指明規則本身;
-R:replace,替換指定的規則鏈;
-F:flush,清空指定的規則鏈;
-Z:zero,置零;
iptables的每條規則都有兩個計數器;
(1)匹配到的報文的個數;
(2)匹配到的所有報文的大小之和;
查看:
-L:list,列出指定鏈上的所有規則;
-n --line-numbers,以數字格式顯示地址和端口號;
-v:verbose,詳細信息
-x:exactly,顯示計數器結果的精確值;
chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
匹配條件:
基本匹配條件:無需加載任何模塊,由iptables/netfilter自行提供;
[!]-s,--source address[/mask][,...]:檢查報文中的源IP地址是否符合此處理的地址或範圍
[!]-d,--destination address[/mask][,...]:檢查報文中的目標IP地址是否符合此處指定的地址範圍;
[!]-p,--protocol protocol
protocol:tcp,udp,icmp
[!]-i,--in-interface name:數據報文流入的接口;只能應用於數據報文流入的緩解,只能應用於PREROUTING,INPUT和FORWARD鏈;
[!]-o,--out-Interface name:數據報文流出的接口;只能應用於數據報文流出的環節,只能
擴展匹配條件:需要加載擴展模塊,方可生效;
隱式擴展:不需要手動加載擴展模塊;因爲他們是對協議的擴展,所以,但凡使用-p指明瞭協議,就表示已經指明的要擴展的模塊;
tcp:
[!]--source-port,--sport port[:port]:匹配報文的源端口;可以是端口範圍;
[!]--destination-port,--dport port[:port]:匹配報文的目標端口;可以是端口範圍;
[!]--tcp-flage mask comp
例如:“--tcp-flagsSYN,ACK,FIN,RST SYN”表示,要檢查的標誌位爲SYN,ACK,FIN,RST四個,其中SYN必須爲1,餘下的必須爲0;
[!]--syn:用於第一次握手,相當於“--tcp-flagsSYN,ACK,FIN,RST SYN”;
udp:
[!]--source-port,--sport port[:port]:匹配報文的源端口;可以是端口範圍;
[!]--destination-port --dport port[:port]:匹配報文的目標端口;可以是端口範圍;
icmp:
[!]--icmp-type {type[/code]|typename}
echo-requesr:8 請求
echo-reply:0:響應
顯示擴展:必須要手動加載擴展模塊,[-m matchname [per-match-options]];
顯示擴展將在下一小結用具體示例詳解
處理動作:
-j targetname
ACCEPT
DROP
REJECT
防火牆(服務)
Centos 6:
sevice iptables {start|stop|restart|status}
start:讀取事先保存的規則,並應用到netfilter上;
stop:清空netfilter上的規則,以及還原默認策略等;
status:顯示生效的規則
restart:清空netfilter上的規則,再讀取事先保存的規則,並應用到netfilter上;
Centos 7:
systemctl start|stop|restart|status firewalld.service
systemctl disabled firewalld.server
systemctl stop firewalld.service
防火牆基本配置命令:
查看iptables規則鏈命令
iptables -t filter -L -n --line-numbers -v
清空規則鏈
iptables -t filter -F
清空自定義規則鏈
iptables -t filter -X
現在我們設置192.168.32.144(本機)拒絕192.168.32.145主機所有的訪問
iptables -t filter -A INPUT -s 192.168.32.145 -d 192.168.32.144 -j DROP
刪除這一條規則則
iptables -t filter -D INPUT 1
修改上述規則鏈只限制192.168.32.145對本機的icmp協議
iptables -t filter -R INPUT 1 -s 192.168.32.145 -d 192.169.32.144 -p icmp -j REJECT
iptables -A INPUT -s 192.168.32.145 -d 192.168.32.144 -p icmp -j REJECT
在本機流入接口做限制192.168.32.145的icmp協議訪問
iptables -A INPUT -s 192.168.32.145 -d 192.168.32.144 -p icmp -o eno16777736 -j DROP
限制192.168.32.145主機使用ssh訪問192.168.32.144
iptables -t filter -A INPUT -s 192.168.32.145 -d 192.168.32.144 -p tcp --dport 22 -j DROP
限制其它主機ping本主機,但是不限制本主機ping其它主機
iptables -A INPUT -d 192.168.32.144 -p icmp --icmp-type 8 -j DROP