Iptables

基礎

規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工做就是添加、修改和刪除這些規則。node

到本機某進程的報文:PREROUTING --> INPUTshell

由本機轉發的報文:PREROUTING --> FORWARD --> POSTROUTINGcentos

由本機的某進程發出報文(一般爲響應報文):OUTPUT --> POSTROUTING網絡

鏈的概念

防火牆的做用就在於對通過的報文匹配"規則",而後執行對應的"動做",因此,當報文通過這些關卡的時候,則必須匹配這個關卡上的規則,可是,這個關卡上可能不止有一條規則,而是有不少條規則,當咱們把這些規則串到一個鏈條上的時候,就造成了"鏈",因此,咱們把每個"關卡"想象成以下圖中的模樣 ,這樣來講,把他們稱爲"鏈"更爲合適,每一個通過這個"關卡"的報文,都要將這條"鏈"上的全部規則匹配一遍,若是有符合條件的規則,則執行規則對應的動做。app

表的概念

A類規則都是對IP或者端口的過濾,B類規則是修改報文,tcp

把具備相同功能的規則的集合叫作"表",因此說,不一樣功能的規則,咱們能夠放置在不一樣的表中進行管理,而iptables已經爲咱們定義了4種表,每種表對應了不一樣的功能centos7

iptables爲咱們提供了以下規則的分類,或者說,iptables爲咱們提供了以下"表"rest

filter表:負責過濾功能,防火牆;內核模塊:iptables_filter

nat表:network address translation,網絡地址轉換功能;內核模塊:iptable_nat

mangle表:拆解報文,作出修改,並從新封裝 的功能;iptable_mangle

raw表:關閉nat表上啓用的鏈接追蹤機制;iptable_raw

錶鏈關係

PREROUTING 的規則能夠存在於:raw表,mangle表,nat表。日誌

INPUT 的規則能夠存在於:mangle表,filter表,(centos7中還有nat表,centos6中沒有)。code

FORWARD 的規則能夠存在於:mangle表,filter表。

OUTPUT 的規則能夠存在於:raw表mangle表,nat表,filter表。

POSTROUTING 的規則能夠存在於:mangle表,nat表。

表(功能)<--> 鏈(鉤子):

raw 表中的規則能夠被哪些鏈使用:PREROUTING,OUTPUT

mangle 表中的規則能夠被哪些鏈使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat 表中的規則能夠被哪些鏈使用:PREROUTING,OUTPUT,POSTROUTING(centos7中還有INPUT,centos6中沒有)

filter 表中的規則能夠被哪些鏈使用:INPUT,FORWARD,OUTPUT

優先級次序(由高而低):

raw --> mangle --> nat --> filter

111

匹配條件

匹配條件分爲基本匹配條件與擴展匹配條件

基本匹配條件:

源地址Source IP,目標地址 Destination IP

上述內容均可以做爲基本匹配條件。

擴展匹配條件:

除了上述的條件能夠用於匹配,還有不少其餘的條件能夠用於匹配,這些條件泛稱爲擴展條件,這些擴展條件其實也是netfilter中的一部分,只是以模塊的形式存在,若是想要使用這些條件,則須要依賴對應的擴展模塊。

源端口Source Port, 目標端口Destination Port

上述內容均可以做爲擴展匹配條件

處理動做

處理動做在iptables中被稱爲target(這樣說並不許確,咱們暫且這樣稱呼),動做也能夠分爲基本動做和擴展動做。

此處列出一些經常使用的動做,以後的文章會對它們進行詳細的示例與總結:

ACCEPT:容許數據包經過。

DROP:直接丟棄數據包,不給任何迴應信息,這時候客戶端會感受本身的請求泥牛入海了,過了超時時間纔會有反應。

REJECT:拒絕數據包經過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息。

SNAT:源地址轉換,解決內網用戶用同一個公網地址上網的問題。

MASQUERADE:是SNAT的一種特殊形式,適用於動態的、臨時會變的ip上。

DNAT:目標地址轉換。

REDIRECT:在本機作端口映射。

LOG:在/var/log/messages文件中記錄日誌信息,而後將數據包傳遞給下一條規則,也就是說除了記錄之外不對數據包作任何其餘操做,仍然讓下一條規則去匹配。

iptables操做

[root@node3 ~]# iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@node3 ~]#

-t:指定要操做的表,

-L:使用-L選項,查看-t選項對應的表的規則,-L選項的意思是,列出規則

iptables -t raw -L
iptables -t nat -L
iptables -t mangle -L

規則對應的屬性

pkts:對應規則匹配到的報文的個數。

bytes:對應匹配到的報文包的大小總和。

target:規則對應的target,每每表示規則對應的"動做",即規則匹配成功後須要採起的措施。

prot:表示規則對應的協議,是否只針對某些協議應用此規則。

opt:表示規則對應的選項。

in:表示數據包由哪一個接口(網卡)流入,咱們能夠設置經過哪塊網卡流入的報文須要匹配當前規則。

out:表示數據包由哪一個接口(網卡)流出,咱們能夠設置經過哪塊網卡流出的報文須要匹配當前規則。

source:表示規則對應的源頭地址,能夠是一個IP,也能夠是一個網段。

destination:表示規則對應的目標地址。能夠是一個IP,也能夠是一個網段。

iptables -nvxL -- line-number
-v  顯示更詳細
-n  不讓IP進行反解
-- line-number便可顯示規則的編號
-x 選項表示顯示計數器的精確值

iptables -t 表名 -L 鏈名 查看指定表的指定鏈中的規則。

[root@node3 ~]# iptables -t filter -I INPUT  -s 192.168.246.132 -j DROP     
[root@node3 ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 84 packets, 6144 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 47 packets, 5260 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@node3 ~]#

-I選項,指明將"規則"插入至哪一個鏈中,-I表示insert,即插入的意思,因此-I INPUT表示將規則插入於INPUT鏈中,即添加規則之意。

-s選項,指明"匹配條件"中的"源地址",即若是報文的源地址屬於-s對應的地址,那麼報文則知足匹配條件,-s爲source之意,表示源地址。

使用-j選項,指明當"匹配條件"被知足時,所對應的動做,上例中指定的動做爲DROP,在上例中,當報文的源地址爲192.168.1.146時,報文則被DROP(丟棄)

[root@node3 ~]# iptables -A INPUT -s 192.168.246.132 -j ACCEPT
[root@node3 ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 12 packets, 880 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   91  7644 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 6 packets, 760 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@node3 ~]#

使用-A選項,表示在對應的鏈中"追加規則",-A爲append之意

-I選項進行插入規則操做,-I INPUT 2表示在INPUT鏈中新增規則,新增的規則的編號爲2

方法一:根據規則的編號去刪除規則

[root@node3 ~]# iptables --line -vnL INPUT
Chain INPUT (policy ACCEPT 910 packets, 83584 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      363 30492 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
2      227 19068 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
3        0     0 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
[root@node3 ~]# iptables -t filter -D  INPUT 3
[root@node3 ~]# iptables --line -vnL INPUT
Chain INPUT (policy ACCEPT 6 packets, 428 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      363 30492 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           
2      227 19068 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           
[root@node3 ~]#

方法二:根據具體的匹配條件與動做刪除規則

[root@node3 ~]# iptables -D INPUT -s 192.168.246.132 -j DROP
[root@node3 ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 13 packets, 948 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  363 30492 ACCEPT     all  --  *      *       192.168.246.132      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 8 packets, 1040 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@node3 ~]#

修改

[root@node3 ~]# iptables -t filter -R INPUT 1 -s 192.168.246.132 -j DROP
[root@node3 ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 6 packets, 428 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.246.132      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4 packets, 512 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@node3 ~]#

-R選項表示修改指定的鏈

保存

使用iptables-save並不能保存當前的iptables規則,可是能夠將當前的iptables規則以"保存後的格式"輸出到屏幕上。

因此,咱們可使用iptables-save命令,再配合重定向,將規則重定向到/etc/sysconfig/iptables文件中便可。

iptables-save > /etc/sysconfig/iptables

咱們也能夠將/etc/sysconfig/iptables中的規則從新載入爲當前的iptables規則,可是注意,未保存入/etc/sysconfig/iptables文件中的修改將會丟失或者被覆蓋。

使用iptables-restore命令能夠從指定文件中重載規則,示例以下

iptables-restore < /etc/sysconfig/iptables

再次提醒:重載規則時,現有規則將會被覆蓋。

匹配條件

基本匹配條件總結

-s用於匹配報文的源地址,能夠同時指定多個源地址,每一個IP之間用逗號隔開,也能夠指定爲一個網段。  

-d用於匹配報文的目標地址,能夠同時指定多個目標地址,每一個IP之間用逗號隔開,也能夠指定爲一個網段。 

-p用於匹配報文的協議類型,能夠匹配的協議類型tcp、udp、udplite、icmp、esp、ah、sctp等(centos7中還支持icmpv六、mh)。 

-i用於匹配報文是從哪一個網卡接口流入本機的,因爲匹配條件只是用於匹配報文流入的網卡,因此在OUTPUT鏈與POSTROUTING鏈中不能使用此選項。  

-o用於匹配報文將要從哪一個網卡接口流出本機,於匹配條件只是用於匹配報文流出的網卡,因此在INPUT鏈與PREROUTING鏈中不能使用此選項。 

擴展匹配條件總結

tcp擴展模塊

經常使用的擴展匹配條件以下:

-p tcp -m tcp --sport 用於匹配tcp協議報文的源端口,可使用冒號指定一個連續的端口範圍

-p tcp -m tcp --dport 用於匹配tcp協議報文的目標端口,可使用冒號指定一個連續的端口範圍

multiport擴展模塊

經常使用的擴展匹配條件以下:

-p tcp -m multiport --sports 用於匹配報文的源端口,能夠指定離散的多個端口號,端口之間用"逗號"隔開

-p udp -m multiport --dports 用於匹配報文的目標端口,能夠指定離散的多個端口號,端口之間用"逗號"隔開
相關文章
相關標籤/搜索