【開發運維手牽手】「Linux篇」iptables用法詳解和典型配置舉例

iptables的主要功能是實現對網絡數據包進出設備及轉發的控制。當數據包須要進入設備、從設備中流出或者經該設備轉發、路由時,均可以使用iptables進行控制。shell

1、iptables中的「四表五鏈」及「堵通策略」

一、「五鏈」

「五鏈」是指內核中控制網絡的NetFilter定義的五個規則鏈,分別爲centos

  • PREROUTING, 路由前
  • INPUT, 數據包流入口
  • FORWARD, 轉發管卡
  • OUTPUT, 數據包出口
  • POSTROUTING, 路由後

二、「四表」

「四表」是指,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表,不過這裏不做介紹

    三、堵通策略

    堵通策略是指對數據包所作的操做,通常有兩種操做——「通(ACCEPT)」、「堵(DROP)」,還有一種操做很常見REJECT。app


舉個栗子說明REJECT和DROP之間的區別:tcp

你向百度投了一份簡歷
(DROP)百度HR看了你的簡歷以後以爲不合適,而後把你的簡歷直接DROP到垃圾桶了,並無給你任何反饋。
(REJECT)百度HR看了你的簡歷以後以爲不合適,但依然很貼心的給你發了郵件,明確告訴你不合適。

ide

真實的網絡環境裏,絕大部分路由節點都是直接丟棄報文,用DROP的方式。
除去最多見的堵通策略,在nat表裏還有Source-nat,destination-nat,masquerade三種常見的動做。
mangle表中還有MARK:打防火牆標記、RETURN:返回兩種常見的動做。

post

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端口進行訪問。centos7

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

拆解
在這裏插入圖片描述
spa

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、單一目標端口、數據包流經的網卡以及協議。

擴展匹配條件指通用匹配以外的匹配條件。

一、通用匹配條件

  • -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.

    二、擴展匹配條件

    隱含擴展匹配條件
    -p tcp:可直接使用tcp擴展模塊的專用選項;

  • --source-port,--sport port[:port] 匹配報文源端口;能夠給出多個端口,但只能是連續的端口範圍 ;
  • --destination-port,--dport port[:port] 匹配報文目標端口;能夠給出多個端口,但只能是連續的端口範圍 ;
  • --tcp-flags mask comp 匹配報文中的tcp協議的標誌位;
    Flags:包含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協議擴展模塊的專用選項:

  • --icmp-type {type[/code]|typename}
    0/0:echo reply
    8/0:echo request

7、典型配置舉例

首先,把三個表清空,把自建的規則清空。
-F 清除預設表filter中全部規則鏈中的規則。
-X 清除預設表filter中使用者自定鏈中的規則。

iptables -F
iptables -X
iptables -F -t mangle
iptables -t mangle -X
iptables -F -t nat
iptables -t nat -X

給INPUT、OUTPUT添加規則DROP,FORWARD爲ACCEPT。

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT

在全部網卡上打開ping功能,便於維護和檢測。

iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT

打開22端口,容許遠程管理。(設定了不少的附加條件:管理機器IP必須是250,而且必須從eth0網卡進入)

iptables -A INPUT -i eth0 -s 192.168.100.250 -d 192.168.100.1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.100.250 -s 192.168.100.1 -p tcp --sport 22 -j ACCEPT

若是本機有虛擬機網段192.168.0.0/24,是虛擬機能夠共享使用本機的物理網卡IP訪問網絡(SNAT)

-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 10.0.254.5

映射本機物理網卡的8443端口到虛擬機192.168.0.100的443端口DNAT

-A PREROUTING -d 10.0.254.5/32 -p tcp -m tcp --dport 8443 -j DNAT --to-destination 192.168.0.100:443
相關文章
相關標籤/搜索