firewall-cmd命令

时间:2019-04-29 03:17:38  来源:igfitidea点击:

使用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

关闭紧急模式后,取决于启用紧急模式的时间长度,可以恢复连接。

显示紧急模式的当前状态

要检查是否将紧急模式设置为onoff,请执行以下命令:

[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选项指定。此选项可以是端口,也可以是端口范围以及指定的协议。

如果指定了协议,则必须为tcpudp。使用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参数指定。该选项可以是端口,也可以是端口范围以及协议。如果指定了协议,则必须为tcpudp

要使上述设置永久生效,请添加--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选项并重新加载防火墙。