在早期的
Linux
系统中,默认使用的是
iptables
防火墙管理服务来配置防火墙。尽管新型的 firewalld
防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用 iptables
。考虑到
iptables
在当前生产环境中还具有顽强的生命力,以及为了使大家在求职面试过程中被问到 iptables
的相关知识时能胸有成竹,还是有必要在本章好好地讲解一下这项技术。更何况前文也提到,各个防火墙管理工具的配置思路是一致的,在掌握了 iptables
后再学习其他防火墙管理工具时,也有借鉴意义。
目录
8.2.1 策略与规则链
8.2.2 iptables 中基本的命令参数
8.2.1 策略与规则链
防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。一般而言,
防火墙策略规则的设置有两种:一种是“通”(即放行),一种是“堵”(即阻止)。当防火墙的默认策略为拒绝时(堵),就要设置允许规则(通),否则谁都进不来;
如果防火墙的默认策略为允许时,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用。
iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:
一般来说,从内网向外网发送的流量一般都是可控且良性的,因此我们使用最多的就是 INPUT 规则链,该规则链可以增大黑客人员从外网入侵内网的难度。
8.2.2 iptables 中基本的命令参数
iptables 是一款基于命令行的防火墙策略管理工具,具有大量参数,学习难度较大。好在对于日常的防火墙策略配置来讲,无需深入了解诸如“四表五链”的理论概念,只需要掌握常用的参数并做到灵活搭配即可,这就足以应对日常工作了。
iptables 命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables 就会根据策略规则所预设的动作来处理这些流量。另外,再次提醒一下,防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误。表 8-1 总结归纳了常用的 iptables 命令参数。再次强调,我们无需死记硬背这些参数,只需借助下面的实验来理解掌握即可。
在 iptables 命令后添加-L 参数查看已有的防火墙规则链:
在 iptables 命令后添加-F 参数清空已有的防火墙规则链:
把 INPUT 规则链的默认策略设置为拒绝:
前文提到,防火墙策略规则的设置有两种:通和堵。当把 INPUT 链设置为默认拒绝后,就要在防火墙策略中写入允许策略了,否则所有到来的流量都会被拒绝掉。另外,需要注意的是,规则链的默认拒绝动作只能是 DROP,而不能是 REJECT。
向 INPUT 链中添加允许 ICMP 流量进入的策略规则:
在日常运维工作中,经常会使用 ping 命令来检查对方主机是否在线,而向防火墙的 INPUT 规则链中添加一条允许 ICMP 流量进入的策略规则就默认允许了这种 ping 命令检测行为。
删除 INPUT 规则链中刚刚加入的那条策略(允许 ICMP 流量),并把默认策略设置为允许:
将 INPUT 规则链设置为只允许指定网段的主机访问本机的 22 端口,拒绝其他所有
主机的流量:
再次重申,防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务。 另外,这里提到的 22
号端口是
ssh
服务使用的(有关
ssh 服务,请见下一章)。
在设置完上述
INPUT
规则连之后,我们使用
IP
地址在
192.168.10.0/24
网段内的主机访问服务器(即前面提到的设置了 INPUG
规则链的主机)的 22 端口,效果如下:
向 INPUT 规则链中添加拒绝所有人访问本机 12345 端口的策略规则:
向 INPUT 规则链中添加拒绝 192.168.10.5 主机访问本机 80 端口(Web 服务)的策略规则:
向 INPUT 规则链中添加拒绝所有主机访问本机 1000~1024 端口的策略规则:请特别注意,使用 iptables 命令配置的防火墙规则默认会在系统下一次重启时失效,如果想让配置的防火墙策略永久生效,还要执行保存命令:service iptables save。