iptables命令使用

iptables [-t TABLE] SUBCOMMAND CHAINCRETERIA -j TARGET

-t TABLE:

    默認爲filter, 共有filter, nat, mangle, raw四個可用;

SUBCOMMAND

鏈:

-F:flush,清空指定表的指定鏈上所有規則;省略鏈名時,清空表中的所有鏈;

示例: 

    # iptables -t filter -F INPUT #只清空filter表中的INPUT鏈

    # iptables -t nat #清空整個nat表

-N:new, 新建一個用戶自定義的鏈;自定義鏈只能作爲默認鏈上的跳轉對象,即在默認鏈通過引用來生效自定義鏈;

    示例 : 創建新的鏈 webfules

    [root@localhost ~]#  iptables -t filter -N webrules

-X:drop,刪除用戶自定義的空鏈;非空自定義鏈和內置鏈無法刪除;

    示例 刪除webrules

    # iptables -t filter -X webrules

-Z:zero,將規則的計數器置0;

-P:policy,設置鏈的默認處理機制;當所有都無法匹配或有匹配有無法做出有效處理機制時,默認策略即生效;

    示例:設置filter表的forward鏈的默認策略爲DROP

    # iptables -t filter -P FORWARD DROP

filter表的可用策略:ACCEPT(接受), DROP(丟棄), REJECT(拒絕)

-E:rename,重命名自定義鏈;

    示例: 講webrules 修改爲httpdrules

    # iptables -t filter -E  webrules httpdrules

    注意:被引用中的鏈,無法刪除和改名

規則管理:

    -A:append,在鏈尾追加一條規則;

    -I:insert,在指定位置插入一條規則;默認會在第一條

    -D:delete,刪除指定的規則;

    -R:replace,替換指定的規則;

規則查看:

-L:list,列出指定鏈上的所有規則;

-n:numeric,以數字格式顯示地址和端口號,即不反解;

-v:verbose,詳細格式,顯示規則的詳細信息,包括規則計數器等;

-vv:

-vvv:

--line-numbers:顯示規則編號;

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

# iptables -L -n -v

pkts bytes target     prot opt in     out    source               destination

    pkts: 被本規則所匹配到的包個數;

    bytes:被本規則所匹配到的所包的大小之和;

    target: 處理目標 (目標可以爲用戶自定義的鏈)

    prot: 協議 {tcp,udp, icmp}

    opt: 可選項

    in: 數據包流入接口

    out: 數據包流出接口

    source: 源地址

    destination: 目標地址;

CRETERIA:匹配條件

通用匹配

-s,--src, --source  IP|Network:檢查報文中的源IP地址;

[!] -s, --src, --source  IP|Network:檢查報文中的源IP地址進行取反;

-d,--dst, --destination:檢查報文中的目標IP地址;

-p,--protocol:檢查報文中的協議,即ip首部中的protocols所標識的協議;tcp、udp或icmp三者之一;

-i,--in-interface:數據報文的流入接口;通常只用於PREROUTING, INPUT, FORWARD鏈上的規則

-o,--out-interface:檢查報文的流出接口;通常只用於FORWARD, OUTPUT, POSTROUTING鏈上的規則;

示例:

放行172.16.6.62 對172.16.6.61所有服務的訪問

# iptables -t filter -I INPUT-s 172.16.6.62 -d 172.16.6.61 -j ACCEPT

 修改上一條規則爲: 只允許來自172.16.6.62主機對本級172.16.6.61  tcp的訪問請求

# iptables -t filter -R INPUT 1-s 172.16.6.62 -d 172.16.6.61 -p tcp -j ACCEPT

放行172.16.6.62 對172.16.6.61 ping請求

# iptables -t filter -A INPUT-s 172.16.6.62 -d 172.16.6.61 -p icmp -j ACCEPT

限制172.16.6.62對本級172.16.6.61的ping請求只能通過eth0進入

# iptables -t filter -R INPUT 1-s 172.16.6.62 -d 172.16.6.61 -i eth0 -p icmp -j ACCEPT


擴展匹配

擴展匹配:使用iptables的模塊實現進一步擴展性檢查機制 

隱式擴展

    對通用匹配中-p中指定的對指定的協議的擴展

-p tcp:  TCP協議的擴展

    --dport PORT[-PORT] #目標端口

    --sport : 源端口

    --tcp-flags LIST1 LIST2

                LIST1:要檢查的標誌位;

                LIST2:在LIST1中出現過的,且必須爲1標記位;而餘下的則必須爲0; 

示例:

# iptables -t filter  -I INPUT 1 -s 172.16.6.62 -d 172.16.6.61 -ptcp --tcp-flags syn,ack,fin,rst syn -j ACCEPT

 

# iptables -t filter  -I INPUT 1 -s 172.16.6.62 -d 172.16.6.61 -ptcp --syn -j ACCEPT

-p udp:  dup協議的擴展
--sport : 源端口
 --dport : 目標端口

-p icmp:  icmp協議的擴展--icmp-types

            8:echo request  # 8 響應請求(ECHO-REQUEST)

            0:echo reply #0 響應應答(ECHO-REPLY)

阻止172.16.6.62 對本機172.16.6.1 httpd服務的訪問

# iptables -t filter -I INPUT 1-s 172.16.6.62 -d 172.16.6.61 -p tcp -m tcp --dport 80 -j DROP

顯式擴展

顯式擴展:必須指明使用的擴展機制(模塊名字);

    -m模塊名稱 每個模塊會引入新的匹配機制;

想知道有哪些模塊可用嗎?

## rpm -ql iptables| grep so$ #查看已有模塊

[root@localhost ~]# rpm -qliptables| grep .so$

/lib64/xtables/libipt_CLUSTERIP.so

/lib64/xtables/libipt_DNAT.so

/lib64/xtables/libipt_ECN.so

/lib64/xtables/libipt_LOG.so

#小寫字母,以.so結尾;通常都爲擴展模塊 如: libipt_CLUSTERIP.so 其中CLUSTERIP爲模塊名字

-m multiport 擴展:

以離散定義多端口匹配;最多指定15個端口;

multiport專用選項:

--source-ports, --sports PORT[,PORT,...] #源端口

--destination-ports, --dports PORT[,PORT,...] #目標端口

--ports PORT[,PORT,...]

示例: 同時放行 22 80 443

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

-m  iprange擴展

指定連續的ip地址範圍;在匹配非整個網絡地址時使用;

專用選項:

    [!]--src-range IP[-IP] #原地址範圍

    [!]--dst-range IP[-IP] #目標地址範圍


示例: 放行本機telnet服務僅允許172.16.6.1-172.16.6.100的主機可以訪問

iptables-A INPUT -d 172.16.100.11 -p tcp --dport 23 -m iprange --src-range172.16.100.1-172.16.100.100 -j ACCEPT

iptables-A OUTPUT -s 172.16.100.11 -p tcp --sport 23 -m iprange --dst-range172.16.100.1-172.16.100.100 -j ACCEPT

-m string擴展:

檢查報文中出現的字符串,與給定的字符串作匹配;

    字符串匹配檢查算法:kmp, bm

 

專用選項:

    --algo{kmp|bm}

    --algo: 指定算法 常用字符串匹配的算法 kmp | bm

    --string"STRING"

    --string"要匹配的字符串"

    --hex-string"HEX_STRING":HEX_STRING爲編碼成16進制格式的字串;


示例:

#iptables-I OUTPUT 1 -s 172.16.100.11 -p tcp --sport 80 -m string --string"sex" --algo kmp -j REJECT(丟棄)

-m time擴展:

基於時間區間做訪問控制

專用選項:

    --datestartYYYY[-MM][-DD][hh[:mm[:ss]]] #從什麼日期開始 年-月-日 小時:分:秒

    --dattestop#到日期結束

 

    --timestart#從什麼時間開始

    --timestop#到什麼時間結束

    --weekdays DAY1[,DAY2,...] #星期幾 

#iptables -R INPUT 1 -d 172.16.100.11 -p tcp --dport 80 -m time --timestart08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri -j REJECT

-m connlimit擴展:

基於連接數作限制;對每個IP能夠發起的併發連接數作限制;

 

專用選項:

--connlimit-above[n] 不能超過多少

#iptables -I INPUT 2 -d 172.16.100.11 -p tcp --dport 22 -m connlimit--connlimit-above 5 -j REJECT

-m limit擴展:

基於發包速率作限制;

 

專用選項:令牌桶算法

--limit  n[/second|/miniut|/hour|/day]

#n/second 每秒多少個數據包 ;

#n/minit; 每分鐘多少個數據包;

#n/hour 每小時多少個數據包;

#n/day 每天多少個數據包;

--limit-burstn #最大突發速率

# iptables-R INPUT 3 -d 172.16.100.11 -p icmp --icmp-type 8 -m limit --limit 10/minute--limit-burst 5 -j ACCEPT


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章