第十四章 Firewall防火墙
14.1 Firewall防火墙简介
Firewall防火墙是在RHEL7.0开始加入到系统中的,是系统安装后默认使用的防火墙工具。它是基于iptables工作的,可以说firewall就是iptables的一个外壳。我们操作firewall时,实质上是由firewall生成了iptables命令,给iptables执行。
由于在局域网通信时,路由器都是使用的企业级路由,几乎不会使用主机做路由器开启iptables保护内网,所以,iptables的nat代理功能较为少用,服务器上启用防火墙更多的是为了保护自己,即审核访问自己或自己发出去的数据包。Firewall防火墙最主要的功能就是针对本机做保护的。
14.1 Firewall原理
Firewall采用区域式管理机制,共有九大区域,通信时以网卡所在的区域为生效区域,审核规则。
Firewall的九大区域功能如下:
public ---公共区域,默认有效区域,可设定规则
trusted ---信任区域,允许任何通信
drop ---丢弃区域,拒绝任何通信
external ---nat区域,防火墙作为nat代理服务器使用
dmz ---非军事区域,该区域内的主机,服务端口自动映射,即DNAT
work ---工作区域
home ---家庭区域
internal ---内部区域
block ---类似于drop,拒绝所有外部通信。
其中,前五个区域是最常用的区域,work、home、internal可视为针对不同环境制定的不同规则,比如,我们拿着笔记本电脑,到单位上可以启用work区域生效;拿回家后可以启用home生效。pulic区域为默认区域,即安装完linux系统后,firewall默认使用public作为生效区域,所有网卡都工作在public区域内。
这里,再次强调一下:若没有特殊设定,网卡所在的区域为生效区域,经过该网卡的所有数据包都要审核区域内的规则。
14.2 Firewall配置
本章我们仍使用上一章的实验拓扑图。左边外网卡是ens33,内网卡是ens34。
14.2.1 默认区域配置
首先,来查一下当前firewall的默认区域是哪一个:
firewall-cmd --get-default-zone ---查看当前的默认生效区域
那么默认区域中的规则有哪些呢?查看命令如下:
firewall-cmd --list-all ---查看默认区域的规则
图中可见到,默认区域是public,它有两块网卡:ens33、ens34。下面显示的是本区域中的规则,表示允许客户访问的本机服务、端口等设置,可见基本都是空的。
要查看所有九大区域中的规则,可使用如下命令:
firewall-cmd --list-all-zones ---查看所有区域的规则
我们现在在Linux上部署一个web网站,使用客户机访问,可发现是无法访问的,因为访问的网卡在public区域中,而public区域允许访问的services中并没有http服务,但是使用客户端连接服务器的ssh服务是可以的,这是因为services中有ssh服务,即允许客户访问本机的ssh。
若要更改firewall默认生效的区域,可以使用下面命令:
firewall-cmd --set-default-zone=trusted ---更改默认区域为信任区域
firewall-cmd --get-default-zone
firewall-cmd --list-all
再次查看可见默认区域已更改,并且两块网卡也都转到trusted中了。
这时我们再次从客户机访问服务器的web网站,可发现已经通了。说明trusted区域允许所有通信。
14.2.2 网卡所在区域配置
我们先把默认区域恢复到public中:
firewall-cmd --set-default-zone=public
然后我们来配置一下网卡的所在区域:
firewall-cmd --change-interface=ens33 --zone=trusted
firewall-cmd --list-all --zone=trusted ---指定仅查看trusted区域
这样,可见到我们把网卡ens33转入到trusted区域了。然后可以在主机A上访问http://202.0.0.2,即Linux上的web服务,会发现访问成功,因为主机A访问时通信的是ens33网卡,走trusted区域。但是在主机B上访问http://192.168.10.1会发现打不开页面,因为通信的是ens34网卡,走的是public区域。
firewall-cmd --remove-interface=ens33 --zone=trusted
注:从区域中删除网卡,网卡将被放空,不属于任何区域
firewall-cmd --list-all-zones
查看所有区域,会找不到ens33。
firewall-cmd --add-interface=ens33 --zone=public
注:把网卡加入区域。
两个命令的区别是:change可以更改任何网卡(在或不在某个区域都可以);add只能把放空网卡加入到区域。
好了,为了后面的实验。我们先把网卡转回public:
firewall-cmd --change-interface=ens33 --zone=public