【Linux】Linux7中的防火墙 - Firewall
阅读数:
从 rhel7开始,系统推荐我们使用 firewall 来替代原先的 iptables,firewall 也是默认的 rhel 的防火墙配置。
网上已经有很多文章介绍 firewall 和 iptables 的不同,这里就不再重复啰嗦。个人觉得firewall 有几个地方要更好一些:
- firewall 预设了9个 zone,每个 zone 可以有个性化的规则,这样当你的服务器/个人电脑 处于不同的环境下时,你就可以很方便的一键切换配置了。
- firewall 的配置项发生修改时,可以进行热生效;而 iptables 只能通过重启服务来实现。
- firewall 从命令行或从配置内容上,更加人性化。例如可以配置服务内容 ssh,http,https 等,这些就相当于开启了22端口、80端口和443端口的接入权限。
- 最重要的,firewall 是 linux 默认的防火墙配置工具了,我们有什么理由不跟上潮流呢?
常用命令
这里介绍几个常用的命令,如果想要更深入地研究firewall,请移步文章末尾的参考和致谢部分,里面有更详细地介绍。
iptables?
开篇已经提到了,其实 iptables 和 firewall 是两个工具,我们已经知道了 firewall 有几个默认的区域,从命令行我们也能看到,同时在文件夹/etc/firewalld/zones
文件夹里面可以看到所有的区域。当然我们自定义的区域也会在该目录下产生一个 xml 文件,里面就记录了这个区域的所有配置信息,包括绑定的网卡、允许的服务、端口等信息。
以下是一个典型的区域配置文件内容:
1 |
|
我们看到在/etc/firewalld
目录中,除了有zones
文件夹外,还有一个services
文件夹。同zones 一样,services 定义了一些常见的 service 的端口、协议等内容,你可以自行查看,包括 ssh, http, https, mysql 等一些我们常用的熟悉的服务,都已经被预置进去了。
如果你激活了 firewall,你依旧可以通过输入iptables -L
命令来查看 iptables 的配置,你会发现,通过 firewall 配置的规则,在 iptables 中也一样出现了。
启动firewall
firewall 已经是 rhel/CentOS7中默认安装好的,所以我们只需要把他启动就好了。注意,在 rhel7的内核中,系统操作的命令已经变成了systemctl start/stop/restart xxx
,当然,大家在rhel6内核中习惯用的 service xxx start/stop/restart
依然是可以用的。但是建议大家还是尽量熟悉一下新系统的命令吧。
1 | $ systemctl start firewalld |
基本查看命令
1 | $ firewall-cmd --state # 查看firewall状态 |
注:
- default-zone指的是我们在输入命令时,可以省去
--zone=xxx
这个参数后,默认查看/修改的 zone 信息。默认的 default zone 是public
,我们可以通过set-default-zone
命令来修改默认的 zone- active-zone 指的是当前系统的网卡绑定在的zone,后面我们将介绍如果修改网卡所在 zone 实现防火墙配置的快速切换。
常用修改命令
1 | $ firewall-cmd --zone=dmz --change-interface=eth0 # 修改 dmz 区域的网卡为 eth0 |
注:
permanent
参数表示永久生效,但是加了该参数后,你需要reload
才能使命令生效;如果不加该参数,则命令会立即生效,但是当 firewall 服务被完全重启时,该配置会失效。- 当
chage-interface
修改绑定网卡时,不需要加入参数permanent
;但是其他命令加入permanent
参数可以让设置永久生效
bash-completion
我们发现其实 firewall 的相关命令参数都非常长,其实 linux7的内核已经提供了命令行参数补全的工具,只不过我们一般都是安装的最小版本的 rhel/CentOS,所以我们需要额外安装才能生效
1 | yum install bash-completion |
记得要退出 bash 并重新进入才能生效呦 之后我们就可以通过 tab 来自动补全相关命令参数了。