千家信息网

Linux中如何配置firewalld规则

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,小编给大家分享一下Linux中如何配置firewalld规则,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!防火墙对于控制进出 Linux 服务器的网络流量至关重要。它能够定义一组防火
千家信息网最后更新 2025年01月20日Linux中如何配置firewalld规则

小编给大家分享一下Linux中如何配置firewalld规则,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

防火墙对于控制进出 Linux 服务器的网络流量至关重要。它能够定义一组防火墙规则来控制主机上的传入流量。

什么是FirewallD

"firewalld"是firewall daemon。它提供了一个动态管理的防火墙,带有一个非常强大的过滤系统,称为 Netfilter,由 Linux 内核提供。

FirewallD 使用zones和services的概念,而 iptables 使用chain和rules。与 iptables 相比,"FirewallD"提供了一种非常灵活的方式来处理防火墙管理。

每个zones都可以按照指定的标准进行配置,以根据你的要求接受或拒绝某些服务或端口,并且它可以与一个或多个网络接口相关联。默认区域为public区域。 [yijiFirewalld zones[/yiji] 以下命令列出 FirewallD 提供的zones。运行以下命令以列出zones:

[root@server1 ~]# firewall-cmd --get-zonesblock dmz drop external home internal public trusted work
  • block: 对于 IPv4,任何传入连接都会被 icmp-host-prohibited 消息拒绝,对于 IPv6 则是 icmp6-adm-prohibited。
  • **dmz:**应用于你的DMZ区域的计算机,这些计算机可公开访问,但对内部网络的访问受到限制。仅接受选定的传入连接。
  • **drop:**任何传入连接都将在没有任何通知的情况下被丢弃。只允许传出连接。
  • **external:**用于在系统中充当路由器时启用 NAT 伪装的外部网络。只允许选定的传入连接。
  • **home:**用于家庭网络。仅接受选定的传入连接。
  • **internal:**用于内部网络,网络上的其他系统通常是可信任的。仅接受选定的传入连接。
  • **public:**用于公共区域,仅接受选定的传入连接。
  • **trusted:**接受所有网络连接。
  • **work:**用于工作区域,同一网络上的其他计算机大多受信任。仅接受选定的传入连接。

Firewalld services

Firewalld 的service配置是预定义的服务。要列出可用的服务模块,请运行以下命令:

[root@server1 ~]# firewall-cmd --get-services

Firewalld的临时设置和永久设置

Firewalld 使用两个独立的配置,即临时设置和永久设置:

  • 临时设置: 临时设置不会在系统重启时保持不变。这意味着临时设置不会自动保存到永久设置中。
  • 永久设置: 永久设置会存储在配置文件中,将在每次重新启动时加载并成为新的临时设置。

启用、禁用Firewalld

Firewalld默认安装在Centos7/8中,下面命令时如何启用或者停用firewalld:

# 启用Firewalld[root@server1 ~]# systemctl start firewalld# 禁用Firewalld[root@server1 ~]# systemctl stop firewalld# 开机启动[root@server1 ~]# systemctl enable firewlald# 禁止开机启动[root@server1 ~]# systemctl disable firewalld

查看firewlald的状态:

[root@server1 ~]# systemctl status firewalld或者[root@server1 ~]# firewall-cmd --staterunning

zone管理

Firewalld 为每个区域提供不同级别的安全性,公共区域设置为默认区域。下面命令查看默认区域:

[root@server1 ~]# firewall-cmd --get-default-zonepublic

下面命令查看默认区域的配置:

[root@server1 ~]# firewall-cmd --list-allpublic (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ntp ssh ports: 2222/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

通过使用选项"–zone"和"–change-interface"的组合,可以轻松更改zone中的接口。例如,要将"ens33"接口分配给"home"区域,请运行以下命令:

[root@server1 ~]# firewall-cmd --zone=home --change-interface=ens33success[root@server1 ~]# firewall-cmd --zone=home --list-allhome (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

要查看所有活动的zone,请运行以下命令:

[root@server1 ~]# firewall-cmd --get-active-zoneshome interfaces: ens33public interfaces: ens160

要更改默认zone,请使用以下命令。例如,要将默认区域更改为 home,请运行以下命令:

[root@server1 ~]# firewall-cmd --set-default-zone=home

要找出与 ens160 接口关联的区域,请运行以下命令:

[root@server1 ~]# firewall-cmd --get-zone-of-interface=ens160public

要创建新zone,请使用以下命令。例如,要创建一个名为"test"的新区域,并永久生效,请运行:

[root@server1 ~]# firewall-cmd --permanent --new-zone=testsuccess[root@server1 ~]# firewall-cmd --reloadsuccess

开放和关闭端口

打开特定端口允许用户从外部访问系统,这代表了安全风险。因此,仅在必要时为某些服务打开所需的端口。

要获取当前区域中开放的端口列表,请运行以下命令:

[root@server1 ~]# firewall-cmd --list-ports2222/tcp

下面实例将特定端口永久添加到列表中:

[root@server1 ~]# firewall-cmd --permanent --add-port=8080/tcpsuccess[root@server1 ~]# firewall-cmd --reloadsuccess

同样,要删除特定端口,请运行以下命令:

[root@server1 ~]# firewall-cmd --remove-port=8080/tcpsuccess

可以使用以下命令每次确认端口是否已添加或删除:

[root@server1 ~]# firewall-cmd --list-ports

如果要为特定区域开放端口,例如,以下命令将为 home 区域打开端口 80:

[root@server1 ~]# firewall-cmd --permanent --zone=home --add-port=80/tcpsuccess[root@server1 ~]# firewall-cmd --reloadsuccess

同样,要从开放的端口中删除特定区域的特定端口,请运行:

[root@server1 ~]# firewall-cmd --zone=home --remove-port=80/tcpsuccess

添加和移除服务类型

Firewalld 服务配置是预定义的服务,如果启用了服务,则会自动加载。使用预定义服务使用户可以更轻松地启用和禁用对服务的访问。

预定义的服务配置文件位于/usr/lib/firewalld/services目录中。

Firewalld的服务,你不需要记住任何端口,并且可以一次性允许所有端口。

例如,执行以下命令允许 samba 服务。samba 服务需要启用以下一组端口:"139/tcp 和 445/tcp"以及"137/udp 和 138/udp"。

添加’samba’服务后,所有端口都会同时激活,因为所有端口信息都在samba服务配置中。下面是Firewalld中预定义的samba的服务配置文件:

[root@server1 ~]# cat /usr/lib/firewalld/services/samba.xml

下面是在home区域放行samba服务:

[root@server1 ~]# firewall-cmd --permanent --zone=home --add-service=sambasuccess[root@server1 ~]# firewall-cmd --reloadsuccess

要获取有关 samba 服务的更多信息,请运行以下命令:

[root@server1 ~]# firewall-cmd --info-service=sambasamba ports: 137/udp 138/udp 139/tcp 445/tcp protocols: source-ports: modules: netbios-ns destination:

要一次添加多个服务,请执行以下命令。例如,要添加 http 和 https 服务,请运行以下命令:

[root@server1 ~]# firewall-cmd --permanent --zone=home --add-service={http,https}success[root@server1 ~]# firewall-cmd --reloadsuccess

设置端口转发

端口转发是一种将任何传入网络流量从一个端口转发到另一个内部端口或另一台机器上的外部端口的方法。

注意:端口转发必须开启IP伪装。使用下面显示的命令为external区域启用伪装。

[root@server1 ~]# firewall-cmd --permanent --zone=external --add-masquerade

要检查是否为区域启用了 IP 伪装,请运行以下命令:

[root@server1 ~]# firewall-cmd --zone=external --query-masqueradeyes

显示yes,表示已经开启伪装。

要将端口重定向到同一系统上的另一个端口,例如:将80端口的所有数据包重定向到8080端口:

[root@server1 ~]# firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080success

如果要将流量转发到另一台服务器,例如:将所有 80 端口的数据包重定向到 IP 为 10.0.0.75 的服务器上的 8080 端口:

[root@server1 ~]# firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.0.75success

例如,要允许来自特定源地址的流量,仅允许从特定子网连接到服务器,请运行以下命令:

[root@server1 ~]# firewall-cmd --permanent --zone=home --add-source=192.168.1.0/24success

富规则设置

富规则允许使用易于理解的命令创建更复杂的防火墙规则,但丰富的规则很难记住,可以查看手册man firewalld.richlanguage并找到示例。

富规则的一般规则结构如下:rule [source] [destination] service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port [log] [audit] [accept|reject|drop|mark]

要允许来自地址 192.168.0.0/24 的访问,请运行以下命令:

[root@server1 ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept'success

要允许来自地址 192.168.0.0/24 的连接访问 ssh 服务,请运行以下命令:

[root@server1 ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept'success

要拒绝来自192.168.10.0/24的流量访问ssh服务,请运行以下命令:

[root@server1 ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port=22 protocol=tcp reject'success

要删除任何富规则,请使用--remove-rich-rule选项,下面使用--list-rich-rules列出富规则,然后删除掉富规则:

[root@server1 ~]# firewall-cmd --zone=public --list-rich-rulesrule family="ipv4" source address="192.168.0.0/24" acceptrule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" acceptrule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" reject[root@server1 ~]# firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept'success[root@server1 ~]# firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept'success[root@server1 ~]# firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" reject'success

Firewalld的Direct规则

Direct规则类似于 iptables 命令,对于熟悉 iptables 命令的用户很有用。或者,您可以编辑/etc/firewalld/direct.xml文件中的规则并重新加载防火墙以激活这些规则。Direct规则主要由服务或应用程序用来添加特定的防火墙规则。

以下Direct规则将在服务器上打开端口 8080:

[root@server1 ~]# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 8081 -j ACCEPTsuccess[root@server1 ~]# firewall-cmd --reloadsuccess

要列出当前区域中的Direct规则,请运行:

[root@server1 ~]# firewall-cmd --direct --get-all-rulesipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPTipv4 filter INPUT 0 -p tcp --dport 8081 -j ACCEPT

使用下面命令删除Direct规则:

[root@server1 ~]# firewall-cmd --direct --get-all-rulesipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPTipv4 filter INPUT 0 -p tcp --dport 8081 -j ACCEPT[root@server1 ~]# firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPTsuccess[root@server1 ~]# firewall-cmd --reloadsuccess

如何清空一个表的链?下面是语法和实例:

firewall-cmd --direct --remove-rules ipv4 [table] [chain][root@server1 ~]# firewall-cmd --permanent --direct --remove-rules ipv4 filter INPUTsuccess[root@server1 ~]# firewall-cmd --reloadsuccess[root@server1 ~]# firewall-cmd --direct --get-all-rules

看完了这篇文章,相信你对"Linux中如何配置firewalld规则"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

命令 端口 服务 区域 规则 运行 配置 网络 防火墙 永久 防火 流量 系统 服务器 接口 文件 服务配置 开放 地址 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 树莓派实现视频服务器 机关单位网络安全宣传总结 数据库权限授予修改自己 oracle数据库安全标准 深圳软件开发项目经理工资 地理空间数据库的元数据 新科技下互联网经济 少年三国志服务器刷新时间 学校网络安全与信息安全内容 巨杉数据库 discuz修改数据库配置 拳头的账号可以登陆每个服务器吗 软件开发需要学什么书 海洋激光雷达仿真软件开发 计算机网络技术班徽素材 db2数据库脚本执行命令 因特网中的域名服务器 上海制造软件开发怎么用 杭州学习软件开发公司哪家强 网络安全与执法专业的设立 linux 服务器更新 河南网络服务器租用商虚拟主机 机关单位网络安全宣传总结 朱啸虎互联网科技企业 机关单位网络安全防护措施 服务器安全防护技巧 discuz修改数据库配置 usdt担保软件开发 服务器强制重启会怎么样 十三月 连接服务器失败
0