首页 > 系统相关 >红帽系的linux系统中防火墙--firewalld

红帽系的linux系统中防火墙--firewalld

时间:2024-08-29 17:15:53浏览次数:9  
标签:-- cmd firewalld firewall add 区域 linux port

firewalld简介

  • firewalld是Red Hat系列Linux发行版(如Fedora、CentOS等)引入的一种动态防火墙管理工具,它充当了 Linux 内核的 Netfilter 框架的前端,具体防火墙执行是由内核的netfilter来执行的。
  • firewalld提供了一个基于区域(zone)和服务(service)的简化配置界面,使得管理防火墙规则更加容易。
  • 它支持动态更新防火墙规则,可以在运行时添加、删除、修改规则,而不需要重新加载整个防火墙配置。
  • firewalld的配置文件位于 /etc/firewalld/ 目录下,主要是一些XML格式的文件,如 zones、services、richrules 等。

安装

firewalld是红帽系的linux系统的默认防火墙,是默认安装的,一般不需要手动安装的。

yum install firewalld firewall-config

firewalld管理

启动服务

systemctl start firewalld
systemctl restart firewalld

设置开机自启、禁用开机自启

systemctl enable firewalld

systemctl disabled firewalld

停止服务

systemctl stop firewalld

查看服务状态

systemctl status firewalld
# 或者
firewall-cmd --state

查看版本

firewall-cmd --version

firewalld中的区域

相比于其他防火墙工具,firewalld引入了区域(Zone)概念。

firewalld将所有的网络数据流量划分为多个区域,从而简化防火墙管理。

根据数据包的源IP地址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则。

对于进入系统的数据包,首先检查的就是其源地址.

  • 若源地址关联到特定的区域,则执行该区域所制定的规则.
  • 若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则.
  • 若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则.

默认区域不是单独的区域,而是指向系统上定义的某个其他区域。

默认情况下,默认区域是 Public,但是系统管理员可以更改默认区域。

以上匹配规则,按照先后顺序,匹配到就不再匹配后面的规则。

预定义的区域

区域 名称 说明
trusted 信任区域 允许所有网络通信通过
public 公共区域 只接受那些被选中的连接,默认只允许ssh和dhcpv6-client,这个zone是缺省zone
work 工作区域 除非与传出流量相关,或者与ssh、ipp-client、dhcpv6-client预定义服务匹配的传入流量,其他均拒绝
home 家庭区域 除非与传出流量相关,或者与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配的传入流量,其他均拒绝
internal 内部区域 与home相同
external 外部区域 除非与传出流量相关,否则除了ssh以外的流量都会被拒绝。
dmz 隔离区域 除非与传出流量相关,否则除了ssh以外的流量都会被拒绝
drop 丢弃区域 除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含icmp的错误响应
block 限制区域 除非与传出流量相关,否则拒绝所有流入流量

区域管理

获取所有可用区域

$ firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work

获取当前活动的区域

$ firewall-cmd --get-active-zones 
public
  interfaces: enp0s3 enp0s8

获取默认区域

$ firewall-cmd --get-default-zone 
public

获取区域的规则

# 获取默认区域的规则
firewall-cmd --list-all

# 获取所有区域的规则
firewall-cmd --list-all-zones

# 获取指定区域的规则
firewall-cmd --list-all --zone=home

区域中的网卡

# 获取网卡所在的区域
firewall-cmd --get-zone-of-interface=enp0s3

# 为网卡绑定区域
firewall-cmd --zone=区域名称 --add-interface=网卡名称

# 修改绑定
firewall-cmd --zone=区域名称 --change-interface=网卡名称

# 删除绑定
firewall-cmd --zone=区域名称 --remove-interface=网卡名称

设置默认区域

firewall-cmd --set-default-zone=home

注意:
后面其他的所有操作都是基于区域的操作
只要命令中不携带区域,那么就是对默认区域的操作

特殊参数

  • --permanent 表示永久生效,但是当前不生效
  • --reload 重新加载防火墙规则,使更改生效
  • --runtime-to-permanent 将当前的运行时配置写入规则配置文件中,使之成为永久性配置。
  • --panic-on 拒绝所有包,如果是远程连接的,会立即断开连接谨慎使用 不过不会永久生效,重启服务就会恢复
  • --panic-off 取消拒绝状态
  • --query-panic 查看是否拒绝所有包

将源地址添加到区域

# 添加
firewall-cmd --add-source=源地址 --zone=区域名
# 删除
firewall-cmd --remove-source=源地址 --zone=区域名

服务管理

查看服务

# 查看默认区域的允许服务
firewall-cmd --list-services

# 查看指定区域的允许服务
firewall-cmd --zone=home --list-services

# 查看所有可被使用的服务
firewall-cmd --get-services

添加服务

# 给home区域添加http服务,并且是永久保存
firewall-cmd --zone=home --add-service=http --permanent

# 给默认区域添加服务http,当前生效
firewall-cmd --add-service=http

# 同时添加多个服务
firewall-cmd --add-service={http,https,ntp,ftp}

删除服务

# 删除默认区域中的http服务,临时生效
firewall-cmd --remove-service=http

# 删除home区域中的http服务,永久保存,但当前不生效
firewall-cmd --zone=home --remove-service=http --permanent

# 同时删除多个服务
firewall-cmd --remove-service={http,https,ntp,ftp}

查询指定服务是否开启

# 查看当前区域的http服务是否开启,其他区域可以指定--zone=来查询
firewall-cmd --query-service=http

自定义服务

可通过xml文件来创建

  • --new-service-from-file=<filename> [--name=<service>] 根据已有xml文件来创建
    也可以通过命令行创建
  • --new-service=<service>

注意:
一定要加上 --permanent

# 创建一个名为test的服务
firewall-cmd --new-service=test --permanent
# 为这个服务添加端口
firewall-cmd --service=test --add-port=9090/tcp --permanent
firewall-cmd --service=test --add-source-port=10001-10003/tcp --permanent
firewall-cmd --service=test --add-protocol=udp --permanent
# 添加注释
firewall-cmd --service=test --set-description='This is a test service !' --permanent
firewall-cmd --service=test --set-short="this is short" --permanent

# 重载,才能通过--get-services看到
firewall-cmd --reload

# 查看服务
$ cat /etc/firewalld/services/test.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>this is short</short>
  <description>This is a test service !</description>
  <port port="9090" protocol="tcp"/>
  <protocol value="udp"/>
  <source-port port="10001-10003" protocol="tcp"/>
</service>

# 查看服务的简要信息
firewall-cmd --info-service=test

# 查看服务路径
firewall-cmd --path-service=test --permanent

# 删除服务
firewall-cmd --delete-service=test --permanent

# 都需要重新加载
firewall-cmd --reload

自定义服务的使用有预定义的服务用法相同

端口管理

查看端口

# 查看当前默认区域的开放端口
firewall-cmd --list-ports

# 查看指定区域的开放端口情况
firewall-cmd --list-ports --zone=home

# 检查端口是否开放
firewall-cmd --query-port=88/tcp
# 检查多个端口
# 检查多个连续的端口
firewall-cmd --query-port=80-84/tcp
# 检查多个非连续端口
firewall-cmd --query-port={88,90}/tcp
firewall-cmd --query-port={88/tcp,77/udp}
# 指定区域查询端口
firewall-cmd --query-port=88/tcp --zone=home

添加端口

firewall-cmd --add-port=8080/tcp
firewall-cmd --zone=home --add-port=8080/tcp --permanent
firewall-cmd --add-port=8080-8099/tcp --permanent
# 添加多个非连续端口
firewall-cmd --add-port={88,90}/tcp
firewall-cmd --add-port={88/tcp,77/udp}

删除端口

firewall-cmd --remove-port=8080/tcp
firewall-cmd --zone=home --remove-port=8080/tcp --permanent
firewall-cmd --remove-port=8080-8099/tcp --permanent
# 删除多个非连续端口
firewall-cmd --remove-port={88,90}/tcp
firewall-cmd --remove-port={88/tcp,77/udp}

拒绝日志

# 开启记录所有的拒绝日志
firewall-cmd --set-log-denied=all
# 查询拒绝日志的状态
firewall-cmd --get-log-denied

数据转发

firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080   # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口

如果是转发到远程端口,一定要开启伪装IP,否则,无法正常回包,导致访问失败

伪装IP

firewall-cmd --query-masquerade  # 检查是否允许伪装IP
firewall-cmd --add-masquerade    # 允许防火墙伪装IP
firewall-cmd --remove-masquerade # 禁止防火墙伪装IP

富规则 rich-rule

查看富规则

firewall-cmd --list-rich-rules
# 指定区域
firewall-cmd --list-rich-rules --zone=home

创建富规则

# 允许10.1.0.12访问本地的tcp 80端口
firewall-cmd --add-rich-rule="rule family='ipv4' source address='10.1.0.12' port port=80  protocol=tcp accept"

# 拒绝来自10.1.0.12的ping包
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.1.0.12" protocol value="icmp" drop'

# 拒绝所有的ping包
firewall-cmd --add-rich-rule='rule protocol value=icmp drop'

# 拒绝所有的ping包,并永久生效
firewall-cmd --add-rich-rule='rule protocol value=icmp drop' --permanent
firewall-cmd --reload

# 丢弃掉来自10.1.0.12的ssh服务相关的包
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.1.0.12 service name=ssh drop'

# 拒绝所有IPv4 UDP流量的53端口访问。
firewall-cmd --add-rich-rule='rule family="ipv4" port protocol="udp" port="53" drop'

# 拒绝所有从eth0网络接口进入的IPv4流量。
firewall-cmd --add-rich-rule='rule family="ipv4" source interface="eth0" drop'

# 指定区域myzone,仅在工作时间(例如 9AM 到 6PM)允许特定源 IP 访问本地的6379端口,并永久生效
firewall-cmd --zone=myzone --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=6379 protocol=tcp time daytime from="09:00" to="18:00" accept' --permanent
firewall-cmd --reload

# 允许源地址为10.1.0.12来访问目标地址为10.1.0.16的50000端口
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.1.0.12 port port=50000 protocol=tcp destination address=10.1.0.16 accept'

参数说明

  • --add-rich-rule= 值表示一条规则,规则必须以 rule 关键字开头
  • family= 指定该规则仅应用于什么协议的数据包上:可选项 IPv4和IPv6
  • source address= 设置源地址
  • source interface= 设置源接口
  • destination address= 设置目标地址
  • port port= 设置目标端口 设置端口的同时需要指定协议 所以一般格式是 port port=50000 protocol=tcp
  • protocol value= 指的是匹配的协议,例如 ping包是icmp协议,那就是 protocol value=icmp
  • service name= 指定匹配的服务
  • time daytime 设置时间
  • reject/drop/accept 指定动作,拒绝/丢弃/允许

删除规则

需要完整的写出规则

firewall-cmd --remove-rich-rule='rule family=ipv4 source address=10.1.0.12 port port=50000 protocol=tcp destination address=10.1.0.14 accept'

direct

可以直接设置iptables的规则

例如

在INPUT链的顶部(0)添加一条允许10.1.0.12访问本地的80端口的规则

firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 10.1.0.12 -p tcp -m multiport --dport 80 -j ACCEPT

然后通过iptables查看

但是要注意的是 这样设置很容易与firewalld的其他配置冲突或者混淆,容易造成规则不生效的状况

这个功能已经被标记弃用了,在未来的版本中会被移除掉

标签:--,cmd,firewalld,firewall,add,区域,linux,port
From: https://www.cnblogs.com/guangdelw/p/18387095

相关文章

  • 顺序表
    线性表线性表的初始化StatusInitList(SqList&L){L.elem=(ElemType*)malloc(sizeof(ElemType)*MAXSIZE);if(!L.elem)exit(OVERFLOW);L.length=0;returnOK;}线性表的销毁voidDestoryList(SqList&L){if(L.elem)fr......
  • 时间相减和时间转换
    1.现在时间到开始时间的时间差(两个时间变成时间戳然后转化成时间)consttransformTime=(date)=>{vardate1=newDate();//开始时间vardate2=newDate('2024-08-2917:11:12');//结束时间vardate3=date2.getTime()-date1.getTime()//时间差的毫秒数//计算出相......
  • 类似咸鱼/转转闲置二手商品交易回收商城系统源码定制开发搭建
    野兔二手交易系统,这是采用最新ThinkPHP8框架开发完成,也是基于YETUADMIN+Uniapp开发的二手交易系统,卖家可以发布二手信息,买家可以在线询价,支持在线聊天,在线购买支付,支持发布高价回收信息。自带社交板块,用户可以发布帖子、加入圈子、关注好友。开发介绍:程序名称:野兔二手交易系统......
  • pageHelper分页插件导致的查询慢的问题优化
    首先在yml中配置mybatis:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl会进行sql语句打印问题:进行分页查询时pageHelper自动生成的count语句相当于在查询语句外包一层selectcount(1)from(你的查询语句)对于你的查询语句的返回条件中有较......
  • C语言 备份
    scanf读取原理行缓冲:标准缓存区读入字符‘20\n’,会打印输出20,紧接着的scanf,会打印输出\n,标准输入缓冲区有\n,scanf(c=%c,&c),直接读取缓冲区的\n字符输出。scanf匹配规则:scanf函数在读取整型数、浮点数、字符串会忽略'\n'字符判断闰年#include<stdio.h>intmain(){ in......
  • 【挖矿病毒】为什么容易传播
    对于大多数挖矿病毒,有以下几个主要因素:漏洞利用:许多挖矿病毒利用操作系统或应用程序的已知漏洞来入侵系统。如果用户没有及时安装安全更新和补丁,这些漏洞就会暴露出来,为挖矿病毒提供了入侵的机会。社会工程和钓鱼攻击:挖矿病毒可能会通过钓鱼邮件、恶意链接或下载的文件等......
  • 【挖矿病毒】简单逆向分析
    在虚拟机中执行explorer.exe后,它会在/Windows/Fonts/目录中释放恶意文件,包括主加密挖掘程序文件、包含启动挖掘过程的恶意命令的批处理文件以及两个注册表文件,其注册表子项和值稍后将被插入到系统注册表使用regedit.exe。释放的恶意文件包括:svchost.exe1.batserver.reg......
  • 【挖矿病毒】与黑产的关联
    挖矿病毒与黑产之间存在密切的关联。黑产是指非法的、以盈利为目的的互联网犯罪活动,而挖矿病毒通常是黑产活动的一部分。通常挖矿病毒与以下几个黑产活动有关:加密货币盈利:挖矿病毒的主要目的是利用受感染的计算机资源来挖取加密货币,如比特币、以太坊等。这些加密货币可以用于非......
  • 【挖矿病毒】介绍
    挖矿病毒是一种恶意软件,它会感染计算机系统,并利用系统资源(如CPU或GPU)来进行加密货币挖矿,而不经用户许可。这种病毒会使计算机变得缓慢,并可能导致系统崩溃或其他问题。挖矿病毒通常会隐藏在下载的文件、恶意链接或被感染的软件中,并在用户不知情的情况下运行。一旦感染了计算机系......
  • 图神经网络——GCN聚合原理理解
    本博客基于B站UP主望舒同学的图神经网络系列讲解及代码实现-GCN1。GCN的核心思想:通过邻接矩阵A对结点特征进行聚合,用于更新某结点特征。不同的聚合方式\(\rightarrow\)GCN变体。GCN基于的一个假设:结点的特征与其邻居结点有密切的关系,并且距离越近的邻居关系越大。GCN聚合直......