茗宸博客网

  • 首页
  • 数据通信
    • 华为
    • 思科
    • 浪潮科技
    • 锐捷
  • 硬件瞎折腾
    • 电脑折腾
    • 软路由
    • 服务器
    • 私有NAS
    • FPV无人机瞎折腾
  • 网络安全
    • CTF经验
    • 实战环境
    • 渗透实战
    • 蓝队加固
    • 近期赛事
    • 漏洞分享
  • 网络技术
    • 网络基础
    • 网络技术精品
    • linux基础
    • 计算机基础
  • 编程学习
    • python
  • 运行维护
  • 服务器搭建
  • 资源分享
  • 随手笔记
    • 随手笔记之ensp
    • 随手笔记之mysql
  • 日常
    • 拍摄
茗宸博客
随手笔记
  1. 首页
  2. 网络技术
  3. linux基础
  4. 正文

Linux防火墙之Firewalld

2025年1月2日 523点热度 0人点赞 0条评论
内容目录

Firewalld基础应用

Linux 防火墙是通过 netfilter 来处理的,它是内核级别的框架,iptables 被作为 netfilter 的用户态抽象层,iptables 将包通过一系列的规则进行检查,如果包与特定的 IP/端口/协议 的组合匹配,规则就会被应用到这个包上,以决定包是被通过、拒绝或丢弃。firewalld 是最新的 netiter 用户态抽象层。firewald 可以通过定义的源IP 和/网络接口将入站流量分考到不同区zone每个区基于指定的准则按自己配置去通过或拒绝包,另外的改进是基于 iptables 进行语法简化。firewalld 通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用,例如,是使用 samba 而不是使用 UDP 端口 137和138 和TCP 端口 139 和 445、它进一步简化语法,消除了 iptables中对语句顺序的依赖。

一、Firewalld的基本使用

 启动:systemctl start firewalld
 查看状态:systemctl status firewalld
 停止:systemctl disable firewalld
 禁用:systemctl stop firewalld
 重启:systemctl restart firewalld 

IPTables的功能总结

 1.常用的两张表:filter,nat。filter用于过滤数据包,nat用于路由转发功能
 2.常用的两条链INPUT,OUTPUT
 3.常见的三个行为:ACCEPT,DROP,REJECT
 4.限制流量的三个特征:端口,协议,IP,对应的五元组: -d   -s   --dport    --sport    -p
 5.端口转发:本机端口,远程端口

 而firewalld中,没有表,没有链,没有行为,默认拒绝所有流量

二、区域

 drop:丢弃
 任何传入的网络数据包都被丢弃,没有回复,只进行传出网络连接

 block:阻止
 任何传入的网络连接都被拒绝,其中用于包含IPv4的 icmp-host-prohibited 消息和用于IPv6的icmp6-adm-prohibited。只能从系统内启动网络连接

 public:公共(默认)
 用于公共场所。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入链接。

 external:外部网络
 用于特别为路由器启用伪装的外部网络。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入链接。

 dmz:管制区
 适用于非军事区中的计算机,这些计算机可公开访问,并且对内部网络的访问权限有限。仅接受选定的传入连接

 work;工作
 用于工作区域。您最常信任网络上的其他计算机,以免损害您的计算机。进接受选定的传入连接

 home:家庭
 适用于家庭区域。您最常信任网络上的其他计算机,以免损害您的计算机。进接受选定的传入连接

 internal:内部
 用于内部网络。您最常信任网络上的其他计算机,以免损害您的计算机。进接受选定的传入连接

 trusted:受信任
 接受所有网络连接。
 可以将这些区域中的一个指定为默认区域。将接口连接添加到NetworkManager时,会将他们分配给默认区域。安装时,firewalld中的默认区域想设置为公共区域

三、配置firewalld-cmd

 firewall-cmd --list-all  #列出目前表中信息

 firewall-cmd --set-default-zone=trusted  #更改默认区域为trusted区

在更换默认区为trusted之前,我们的xampp是访问不了的,但是区域改为trusted之后xampp立马就可以访问了

image-20230925171633530

image-20230925171707597

但是如果将默认区域换为drop之后,更访问不了了,因为数据包都直接被丢弃。当然block(reject)区域(这个是带有回复的)是差不多的

 public (default,active) :  示 public 区域是默认区域(当接口启动时会自动默认),并且它是活动的。
 interfaces:ens33 列出了这个区域上关联的接口。
 sources:列出了这个区域的源。现在这里什么都没有,但是,如果这里有内容,它们该是这样的格式 xxx.xxx.xxx.xxx/xx。services: dhcpv6-cient ssh 列出了允许通过这个防火墙的服务。可以通过运行 firewal1-cmd --get-services得到一个防火定义服务的详细列表。
 ports:列出了一个允许通过这个防火墙的目标端口。它是用于你需要去允许一个没有在 firewa11d 中定义的服务的情况下
 masquerade: no 表示这个区域是否允许 IP 装。如果允许,它将允许 IP 转发,它可以让你的计算机作为一个路由器。
 forward-ports: 列出转发的端口。
 icmp-blocks: 阻赛的 icmp 流量的黑名单。
 rich rules: 在一个区域中优先处理的高级配置。
 default:是目标区域,它决定了与该区域匹配而没有由上面设置中显式处理的包的动作。

运行一下命令理解firewalld规则用法:

 查看多有打开的端口:firewall-cmd --zone==public --list-port
 更新防火墙规则:firewall-cmd --reload
 列出所有区域:firewall-cmd --get-zones
 查看区域信息:firewall-cmd --get-active-zones
 设定默认区域,立即生效:firewall-cmd --set-default-zone=public
 查看指定接口所属区域:firewall-cmd --get-zone-of-interface=ens32
 查看所有规则:firewal-cmd --list-all
 通过以下两种手段可以进行永久修改:
 firewall-cmd --permanent <some modification>
 firewall-cmd --reload

常见使用场景

 firewall-cmd --get-services  #获取firewalld找那个事先定义了那些服务,防止后面添加服务的时候出错

 firewall-cmd --add-port=80/tcp
 firewall-cmd --add-service=http
 #但是上面这些配置一旦systemctl restart firewalld就都会消失,所以为了能够是我们的配置能一直生效,我们应该用下面的方法
 firewall-cmd -add-service=http --permanent  #这条命令是将我们的配置信息写入配置文件,此时我们需要重新加载这个firewalld,不然写进去的信息没有被加载到服务中去
 firewall-cmd --reload

Firewalld进阶用法

常见使用场景

 拒绝所有包:firewall-cmd --panic-on
 取消拒绝状态:firewall-cmd --panic-off
 查看是否拒绝:firewall-cmd --query-panic

 暂时开放 ftp 服务:firewall-cmd --add-service=ftp
 永久开放 ftp 服务:firewall-cmd --add-service=ftp --permanent
 查询服务的启用状态:firewall-cmd --query-service ftp
 开放MySQL端口:firewall-cmd --add-service=mysql
 阻止http端口:firewall-cmd --remove-service=http
 查看开放的服务:firewall-cmd --list-services
 查看对应的规则库文件:cd /usr/lib/firewalld/services

 开放通过tcp访问3306:firewall-cmd --add-port=3306/tcp
 阻止通过tcp访问3306:firewall-cmd --remove-port=80/tcp
 永久开放80端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
 查看80端口:firewall-cmd --zone=public --query-port=80/tcp
 查看所有开放端口:firewall-cmd --zone=public --list-ports
 删除80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
 开放postgresql服务:firewall-cmd --add-service=postgresql --permanent

 允许http服务通过1分钟:firewall-cmd --zone=public --add-service=http --timeout=1m,这个 timeout 选项是一个以秒(s),分(m)或小时(h)为单位的时间值

 重置防火墙:firewall-cmd --reload
 检查防火墙状态:firewall-cmd --state
 让设定生效:systemctl restart firewalld
 检查设定是否生效:iptables -L -n | grep 21    
                firewall-cmd --list-all       

富规则

 #在firewalld中accept和drop都是小写,但IPTables中都是大写
 #firewalld中单次都是全拼,IPTables都是简写

 添加指定ip访问特定端口规则:
 firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.1.178 port protocol=tcp port=80 accept'
 #family=ipv4  表示基于ipv4的数据包执行

 删除指定某个ip访问特定端口规则:
 firewall-cmd --permanent --remove-rich-rule 'rule family=ipv4 source address=192.168.1.178 port protocol=tcp poer=80 accept'

 禁止某个ip访问
 iptables -I INPUT -s 192.168.1.178 -j DROP
 firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.178 drop'

 允许ping:
 firewal-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp source address=192.168.1.178 accept'

 端口转发:
 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

 接受192.168.1.0网段所有ip访问ssh服务:
 firewall-cmd --add-rich-rule 'rule family=ipve source address=192.168.1.0/24 service name=ssh accept'

 直接模式:
 firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.1.178 -j ACCEPT
 #这里的数字1表示匹配时的优先级,数字越小优先级越高,建议优先级从1开始
 注意:firewall-cmd --direct --get-all-rules

image-20230926143902268

像这种情况优先级高,但是顺序在下面,还是根据优先级来执行规则

端口转发

端口转发可以将指定地址访问指定端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没有端口,则默认使用来源端口。

如果配置号端口转发之后不能用,可以去检查下面两个问题:

  • 比如我将80端口转发至8080端口,首先检查本地的80端口和目标的8080 端口是否开放监听了
  • 其次是检查是否允许伪装ip,没允许的话要开启伪装
 #将8888端口的ll转发至80端口
 firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80

 firewall-cmd --remove-forward-port=port=8888:proto=tcp:port=80

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

 #将8888端口的流量转发至101.37.65.91的80端口
 firewall-cmd --add-forward-port=port=8888:proto=tcp:toaddr=101.37.65.91:toport=80
  • 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去
  • 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。

扩展内容

第一部分

在firewalld中,--timeout参数是用于设置规则的超时时间,而富规则(rich rule)是用于定义更复杂的防火墙规则。虽然--timeout可以和普通规则一起使用,但并不能与富规则搭配使用。

富规则使用的是XML格式的规则文件,其中包含了多个规则元素和条件元素,可以定义更复杂的匹配和操作。然而,--timeout参数是针对单个规则的超时设置,无法直接应用于富规则中。

如果你想要在富规则中设置超时时间,需要在富规则中定义一个普通的规则,并使用--timeout参数进行设置。例如,你可以创建一个富规则,然后在其中定义一个规则元素,使用--timeout参数来设置超时时间。

以下是一个示例的富规则文件(假设名为rich-rule.xml):

xml

 <规则>
   <来源>
     <地址>192.168.0.0/24</地址>
   </来源>
   <目的>
     <地址>10.0.0.0/24</地址>
   </目的>
   <服务>
     <协议>tcp</协议>
     <端口>8080</端口>
   </服务>
   <规则>
     <来源>
       <地址>192.168.0.1</地址>
     </来源>
     <目的>
       <地址>10.0.0.1</地址>
     </目的>
     <协议>tcp</协议>
     <端口>8080</端口>
     <行动>允许</行动>
     <超时>300</超时> <!-- 这里设置了超时时间 -->
   </规则>
 </规则>

然后,使用firewall-cmd命令加载和应用该富规则文件:

css

 firewall-cmd --permanent --direct --add-rule rich-rule.xml
 firewall-cmd --reloadfirewall-cmd --permanent --direct --add-rule rich-rule.xml
 firewall-cmd --reload

这样,在富规则中定义的规则将会生效,并具有指定的超时时间。

请注意,上述示例仅为了演示如何在富规则中设置超时时间,并非一个完整的富规则示例。你需要根据自己的需求和环境来编写适合的富规则文件。

第二部分

了解一下firewalld 运行后台的各类配置文件、日志文件等信息,为后续课程学习做准备。在Linux中,通常配置文件是在/etc/目录下,所以可以使用 find /etc/ -name"firewal",另外,Linux下的很多日志信息都保存在 var/log 目录下

标签: 暂无
最后更新:2025年1月2日

站长

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

站长

这个人很懒,什么都没留下

最新 热点 随机
最新 热点 随机
Linux systemctl 命令 linux的service IPTABLES一文通 网安路线图 DOS相关常用命令了一篇了解大全 MYSQL数据库学习记录
IPTABLES一文通linux的serviceLinux systemctl 命令搬运 linux最常用的20个命令搬运 浅谈社工搬书Linux操作系统应用与安全项目化实战教程
SSH端口转发实现穿透内网 自学iptables防火墙视频 详解UEFI和Legacy区别分析 ICMP协议一文双篇详解 一文双篇(快速搞懂TCP/UDP协议区别) 内网隐藏通信隧道技术——FRP隧道
文章目录
  • Firewalld基础应用
    • 一、Firewalld的基本使用
    • 二、区域
    • 三、配置firewalld-cmd
  • Firewalld进阶用法
    • 常见使用场景
    • 富规则
    • 端口转发
    • 扩展内容

COPYRIGHT © 2023 茗宸bk. ALL RIGHTS RESERVED.

站长微信:printJ7

鲁ICP备2024114188号

鲁公网安备37130202372760号