首頁 > 軟體

iptables命令使用詳解

2020-06-16 17:03:37

iptables的主要功能是實現對網路封包進出裝置及轉發的控制。當封包需要進入裝置、從裝置中流出或者經該裝置轉發、路由時,都可以使用iptables進行控制。

環境

作業系統:CentOS7.3

ip地址:172.16.55.7

1.iptables中的“四表五鏈”及“堵通策略”

A.“四表”是指,iptables的功能——filter, nat, mangle, raw.

    filter, 控制封包是否允許進出及轉發(INPUT、OUTPUT、FORWARD),可以控制的鏈路有input, forward, output

    nat, 控制封包中地址轉換,可以控制的鏈路有prerouting, input, output, postrouting

    mangle,修改封包中的原資料,可以控制的鏈路有prerouting, input, forward, output, postrouting

    raw,控制nat表中連線追蹤機制的啟用狀況,可以控制的鏈路有prerouting, output

  註:在centos7中,還有security表,不過這裡不作介紹

 

B.“五鏈”是指核心中控制網路的NetFilter定義的五個規則鏈,分別為

    PREROUTING, 路由前

    INPUT, 封包流入口

    FORWARD, 轉發管卡

    OUTPUT, 封包出口

    POSTROUTING, 路由後

C.堵通策略是指對封包所做的操作,一般有兩種操作——“通(ACCEPT)”、“堵(DROP)”,還有一種操作很常見REJECT.

談談REJECT和DROP之間的區別,Ming寫了一封信,向Rose示愛。Rose如果不願意接受,她可以不回應Ming,這個時候Ming不確定Rose是否接到了信;Rose也可以同樣寫一封信,在信中明確地拒絕Ming。前一種操作就如同執行了DROP操作,而後一種操作就如同REJECT操作。

 

2.iptables命令的語法規則

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

  -t table,是指操作的表,filter、nat、mangle或raw, 預設使用filter

  COMMAND,子命令,定義對規則的管理

  chain, 指明鏈路

  CRETIRIA, 匹配的條件或標準

  ACTION,操作動作

  例如,不允許10.8.0.0/16網路對80/tcp埠進行存取,

iptables -A INPUT -s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 -j DROP

  檢視iptables列表

iptables -nL

 

3.鏈管理

  -N, --new-chain chain:新建一個自定義的規則鏈;

  -X, --delete-chain [chain]:刪除使用者自定義的參照計數為0的空鏈;

  -F, --flush [chain]:清空指定的規則鏈上的規則;

  -E, --rename-chain old-chain new-chain:重新命名鏈;

  -Z, --zero [chain [rulenum]]:置零計數器;  

  -P, --policy chain target, 設定鏈路的預設策略

 

4.規則管理

  -A, --append chain rule-specification:追加新規則於指定鏈的尾部;

  -I, --insert chain [rulenum] rule-specification:插入新規則於指定鏈的指定位置,預設為首部;

  -R, --replace chain rulenum rule-specification:替換指定的規則為新的規則;

  -D, --delete chain rulenum:根據規則編號刪除規則;

 

5.檢視規則 

  -L, --list [chain]:列出規則;

  -v, --verbose:詳細資訊;

    -vv, -vvv  更加詳細的資訊

  -n, --numeric:數位格式顯示主機地址和埠號;

  -x, --exact:顯示計數器的精確值;

  --line-numbers:列出規則時,顯示其在鏈上的相應的編號;

  -S, --list-rules [chain]:顯示指定鏈的所有規則;

  檢視規則的一般內容:

  

6.匹配條件

匹配條件包括通用匹配條件和擴充套件匹配條件。

通用匹配條件是指標對源地址、目標地址的匹配,包括單一源IP、單一源埠、單一目標IP、單一目標埠、封包流經的網絡卡以及協定。

擴充套件匹配條件指通用匹配之外的匹配條件。

6.1通用匹配條件

[!] -s, --source address[/mask][,...]:檢查報文的源IP地址是否符合此處指定的範圍,或是否等於此處給定的地址;

[!] -d, --destination address[/mask][,...]:檢查報文的目標IP地址是否符合此處指定的範圍,或是否等於此處給定的地址;

[!] -p, --protocol protocol:匹配報文中的協定,可用值tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh 或者 "all", 亦可以數位格式指明協定;
[!] -i, --in-interface name:限定報文僅能夠從指定的介面流入;only for packets entering the INPUT, FORWARD and PREROUTING chains.

[!] -o, --out-interface name:限定報文僅能夠從指定的介面流出;for packets entering the FORWARD, OUTPUT and POSTROUTING chains.

 

6.2擴充套件匹配條件

  • 隱含擴充套件匹配條件

-p tcp:可直接使用tcp擴充套件模組的專用選項;
  [!] --source-port,--sport port[:port] 匹配報文源埠;可以給出多個埠,但只能是連續的埠範圍

  [!] --destination-port,--dport port[:port] 匹配報文目標埠;可以給出多個埠,但只能是連續的埠範圍 ;

  [!] --tcp-flags mask comp 匹配報文中的tcp協定的標誌位;Flags are: SYN ACK FIN RST URG PSH ALL NONE;
    mask:要檢查的FLAGS list,以逗號分隔;
    comp:在mask給定的諸多的FLAGS中,其值必須為1的FLAGS列表,餘下的其值必須為0;

  [!] --syn: --tcp-flags SYN,ACK,FIN,RST SYN

-p udp:可直接使用udp協定擴充套件模組的專用選項:

  [!] --source-port,--sport port[:port]

  [!] --destination-port,--dport port[:port]

-p icmp
  [!] --icmp-type {type[/code]|typename}

    0/0:echo reply

    8/0:echo request

  • 顯式擴充套件匹配條件

  必須用-m option選項指定擴充套件匹配的型別,常見的有以下幾種,

1、multiport

以離散或連續的 方式定義多埠匹配條件,最多15個;

  [!] --source-ports,--sports port[,port|,port:port]...:指定多個源埠;

  [!] --destination-ports,--dports port[,port|,port:port]...:指定多個目標埠;

iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT

 



2、iprange

以連續地址塊的方式來指明多IP地址匹配條件;

  [!] --src-range from[-to]

  [!] --dst-range from[-to]

# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT

 



3、time

匹配封包到達的時間

  --timestart hh:mm[:ss]

  --timestop hh:mm[:ss]

  [!] --weekdays day[,day...]

  [!] --monthdays day[,day...]

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

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

  --kerneltz:使用核心設定的時區而非預設的UTC;

4、string
匹配封包中的字元

  
--algo {bm|kmp}

  [!] --string pattern

  [!] --hex-string pattern

  --from offset

  --to offset

~]# iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT


5、connlimit
用於限制同一IP可建立的連線數目

  --connlimit-upto n

  --connlimit-above n

~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT


6、limit
限制收發封包的速率

  
--limit rate[/second|/minute|/hour|/day]

  --limit-burst number

~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT


7、state
限制收發包的狀態

  
[!] --state state

  INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

  NEW: 新連線請求;

  ESTABLISHED:已建立的連線;

  INVALID:無法識別的連線;

  RELATED:相關聯的連線,當前連線是一個新請求,但附屬於某個已存在的連線;

  UNTRACKED:未追蹤的連線;

state擴充套件:

核心模組裝載:
  nf_conntrack
  nf_conntrack_ipv4

手動裝載:
  nf_conntrack_ftp

追蹤到的連線:
  /proc/net/nf_conntrack

調整可記錄的連線數量最大值:
  /proc/sys/net/nf_conntrack_max

超時時長:
  /proc/sys/net/netfilter/*timeout*

更多iptables相關教學見以下內容

CentOS 7.0關閉預設防火牆啟用iptables防火牆  http://www.linuxidc.com/Linux/2015-05/117473.htm

Iptables工作原理使用詳解 http://www.linuxidc.com/Linux/2016-09/134945.htm

Ubuntu 14.04 設定iptables防火牆 http://www.linuxidc.com/Linux/2017-02/140556.htm

Linux下編譯安裝iptables  http://www.linuxidc.com/Linux/2017-04/142615.htm

iptables的備份、恢復及防火牆指令碼的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm

Iptables工作原理使用詳解  http://www.linuxidc.com/Linux/2016-09/134945.htm

CentOS7下iptables設定過程 http://www.linuxidc.com/Linux/2017-01/139622.htm

iptables 用法及常用模組總結  http://www.linuxidc.com/Linux/2017-10/147347.htm

Linux下iptables防火牆設定 http://www.linuxidc.com/Linux/2015-10/123843.htm

Linux防火牆iptables詳解  http://www.linuxidc.com/Linux/2016-12/138474.htm

 本文永久更新連結地址http://www.linuxidc.com/Linux/2017-10/148097.htm


IT145.com E-mail:sddin#qq.com