用命令行接口(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