使用 firewall-cmd 命令管理防火墙
Linux 的新防火墙软件,跟 iptables 差不多的工具。firewall-cmd 是 firewalld 的 cli 管理工具,firewalld 是centos7 的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的 zone
概念。
管理命令
查询 zone 与 接口信息
1 | $ firewall-cmd --get-active-zones |
该命令会列出各接口所属的 zone,默认情况下,接口都在 public 下,public 也是模式 zone
重新加载防火墙规则
1 | $ firewall-cmd --reload |
在修改防火墙规则后,通过该命令使规则生效
规则管理
查看开放端口情况
1 | $ firewall-cmd --zone=public --list-ports |
查看指定 zone 下开放的端口列表,如果未指定 zone 则查看默认 zone。
主要注意的是:
- 永久改动的规则,在 reload 之前不会生效,此时也不会被列出;
- 临时改动的规则,会立即生效,在 reload 之后失效;
开放端口
端口的语法是:
1 | <portid>[-<portid>]/<protocol> |
即指定一个 IP 或 IP 范围,以及协议。常见的协议是 TCP、UDP
例如:
1 | 8080/tcp |
示例:
1 | $ firewall-cmd --add-port=8080/tcp |
没有指定 zone 的规则,自动使用默认 zone
带有参数 --permanent
的规则是永久生效的,不会在重启后失效
规则修改完成后,不要忘记重新加载规则,使其生效
禁用端口
默认情况下下,未开启端口即视为禁用,对于已经开放的端口,我们可以移除相关规则,使其被禁用。
禁用端口的关键字是 --remove-port
,其用法与 ---add-port
类似。
示例:
1 | $ firewall-cmd --remove-port=8080/tcp |
需要注意的是,开放与禁用一条规则,涉及的端口写法需要完全一致
。
我们前面开放的是 8082-8085/tcp
端口,这里禁用的是 8082-8100/tcp
以及 8083/tcp
,此时会有成功反馈,但也有一个警告提示我们:这些端口本就没有开放。重新加载规则列表,8082-8085/tcp
依然在列表内,说明这些端口依然是可用的。
想要移除该规则,需要 --remove-port=8082-8085/tcp
:
1 | $ firewall-cmd --remove-port=8082-8085/tcp --permanent |
这一条防火墙规则算是正确删掉了