Linux firewall-cmd命令介绍
firewall-cmd是Linux中用来管理firewalld服务的命令行工具。firewalld是一种动态的防火墙管理器,它支持网络/防火墙区域,以及临时和永久的规则。firewall-cmd可以用来查询、添加、修改或删除firewalld的配置,以及重新加载或重启firewalld服务。firewall-cmd命令的全称是firewall command,它是firewalld的主要接口。
Linux firewall-cmd命令适用的Linux版本
firewall-cmd命令适用于使用firewalld服务的Linux发行版,如Red Hat Enterprise Linux 7或更高版本,CentOS 7或更高版本,Fedora 18或更高版本,以及其他基于这些发行版的Linux系统。如果你的Linux系统没有安装firewalld服务,你可以使用以下命令来安装:
- 对于基于yum的系统(如CentOS 7),使用:
[linux@bashcommandnotfound.cn ~]$ sudo yum install firewalld
- 对于基于dnf的系统(如Fedora 22或更高版本,CentOS 8),使用:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install firewalld
- 对于基于apt的系统(如Ubuntu,Debian),使用:
[linux@bashcommandnotfound.cn ~]$ sudo apt install firewalld
安装完成后,你可以使用以下命令来启动、停止、重启或查看firewalld服务的状态:
[linux@bashcommandnotfound.cn ~]$ sudo systemctl start firewalld
[linux@bashcommandnotfound.cn ~]$ sudo systemctl stop firewalld
[linux@bashcommandnotfound.cn ~]$ sudo systemctl restart firewalld
[linux@bashcommandnotfound.cn ~]$ sudo systemctl status firewalld
Linux firewall-cmd命令的基本语法
firewall-cmd命令的基本语法格式如下:
firewall-cmd [选项] [参数]
其中,选项可以用来指定firewall-cmd的运行模式,参数可以用来指定firewall-cmd的操作对象或内容。选项和参数之间可以用空格分隔,也可以用等号连接。例如:
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone public --add-service http
上面两条命令的效果是一样的,都是在public区域添加http服务。
Linux firewall-cmd命令的常用选项或参数说明
firewall-cmd命令有很多选项和参数,这里只列举一些最常用的。更多的选项和参数可以参考firewall-cmd的手册页或官方文档。
选项或参数 | 说明 |
---|---|
--help | 显示firewall-cmd的帮助信息 |
--version | 显示firewall-cmd的版本信息 |
--state | 显示firewalld服务的状态,如果运行则显示running,否则显示not running |
--reload | 重新加载firewalld的配置,不会中断现有的连接 |
--complete-reload | 完全重新加载firewalld的配置,会中断现有的连接 |
--zone= | 指定操作的防火墙区域,如果不指定,则使用默认区域 |
--get-default-zone | 显示默认的防火墙区域 |
--set-default-zone= | 设置默认的防火墙区域 |
--get-active-zones | 显示当前活动的防火墙区域及其接口 |
--list-all-zones | 显示所有的防火墙区域及其配置 |
--new-zone= | 创建一个新的防火墙区域 |
--delete-zone= | 删除一个已有的防火墙区域 |
--change-zone= | 改变一个接口所属的防火墙区域 |
--add-service= | 在指定的防火墙区域添加一个服务 |
--remove-service= | 在指定的防火墙区域删除一个服务 |
--list-services | 显示指定的防火墙区域允许的服务 |
--add-port= | 在指定的防火墙区域添加一个端口 |
--remove-port= | 在指定的防火墙区域删除一个端口 |
--list-ports | 显示指定的防火墙区域允许的端口 |
--add-rich-rule= | 在指定的防火墙区域添加一个富规则 |
--remove-rich-rule= | 在指定的防火墙区域删除一个富规则 |
--list-rich-rules | 显示指定的防火墙区域的富规则 |
--permanent | 指定操作的是永久的配置,而不是临时的配置 |
Linux firewall-cmd命令的实例
以下是一些使用firewall-cmd命令的实例,你可以根据自己的需求来修改或尝试。
实例1:查看firewalld服务的状态
如果你想知道firewalld服务是否在运行,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --state
running
如果输出是running,说明firewalld服务正在运行,你可以继续使用firewall-cmd命令来管理防火墙。如果输出是not running,说明firewalld服务没有运行,你需要先启动它,或者检查是否安装了firewalld服务。
实例2:查看默认的防火墙区域
如果你想知道你的系统使用的是哪个防火墙区域作为默认的区域,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --get-default-zone
public
如果输出是public,说明你的系统使用的是public区域作为默认的区域。public区域是firewalld预定义的一个区域,它允许一些常见的服务,如ssh,dhcpv6-client等。你可以根据你的需要来修改默认的区域,或者为不同的接口指定不同的区域。
实例3:设置默认的防火墙区域
如果你想改变你的系统使用的默认的防火墙区域,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --set-default-zone=home
success
如果输出是success,说明你已经成功地将默认的防火墙区域设置为home。home区域是firewalld预定义的一个区域,它允许一些常见的服务,如ssh,dhcpv6-client,mdns,samba-client,ipp-client等。你可以根据你的需要来选择合适的区域作为默认的区域,或者为不同的接口指定不同的区域。
实例4:查看当前活动的防火墙区域及其接口
如果你想知道你的系统当前有哪些防火墙区域是活动的,以及它们分别包含哪些接口,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --get-active-zones
home
interfaces: enp0s3
public
interfaces: enp0s8
如果输出是类似上面的内容,说明你的系统当前有两个防火墙。
实例5:查看所有的防火墙区域及其配置
如果你想查看你的系统有哪些防火墙区域,以及它们的配置,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz
...
drop
...
external
...
home
...
internal
...
public
target: default
icmp-block-inversion: no
interfaces: enp0s8
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted
...
work
...
如果输出是类似上面的内容,说明你的系统有九个防火墙区域,它们分别是block,dmz,drop,external,home,internal,public,trusted和work。每个区域的配置包括目标,icmp反转,接口,源,服务,端口,协议,伪装,转发端口,源端口,icmp阻断和富规则。你可以根据你的需要来修改或添加防火墙区域及其配置。
实例6:在指定的防火墙区域添加一个服务
如果你想在指定的防火墙区域添加一个服务,比如在public区域添加http服务,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --zone=public --add-service=http
success
如果输出是success,说明你已经成功地在public区域添加了http服务。这样,你就可以在public区域的接口上访问http服务了。如果你想让这个操作永久生效,你需要加上--permanent选项,否则,这个操作只是临时的,重启firewalld服务后会失效。
实例7:在指定的防火墙区域删除一个服务
如果你想在指定的防火墙区域删除一个服务,比如在public区域删除http服务,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --zone=public --remove-service=http
success
如果输出是success,说明你已经成功地在public区域删除了http服务。这样,你就不能在public区域的接口上访问http服务了。如果你想让这个操作永久生效,你需要加上--permanent选项,否则,这个操作只是临时的,重启firewalld服务后会恢复。
实例8:显示指定的防火墙区域允许的服务
如果你想显示指定的防火墙区域允许的服务,比如显示public区域允许的服务,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --zone=public --list-services
dhcpv6-client ssh
如果输出是类似上面的内容,说明public区域允许的服务有dhcpv6-client和ssh。你可以根据你的需要来添加或删除服务,或者查看其他区域允许的服务。
实例9:在指定的防火墙区域添加一个端口
如果你想在指定的防火墙区域添加一个端口,比如在public区域添加8080/tcp端口,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --zone=public --add-port=8080/tcp
success
[linux@bashcommandnotfound.cn ~]$ sudo firewall-cmd --reload
如果输出是success,说明你已经成功地在public区域添加了8080/tcp端口。这样,你就可以在public区域的接口上访问8080/tcp端口了。如果你想让这个操作永久生效,你需要加上--permanent选项,否则,这个操作只是临时的,重启firewalld服务后会失效。
实例10:在指定的防火墙区域删除一个端口
如果你想在指定的防火墙区域删除一个端口,比如在public区域删除8080/tcp端口,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --zone=public --remove-port=8080/tcp
success
[linux@bashcommandnotfound.cn ~]$ sudo firewall-cmd --reload
如果输出是success,说明你已经成功地在public区域删除了8080/tcp端口。这样,你就不能在public区域的接口上访问8080/tcp端口了。如果你想让这个操作永久生效,你需要加上--permanent选项,否则,这个操作只是临时的,重启firewalld服务后会恢复。
实例11:显示指定的防火墙区域允许的端口
如果你想显示指定的防火墙区域允许的端口,比如显示public区域允许的端口,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ firewall-cmd --zone=public --list-ports
8080/tcp
如果输出是类似上面的内容,说明public区域允许的端口有8080/tcp。你可以根据你的需要来添加或删除端口,或者查看其他区域允许的端口。
实例12:在指定的防火墙区域添加一个富规则
如果你想在指定的防火墙区域添加一个富规则,比如在public区域添加一个允许192.168.1.100访问22/tcp端口的富规则,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
[linux@bashcommandnotfound.cn ~]$ sudo firewall-cmd --reload
上述命令会在public区域永久地添加一个富规则,允许源IP地址为192.168.1.100的主机访问22/tcp端口。最后必须执行firewall-cmd --reload
来使富规则生效。
Firewall-cmd命令的注意事项
- 只有root用户或者使用sudo的权限才能执行此命令;
- firewall-cmd --reload,重载配置不需要重启firewalld;
- bash: firewalld: command not found,表明未安装firewalld,可按照上述方式进行安装;
评论区