1. 程式人生 > >iptables 實際操作 之 規則查詢 2

iptables 實際操作 之 規則查詢 2

識別 bytes routing acc filter 數據 size eject tab

在之前的文章中,我們已經總結過,iptables 為我們預定義了4張表,他們分別是raw 表,mangle表,nat表,filter表,不同的表擁有不同的功能。

filter 負責過濾功能,比如允許那些IP 地址訪問,拒絕那些IP地址訪問,允許訪問那些端口,禁止訪問那些端口,filter表會根據我們定義的規則進行過濾,filter表應該是我們最常用到的表了,所以此處,我們一filter表為例,開始學習怎樣實際操作iptables。

一. 查看filter 表的規則

[root@localhost ~]# iptables -t filter -L -nv --line
Chain INPUT

(policy ACCEPT 78 packets, 5830 bytes)
num pkts bytes target prot opt in out source destina
tion

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

Chain OUTPUT (policy ACCEPT 51 packets, 5100 bytes)
num pkts bytes target prot opt in out source destina
tion

上例中我們使用 –t 選項,指定要操作的表,使用-L 選項,查看-t 選項對應的表的規則,-L選項的意思是列出規則,所以,上述命令的含義為列出filter表的所有規則。上圖中顯示了3條鏈,INPUT 鏈,FORWARD 鏈,OUTPUT 鏈,每條鏈中都有“過濾”的能力,所以,當我們要定義某條“過濾”的規則時,我們會在filter 表定義,但是具體在那條“鏈”上定義規則,這取決於我們的工作場景。比如,我們需要禁止某個IP地址訪問我們的主機,我們則需要在INPUT 鏈上定義規則。因為,我們在理論總結中已經提到過,報文發往本機時,會經過PREROUTING 鏈於INPUT 鏈,所以,如果我們想要禁止某些報文發往本機,我們只能在PREROUTING鏈和INPUT鏈中定義規則,但是PREROUTING 鏈並不存在於filter 表中,換句話說就是,PREROUTING 關卡天生就沒有過濾的能力,所以,我們只能在IPNPUT鏈中定義,當然,如果是其他工作場景,可能需要在FORWARD鏈或者OUTPUT鏈中定義過濾規則。其實,我們可以省略 –t filter當沒有使用使用-t 選項指定表時,默認認為操作filter表,即iptables –L 表示列出filter 表中的所有規則。

我們還可以只查看指定表中的指定鏈的規則,如下,我們只查看filter表中的INPUT 鏈的規則:

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

我們可以使用 –v 來選項,查看出更多的,更詳細的信息;使用 –n 表示不對ip地址進行名稱反解,直接顯示IP地址,實例如下:

[root@localhost ~]# iptables -L -nv
Chain INPUT (policy ACCEPT 393 packets, 33975 bytes)
pkts bytes target prot opt in out source destination

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

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

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

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

target:規則對應的target,往往表示規則對應的“動作”,即規則匹配成功後需要采取的措施。

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

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

in:表示數據包由那個接口(網卡)流入,我們可以設置通過那塊網卡流入的報文需要匹配當前規則。

out:表示數據包由那個接口(網卡)流出,我們可以設置通過那塊網卡流出的報文需要匹配當前規則。

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

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

使用 --line-numbers 可顯示規則的編號,--line-numbers 選項可以縮寫成 --line,iptables也可以識別

[root@localhost ~]# iptables -L -nv --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 34 2556 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22

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

Chain OUTPUT (policy ACCEPT 24 packets, 2256 bytes)
num pkts bytes target prot opt in out source destination

聰明的你,一定會註意到括號裏的內容 policy ACCEPT packets bytes,他們表示的意思如下:

policy 表示當前鏈的默認策略,policy ACCEPT 表示上圖中INPUT的鏈的默認動作為ACCEPT,換句話說就是,默認接受通過INPUT 關卡的所有請求,所以我們在配置INPUT 鏈的具體規則時,應該將需要拒絕的請求配置到規則中,說白了就是“黑名單”機制,默認所有人都能通過,只有指定的人不能通過,當我們把INPU 鏈默認動作設置為接受(ACCEPT),就表示所有人都能通過這個關卡,此時就應該在具體的規則中指定需要拒絕的請求,就 表示只有指定的人不能通過這個關卡,這就是黑名單機制,但是,你一定發現了,上圖中所顯示出的規則,大部分都是接受請求(ACCEPT),並不是想象中的拒絕請求(DROP或者REJECT),這與我們所描述的黑名單機制不符啊,按照道理倆說,默認動作為接受,就應該在具體的規則中配置需要拒絕的人,但是上圖中並不是這樣的,之所以出現上圖中的情況,是因為iptables 的工作機制導致的,上例其實是利用了這些“機制”,完成了所謂的“白名單”機制,並不是我們所描述的“黑名單”。此處我們只要明白policy 對應的動作為鏈的默認動作即可,或者換句話說,我們只要理解,policy為鏈的默認策略即可。

packets 表示當前鏈(上例為INPUT 鏈)默認策略匹配到的包的數量,0 packets 表示策略匹配到0個包。

bytes 表示當前鏈默認策略匹配到的所有包的大小總和。

其實我們可以把packets 和bytes 稱作“計數器”,上圖中的計數器記錄了默認策略匹配到的報文數量與總大小,“計數器”只會在使用 –v 選項時,才會顯示出來。當被匹配到包達到一定數量是,計數器會自動將匹配到的包的大小轉換為可讀性較高的單位,如下圖所示。

[root@localhost ~]# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 55578 packets, 332K bytes)

如果你想要查看精確的計數值,而不是經過可讀性優化過的計數值,那麽你可以使用-x 選項,表示顯示精確的計數值,示例如下。

[root@localhost ~]# iptables -nvxL INPUT
Chain INPUT (policy ACCEPT 380 packets, 33500 bytes)
pkts bytes target prot opt in out source destination
127 9448 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22

二. 命令小結

1. iptable –t 表名 –L

查看對應表的所有規則,-t 選項指定要操作的表,省略“-t 表名” 時,默認表示操作filter表,-L 表示列出規則,即查看規則。

2. iptables –t 表名 –L 鏈名

查看指定表的指定鏈中的規則

3. iptables –t 表名 –v –L

查看指定表的所有規則,並且顯示更詳細的信息(更多字段),-v 表示 verbose,表示詳細的,冗長的,當使用 –v 選項時,會顯示出“計數器” 的信息,由於上例中使用的選項都是短選項,所以一般簡寫成為iptables –t 表名 –vL

4. iptables –t 表名 –n –L

表示查看表的所有規則,並且在顯示規則時,不對規則中的IP 或者端口進行名稱反解,-n 選項表示不解析IP 地址。

5. iptables –lin-number –t 表名 –L

表示查看表的所有規則,並且顯示規則的序號,—line-numbers 選項表示顯示規則的序號,註意,此選項為長選項,不能與其他短選項合並,不過此選項可以簡寫為 –line 註意,簡寫後仍然是兩條橫杠,仍然是長選項。

6. iptables –t 表名 –v –x –L

表示查看表中的所有規則,並且顯示更詳細的信息 (-v 選項),不過,計數器中的信息顯示為精確的計數值,而不是顯示為經過可讀優化的計數值,-x 選項表示顯示計數器的精確值。

7. iptables –line –t filter –nvxL

為了方便會將短選項進行合並,將選項粘合在一起,寫成如上命令。

8. iptables –line –t filter –nvxL INPUT

可以只查看某張表中的某條鏈,此處一filter 表的INPUT 鏈為例

iptables 實際操作 之 規則查詢 2