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
相关推荐
百度Geek说4 分钟前
百度流式计算开发平台的降本增效之路
运维·云原生
e***985715 分钟前
MobaXterm全能运维实战指南
运维
落笔映浮华丶24 分钟前
c程序的翻译过程 linux版
linux·c语言
阮松云24 分钟前
code-server 配置maven
java·linux·maven
沈千秋.27 分钟前
【无标题】
安全
last demo35 分钟前
docker容器
运维·docker·容器
Pomelo_刘金38 分钟前
Linux I/O 方式进化史(内核/性能视角):从“睡死”到“就绪队列”再到“完成队列”
linux
提伯斯6461 小时前
解决 PX4 + ROS px4ctrl 「No odom!」自动起飞失败问题
linux·ros·px4·fastlio·mid360·egoplanner
一人の梅雨1 小时前
亚马逊SP-API商品评论接口实战:情感分析+商业洞察挖掘的差异化方案
运维·前端·数据库
网安小白的进阶之路1 小时前
B模块 安全通信网络 第二门课 核心网路由技术-2-BGP-邻居-全互联
网络·安全·智能路由器