首頁 > 軟體

iptables用法筆記

2020-06-16 17:02:06

iptables的用法

基本用法:

iptables [-t table] [subcommand] chain [rulenum] [options...] [match] [target]
iptables [-t 表名] <-A|-I|-D|-R> 鏈名 [規則編號][-i|o 網絡卡名稱][-p 協定型別][-s 源ip地址][源子網][--sport 源埠號][-d 目標ip地址|目標子網][--dport 目標埠號][-j 處理動作]

詳細用法說明:

1)table

filter:一般的過濾功能,包含input,forward,output。預設選項
nat:用於地址轉換、對映、埠對映等,包含prerouting,postrouting
mangle:用於對特定封包的修改,包含prerouting,output,forward,input,postrouting
raw:一般是為了不再讓iptables做封包的連線跟蹤處理,從而提供效能,包含prerouting,output

2)subcommand選項

1》鏈管理

-N :new,  自定義一條新的規則鏈
-X :delete ,刪除自定義的空的規則鏈
-PPolicy ,設定預設策略;對filter 表中的鏈而言,其預設策略有:ACCEPT :接受,DROP :丟棄
-E :重新命名自定義鏈;參照計數不為0 的自定義鏈不能夠被重新命名,也不能被刪除

2》檢視:

-L :list,  列出指定鏈上的所有規則,本選項須置後
-n :numberic ,以數位格式顯示地址和埠號
-v :verbose ,詳細資訊
-vv:更詳細
-x :exactly ,顯示計數器結果的精確值, 而非單位轉換後的易讀值
--line-numbers :顯示規則的序號
-S :selected, 以iptables-save命令格式顯示鏈上規則 
常用組合:
    --vnL
    --vvnxL --line-numbers

3》規則管理:

-A :append,追加
-I :insert,插入,要指明插入的規則編號,預設為第一條。
-D :delete,刪除。(1)指明規則序號,(2)指明規則本身
-R :replace ,替換指定鏈上的指定規則編號
-F :flush ,清空指定的規則鏈
-Z :zero ,置零
iptables 的每條規則都有兩個計數器
(1)匹配到的報文的個數
(2)匹配到的所有報文的大小之和

3)鏈chain:

INPUT:通過路由表判斷後目的地是本機,然後進入本機內部資源
OUTPUT:有本機產生的資料向外部轉發
FORWARD:通過路由表判斷後目的地不是本機,然後通過路由轉發到其他地方
PREROUTING:流入的封包進入路由表之前
POSTROUTING:傳出的封包到達網絡卡出口之前

4)match,匹配條件

基本:通用的,parameters
擴充套件:需載入模組,match extentions

1》基本匹配條件:

無需載入模組,由iptables/netfilter 自行提供
[!] -s, --source address[/mask][,...] :源IP 地址或範圍
[!] -d, --destination address[/mask][,...] :目標IP 地址或範圍
[!] -p, --protocol protocol :指定協定,可使用數位如0(all),protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or “all“ 參看:/etc/protocols
[!] -i, --in-interface name :報文流入的介面;只能應用於資料包文流入環節,只應用於 INPUT 、FORWARD 、PREROUTING 鏈
[!] -o, --out-interface name :報文流出的介面;只能應用於資料包文流出的環節,只應用於 FORWARD 、OUTPUT 、 POSTROUTING 鏈

2》擴充套件匹配條件:

需要載入擴充套件模組(/usr/lib64/xtables/*.so),方可生效,是對某一種功能的擴充套件,經由擴充套件模組引入的匹配機制。
檢視幫助:man iptables-extensions
1>隱式擴充套件 :對某一種協定的擴充套件
在使用-p 選項指明了特定的協定時,無需再用-m 選項指明擴充套件模組的擴充套件機制,不需要手動載入擴充套件模組。
-p做協定匹配,協定有:tcp,udp,icmp,icmpv6,ah,esp,sctp,mh,all
1.tcp 協定,-m tcp,擴充套件選項
[!] --source-port, --sport port[:port] :匹配報文tcp首部源埠,可為埠範圍
[!] --destination-port,--dport port[:port] :匹配報文目標埠,可為範圍
[!] --tcp-flags mask compmask需檢查的標誌位列表,用逗號分隔,如 SYN,ACK,FIN,RST,PSH,URG,ALL,NONE.compmask列表中必須為1的標誌位列表,無指定則必須為0,用逗號分割
[!] --syn :用於匹配第一次握手。相當於:--tcp-flags SYN,ACK,FIN,RST,SYN
2.udp 協定,-m udp,擴充套件選項
[!] --source-port, --sport port[:port] :匹配報文udp首部的源埠;可以是埠範圍
[!] --destination-port,--dport port[:port] :匹配報文udp首部的目標埠;可以是埠範圍
3.icmp
ICMP是(Internet Control Message Protocol)Internet控制報文協定。它是TCP/IP協定族的一個子協定,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。)
-m  icmp:專有選項
[!] --icmp-type {type[/code]|typename}:type/code為 0/0 echo-reply表示icmp 應答,type/code為8/0 echo-request表示icmp 請求
2>顯式擴充套件 :
額外附加的更多的匹配規則,功能性擴充套件
必須使用-m 選項指明要呼叫的擴充套件模組的擴充套件機制,要手動載入擴充套件模組,即[-m matchname [per-match-options]
-m 模組名稱
每個模組會引入新的匹配機制
可以通過rpm -ql iptables 來獲得那些模組可用,模組是以.so結尾的。
使用幫助:
man iptablesCentOS6man iptables-extensionscentos7
1. multiport擴充套件
以離散方式定義多埠匹配, 最多指定15 個埠
[!] --source-ports,--sports port[,port|,port:port]...:指定多個源埠
[!] --destination-ports,--dports port[,port|,port:port]...:指定多個目標埠
[!] --ports port[,port|,port:port]...:多個非連續的源或目標埠
範例:
    iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
2. iprange擴充套件
指明連續的(但一般不是整個網路)ip 地址範圍
[!] --src-range from[-to]:源IP 地址範圍
[!] --dst-range from[-to]:目標IP 地址範圍
範例:
    iptables -A INPUT -d 172.16.100.10 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP
3. mac 擴充套件
指明源MAC 地址
適用於:PREROUTING, FORWARDINPUT chains
[!] --mac-source XX:XX:XX:XX:XX:XX
範例:
    iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT 
    iptables -A INPUT -s 172.16.0.100 -j REJECT
4. string 擴充套件
對報文中的應用層資料做字串模式匹配檢測
--algo {bm|kmp} :字串匹配檢測演算法,bm :Boyer-Moore,kmp :Knuth-Pratt-Morris
--from offset :開始偏移
--to offset :結束偏移
[!] --string pattern :要檢測的字串模式
[!] --hex-string pattern :要檢測字串模式,16 進位制格式
範例:
    iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string “google" -j REJECT
5. time擴充套件
根據將報文到達的時間與指定的時間範圍進行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:開始日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:停止日期
--timestart hh:mm[:ss]:開始時間
--timestop hh:mm[:ss]:停止時間
[!] --monthdays day[,day...]:每個月的幾號
[!] --weekdays day[,day...]:星期幾
--kerneltz :核心時區,不建議使用,CentOS7 系統預設為UTC
注意:centos6 不支援kerneltz,--localtz 指定本地時區( 預設)
範例:
    iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
6. connlimit 擴充套件
根據每用戶端IP 做並行連線數數量限制,即每個用戶端最多可同時發起的連線數量,通常分別與預設的拒絕或允許策略配合使用,可防止CC(Challenge Collapsar 挑戰黑洞) 攻擊
--connlimit-upto n :匹配,限定並行連線數的上限
--connlimit-above n :匹配,限定並行連線數的下限
範例:
    iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
7. limit擴充套件
基於收發報文的速率做匹配,使用令牌桶過濾器
--limit rate[/second|/minute|/hour|/day]:數率限定
--limit-burst number:突發數率限定
範例:
    iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
    iptables -I INPUT 2 -p icmp -j REJECT
8. state 擴充套件
狀態檢測擴充套件,根據“連線追蹤機制”去檢查連線的狀態,較耗資源。
追蹤本機上的請求和響應之間的關係,狀態有如下幾種:
    NEW :新發出請求;連線追蹤資訊庫中不存在此連線的相關資訊條目,因此,將其識別為第一次發出的請求
    ESTABLISHEDNEW 狀態之後,連線追蹤資訊庫中為其建立的條目失效之前期間內所進行的通訊狀態
    RELATED :新發起的但與已有連線相關聯的連線,如:ftp 協定中的資料連線與命令連線之間的關係
    INVALID :無效的連線,如flag 標記不正確
    UNTRACKED :未進行追蹤的連線,如raw
[!] --statestate就是NEW等狀態
範例:
    iptables -A INPUT -d 172.16.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -s 172.16.100.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

1>

以上連線追蹤功能核心會在記憶體中開闢一段專用的空間用於儲存連線的狀態等,由於此段記憶體空間是有限的,因此就必須對連線追蹤功能進行一些調整限制。
有關的核心引數由以下提供:
    已經追蹤到的並記錄下來的連線資訊庫
        /proc/net/nf_conntrack
    調整連線追蹤功能所能夠容納的最大連線數量
        /proc/sys/net/nf_conntrack_max
    不同的協定的連線追蹤時長
        /proc/sys/net/netfilter/
    注意:CentOS7  需要載入模組: modprobe nf_conntrack

2>

iptables 的連結跟蹤表最大容量為/proc/sys/net/nf_conntrack_max ,各種狀態的超時連結會從表中刪除;當模板滿載時,後續連線可能會超時
解決方法兩個:
(1) 加大nf_conntrack_max 值 
    vi /etc/sysctl.conf
        net.nf_conntrack_max = 393216
        net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout 時間
    vi /etc/sysctl.conf
        net.netfilter.nf_conntrack_tcp_timeout_established = 300
        net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
        net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
iptables -t nat -L -n

3>

開放被動模式的ftp服務
(1)裝載ftp 連線追蹤的專用模組:
    跟蹤模組路徑:/lib/modules/kernelversion/kernel/net/netfilter
    vim /etc/sysconfig/iptables-config  組態檔
        IPTABLES_MODULES=" nf_conntrack_ftp "
        modproble nf_conntrack_ftp
(2)放行請求報文:
    命令連線:NEW, ESTABLISHED
    資料連線:RELATED, ESTABLISHED
    iptables –I INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
(3)放行響應報文:
    iptables -I  OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

5)terget,處理動作

-j targetname [per-target-options]:跳轉目標
    簡單:
        ACCEPT :接受
        DROP :丟棄
    擴充套件:
        REJECT :明確拒絕,預設
        RETURN :返回撥用鏈
        REDIRECT :埠重定向
        LOG :記錄紀錄檔,dmesg
        MARK :做防火牆標記
        DNAT :目標地址轉換
        SNAT :源地址轉換
        MASQUERADE :地址偽裝
        ...
        自定義鏈:

LOG:非中斷target, 本身不拒絕和允許, 放在拒絕和允許規則前並將紀錄檔記錄在/var/log/messages 系統紀錄檔中
    --log-level level:級別有emerg, alert, crit, error,warning, notice, info or debug
    --log-prefix prefix:紀錄檔字首,用於區別不同的紀錄檔,最多29個字元。
    範例:
        iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multimport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: 

更多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

iptables命令使用詳解  http://www.linuxidc.com/Linux/2017-10/148097.htm

Linux下iptables防火牆設定詳解  http://www.linuxidc.com/Linux/2017-11/148407.htm

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

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


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