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