30.Firewalld-Linux

1.网络区域

trusted(信任区域) 可接收所有网络连接

public(公共区域) 除非与传出流量相关,或与 ssh 或dhcpv6-client预定义服务匹配,否则拒绝流量传入,在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收经过选择的连接。并且,该区域是新添加网络接口的默认区域

work(工作区域) 除非与传出流量相关,或与 ssh、ipp-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于工作区。相信网络内的其他计算机不会危害计算机,仅接收经过选择的连接

home(家庭区域) 除非与传出流量相关,或与 ssh、ipp-client、mdns、samba-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于家庭网络。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接

internal(内部区域) 除非与传出流量相关,或与 ssh、ipp-client、mdns、samba-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于内部网络。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接

external(外部区域) 除非与传出流量相关,或与 ssh 预定义服务匹配,否则拒绝流量传入。通过此区域转发的 IPv4 传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络

dmz(隔离区域也称为非军事区域)除非与传出的流量相关,或与 ssh 预定义服务匹配,否则拒绝流量传入

block(限制区域) 除非与传出流量相关,否则拒绝所有传入流量

drop(丢弃区域) 除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含 ICMP(Internet Control Message Protocol,互联网控制报文协议)的错误响应

2.firewalld-cmd命令

(1).firewalld服务管理

systemctl start firewalld #启动firewalld

systemctl enable firewalld #设置firewalld为开机自启动

systemctl status firewalld #查看firewalld服务状态

firewall-cmd --state #查看firewalld服务状态

systemctl stop firewalld #停止firewalld

systemctl disable firewalld #设置firewalld开机不自启动

(2).获取预定义信息

firewall-cmd --get-zones #显示预定义的区域

firewall-cmd --get-service #显示预定义的服务

firewall-cmd --get-service | tr ' ' '\n' #显示预定义的服务以空格做换行操作

firewall-cmd --get-icmptypes | tr ' ' '\n' #显示预定义的ICMP类型

(3).区域管理 --get

firewall-cmd --get-default-zone #显示当前系统中的默认区域

firewall-cmd --list-all #显示默认区域的所有规则

firewall-cmd --get-zone-of-interface=ens33 #显示网络接口ens33对应区域

firewall-cmd --zone=internal --change-interface=ens33 #将网络接口ens33对应区域为internal区域

firewall-cmd --zone=internal --list-interfaces

firewall-cmd --get-zone-of-interface=ens33

firewall-cmd --get-active-zones #显示所有激活区域

(4).服务管理 /usr/lib/firewalld/services XML文件

firewall-cmd --list-services #显示默认区域内允许访问的所有服务

firewall-cmd --add-service=http #设置默认区域允许访问http服务

firewall-cmd --add-service=https #设置默认区域允许访问https服务

firewall-cmd --list-services #查看当前默认区域中已放行的 firewalld 预定义服务

firewall-cmd --zone=internal --add-service=mysql #设置internal1区域允许访问mysql服务

firewall-cmd --zone=internal --remove-service=samba-client #设置internal1区域不允许访问samba-client服务

firewall-cmd --zone=internal --list-services #显示internal区域内允许访问的所有服务

(5).端口管理

firewall-cmd --zone=internal --add-port=443/tcp #在internal区域打开443/tcp端口

firewall-cmd --zone=internal --remove-port=443/tcp #在internal区域禁止443/tcp端口

(6).两种配置模式

Runtime mode:运行时模式

Permanent mode:永久模式

--reload:重新加载防火墙规则并保持状态信息,也就是将永久配置应用为运行时模式。

--permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动firewalld 或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时规则。

--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。

实验

1. 禁止所有主机 ping 服务器(阻断 ICMP echo-request)
bash 复制代码
# 临时生效(internal 区域)
firewall-cmd --zone=internal --add-icmp-block=echo-request
# 永久生效
firewall-cmd --zone=internal --add-icmp-block=echo-request --permanent
firewall-cmd --reload
2. 仅允许 192.168.8.130 访问 SSH 服务
bash 复制代码
# 先移除 internal 区域默认放行的 SSH(避免冲突)
firewall-cmd --zone=internal --remove-service=ssh
firewall-cmd --permanent --zone=internal --remove-service=ssh

# 添加富规则(仅允许指定IP访问SSH,作用于internal区域)
firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.8.130" port protocol="tcp" port="22" accept'
firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.8.130" port protocol="tcp" port="22" accept'
firewall-cmd --reload
3. 允许所有主机访问 Apache 服务
bash 复制代码
# 临时生效(internal 区域)
firewall-cmd --zone=internal --add-service=http
# 永久生效
firewall-cmd --permanent --zone=internal --add-service=http
firewall-cmd --reload

验证 internal 区域的规则(确认配置生效)

bash 复制代码
# 查看 internal 区域所有放行规则(含服务、富规则、ICMP阻断等)
firewall-cmd --zone=internal --list-all

输出中应能看到:

  • icmp-blocks: echo-request(ping 已阻断);
  • rich rules: rule family="ipv4" source address="192.168.8.130" port port="22" protocol="tcp" accept(SSH 仅允许指定IP);
  • services: http(Apache 已放行)。

可选优化(简化后续操作)

若后续所有规则都针对 internal 区域,可将其设为默认区域,避免每次加 --zone=internal

bash 复制代码
# 永久设置默认区域为 internal
firewall-cmd --permanent --set-default-zone=internal
firewall-cmd --reload

# 验证默认区域
firewall-cmd --get-default-zone  # 输出 internal
相关推荐
运维行者_20 分钟前
ISP 企业级带宽计费怎么做?网络流量计费的 6 大核心能力
运维·服务器·网络·数据库·支持向量机·接口隔离原则
数安旭说33 分钟前
企业终端行为审计建设:本地审计 + 网络审计构建完整溯源取证体系
运维·数据安全·软件需求·溯源·审计·网络审计
码农小韩42 分钟前
Linux应用开发(二)——Linux的文件IO
linux·嵌入式软件·嵌入式操作系统·linux应用
liuyunshengsir1 小时前
Codex Harness 安全沙箱机制原理:AI 编程代理如何安全地执行命令
人工智能·安全
Elastic 中国社区官方博客1 小时前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
Horn Still Sounds1 小时前
Linux网络并发服务器模型与SQLite数据库学习笔记
linux·服务器·数据库
10mAh2 小时前
【Linux】CPU 100% 怎么排查?——top、pidstat、jstack 到线程定位实战
linux·运维·服务器
深念Y2 小时前
开机启动优化记录
linux·开机
!chen2 小时前
客户环境 Nginx 配置流式报表与超时排查
运维·nginx
LorryJovens2 小时前
【LAAP论文】Chat GPT6来临:当一个强认知框架下的harness工程遇到强模型的安全对齐应对的调查研究
安全