如何在 Linux 中配置 firewalld 规则

news2025/1/22 16:01:12

什么是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-zones
block 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

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则

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 --state
running

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则

zone管理

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

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

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

[root@server1 ~]# firewall-cmd --list-all
public (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: 

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

[root@server1 ~]# firewall-cmd --zone=home --change-interface=ens33
success
[root@server1 ~]# firewall-cmd --zone=home --list-all
home (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: 

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

[root@server1 ~]# firewall-cmd --get-active-zones 
home
  interfaces: ens33
public
  interfaces: ens160

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

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

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

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

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

[root@server1 ~]# firewall-cmd --permanent --new-zone=test
success
[root@server1 ~]# firewall-cmd --reload
success

开放和关闭端口

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

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

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

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

[root@server1 ~]# firewall-cmd --permanent --add-port=8080/tcp
success
[root@server1 ~]# firewall-cmd --reload
success

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

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

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

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

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

[root@server1 ~]# firewall-cmd --permanent --zone=home --add-port=80/tcp
success
[root@server1 ~]# firewall-cmd --reload
success

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

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

添加和移除服务类型

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 

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

[root@server1 ~]# firewall-cmd --permanent --zone=home --add-service=samba
success
[root@server1 ~]# firewall-cmd --reload
success

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

[root@server1 ~]# firewall-cmd --info-service=samba
samba
  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 --reload
success

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则

设置端口转发

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

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

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

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

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

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

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

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

如果要将流量转发到另一台服务器,例如:将所有 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.75
success

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

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

富规则设置

富规则允许使用易于理解的命令创建更复杂的防火墙规则,但丰富的规则很难记住,可以查看手册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

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


要允许来自地址 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

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


要拒绝来自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

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

[root@server1 ~]# firewall-cmd --zone=public --list-rich-rules 
rule family="ipv4" source address="192.168.0.0/24" accept
rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept
rule 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

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则

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 ACCEPT
success
[root@server1 ~]# firewall-cmd --reload
success

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

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

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

[root@server1 ~]# firewall-cmd --direct --get-all-rules 
ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT
ipv4 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 ACCEPT
success
[root@server1 ~]# firewall-cmd --reload
success

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则


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

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

如何在 Linux 中配置 firewalld 规则如何在 Linux 中配置 firewalld 规则

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

22款奔驰S450L升级主动式氛围灯 浪漫婉转的氛围感

主动式氛围灯有263个可多色渐变的LED光源,营造出全情沉浸的动态光影氛围。结合智能驾驶辅助系统,可在转向或检测到危险时,予以红色环境光提示,令光影艺术彰显智能魅力。配件有6个氛围灯,1个电脑模块。 1、气候&#xf…

Spring系列学习四、Spring数据访问

Spring数据访问 一、Spring中的JDBC模板介绍1、新建SpringBoot应用2、引入依赖:3、配置数据库连接,注入dbcTemplate对象,执行查询:4,测试验证: 二、整合MyBatis Plus1,在你的项目中添加MyBatis …

IP地址的四大类型:动态IP、固定IP、实体IP、虚拟IP的区别与应用

在网络通信中,IP地址是设备在互联网上唯一标识的关键元素。动态IP、固定IP、实体IP和虚拟IP是四种不同类型的IP地址,它们各自具有独特的特点和应用场景。 1. 动态IP地址: 动态IP地址是由Internet Service Provider(ISP&#xff…

【嵌入式开发学习必备专栏】

文章目录 嵌入式开发学习必备专栏1.1 ARM Coresight SoC-400/SoC-600 专栏导读目录1.1.1 Performance Profiling1.1.2 ARM Coresight Debug 工具系列1.1.2.1 ARM DS5 系列1.1.2.2 劳特巴赫 Trace32 系列1.1.2.3 JTAG OpenOCD 系列 1.2 ARM Cache 专栏1.3 ARM AMBA Bus 专栏1.3.…

vue3 组件之间传值

vue3 组件之间传值 非常好,为啥突然开这样一篇博文,首先是因为 vue3 是未来发展的趋势。其次,vue 官方已经确认,将于2023年最后一天停止对 vue2 项目的维护,这个是官方发出的通知,并且呢,尤雨溪…

FPGA设计时序约束十四、Set_External_Delay

一、序言 在时序约束中对clock的约束还存在一种特殊的延时约束set external delay。set external delay如字面含义,设置外部的时延值,但这个外部时延主要是指反馈时延,即信号从FPGA的output端口输出后经过外部电路回到输入端口的时延值。 二…

JavaSE语法之十二:Object类

文章目录 一、概念二、获取对象信息三、对象比较equals方法四、hashcode方法 一、概念 Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的,默认会继承Object父类,即所有的类的对象都可以使用Object的引用进行…

前端基础(三十七):属性结构数据进行关键字筛选

效果 核心源码 type MenuItem {label: string;key: string | number;icon?: React.ReactNode;children?: MenuItem[];type?: group; }function filterTreeData(tree: MenuItem[], keyword: string): MenuItem[] {return tree.filter((node: MenuItem) > {if (node.labe…

macOS系统打开Linux的方法

第一步 按下[command空格键]调出搜索框,输入“终端”,打开图上第一个 第二步 如图先输入"sudo -i",敲回车键,再输入开机密码,再敲回车键就可以打开。注意:这里的密码输入不会显示在页面。 如果要…

西城微科|打气泵芯片方案SIC8833

SIC8833作为一款高性能的打气泵方案芯片,这款芯片是一个带24bitADC的8位RISC MCU,内置8k16位OTP程序存储器。具体24位双向I/O口的特性,广泛应用于气压检测和精密测量及控制系统,能满足用户的不同需求和应用场景。 以下是打气泵方案…

Observer观察者模式(组件协作)

观察者模式(组件协作) 链接:观察者模式实例代码 解析 目的 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象&#xff0…

关于Sql数据库中去掉字段的所有空格

这篇文章主要介绍了Sql数据库中去掉字段的所有空格小结篇,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 − Sql数据库中去掉字段的所有空格 字符前的空格,用ltrim(string) 字符…

关于“Python”的核心知识点整理大全51

目录 17.2.2 添加自定义工具提示 bar_descriptions.py 17.2.3 根据数据绘图 python_repos.py 17.2.4 在图表中添加可单击的链接 python_repos.py 17.3 Hacker News API hn_submissions.py 17.4 小结 往期快速传送门👆(在文章最后)&a…

ES6语法特性(二)迭代器 生成器 Promise介绍

迭代器 生成器 Promise介绍 1. 迭代器 迭代器就是为实现对不同集合进行统一遍历操作的一种机制,只要给需要遍历的数据结构部署Iterator接口,通过调用该接口,或者使用消耗该接口的API实现遍历操作。   ES6为迭代器引入了一个隐式的标准化接…

鸿蒙4.0实战教学—基础ArkTS(简易视频播放器)

构建主界面 主界面由视频轮播模块和多个视频列表模块组成,效果图如图: VideoData.ets中定义的视频轮播图数组SWIPER_VIDEOS和视频列表图片数组HORIZONTAL_VIDEOS。 // VideoData.ets import { HorizontalVideoItem } from ./HorizontalVideoItem; impo…

[RoarCTF 2019]Easy Java(java web)

题目 页面如下 页面长得像sql注入 点击help看一下 这里需要了解java web目录结构 WEB INF:Java的web应用安全目录; 此外如果想在页面访问WEB-INF应用里面的文件,必须要通过web.xml进行相应的映射才能访问; WEB-INF是Java Web应用程序中的一…

Java连接Mysql报错:javax.net.ssl.SSLException: Received fatal alert: internal_error

大致报错日志如下: The last packet successfully received from the server was 11 milliseconds ago. The last packet sent successfully to the server was 10 milliseconds ago.at sun.reflect.GeneratedConstructorAccessor275.newInstance(Unknown Source)…

Collections

Collections Collections四种对集合进行排序的方式 方法名说明public static <T extends Comparable<? super T>> void sort (List<T> list)排序public static void reverse(List<?> list)逆序public static void shuffle(List<?> list)随机…

scanf函数返回值占位符详解,%*,%[]的应用

前言 scanf函数可以说是我们一开始就会接触的函数了&#xff0c;但在最近复习时我又找到而来一些之前不甚了解或是块要遗忘的知识&#xff0c;特作此篇。 一.返回值 我们之前提到了scanf返回值被忽略的问题&#xff1a; scanf函数返回值被忽略-CSDN博客 那么scanf的返回值…

Unity JSON编码解码之LitJson 深度剖析

把LitJson的代码库放入到项目中&#xff0c;如图所示:JSON在游戏开发中是一种序列化/反序列化常用的技术&#xff0c;把游戏相关的数据,如地图组成,通过JSON编码&#xff0c;序列化成JSON文本&#xff0c;传输或存储, 要使用的时候再通过JSON技术把文本解析成数据对象&#xff…