基本匹配條件
#匹配ip段
iptables -t filter -I INPUT -s 192.168.3.103/24 -j DROP
#匹配多個(gè)ip
iptables -t filter -I INPUT -s 192.168.2.101,192.168.2.103 -j DROP
#匹配ip取反
iptables -t filter -I INPUT ! -s 192.168.2.2 -j ACCEPT
#-d 匹配目標(biāo)ip地址
iptables -t filter -I INPUT -s 192.168.2.101 -d 192.168.2.102 -j DROP
#-p 匹配協(xié)議類型,centos6 -p選項(xiàng)支持如下協(xié)議類型tcp, udp, udplite, icmp, esp, ah, sctp,centos7還支持icmpv6、mh
iptables -t filter -I INPUT -s 192.168.2.101 -p icmp -j DROP
iptables -t filter -I INPUT -s 192.168.2.101 ! -p tcp -j DROP
#-i 匹配報(bào)文流入網(wǎng)卡接口,只能適用于PREROUTING、INPUT、FORWARD鏈,不適用于OUTPUT、POSTROUTING鏈
iptables -t filter -I INPUT -i eth1 -p icmp -j DROP
iptables -t filter -I INPUT ! -i eth1 -p tcp -j DROP
#-o 匹配報(bào)文流出網(wǎng)卡接口,只能適用于OUTPUT、POSTROUTING、FORWARD鏈,不適用于PREROUTING、INPUT鏈
iptables -t filter -I OUTPUT -o eth1 -p icmp -j DROP
擴(kuò)展匹配條件-常用擴(kuò)展模塊
tcp模塊
#--dport 匹配目標(biāo)端口
#-m tcp表示使用tcp擴(kuò)展模塊,-p tcp與 -m tcp并不沖突,-p用于匹配報(bào)文的協(xié)議,-m用于指定擴(kuò)展模塊的名稱,正好,這個(gè)擴(kuò)展模塊也叫tcp。
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp -m tcp --dport 22 -j DROP
#當(dāng)使用-p選項(xiàng)指定報(bào)文的協(xié)議時(shí),如沒有使用-m指定對(duì)應(yīng)的擴(kuò)展模塊名稱,使用了擴(kuò)展匹配條件,iptables默認(rèn)會(huì)調(diào)用與-p選項(xiàng)對(duì)應(yīng)的協(xié)議名稱相同的模塊。
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp ! --dport 22 -j DROP
#--sport 匹配源端口
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp --sport 22 -j DROP
iptables -t filter -I OUTPUT -d 192.168.2.101 -p tcp --sport 22 -j DROP
#匹配連續(xù)端口范圍
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp --dport 28:35 -j DROP
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp --dport 8080: -j DROP
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp --dport :35 -j DROP
# --tcp-flags 匹配報(bào)文的tcp頭的標(biāo)志位 ,--syn 用于匹配tcp新建連接的請(qǐng)求報(bào)文,相當(dāng)于使用"--tcp-flags SYN,RST,ACK,FIN SYN"
iptables -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
iptables -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN -j REJECT
iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags ALL SYN,ACK -j REJECT
iptables -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT
multiport模塊
#--dports、--sports匹配離散的端口,同時(shí)可以匹配連續(xù)端口
#-m multiport擴(kuò)展只能用于tcp、udp協(xié)議,即配合-p tcp或者-p udp使用
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp -m multiport --dports 22,80,8888 -j DROP
iptables -t filter -I INPUT -s 192.168.2.101 -p tcp -m multiport --dports 22:80,8888 -j DROP
udp模塊
# 與tcp模塊方法類似
iptables -t filter -I INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -t filter -I INPUT -p udp -m udp --dport 137:139 -j DROP
#可以結(jié)合multiport模塊指定多個(gè)離散的端口
iptables -t filter -I INPUT -p udp -m udp -m multiport --dports 53,123 -j ACCEPT
icmp模塊
#禁止進(jìn)出的icmp包
iptables -I INPUT -p icmp -j REJECT
#發(fā)出的ping請(qǐng)求屬于類型8的icmp報(bào)文,而對(duì)方主機(jī)的ping回應(yīng)報(bào)文則屬于類型0的icmp報(bào)文
#禁止外部ping,但允許向外ping。
iptables -I INPUT -p icmp -m icmp --icmp-type 8 -j REJECT
iptables -I OUTPUT -p icmp -m icmp --icmp-type 0 -j REJECT
#禁止發(fā)出ping請(qǐng)求icmp報(bào)文,達(dá)到禁止服務(wù)器向外ping
iptables -I OUTPUT -p icmp -m icmp --icmp-type 8 -j REJECT
iprange擴(kuò)展模塊
#--src-range 、--dst-range,可以指定"一段連續(xù)的IP地址范圍",
iptables -t filter -I INPUT -m iprange --src-range 192.168.7.1-192.168.7.255 -j DROP
string擴(kuò)展模塊
#--algo 指定對(duì)應(yīng)的匹配算法(bm kmp),如無效換一個(gè)匹配算法(input用bm,output用kmp??),注意使用INPUT、還是OUTPUT
#--string 指定匹配的字符串
iptables -t filter -I INPUT -m string --algo bm --string "west" -j DROP
iptables -t filter -I OUTPUT -m string --algo kmp --string "west" -j DROP
time擴(kuò)展模塊
# time模塊匹配時(shí)間是UTC,時(shí)區(qū)差8個(gè)小時(shí)
#--timestart --timestop 開始結(jié)束時(shí)刻幾點(diǎn)幾分幾秒
#--weekdays 每周哪天, --monthdays 每月哪天
#--datestart 與-datestop選項(xiàng),指定具體的日期范圍
#--monthdays與--weekdays可以使用"!"取反,其他選項(xiàng)不能取反
iptables -t filter -I OUTPUT -p tcp --sport 80 -m time --timestart 12:14:00 --timestop 12:15:00 -j DROP
iptables -t filter -I OUTPUT -p tcp --sport 80 -m time --weekdays 3,6,7 -j DROP
iptables -t filter -I OUTPUT -p tcp --sport 80 -m time --monthdays 8,10,11 -j DROP
iptables -t filter -I OUTPUT -p tcp --sport 80 -m time --weekdays 5,6 --monthdays 12,13,14 -j DROP
iptables -t filter -I OUTPUT -p tcp --sport 80 -m time --datestart 2020-08-12 --datestop 2020-08-14 -j DRO
iptables -t filter -I OUTPUT -p tcp --sport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT
connlimit擴(kuò)展模塊
#--connlimit-above 默認(rèn)表示限制"每個(gè)IP"的鏈接數(shù)量
#--connlimit-mask 針對(duì)"某類IP段內(nèi)的一定數(shù)量的IP"進(jìn)行連接數(shù)量的限制
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
limit擴(kuò)展模塊
# 限制單位時(shí)間內(nèi)流入的包的數(shù)量, /second、/minute、/hour、/day
#--limit-burst 默認(rèn)值為5,
#令牌桶:"--limit"選項(xiàng)就是用于指定"多長時(shí)間生成一個(gè)新令牌的","--limit-burst"選項(xiàng)就是用于指定"木桶中最多存放幾個(gè)令牌的"
iptables -A INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
iptables -A INPUT -p icmp -j REJECT