当前位置: 首页 > news >正文

Linux防火墙-Firewalld

一、 概述

1、按表现形式划分

软件防火墙: 集成在系统内部,Linux系统: iptablesfirewalldufw windows系统下:

windows defender

硬件防火墙: 华为防火墙、思科防火墙、奇安信防火墙、深信服防火墙等

2、按技术划分

包过滤防火墙: 检查数据包的源IP、目的IP、源端口、目的端口、TCPsyn控制位

七层防火墙: 除了上述检查外,还会检查数据内容

3、防火墙的作用

阻止来自网络外部的攻击、进行流量控制

二、 Linux防火墙

1、防火墙结构

用户态

iptables使用iptables命令对防火墙规则进行管理,必须深度理解网络技术和四表五链,对

于初学者或者网络技术不达标的人员不友好

firewalld使用firewall-cmd命令对防火墙进行管理,采用的是区域划分的形式。不需要连接

底层的四表五链,对于初学者比较友好

ufw使用ufw命令对防火墙进行管理,命令简单易懂。

内核态

四表: 从内核->用户的顺序: raw -> mangle -> nat -> filter

五链: inputoutputforwardpreroutingpostroutingfirewalld防火墙

2、区域分类

九大区域: blockdmzdropexternalhomeinternalpublictrustedwork

区域功能:

public 公共区域,默认区域

public (active)
target: default #区域类型规则
icmp-block-inversion: no
interfaces: ens33 #属于该区域的接口
sources: #来源
services: dhcpv6-client ssh #放行服务的名称
ports: #放行端口号
protocols: #放行协议
masquerade: no #NAT地址转换
forward-ports: #转发端口
source-ports: #源端口
icmp-blocks: #ICMP的阻塞类型,ping的阻塞
rich rules: #富规则

home: 家庭区域

home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

work: 工作区域

work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

trusted: 完全信任区域

trusted
target: ACCEPT #不采用默认规则,放行一切
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

internal: 内部区域 (连接内部网络)

internal
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

external: 外部区域 (连接外部网络,例如: internet网络)

ternal
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: yes #默认进行NAT地址转换
forward-ports:
source-ports:
icmp-blocks:
rich rules:

dmz: 非军事化管理区域(内部的服务器放于该区域)

dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

drop: 丢弃区域 (丢弃一切流量,不给出任何回应)

drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

block: 阻塞区域 (拒绝任何流量,但给出回应)

block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules

3、firewall-cmd命令用法

3.1、关键字

--list-*
--get-*
--set-*
--add-*
--remove-*
--change-*
--zone=

3.2、命令分类

(1)查看
#查看所有区域的详细信息
[root@localhost ~]# firewall-cmd --list-all-zones
#查看指定区域的详细信息
[root@localhost ~]# firewall-cmd --list-all --zone=public
#查看指定区域的放行服务
[root@localhost ~]# firewall-cmd --list-services --zone=public
#查看指定区域的放行端口
[root@localhost ~]# firewall-cmd --list-ports --zone=public
#查看指定区域包含的网络接口
[root@localhost ~]# firewall-cmd --list-interfaces --zone=public
#查看指定区域的放心协议
[root@localhost ~]# firewall-cmd --list-protocols --zone=public
#查看指定区域的ICMP阻塞类型
[root@localhost ~]# firewall-cmd --list-icmp-blocks --zone=public
#查看指定区域的放行源地址
[root@localhost ~]# firewall-cmd --list-sources --zone=public
#查看指定区域的源端口
[root@localhost ~]# firewall-cmd --list-source-ports --zone=public
#查看指定区域的富规则
[root@localhost ~]# firewall-cmd --list-rich-rules --zone=public
#查看指定区域的转发端口
[root@localhost ~]# firewall-cmd --list-forward-ports --zone=public
#查看firewalld支持的服务类型
[root@localhost ~]# firewall-cmd --get-services
#查看firewalld的默认区域
[root@localhost ~]# firewall-cmd --get-default-zone
#查看firewalld支持的ICMP的阻塞类型
[root@localhost ~]# firewall-cmd --get-icmptypes
#查看firewalld所有的活动区域
[root@localhost ~]# firewall-cmd --get-active-zones
#查看指定网络接口所属区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
#查看所有区域名称
[root@localhost ~]# firewall-cmd --get-zones
(2)添加
#添加指定服务到指定区域
[root@localhost ~]# firewall-cmd --add-service=http --zone=public
success
#添加端口到指定区域
[root@localhost ~]# firewall-cmd --add-port=80/tcp --zone=public
success
#添加指定协议到指定区域
[root@localhost ~]# firewall-cmd --add-protocol=ah --zone=public
success
#添加ICMP阻塞类型到指定区域
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=public
success
#windows端验证
C:\Users\zzh>ping 192.168.115.129
正在 Ping 192.168.115.129 具有 32 字节的数据:
来自 192.168.115.129 的回复: 无法访问目标主机。
来自 192.168.115.129 的回复: 无法访问目标主机。
来自 192.168.115.129 的回复: 无法访问目标主机。
#添加指定网络接口到指定区域
[root@localhost ~]# firewall-cmd --add-interface=ens33 --zone=work
success
#添加指定区域的放行源地址
[root@localhost ~]# firewall-cmd --add-source=192.168.1.0/24 --zone=work
success
#添加指定区域的放行源端口
[root@localhost ~]# firewall-cmd --add-source-port=999/tcp --zone=work
success
#添加转发端口到指定区域
[root@localhost ~]# firewall-cmd --add-forwardport=port=8080:proto=tcp:toport=80:toaddr=192.168.115.115 --zone=work
success
#添加地址转换功能到指定区域
[root@localhost ~]# firewall-cmd --add-masquerade --zone=work
success
#验证添加
[root@localhost ~]# firewall-cmd --list-all --zone=public
(3)修改
#修改默认区域
[root@localhost ~]# firewall-cmd --set-default-zone=work
success
#修改网络接口所属区域
[root@localhost ~]# firewall-cmd --change-interface=ens33 --zone=internal
success
[root@localhost ~]# firewall-cmd --change-zone=ens33 --zone=external
success
#追加指定区域的放行源地址
[root@localhost ~]# firewall-cmd --change-source=192.168.2.0/24 --zone=work
success
(4)删除
#删除指定服务到指定区域
[root@localhost ~]# firewall-cmd --remove-service=http --zone=public
success
#删除端口到指定区域
[root@localhost ~]# firewall-cmd --remove-port=80/tcp --zone=public
success
#删除指定协议到指定区域
[root@localhost ~]# firewall-cmd --remove-protocol=ah --zone=public
success
#删除ICMP阻塞类型到指定区域
[root@localhost ~]# firewall-cmd --remove-icmp-block=echo-request --
zone=public
success
#删除指定网络接口到指定区域
[root@localhost ~]# firewall-cmd --remove-interface=ens33 --zone=work
success
#删除指定区域的放行源地址
[root@localhost ~]# firewall-cmd --remove-source=192.168.1.0/24 --zone=work
success
#删除指定区域的放行源端口
[root@localhost ~]# firewall-cmd --remove-source-port=999/tcp --zone=work
success
#删除转发端口到指定区域
[root@localhost ~]# firewall-cmd --remove-forwardport=port=8080:proto=tcp:toport=80:toremover=192.168.115.115 --zone=work
success
#删除地址转换功能到指定区域
[root@localhost ~]# firewall-cmd --remove-masquerade --zone=work
success
#验证删除
[root@localhost ~]# firewall-cmd --list-all --zone=public
(5)保存规则
#逐行规则保存
[root@localhost ~]# firewall-cmd --remove-masquerade --zone=work --permanent
#一次性保存所有规则
[root@localhost zones]# firewall-cmd --runtime-to-permanent
success
#保存的规则存储路径
/etc/firewalld/zones

3.3、案例

禁止外部主机ping本机

#本机IP:192.168.115.129 ens33 NAT
#外部IP:192.168.115.128
#防火墙配置
[root@localhost ~]# firewall-cmd --add-interface=ens33 --zone=work
success
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=work
success
#验证
[root@localhost ~]# ping -c 4 192.168.115.129
PING 192.168.115.129 (192.168.115.129) 56(84) bytes of data.
From 192.168.115.129 icmp_seq=1 Destination Host Prohibited
From 192.168.115.129 icmp_seq=2 Destination Host Prohibited
From 192.168.115.129 icmp_seq=3 Destination Host Prohibited
From 192.168.115.129 icmp_seq=4 Destination Host Prohibited
--- 192.168.115.129 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms

允许外部主机访问本机的http服务

#本机IP:192.168.80.128 ens34 vmnet3
#外部IP:192.168.80.129
#######环境配置 开始#########
##本机安装httpd服务
#改变SElinux的规则
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y httpd
##启动httpd服务
[root@localhost ~]# systemctl start httpd
##修改httpd服务的监听IP
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.80.128:80
##重启httpd服务
[root@localhost ~]# systemctl restart httpd
##验证服务监听状态
[root@localhost ~]# netstat -naptu | grep :80
tcp 0 0 192.168.80.128:80 0.0.0.0:* LISTEN
5884/httpd
#######环境配置 结束#########
#防火墙配置
[root@localhost ~]# firewall-cmd --change-interface=ens34 --zone=dmz
success
##客户端验证访问##
[root@localhost ~]# curl 192.168.80.128
curl: (7) Failed connect to 192.168.80.128:80; 拒绝连接
##发现无法访问###
#服务端查看dmz区域信息
[root@localhost ~]# firewall-cmd --list-all --zone=dmz
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens34
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#发现没有放心http服务
#配置dmz区域http服务放行策略
[root@localhost ~]# firewall-cmd --add-service=http --zone=dmz
success
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens34
sources:
services: http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

允许外部主机访问本机的某个端口号

#前置环境如上
#防火墙配置
[root@localhost ~]# firewall-cmd --add-port=801/tcp --zone=dmz
success
#放行服务的本质实际上是放行了该服务的默认端口号!!!
#假如服务改变了监听端口号,只需放行对应的端口号即可!!!
#客户端验证
[root@localhost ~]# curl 192.168.80.128:801

三、 常见面试题

1. 描述一下firewall-cmd命令的基本用法。

firewall-cmd 是 Linux 系统中用于管理 firewalld 防火墙的命令行工具,主要用于配置防火墙规则、区域(Zone)、服务、端口等

firewall-cmd [选项] [参数]

2. 如何查看当前的防火墙规则?

  • 查看所有区域的规则概要

firewall-cmd --list-all-zones
  • 查看当前活跃区域(即当前网络接口绑定的区域)的规则

firewall-cmd --get-active-zones
  • 查看指定区域(如 public)的详细规则(包括开放的端口、服务、源 IP 等)

firewall-cmd --zone=public --list-all
  • 仅查看指定区域开放的端口

firewall-cmd --zone=public --list-ports

3. 如何添加、删除和修改防火墙规则?

  • 添加规则(临时生效)
# 允许 public 区域接收 TCP 80 端口的流量
firewall-cmd --zone=public --add-port=80/tcp
  • 删除规则(临时生效)
# 禁止 public 区域接收 TCP 80 端口的流量
firewall-cmd --zone=public --remove-port=80/tcp
  • 永久生效(需加 --permanent 并重新加载)
# 永久添加规则
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重新加载配置使永久规则生效
firewall-cmd --reload

4. 如何启用或禁用防火墙?

  • 启用防火墙(临时启动 + 开机自启)
systemctl start firewalld   # 临时启动
systemctl enable firewalld  # 开机自启
  • 禁用防火墙(临时停止 + 禁止开机自启)
systemctl stop firewalld    # 临时停止
systemctl disable firewalld # 禁止开机自启
  • 查看防火墙状态
systemctl status firewalld

5. Firewalld中有哪些默认区域?

  • public:默认区域,适用于公共网络,仅允许必要的服务(如 SSH);

  • work:工作网络,信任同一网络内的设备;

  • home:家庭网络,信任度较高,允许更多服务(如文件共享);

  • internal:内部网络,信任度高,适用于私有网络;

  • external:外部网络(如服务器公网接口),通常开启伪装(NAT);

  • dmz:隔离区(如服务器的非敏感服务),仅允许有限访问;

  • block:拒绝所有传入连接(主动拒绝);

  • drop:丢弃所有传入连接(无响应,类似 “隐身”)。

6. 如何查看防火墙区域的配置?

  • 查看所有区域的完整配置
firewall-cmd --list-all-zones
  • 查看指定区域(如 dmz)的配置
firewall-cmd --zone=dmz --list-all
  • 查看系统默认区域
firewall-cmd --get-default-zone
  • 查看网络接口绑定的区域
firewall-cmd --get-zone-of-interface=eth0  # 替换为实际网卡名

7. 通过Firewalld允许或拒绝特定端口的流量的命令是什么?

  • 允许特定端口
# 临时允许 public 区域 TCP 8080 端口
firewall-cmd --zone=public --add-port=8080/tcp# 永久允许 public 区域 UDP 53 端口(DNS)
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --reload  # 生效
  • 拒绝特定端口(需用 rich 规则)
# 临时拒绝 public 区域 TCP 3306 端口(MySQL)
firewall-cmd --zone=public --add-rich-rule='rule port port=3306 protocol=tcp reject'# 永久拒绝所有区域 TCP 22 端口(不建议,会禁用 SSH)
firewall-cmd --add-rich-rule='rule port port=22 protocol=tcp reject' --permanent
firewall-cmd --reload

8. 配置Firewalld进行端口转发的命令是什么?

1、开启区域的伪装功能(允许 NAT)

firewall-cmd --zone=public --add-masquerade --permanent  # 永久开启

2、配置端口转发(如将本机 80 端口转发到 192.168.1.100 的 8080 端口)

# 临时转发:tcp 80 → 192.168.1.100:8080
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100:toport=8080# 永久转发
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100:toport=8080 --permanent

3、重新加载配置

firewall-cmd --reload

    9. 配置Firewalld放行服务httpd的命令是什么?

    # 临时放行 public 区域的 http 服务
    firewall-cmd --zone=public --add-service=http# 永久放行(适用于长期运行的 web 服务器)
    firewall-cmd --zone=public --add-service=http --permanent
    firewall-cmd --reload  # 生效

    10. 通过Firewalld允许或拒绝特定IP地址的访问的命令是什么?

    • 允许特定 IP 访问(如允许 192.168.1.100 访问所有服务)
    # 临时允许
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'# 永久允许
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanent
    • 拒绝特定 IP 访问(如拒绝 10.0.0.5 访问 SSH 服务)
    # 临时拒绝 10.0.0.5 访问 TCP 22 端口
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port=22 protocol=tcp reject'# 永久拒绝
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port=22 protocol=tcp reject' --permanent
    • 生效配置
    firewall-cmd --reload


    文章转载自:

    http://ool4QlNh.knrgb.cn
    http://GDLpXbej.knrgb.cn
    http://DvpUZ1m8.knrgb.cn
    http://kDMpZSDM.knrgb.cn
    http://ywycoLDP.knrgb.cn
    http://XrTUfMqu.knrgb.cn
    http://8aFW2ryY.knrgb.cn
    http://lDVt90bm.knrgb.cn
    http://o5OmfEMq.knrgb.cn
    http://UlvohzsI.knrgb.cn
    http://bqitkfDh.knrgb.cn
    http://701Z52Az.knrgb.cn
    http://hBGR4WTy.knrgb.cn
    http://yp0Hv7Xj.knrgb.cn
    http://6kieyXrl.knrgb.cn
    http://diNHgkej.knrgb.cn
    http://eS5YFIQb.knrgb.cn
    http://36BTwm8W.knrgb.cn
    http://GUMwMbeU.knrgb.cn
    http://DDR4xmu1.knrgb.cn
    http://e2lveqVb.knrgb.cn
    http://f3OsO05e.knrgb.cn
    http://HqwHLscW.knrgb.cn
    http://MAlZv6Nn.knrgb.cn
    http://pu3x4PGx.knrgb.cn
    http://7zbHwlgK.knrgb.cn
    http://gZaz0js6.knrgb.cn
    http://MVMYQMQD.knrgb.cn
    http://u938YE8X.knrgb.cn
    http://3C2KGtuU.knrgb.cn
    http://www.dtcms.com/a/377659.html

    相关文章:

  1. 面壁智能开源多模态大模型——MiniCPM-V 4.5本地部署教程:8B参数开启多模态“高刷”时代!
  2. vue3+TS项目配置Eslint+prettier+husky语法校验
  3. Redis 5单线程 vs 6多线程性能解析
  4. CSS 特指度 (Specificity)
  5. 数据结构(C语言篇):(十一)二叉树概念介绍
  6. 【go语言 | 第1篇】Go环境安装+go语言特性
  7. 嵌入式面试题(4)
  8. Python中的getattr/setattr和pybind11中的attr相關函數
  9. Qt之Model/View架构
  10. 龙虎榜——20250910
  11. 嵌入式系统
  12. Ngrok vs 飞网:内网穿透工具对比指南
  13. 计算机毕设 java 高校家教平台 基于 SSM 框架的高校家教服务平台 Java+MySQL 的家教预约与课程管理系统
  14. 招聘智能化浪潮:AI面试工具如何重塑招聘格局?
  15. Java EE servlet与MySQL表单 工程实现增加查询数据
  16. 上网管理行为-路由模式部署
  17. Omni-UI:58同城鸿蒙ArkUI精心打造的UI组件库使用
  18. 六自由度Stewart并联机器人simulink建模与模拟仿真
  19. 如何解决pip安装报错ModuleNotFoundError: No module named ‘sympy’问题
  20. 测试之道:从新手到专家实战(四)
  21. 基于elementUI实现一个可编辑的表格(简洁版)
  22. 智能美妆功能开发指南:直播美颜sdk的架构与算法解析
  23. MySQL 浮点数、定点数与位类型:搞懂 3 类特殊数值的核心用法
  24. 运动生理实验室解决方案 人体生理实验整体解决方案
  25. Ping命令为何选择ICMP而非TCP/UDP?
  26. 工业锅炉的“健康卫士”—状态监测与故障诊断
  27. 大模型微调技术宝典:Transformer架构,从小白到专家
  28. 同步框架与底层消费机制解决方案梳理
  29. 计算机毕设 java 高校教材管理系统 基于 Java+SSM 的高校教材管控平台 Java+MySQL 的教材全流程管理系统
  30. 用分层架构打造单体应用