基本匹配条件
基本匹配条件
指定源 IP
使用 -s
选项作为匹配条件,可以匹配报文的源地址
可以指定单个 IP
指定多个源 IP
也可以在指定源地址时,一次指定多个,用”逗号”隔开即可
可以看出,上例中,一次添加了两条规则,两条规则只是源地址对应的 IP 不同,注意,上例中的”逗号”两侧均不能包含空格,多个 IP 之间必须与逗号相连
[root@virt ~]# iptables -t filter -I INPUT 1 -s 172.16.151.9,172.16.151.10 -j DROP
[root@virt ~]# iptables -t filter -L INPUT -v -n --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP all -- * * 172.16.151.10 0.0.0.0/0
2 0 0 DROP all -- * * 172.16.151.9 0.0.0.0/0
指定源网段
除了能指定具体的 IP 地址,还能指定某个网段
上例表示,如果报文的源地址 IP 在 172.17.0.0/24
网段内,当报文经过 INPUT 链时就会被 DROP 掉
匹配条件取反
还可以对匹配条件取反
添加后规则如下:
[root@virt ~]# iptables -t filter -I INPUT 1 ! -s 172.16.151.9 -j ACCEPT
[root@virt ~]# iptables -t filter -L INPUT -v -n --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 10 568 ACCEPT all -- * * !172.16.151.9 0.0.0.0/0
使用 ! -s 172.16.151.9
表示对 -s 172.16.151.9
这个匹配条件取反, -s 172.16.151.9
表示报文源 IP 地址为 172.16.151.9 即可满足匹配条件,使用 “!
” 取反后则表示,报文源地址 IP 只要不为 172.16.151.9
即满足条件,那么,上例中规则表达的意思就是,只要发往本机的报文的源地址不是 172.16.151.9
,就接受报文
目标 IP 地址
可以使用 -d
选项指定”目标地址”作为匹配条件
如果不指定任何目标地址,则目标地址默认为 0.0.0.0/0
,同理,如果我们不指定源地址,源地址默认为 0.0.0.0/0
,0.0.0.0/0
表示所有 IP
与 -s
选项一样,-d
选项也可以使用”叹号”进行取反,也能够同时指定多个 IP 地址,使用”逗号”隔开即可
示例
该规则拒绝从 172.16.151.10 发往本机 172.16.151.129 IP 的报文
协议类型
可以使用 -p
选项,指定需要匹配的报文的协议类型
示例
# 拒绝 tcp
iptables -t filter -I INPUT 1 -s 172.16.151.10 -d 172.16.151.129 -p tcp -j DROP
# 拒绝 icmp
iptables -t filter -I INPUT 1 -s 172.16.151.10 -d 172.16.151.129 -p icmp -j DROP
-p
选项支持如下协议类型
- tcp
- udp
- udplite
- icmp
- icmpv6
- esp
- ah
- sctp
- mh
当不使用 -p
指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用 -p all
的效果相同
网卡接口
当本机有多个网卡时,可以使用 -i
选项去匹配报文是通过哪块网卡流入本机的
-i
选项是用于匹配报文流入的网卡的,也就是说,从本机发出的报文是不可能会使用到 -i
选项的,因为这些由本机发出的报文压根不是从网卡流入的,而是要通过网卡发出的,从这个角度考虑,-i
选项的使用是有限制的