firewall-cmd命令
使用firewall-cmd管理firewalld
什么是firewall-cmd
除图形工具外,还可以使用命令行实用程序firewall-cmd
管理防火墙配置规则。以下是一些基本命令的快速概述。
firewall-cmd
是Firewalld应用程序的一部分,默认情况下已安装。您可以通过从命令行执行以下命令来验证安装:
[root@centos07b ~]# firewall-cmd --version 0.3.9
从CentOS 7服务器获得的上述输出中,我们可以看到版本是0.3.9
。
如果您随时需要帮助,则可以执行以下命令:firewall-cmd --help
将在控制台/终端会话中显示命令和选项的概述。
永久和临时更改规则和设置
在查看firewall-cmd工具可用的某些选项之前,我们需要了解以下内容:
为了使命令永久或持久,需要在命令中添加--permanent选项。
重要的是要注意,这意味着更改将是永久的,但更改仅在重新加载防火墙或系统重新启动后才会生效。
不使用--permanent选项执行的命令将立即生效。这些更改仅在下一次重新加载防火墙,重新引导系统之前才有效。重新加载防火墙时,您将放弃所做的任何临时更改。
查看防火墙的当前状态
要查看防火墙的当前状态,请执行以下命令:firewall-cmd --state
[root@centos07b ~]# firewall-cmd --state running
查看活动区域和接口
要查看活动区域的列表以及当前分配给该区域的接口的列表,请执行以下命令:firewall-cmd --get-active-zones
[root@centos07b ~]# firewall-cmd --get-active-zones public interfaces: enp0s3
接口的区域查找
如果需要确定当前将特定接口分配给哪个区域,请执行以下命令:
[root@centos07b ~]# firewall-cmd --get-zone-of-interface=enp0s3 public
如果不确定接口名称,则可以执行以下命令来标识名称:nmcli d
[root@centos07b ~]# nmcli d DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected enp0s3 lo loopback unmanaged --
找出分配给区域的所有接口
要显示分配给区域(例如公共区域)的所有接口,请执行以下命令:
firewall-cmd --zone = public --list-interfaces
该信息是从NetworkManager检索的,并且仅显示接口和非连接。
[root@centos07b ~]# firewall-cmd --zone=public --list-interfaces enp0s3
查看区域的所有设置
要查看指定区域的所有设置,请执行以下命令:
[root@centos07b ~]# firewall-cmd --zone=public --list-all public (default, active) interfaces: enp0s3 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
查看当前的活动服务
要查看当前活动的服务,请执行以下命令:
[root@centos07b ~]# firewall-cmd --get-service amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
查看重新加载后将处于活动状态的服务
要查看在下一次防火墙重新加载或系统重新启动后将处于活动状态的服务,请执行以下命令:
[root@centos07b ~]# firewall-cmd --get-service --permanent amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
激活紧急模式-丢弃所有数据包
要开始丢弃所有传入和传出数据包,请执行以下命令:
[root@centos07b ~]# firewall-cmd --panic-on success
注意:如果从远程终端执行此命令,请小心,因为这将失去输入命令的能力!闲置一段时间后,活动连接将终止。此时间长度取决于设置的各个会话超时值。
停用紧急模式-再次允许流量
要再次允许流量通过,请执行以下命令以禁用紧急模式:
[root@centos07b ~]# firewall-cmd --panic-off success
关闭紧急模式后,取决于启用紧急模式的时间长度,可以恢复连接。
显示紧急模式的当前状态
要检查是否将紧急模式设置为on
或off
,请执行以下命令:
[root@centos07b ~]# firewall-cmd --query-panic no
重新加载防火墙而不会中断
您可以通过执行以下命令来重新加载防火墙而不会中断用户的连接:
[root@centos07b ~]# firewall-cmd --reload success
重新加载防火墙并放弃状态
仅当防火墙遇到严重问题时,才应运行以下命令:
[root@centos07b ~]# firewall-cmd --complete-reload success
将接口添加到区域zone
要使用firewall-cmd命令将接口添加到指定区域,请执行以下命令:
firewall-cmd --zone = public --add-interface = interface_name
下面将接口enp0s3
添加到公共区域。
[root@centos07b ~]# firewall-cmd --zone=public --add-interface=enp0s3
要使此设置永久生效,请添加--permanent选项并重新加载防火墙。
设置默认区域
要将默认区域设置为public
,请执行以下命令:
[root@centos07b ~]# firewall-cmd --set-default-zone=public
显示开放端口
要列出指定区域上的所有打开的端口,请执行以下命令:
[root@centos07b ~]# firewall-cmd --zone=public --list-ports
将端口添加到区域
示例:允许通过端口3181到公共区域的TCP通信:
[root@centos07b ~]# firewall-cmd --zone=public --add-port=3181/tcp success [root@centos07b ~]# firewall-cmd --zone=public --list-ports 3181/tcp
通过使用list port命令,我们可以验证更改是否成功。
要使此更改成为永久更改,请添加--permanent
选项并重新加载防火墙。
添加一系列端口
从命令行将一定范围的端口添加到指定区域
示例:允许TCP流量通过公用区域中的端口3182-3185:
[root@centos07b ~]# firewall-cmd --zone=public --add-port=3182-3185/tcp success [root@centos07b ~]# firewall-cmd --zone=public --list-ports 3181/tcp 3182-3185/tcp
通过使用list port命令,我们可以验证更改是否成功。
要使此更改成为永久更改,请添加--permanent
选项并重新加载防火墙。
将服务添加到区域
要将服务添加到区域,请执行以下命令:firewall-cmd --zone = zone --add-service = service
示例:将服务smtp添加到工作区:
[root@centos07b ~]# firewall-cmd --zone=work --add-service=smtp success
为了使它成为永久更改,您需要指定--permanent选项,然后重新加载防火墙。
从区域中删除服务
要从指定区域中删除指定服务,请执行以下命令:
firewall-cmd --zone = zone --remove-service = smtp
示例:从区域工作中删除服务smtp:
[root@centos07b ~]# firewall-cmd --zone=work --remove-service=smtp success
为了使它成为永久更改,您需要指定--permanent选项,然后重新加载防火墙。
配置IP地址伪装
要检查是否已启用IP伪装,可以执行以下命令:
firewall-cmd --zone = external --query-masquerade
[root@centos07b ~]# firewall-cmd --zone=external --query-masquerade yes
如果启用了IP伪装,将显示答复是
,否则将显示答复否
。如果未指定区域,则使用默认区域。
[root@centos07b ~]# firewall-cmd --query-masquerade no
启用指定区域的IP伪装
要为区域启用IP伪装,请执行以下命令:firewall-cmd --zone = zone --add-masquerade
[root@centos07b ~]# firewall-cmd --zone=external --add-masquerade success
要使上述设置永久生效,请添加--permanent选项并重新加载防火墙。
禁用指定区域的IP伪装
要禁用区域的IP伪装,请执行以下命令:firewall-cmd --zone = zone --remove-masquerade
[root@centos07b ~]# firewall-cmd --zone=external --remove-masquerade success
要使上述设置永久生效,请添加--permanent选项并重新加载防火墙。
从命令行配置端口转发
要将入站网络流量数据包从一个端口转发到备用端口或地址,请首先启用对区域的伪装IP地址。
# firewall-cmd --zone=zone --add-masquerade
要本地转发(到同一系统上的端口),请执行以下命令:
[root@centos07b ~]# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2468 success
在上面的示例中,打算将端口22的数据包转发到端口2468。原始目标端口由port选项指定。此选项可以是端口,也可以是端口范围以及指定的协议。
如果指定了协议,则必须为tcp
或udp
。使用toport选项指定新的本地端口或将流量转发到的本地端口范围。要使这些设置永久生效,请添加--permanent选项并重新加载防火墙。
要将数据包转发到内部地址而不更改目标端口,请执行以下命令:
# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.0.88
在上面的示例中,打算将端口22的数据包转发到指定IP地址(192.168.0.88)的同一端口,该地址已传递到toaddr参数。原始目标端口由port参数指定。该选项可以是端口,也可以是端口范围以及协议。如果指定了协议,则必须为tcp
或udp
。
要使上述设置永久生效,请添加--permanent选项并重新加载防火墙。
要将数据包转发到另一个IPv4地址(通常是内部地址)的另一个端口,请执行以下命令:
# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3579:toaddr=192.168.0.88
在上面的示例中,原本打算发送给端口22的数据包现在被发送到IP地址为192.168.0.88的端口3579。 要使上述设置永久生效,请添加--permanent选项并重新加载防火墙。