跳转至

基本匹配条件

基本匹配条件

指定源 IP

使用 -s 选项作为匹配条件,可以匹配报文的源地址

可以指定单个 IP

iptables -t filter -I INPUT 1 -s 172.16.151.9 -j DROP

指定多个源 IP

也可以在指定源地址时,一次指定多个,用”逗号”隔开即可

iptables -t filter -I INPUT 1 -s 172.16.151.9,172.16.151.10 -j DROP

可以看出,上例中,一次添加了两条规则,两条规则只是源地址对应的 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 地址,还能指定某个网段

iptables -t filter -I INPUT 1 -s 172.17.0.0/24 -j DROP

上例表示,如果报文的源地址 IP 在 172.17.0.0/24 网段内,当报文经过 INPUT 链时就会被 DROP 掉

匹配条件取反

还可以对匹配条件取反

iptables -t filter -I INPUT 1 ! -s 172.16.151.9 -j ACCEPT

添加后规则如下:

[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/00.0.0.0/0 表示所有 IP

-s 选项一样,-d 选项也可以使用”叹号”进行取反,也能够同时指定多个 IP 地址,使用”逗号”隔开即可

示例

iptables -t filter -I INPUT 1 -s 172.16.151.10 -d 172.16.151.129 -j DROP

该规则拒绝从 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 选项去匹配报文是通过哪块网卡流入本机的

# 拒绝 eth0 的 icmp
iptables -t filter -I INPUT 1 -i eth0 -p icmp -j DROP

-i 选项是用于匹配报文流入的网卡的,也就是说,从本机发出的报文是不可能会使用到 -i 选项的,因为这些由本机发出的报文压根不是从网卡流入的,而是要通过网卡发出的,从这个角度考虑,-i 选项的使用是有限制的