用命令行接口(CLI)查看防火墙设置

输入以下命令,得到 firewalld 的状态的文本显示:

~]$ firewall-cmd --state

输入以下命令,查看活动分区的列别,并附带一个目前分配给它们的接口列表:

~]$ firewall-cmd --get-active-zonespublic: em1 wlan0

输入以下命令,找出当前分配了接口(例如 em1)的区域:

~]$ firewall-cmd --get-zone-of-interface=em1public

以 root 身份输入以下命令,找出分配给一个区域(例如公共区域)的所有接口:

~]# firewall-cmd --zone=public --list-interfacesem1 wlan0

从 NetworkManager 可以得到这个信息,并且仅显示接口而非连接。

以 root 用户身份输入以下命令,找出像公共区域这样的一个区域的所有设置:

~]# firewall-cmd --zone=public --list-allpublic
  interfaces: 
  services: mdns dhcpv6-client ssh
  ports: 
  forward-ports: 
  icmp-blocks: source-quench

以 root 身份输入以下命令,查看目前活动的网络区域:

~]# firewall-cmd --get-servicecluster-suite pop3s bacula-client smtp ipp radius bacula ftp mdns samba dhcpv6-client dns open*** imaps samba-client http https ntp vnc-server telnet libvirt ssh ipsec ipp-client amanda-client tftp-client nfs tftp libvirt-tls

这样将列出 /usr/lib/firewalld/services/ 中的服务器名称。注意,配置文件是以服务本身命名的 service-name.xml

以 root 身份输入以下命令,查看所有在防火墙下次加载后将活跃的网络区域:

~]# firewall-cmd --get-service --permanent

用命令行接口(CLI)更改防火墙设置

 1.终止所有数据包(Panic模式)

以 root 身份输入以下命令,开始终止所有输入和输出的数据包:

~]# firewall-cmd --panic-on

所有输入和输出的数据包都将被终止。在一段休止状态之后,活动的连接将被终止;花费的时间由单个会话的超时值决定。

以 root 身份输入以下命令,开始再次传输输入和输出的数据包:

~]# firewall-cmd --panic-off

禁用 panic 模式之后,如果 panic 模式被运行一小段时间,建立的连接可以再次工作。

输入命令,确定 panic 模式被使用或者禁用:

~]$ firewall-cmd --query-panic

如果在运行模式,屏幕会显示 yes,退出状态为 0,如果被启用,屏幕会显示 no,退出状态为 0

2. 用命令行接口(CLI)重新加载防火墙

以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息:

~]# firewall-cmd --reload

以 root 身份输入以下信息,重新加载防火墙并中断用户连接,即丢弃状态信息:

~]# firewall-cmd --complete-reload

通常在防火墙出现严重问题时,这个命令才会被使用。比如,防火墙规则是正确的,但却出现状态信息问题和无法建立连接。

3. 用命令行接口(CLI)为分区增加接口

要为一个分区增加接口,比如,把 em1 增加到公共分区,则以 root 身份输入以下命令:

~]# firewall-cmd --zone=public --add-interface=em1

增加 --permanent 选项并重新加载防火墙,使之成为永久性设置。

4. 通过编辑接口配置文件为分区增加接口

要通过编辑 ifcfg-em1 配置文件来为一个分区增加接口,比如,把 em1 增加到工作分区,需以 root身份用一个编辑器增加以下行到 ifcfg-em1

ZONE=work

注意,如果您遗漏 ZONE 选项,或者使用 use ZONE=ZONE='',那么默认区将被使用。

NetworkManager 程序将自动连接,相应地,分区将被设定。

5. 通过编辑防火墙配置文件来配置默认分区

以 root 用户身份,打开 /etc/firewalld/firewalld.conf 并按如下方式编辑文件:

 # default zone
 # The default zone used if an empty zone string is used.
 # Default: public
 DefaultZone=home

以 root 身份输入以下命令,以重新加载防火墙:

~]# firewall-cmd --reload

这样可以在不丢失状态信息的同时重新加载防火墙(TCP对话不会被中断)。

6. 使用命令行接口(CLI)设置默认分区

以 root 用户身份输入以下命令来设置默认分区,比如设置为公共区域:

~]# firewall-cmd --set-default-zone=public

这个更改将立刻生效,而且在此情况下不需要重新加载防火墙。

7. 用命令行接口打开防火墙的端口

通过以 root 身份输入以下命令,列出一个区域,例如 dmz 的所有开放端口:

~]# firewall-cmd --zone=dmz --list-ports

要将一个端口加入一个分区,例如,允许 TCP 的流量通过端口 8080 的 进入dmz分区,则以 root 身份输入以下命令:

~]# firewall-cmd --zone=dmz --add-port=8080/tcp

增加 --permanent 选项并重新加载防火墙,使之成为永久性设置。

要将一系列端口加入一个分区,比如允许从 5060 到 5061 的端口都接入公共分区,则以 root 身份输入以下命令:

~]# firewall-cmd --zone=public --add-port=5060-5061/udp

增加 --permanent 选项并重新加载防火墙,使之成为永久性设置。

8. 使用命令行接口(CLI)将一个服务加入到分区

要把一个服务加入到分区,例如允许 SMTP 接入工作区,则以 root 身份运行以下命令:

~]# firewall-cmd --zone=work --add-service=smtp

增加 --permanent 选项并重新加载防火墙,使之成为永久性设置。

9. 使用命令行接口(CLI)从一个分区移除服务

要从分区移除服务,比如从工作区移除 SMTP,则以 root 身份输入以下命令:

~]# firewall-cmd --zone=work --remove-service=smtp

增加 --permanent 可使这个更改在系统启动后被允许。如果用这个选项,并且希望立刻产生更改,以 root 身份输入以下命令,重新加载防火墙:

~]# firewall-cmd --reload

注意,这并不会中断已经建立的连接。如果您打算中断,您可以使用 --complete-reload 选项,但这不仅仅中断您已经移除的服务,还会中断所有已经建立的连接。

10. 通过编辑 XML 文件为一个分区增加服务

以 root 身份输入以下命令,查看默认分区文件:

~]# ls /usr/lib/firewalld/zones/block.xml  drop.xml      home.xml      public.xml   work.xml
dmz.xml    external.xml  internal.xml  trusted.xml

这些文件不能编辑。如果 /etc/firewalld/zones/ 目录里没有等效文件存在,它们被默认为可使用。

以 root 身份输入以下命令,查看从默认区被更改的分区文件:

~]# ls /etc/firewalld/zones/external.xml  public.xml  public.xml.old

在上述示例中,工作区域文件不存在。以 root 身份输入以下命令,加入工作区文件:

~]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

现在您可以在 /etc/firewalld/zones/ 目录中编辑该文件。如果您删除该文件,firewalld 将切换到使用 /usr/lib/firewalld/zones/ 里的默认文件。

要将一个服务加入分区,比如允许 SMTP 进入工作区,则以 root 权限编辑程序,编辑 /etc/firewalld/zones/work.xml 文件,使之包括如下行:

11. 通过编辑 XML 文件从一个分区中移除服务

编辑 XML 区域文件,必须以 root 权限运行编辑程序。以 root 身份输入以下命令,查看过去配置的分区的文件:

~]# ls /etc/firewalld/zones/external.xml  public.xml  work.xml

以 root 权限来编辑程序,编辑 /etc/firewalld/zones/work.xml 文件来移除如下行:

就能从一个分区移除服务,比如从工作区移除 SMTP。如果 work.xml 文件没有进行其他更改,它可以被移除,并且 firewalld 会在下一次重新加载或者系统启动之后使用默认的 /usr/lib/firewalld/zones/work.xml 配置。

12. 配置伪装 IP 地址

如果伪装 IP 不能为一个外部区域启用,则以 root 身份输入以下命令来检查:

~]# firewall-cmd --zone=external --query-masquerade

如果可用,屏幕会显示 yes,退出状态为 0; 否则,屏幕显示 no,退出状态为 1。如果省略zone ,默认区域将被使用。

以 root 身份输入以下命令,允许伪装IP:

~]# firewall-cmd --zone=external --add-masquerade

增加 --permanent 选项并重新加载防火墙,使之成为永久性设置。

以 root 身份输入以下命令,禁用伪装IP:

~]# firewall-cmd --zone=external --remove-masquerade

增加 --permanent 选项并重新加载防火墙,使之成为永久性设置。

13. 使用命令行接口(CLI)配置端口转发

要将进入网络的程序包从一个端口转发到一个替代端口或者地址,首先需以 root 身份输入以下命令来为一个区域(比如外部区域),运行伪装 IP 地址:

~]# firewall-cmd --zone=external --add-masquerade

以 root 身份输入以下命令,把程序包转发到一个本地端口,即相同系统上的一个端口:

~]# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753

在这个例子里,本来要送到 22 端口的程序包现在被转发到 3753 端口。源目的端口用 port 选项指定。这个选项可以是一个端口,或者一组端口范围并加上协议。如果指定协议的话,这个协议必须是 tcp 或 udp。这个新的本地端口,即流量被转发过去的端口或者端口范围,需用 toport 选项指定。增加 --permanent 选项并重新加载防火墙,可以使设置永久保存。

以 root 身份输入以下命令,不改变目的端口将程序包转发到另一个通常是内部地址的 IPv4 地址:

~]# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.55

在这个示例中,原本发往22端口的程序包现在被转发到相同的端口,地址则由 toaddr 提供。源目的地端口用 port 指定。这个选项可能是一个端口,或者一组端口范围并加上协议。如果被指定,协议必须是 tcp 或 udp 中的一个。这个新端口,即流量被转发过去的端口或者端口范围,用 toport 指定。增加 --permanent 选项并重新加载防火墙,使这个设定永久保存。

以 root 身份输入以下命令,把程序包转发到通常是内部地址的另一个 IPv4 地址:

~]# firewall-cmd --zone=external /
      --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.0.2.55

在这个示例中,原本发往 22 端口的程序包现在被转发到和 toaddr 选项一起给出地址的2055端口。源目的端口用 port 选项指定。这个选项可以是一个端口,或者打包了协议的端口范围。如果被指定,这个协议一定是 tcp 或 udp 中的一个。这个新的目的端口,即流量被转发过去的端口或者端口范围,用 toport 指定。增加 --permanent 选项并重新加载防火墙,使这个设置永久保留。

14. 用 XML 文件配置防火墙

firewalld 的配置设定存储在/etc/firewalld/ 目录下的 XML 文件里。切勿编辑 /usr/lib/firewalld/ 目录下的文件,因为它们是为默认设定准备的。查看和编辑这些 XML 文件,您需要 root 的用户许可。三个操作手册对 XML 文件进行了解说:

  • firewalld.icmptype(5) 操作手册 — 描述了 ICMP 过滤的 XML 配置文件。

  • firewalld.service(5) 操作手册 — 描述了 firewalld service 的 XML 配置文件。

  • firewalld.zone(5) 操作手册 — 描述了配置 firewalld 区域的 XML 配置文件。

用图形化工具和命令行工具可以对 XML 文件进行直接创建、编辑或者间接创建。组织可以把它们分配到 RPM 文件里,使管理和版本控制更容易。例如 Puppet 的工具可以分配这种配置文件。

15. 使用直接接口

通过 firewall-cmd 工具,可以使用 --direct 选项在运行时间里增加或者移除链。现提供一些例子,请查阅 firewall-cmd(1) 操作说明获取更多信息。

如果不熟悉 iptables ,使用直接接口非常危险,因为您可能无意间导致防火墙被***。

直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。这些规则不是永久性的,它们需要在每次通过 D-BU S从 firewalld 接到启动、重新启动和重新加载信息后运用。

16. 使用直接接口增加一个自定义规则

以 root 身份按照以下格式发布一个命令,增加一个自定义规则到 IN_public_allow 链里:

~]# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow \
      0 -m tcp -p tcp --dport 666 -j ACCEPT
17. 用直接接口移除一个自定义规则

以 root 用户身份按照以下格式发布一个命令,从 IN_public_allow 链移除一个自定义规则:

~]# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow \
      0 -m tcp -p tcp --dport 666 -j ACCEPT
18. 用直接接口列出自定义规则

以 root 用户身份按照以下格式发布一个命令,列出 IN_public_allow 链中的规则:

~]# firewall-cmd --direct --get-rules ipv4 filter IN_public_allow