iptables命令使用詳解
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命令使用詳解