3.1 问题
本案例要求熟悉使用iptables的扩展规则,实现更丰富的过滤功能,完成以下任务:
根据MAC地址封锁主机
在一条规则中开放多个TCP服务
根据IP范围设置封锁规则
3.2 方案
iptables在基本过滤条件的基础上还扩展了很多其他条件,在使用时需要使用-m参数来启动这些扩展功能,语法如下:
iptables 选项 链名称 -m 扩展模块 --具体扩展条件 -j 动作
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:根据MAC地址过滤
1)根据IP过滤的规则,当对方修改IP后,防火墙会失效
[root@proxy ~]# iptables -F
[root@proxy ~]# iptables -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j DROP
//设置规则禁止192.168.4.100使用ssh远程本机
但是,当client主机修改IP地址后,该规则就会失效,注意因为修改了IP,对client主机的远程连接会断开,需要使用virt-manager开启虚拟机操作:
[root@client ~]# ifconfig eth0 192.168.4.101
[root@client ~]# ssh 192.168.4.5 //依然成功
根据MAC地址过滤,可以防止这种情况的发生
[root@client ~]# ip link show eth0 //查看client的MAC地址
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff
[root@proxy ~]# iptables -A INPUT -p tcp --dport 22\
> -m mac --mac-source 52:54:00:00:00:0b -j DROP
//拒绝52:54:00:00:00:0b这台主机远程本机
步骤二:基于多端口设置过滤规则
1)一次需要过滤或放行很多端口时会比较方便
[root@proxy ~]# iptables -A INPUT -p tcp \
> -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT
//一次性开启20,21,22,25,80,110,143,16501到16800所有的端口
提示,多端口还可以限制多个源端口,但因为源端口不固定,一般不会使用,限制多个源端口的参数是–sports.
步骤三:根据IP地址范围设置规则
1)允许从 192.168.4.10-192.168.4.20 登录
[root@proxy ~]# iptables -A INPUT -p tcp --dport 22 \
> -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT
注意,这里也可以限制多个目标IP的范围,参数是–dst-range,用法与–src-range一致。
2)禁止从 192.168.4.0/24 网段其他的主机登录
[root@proxy ~]# iptables -A INPUT -p tcp --dport 22 -s 192.168.4.0/24 -j DROP