侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux firewall-cmd命令教程:优雅的设置防火墙以及规则(附案例详解和注意事项)

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命令的注意事项

  1. 只有root用户或者使用sudo的权限才能执行此命令;
  2. firewall-cmd --reload,重载配置不需要重启firewalld;
  3. bash: firewalld: command not found,表明未安装firewalld,可按照上述方式进行安装;

Firewall-cmd相关命令

  1. iptables命令:Linux下的防火墙配置工具.
  2. ufw命令:Ubuntu系统下默认的防火墙配置工具.
0

评论区