使用 firewall-cmd 命令管理防火墙

使用 firewall-cmd 命令管理防火墙

Linux 的新防火墙软件,跟 iptables 差不多的工具。firewall-cmd 是 firewalld 的 cli 管理工具,firewalld 是centos7 的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的 zone 概念。

管理命令

查询 zone 与 接口信息

1
2
3
$ firewall-cmd --get-active-zones
public
interfaces: ens33

该命令会列出各接口所属的 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
2
3
8080/tcp
8081/udp
8082-8085/tcp

示例:

1
2
3
4
5
6
$ firewall-cmd  --add-port=8080/tcp
success # 添加成功反馈
$ firewall-cmd --add-port=8081/udp --zone=public
success # 添加成功反馈
$ firewall-cmd --add-port=8082-8085/tcp --zone=public --permanent
success # 添加成功反馈

没有指定 zone 的规则,自动使用默认 zone

带有参数 --permanent 的规则是永久生效的,不会在重启后失效

规则修改完成后,不要忘记重新加载规则,使其生效

禁用端口

默认情况下下,未开启端口即视为禁用,对于已经开放的端口,我们可以移除相关规则,使其被禁用。

禁用端口的关键字是 --remove-port,其用法与 ---add-port 类似。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ firewall-cmd  --remove-port=8080/tcp
success # 禁用成功反馈
$ firewall-cmd --remove-port=8081/udp --zone=public
success # 禁用成功反馈
$ firewall-cmd --remove-port=8082-8100/tcp --zone=public --permanent
Warning: NOT_ENABLED: 8082-8100:tcp
success
$ firewall-cmd --remove-port=8083/tcp --zone=public --permanent
Warning: NOT_ENABLED: 8083:tcp
success
$ firewall-cmd --reload # 重新加载规则
success
$ firewall-cmd --list-port # 禁用没有生效
8082-8085/tcp

需要注意的是,开放与禁用一条规则,涉及的端口写法需要完全一致

我们前面开放的是 8082-8085/tcp 端口,这里禁用的是 8082-8100/tcp 以及 8083/tcp,此时会有成功反馈,但也有一个警告提示我们:这些端口本就没有开放。重新加载规则列表,8082-8085/tcp 依然在列表内,说明这些端口依然是可用的。

想要移除该规则,需要 --remove-port=8082-8085/tcp

1
2
3
4
5
$ firewall-cmd --remove-port=8082-8085/tcp --permanent
success
$ firewall-cmd --reload
success
$ firewall-cmd --list-port

这一条防火墙规则算是正确删掉了

参考链接

Linux firewall-cmd 命令详解

评论