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
相关推荐
沙滩小绵羊2 小时前
Linux常见命令
linux·运维·服务器
驰羽2 小时前
NAT模式下VMware的虚拟机DNS解析失败的问题解决
linux·网络·dns
菜鸡00013 小时前
安装G2O
linux
iru3 小时前
nginx被报CVE-2025-1695漏洞,检查后反馈是误报
运维·nginx
誰能久伴不乏3 小时前
epoll 学习踩坑:`fcntl` 设置非阻塞到底用 `F_SETFL` 还是 `F_SETFD`?
linux·服务器·网络·c++·tcp/ip
竹等寒4 小时前
TryHackMe-SOC-Section 1:蓝队介绍
安全·网络安全
来鸟 鸣间4 小时前
MIPI D-PHY 理解
linux·音视频·sensor·mipi
么么...4 小时前
在 Ubuntu 上安装 Docker 并部署 MySQL 容器
linux·运维·经验分享·笔记·mysql·ubuntu·docker
黄俊懿4 小时前
【深入理解SpringCloud微服务】Spring-Security作用与原理解析
java·后端·安全·spring·spring cloud·微服务·架构师