iptables 入門

2019-08-18網絡

關鍵字:iptables、Linux 防火牆運維


 

iptables 是 Linux 上的一款防火牆配置軟件。ssh

 

防火牆的基本概念tcp

防火牆是指工做在計算機設備系統邊緣或網絡設備邊緣,能根據既定的規則對數據報文進行檢測並作出相應處理的模塊。這一模塊既能夠是軟件也能夠是硬件。iptables 是屬於軟件防火牆的範疇。工具

 

在 cent os 中防火牆分爲內核態組件與用戶態組件。其中,內核態的組件是真正用於定義規則並檢測數據報文的模塊,而用戶態的防火牆一般只直到配置內核態的規則的做用。內核態的防火牆名稱爲 netfilter,用戶態的就是 iptables。但這些組件的名稱在不一樣版本的 cent os 上會有不一樣的叫法。這種 netfileter 和 iptables 的名稱是在 cent os 6 上的名稱。但一般,咱們就簡單地認爲 iptables 就是 Linux 的防火牆就能夠了。post

 

Linux 防火牆的簡介學習

對於計算機設備而言,只有它須要與外界進行數據交換時它纔有必要去安裝防火牆模塊。而數據報文的流轉方向無非就三種:一、從外部流至本機應用;二、從本機應用發送至外部網絡環境;三、從外部經由本機發送至外部網絡環境。所以,防火牆最基本的幾道「檢查門坎」就是輸入、輸出與轉發了。而在 Linux 防火牆中,檢查門坎有專有詞彙,稱爲「鏈」。即「輸入鏈」、「輸出鏈」與「轉發鏈」。但真實的數據報文流轉又遠不止這麼簡單,因此還有另一些有其它用途的鏈。在 Linux 防火牆中,它們被稱爲「四表五鏈」。spa

 

四表:命令行

一、raw 表日誌

二、mangle 表

三、nat 表

四、filter 表

 

五鏈:

一、Input Chain

二、Output Chain

三、Forward Chain

四、PreRouting Chain

五、PostRouting Chain

 

不一樣的表中記載的是用於不一樣場景下的過濾規則。raw表下的規則是用於肯定是否對該數據包進行狀態跟蹤的,它一般涉及到 prerouting chain 和 output chain。mangle表則用於爲數據包設置標記,它一般涉及到所有的五個鏈。nat表則用於修改數據包中的源、目標地址或端口,它一般涉及到 prerouting chain, postrouting chain 與 output chain。而 filter 表則用於肯定是否放行 該數據包,它一般涉及到 input chain, forward chain 與 output chain。

 

在這四張表中,filter 表是用的最多的表,它也是 iptables 默認的表,在你不指定表名時,所寫的規則就默認應用到 filter 表下。而對咱們非 Linux 運維人員來講,就更是隻用的上 filter 表了,甚至於大多數時候都是將防火牆給關掉的。

 

Linux 的防火牆在檢查數據包時是按表按鏈順序檢查的,而且採用一種「匹配即中止」的檢查方式,若所配置的規則列表中沒有匹配的項,則按默認策略處理。Linux 防火牆表檢查順序爲:raw表、mangle表、nat表、filter表。鏈檢查順序就不說了。

 

iptables語法規則

首先必再次強調,iptables 其實僅僅只是一個配置工具而已,真正起到數據包過濾做用的實際上是運行於內核態的 netfilter 模塊。咱們對 iptables 的操做僅僅是配置過濾規則而已。iptables 的基本語法以下所示

iptables [-t 表名] 選項 [鏈] [條件] [-j 控制類型]

 

可選擇的選項有如下幾種:

一、-A

  在指定鏈的末尾添加一條規則。

二、-I

  在指定鏈的開頭或指定序號處插入一條規則。

三、-L

  列出全部的規則條目。

四、-n

  以數字形式顯示IP地址與端口。

五、-v

  以更詳細的形式顯示當前規則信息。

六、--line-numbers

  顯示規則的序號。

七、-D

  刪除指定序號的規則。

八、-F

  清空指定表內的全部規則。

九、-P

  爲指定的鏈設置默認的規則。

 

可選擇的控制類型有如下幾種:

一、ACCEPT

  容許數據包經過。

二、DROP

  丟棄數據包,但不會給出任何迴應。

三、REJECT

  丟棄數據包,而且給源端發送迴應。

四、LOG

  記錄日誌信息,而後傳遞給下一條規則繼續匹配。

五、SNAT

  修改數據包源端地址。

六、DNAT

  修改數據包目的端地址。

七、REDIRECT

  重定向。

 

DROP 與 REJECT 選項對於本機來講效果徹底同樣,都是丟棄數據包。但這兩個選項對源端來說就有很大區別了。DROP 與 REJECT 惟一的區別就是會不會給源端做出迴應。而源端在發出一個數據包時一般都會等待目的端的響應信息。若目的端對數據包採起的是 DROP 操做,則源端就只能在那苦等,直至超時。而若目的端採起的是 REJECT,源端就能當即獲得響應結果。目的端的兩種處理方式對源端的體驗就有很大的差異了。

 

iptables 語句要輸入的參數還挺多的,但它有一些選項有默認值,在某些狀況下能夠減小輸入量。例如,默認的表名是 filter 表,默認的鏈是全部鏈。

 

iptables實例

iptables -t filter -A INPUT -p tcp -j ACCEPT

上面命令表示,在 filter 表中的 input chain 追加一條規則,放行全部的 tcp 入站請求數據包。

 

iptables -I INPUT -p udp -j ACCEPT

上面命令表示,在 filter 表中的 input chain 插入一條規則,放行全部的 udp 入站請求。而若要在指定位置插入規則,則直接在 INPUT 後面加序號便可。在 iptables 的規則中,序號是從 1 開始的。假設咱們要將上面的規則插入到第 2 條的位置上,則能夠用:

iptables -I INPUT 2 -p udp -j ACCEPT

 

一樣地,刪除規則也是直接在鏈名後面加要刪除的規則序號便可,假設咱們如今要刪除規則列表中的第 3 條規則,則:

iptables -D INPUT 3 

 

若是規則比較多,數序號很差數,則能夠在查詢時經過 --line-numbers 參數來列出每條規則的序號,例如:

[chorm@cos101 ~]$ sudo iptables --line-numbers -L


Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
2    ACCEPT     tcp  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

 

查看當前全部規則信息可使用 iptables -L 命令,加多一個 -v 參數會多顯示幾列數據出來。

iptables -L -v

[chorm@cos1 ~]$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1157 79453 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             state NEW tcp dpt:ssh
   14   862 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-host-prohibited
    0     0 DROP       tcp  --  any    any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 99 packets, 12603 bytes)
 pkts bytes target     prot opt in     out     source               destination 

加多一個 -v 參數多顯示出來的幾列數據,值得咱們關注的是最前面兩列 pkts 與 bytes。它們表示的是當前規則匹配過的包數量與字節數量(不論是否成功匹配)。一般運維人員能夠經過這些信息來調整規則順序,將比較少出現的數據包類型移到後面,高頻類型數據包規則移到前面,這樣能夠減小規則匹配次數,從而減小系統資源的浪費狀況。

 

經過命令行設置的過濾規則都是一次性生效的。在你重啓系統之後這些規則就沒有了。若是想要讓本身配置的規則永久生效,則須要將當前規則導出到外部配置記錄文件中。這個用於記錄 iptables 配置規則的外部文件位於

/etc/sysconfig/iptables

而保存規則的命令爲

service iptables save

 

 

還有更多高級規則的設置暫時就不列了,例如 iptables 的通用匹配規則、隱含匹配規則與顯式匹配規則。有須要的話再自行查詢詳細用法就行了,筆者這邊關於 Linux 的防火牆也僅僅是出於拓展知識面的目的來學習的,能達到掃盲的效果就能夠了,反正我平時用 Linux 時也是要關掉防火牆的。

相關文章
相關標籤/搜索