这篇文章原写于春节前,本打算作为第三周的分享,只是感觉不是很完善就一直放着,刚好这周在整理文章,便作些修改作为本周周分享。

基本操作

# 启动
systemctl start firewalld

# 关闭
systemctl stop firewalld

# 重启
systemctl restart firewalld
firewall-cmd --reload

# 停止
systemctl disable firewalld

# 查看当前状态
systemctl status firewalld
firewall-cmd --state

注:firewall-cmd 命令只能在防火墙启用时才能使用。

修改

防火墙要添加例外端口无外乎两种方法:修改端口和服务。

添加端口

添加端口例外是最简单和直接的方法,也方便后续查看所有已添加的端口,唯一不便的是需要在防火墙运行的前提下才能操作。

# 查看 public 已打开端口
firewall-cmd --zone=public --list-port
# 查看指定端口是否开启
firewall-cmd --zone=public --query-port=2022/tcp

# 添加端口
firewall-cmd --zone=public --add-port=2022/tcp
# 删除端口
firewall-cmd --zone=public --remove-port=2022/tcp

# 重启服务
systemctl restart firewalld

在上面的命令中zone都是指定为 CentOS 7 默认的public规则集,但是除了 public 之外还有另外 8个 zone:

  1. drop:丢弃
  2. block:限制
  3. external:外部
  4. dmz:非军事区
  5. work:工作
  6. home:家庭
  7. internal:内部
  8. trusted:信任

如果不确定当前默认 zone,在已启用防火墙的情况下可以用命令firewall-cmd --get-default-zone查看。

注:需在命令后增加参数--permanent才会永久生效(需重启 firewall-cmd 服务)。

添加服务

添加服务的效果和添加端口是一样的,只不过是在对应服务中设置要开放的端口,优点在于方便管理某些服务需要用到多个端口的情况。

# 查看已开启那些服务
firewall-cmd --zone=public --list-services
# 查看可以开启那些服务
firewall-cmd --get-services

# 添加服务
firewall-cmd --add-service=telnet --permanent
# 删除服务
firewall-cmd --remove-service=telnet --permanent

CentOS 7 防火墙中的ssh 服务中是使用 22 端口,如果修改了默认端口号,需要同时修改/usr/lib/firewalld/services/ssh.xml文件中的端口。

提升

前面的两种操作中无论是添加端口,还是添加服务都需要在防火墙启用的情况下进行,但在通过 SSH 连接服务器时,直接启用防火墙可能会导致连接断开,此时就需要另一种方法达到目的。

在文件中添加端口

前面新增的端口和服务其实都会在文件public.xml中体现,所以我们只要在里面添加对应的端口即可。

用 vi 打开/etc/firewalld/zones/public.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
</zone>

在最后行</zone>前增加一句<port protocol="tcp" port="2022"/>保存后即可启用防火墙。不过如果想以添加服务的形式修改,还需修改或新增对应服务的文件。

修改对应服务端口

因为 CentOS 7 默认是已添加 ssh 服务为例外的,所以可以直接用 vi 打开对应的 xml 文件/usr/lib/firewalld/services/ssh.xml进行修改:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>

主要关注<port protocol="tcp" port="22"/>这一行,把 22 改为当前对应的 ssh 端口保存即可。