天天看點

linux系統之iptables其二指令注解

溫馨提示:

一、指令部分

1

2

3

4

5

6

7

8

9

10

11

<code>#指令格式:</code>

<code>iptables [-t table] {-A|-D} chain rule-specification</code>

<code>iptables [-t table] -I chain [rulenum] rule-specification</code>

<code>iptables [-t table] -R chain rulenum rule-specification</code>

<code>iptables [-t table] -D chain rulenum</code>

<code>iptables [-t table] -S [chain [rulenum]]</code>

<code>iptables [-t table] {-F|-L|-Z} [chain [rulenum]]  [options...]</code>

<code>iptables [-t table] -N chain</code>

<code>iptables [-t table] -X [chain]</code>

<code>iptables [-t table] -P chain target</code>

<code>iptables [-t table] -E old-chain-name </code><code>new</code><code>-chain-name</code>

-t :對那一個表進行操作,如果不指定将以filter為預設操作表。(相關表那些、功能、核心子產品,請參照前一篇博文說明)

1、指令注解

指令

-A (append:追加)

樣例

#iptables -A INPUT  -p tcp --dport 80 -j DROP

注解

這個選項表示在鍊尾追加一條規則,這條規則将最後才能被檢查到。

-D (delete:删除)

#iptables -D INPUT -p tcp --dport 80 -j DROP,#iptables -D INPUT 1

這條指令删除鍊裡面的一條規則,我們有兩種方式輸出一條規則,第一是輸入一條完整的規則,另外就是通過序号删除。假如你用第一種方法删除,那麼你輸入的規則必須和你想删除的規則完全一緻。如果你想用第二種方法來删除規則,你必須制定删除的序号,鍊的序号從頂部開始從1編号,如果此鍊目前編号為1,删除後第二條的編号将變為1。

-I (insert:插入)

#iptabels -I OUTPUT  1 -p tcp --dprot 443 -j ACCEPT

在鍊裡面插入一條規則,這條規則會在指定的地方插入,如果不指定預設為第一個編号上插入。

-R (replace:替換 )

#iptables -R INPUT 1 -s 192.168.0.1 -j DROP

這條指令替換指定位置的舊規則,它和 delete 工作方式一樣的,但是不同在于它不完全删除這條規則,而是替換上一條新的規則。

-S(顯示)

#iptables -S

顯示filter表中所有鍊上的規則

-L(list:列出)

#iptables -L

這條指令列出指定鍊的所有規則

-F (flush:清空)

#iptables -F INPUT

這個指令情況鍊上的所有規則,它等同于逐條删除所有規則,隻是它更快。沒有指定參數的話,他會把指定表上面所有鍊的規則删除幹淨。

-Z (zero:清零)

#iptables -Z OUTPUT

将預設表中的 OUTPUT鍊的計數器清空

-N (new:建立) chain

#iptables -N chain_out

這個指令讓在指定的表上面建立一條新的使用者自定義鍊,請注意,名字不能和系統内建的重合

-P --policy (政策)

#iptables -P INPUT DROP

為鍊設定預設的 target(可用的是 DROP 和 ACCEPT),這個target 稱作政策。所有不符合規則的包都被強制使用這個政策。隻有内建的鍊才可以使用規則。但内建的鍊和使用者自定義鍊都不能被作為政策使用,也就是說不能象這樣使用:iptables -P INPUT allowed(或者是内建的鍊).

-E (rEname-chain)

#iptables -E allowed disallowed

這條指令會把這個鍊的第一個名字改成第二個,隻是改變名稱,内容不會變。

-X (delete-chain)

#iptables -X chain_out

這條指令會從表上删除指定的鍊,要想删除這個鍊,這兒必須沒

有任何規則關聯到這個鍊。

2、選項注解

選項

-x, (--exact:更精确)

#iptables -L -n -x

使--list 輸出中的計數器顯示準确的數值,而不用 K、M、G 等

估值。注意此選項隻能和--list 連用。

-n, (--numeric:數值)

#iptables -L -n -x -v

使輸出中的 IP 位址和端口以數值的形式顯示,而不是預設的名字,比如主機名、網絡名、程式名等。注意此選項也隻能和--list連用

-v,(--verbose:以詳細格式顯示)

#iptables -L -n -x -v或 #iptables -L -n -x -vv

iptables 會輸出詳細的資訊告訴你規則是如何被解釋的、是否正确地插入等

等(-vv比-v要詳細)

--line-numbers

#iptables -L -n --line-number

每一條規則都帶有序号,很友善的知道每條規則的位置.

3、比對規則

⑴、通用比對

比對符

-p, --protocol(協定)

#iptables  -t INPUT -p tcp --dport 80 -j ACCEPT

這個比對器(match)主要用來檢查特定的協定;

它主要有以下幾種使用方式:

1. 制定協定的名稱,它必須在/etc/protocols 裡面定

義,不然就會報錯。

2.你可以指定一個整數值,例如ICMP 就是 1,TCP

就是 6 而 UDP 是 17.(-p 6 -p 17)

3. 另外你可以指定為 ALL,ALL 表示僅僅比對

ICMP/TCP/UDP 協定,這個是預設配置,數值為 0.

4. 可以是協定清單,以英文逗号為分隔符,如:

udp,tcp

5. 最後我們還可以對協定取反,例如!TCP 表示比對

UDP/ICMP,當然從這兒我們也可以看到取反隻能針

對 TCP/UDP/ICMP 協定。

-s, --src, --source (源位址)

#iptables -A INTPUT -s 192.168.1.34 -p tcp -j ACCEPT

它不僅可以比對單台主機,還以比對一個網絡(ip/mask)

-d, --dst, --destination (目标位址)

#iptables -A OUTPUT -d 192.168.1.1 -p tcp j DROP

比對封包的目的位址,用法和源位址比對一緻。

-i, --in-interface

#iptables -A INPUT -i eth0 -p tcp -j ACCEPT

包進入本地所使用的網絡接口來比對包。要注意這個比對操作

隻能用于 INPUT,FORWARD 和 PREROUTING 這三個鍊.(注:接口前加英文感歎号表示取反,如 -i ! eth0,注意有空格)

-o, --out-interface

#iptables -A FORWARD -o eth0 -p tcp -j ACCEPT

以包離開本地所使用的網絡接口來比對包。使用的範圍和指定接

口的方法與--in-interface 完全一樣。

⑵、隐含比對(适用于tcp/udp)

--sport, --source-port (源端口)

#iptables -A INPUT -p tcp --sport 22 -j ACCEPT

1、不指定此項,則暗示所有端口。

2、使用服務名或端口号,但名字必須是在/etc/services中定義

3、可以使用連續的端口,如果兩個号的順序反了也沒關系,如:--source-port 80:22 這和 --source-port 22:80 的效果一樣。

4、可以省略第一個号,預設第一個是 0,如:--source-port :80 表示從0到80的所有端口。

5、也可以省略第二個号,預設是 65535,如:--source-port 22:表示從 22 到 65535 的所有端口.

6、在端口号前加英文感歎号表示取反,注意空格,如:--source-port ! 22 表示除 22 号之外的所有端口;--source-port ! 22:80 表示從 22 到 80(包括 22 和 80)之外的所有端口。

注:此處不能比對不連續的端口

--dport, --destination-port (目的端口)

#iptables -A INPUT -p tcp --dport 22 (此處沒有指定target表示以鍊的預設的政策為準)

目的端口用來比對封包的目的端口,用法和源端口一樣

--syn(tcp三次握手的第一次)

#iptables -A INPUT -d 172.16.32.45 -t tcp --tcp-flags --syn -j ACCEPT

這裡用到的是TCP封包中的控制标志來限定資料。(常用的有syn,ack,fin)

all(此處代表--tcp-flags的六個标志為1,none則表示全為0)

#iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

拒絕tcp标志位全部為1或為0的非法tcp的封包

(3)、icmp

--icmp-type (icmp封包的類型)

#iptables -A INPUT -p icmp --icmp-type 8

根據ICMP類型比對包,類型的指定可以使用十進制數值或相應的

名字。(常用的有兩個8表示請求,0表示響應)

(4)、顯示比對(-m)

multiport --dports (多目的端口)(此處可以是多個不相連的多個端口(&lt;15))

#iptables -I INPUT -d 172.16.32.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

到達172.16.3.27協定是tcp的使用是22和80的端口程式放行

multiport --sports (多源端口)

#iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

從172.16.100.7使用22,80端口出去的程式放行

iprange --src-range (基于範圍的源位址)

#iptables -A INPUT -p tcp -m iprange --src-range

192.168.1.13-192.168.2.19

--src-range 用來比對一整段的源位址也可以對位址取反,例 iprange ! --src-range

iprange --dst-range (基于範圍的目的位址)

#iptables -A INPUT -p tcp -m iprange --dst-range

比對一整段的目的位址,用法和源一緻

[!] --connlimit-above(限定并發連接配接數)

#iptables -I INPUT -d 192.168.2.34 -p tcp -dport 80 -m connlimit --connlimit-above 5 -j DROP

限定并發連接配接數

limit --limit(封包速率控制)

#iptables -A INPUT -m limit --limit 3/(hour|second|minute|day)

機關時間内通過的封包數(通常與limit-burst同用)

limit-burst

#iptables -A INPUT  -m iprange --src-range 172.16.32.1-172.16.32.100 -p tcp -m limit --limit 2/minute  --limit-burst 2

這裡定義的是limit的峰值,就是在機關時間内最多可比對幾個封包

time(指定時間範圍)

類别

-datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

--weekdays day[,day...]

#iptables -A INPUT -d 172.16.32.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT

時間範圍的限定(天、小時、周),此項是可以取反的。

string  --algo {kmp|bm}{--string "STRING"|--hex-string “HEX-STRING”}

#iptables -A INPUT -p tcp --dport 80  -m string  --algo kmp ! --string  "admin" -m state --state ESTABLISHED -j ACCEPT

過濾指定的字元--string "STRING":要查找的字元串或--hex-string "HEX-STRING"先将查找的字元,編碼成16進制格式再比較

state --state

iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED

指定要比對包的的狀态,目前有4 種狀态可用:INVALID,ESTABLISHED,NEW和RELATED。

INVALID意味着這個包沒有已知的流或連接配接與之關聯,也可能是它包含的資料或標頭有問題。

ESTABLISHED意思是包是完全有效的,而且屬于一個已建立的連接配接,這個連接配接的兩端都已經有資料發送。

NEW表示包将要或已經開始建立一個新的連接配接,或者是這個包和一個還沒有在兩端都有資料發送的連接配接有關。RELATED說明包正在建立一個新的連接配接,這個

連接配接是和一個已建立的連接配接相關的.

四、注意事項

1、規則相關

(1)、對于進入的狀态為ESTABLISHED都應該放行;

(2)、對于出去的狀态為ESTABLISHED都應該放行;

(3)、嚴格檢查進入的狀态為NEW的連接配接;

(4)、所有狀态為INVALIED都應該拒絕;

2、連接配接相關

(1)、調整連接配接追蹤功能所能容納的追蹤的最大連接配接數:

# cat /proc/sys/net/nf_conntrack_max

(2)、定義了連接配接追蹤的最大值,是以,建議按需調大此值;

# cat /proc/net/nf_conntrack

(3)、記錄了目前追蹤的所有連接配接

# cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

3、如何放行工作于被動模式下的FTP服務?

(1)、確定iptables加載ftp協定支援的子產品:ip_nat_ftp, nf_conntrack_ftp

編輯/etc/sysconfig/iptables-config檔案,定義如下參數:

IPTABLES_MODULES="ip_nat_ftp nf_conntrack_ftp"

(2)、放行請求封包的RELATED和ESTABLISHED狀态,放行響應封包的ESTABLISHED狀态;

#modprobe ip_nat_ftp

#modprobe nf_conntrack_ftp

#iptabls -P OUTPUT DROP

#iptables -I INPUT -d 172.16.32.45 -p tcp --dport 21 -j ACCEPT

#iptables -I OUTPUT -s 172.16.32.45 -p tcp --sport 21 -j ACCEPT

#iptables -I INPUT -d 172.16.32.45 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

#iptables -I OUTPUT -s 172.16.32.45 -p tcp -m state --state ESTABLISHED -j ACCEPT

4、儲存規則

service iptables save儲存防火牆規則,儲存的位置為/etc/sysconfig/iptables檔案中。

iptables-save &gt; /path/to/some_rulefile把規則寫入到某個檔案中。

iptables-restore&lt;/path/from/some_rulefile輸入重定向。

================================未完====================================================

PS:

下一篇将介紹NAT的用法

本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1386787,如需轉載請自行聯系原作者

繼續閱讀