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

【Linux日新月异(五)】CentOS 7防火墙深度解析:firewalld全面指南

🌌提供:
1. Kimi K2 Thinking(网站: 大语言模型(Large Language Model, LLM),是当前人工智能领域的重要技术分支,专注于自然语言处理和生成任务。)【开源】「AL」〖✿✿✿✿✿〗
🔔说明: 本文内容由Kimi K2生成。AI创作虽经校对,仍难免疏漏或偏颇之处。若您发现错漏、或有任何建议,恳请不吝赐教。您的每一次指正,都是我改进与成长的重要指引。
📓摘要:
   略...(有好建议的可以留言哦~~~(✿◕‿◕✿))


🔥 CentOS 7防火墙深度解析:firewalld全面指南

CentOS 7摒弃了传统iptables,采用firewalld作为默认防火墙管理工具!底层仍调用iptables,但提供了动态管理、区域化配置等高级特性。


一、🔍 核心概念速览

1. 区域(Zone)- 安全领域的划分

firewall-cmd --get-zones
# 输出:block dmz drop external home internal public trusted work
  • public :默认区域,不信任的网络
  • trusted :信任所有连接
  • drop :丢弃所有进入包
  • home/internal :家庭/内部网络

2. 服务(Service)- 预定义应用规则

firewall-cmd --get-services
# 包含:ssh http https mysql redis 等预配置服务

二、📊 状态查看命令大全

1. 查看防火墙运行状态

systemctl status firewalld
firewall-cmd --state          # 简洁输出:running/not running

2. 查看当前活动区域

firewall-cmd --get-active-zones
# 输出示例:
# public
#   interfaces: eth0

3. 查看默认区域

firewall-cmd --get-default-zone

4. 查看指定区域规则

firewall-cmd --zone=public --list-all
# 输出解析:
# public (active)
#   target: default
#   icmp-block-inversion: no
#   interfaces: eth0
#   sources: 
#   services: ssh dhcpv6-client
#   ports: 8080/tcp
#   protocols: 
#   masquerade: no
#   forward-ports: 
#   source-ports: 
#   icmp-blocks: 
#   rich rules:

5. 查看所有区域详情

firewall-cmd --list-all-zones

6. 查询端口是否开放

firewall-cmd --zone=public --query-port=8080/tcp
# 输出:yes 或 no# 查询服务是否开放
firewall-cmd --zone=public --query-service=ssh

三、🛠️ 核心操作命令与语法

1. 启动/停止/重启防火墙

systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
systemctl reload firewalld      # 重载配置(不中断连接)

2. 设置开机自启

systemctl enable firewalld
systemctl disable firewalld

3. 添加/移除服务

# 临时添加(立即生效,重启后失效)
firewall-cmd --zone=public --add-service=http# 永久添加(需reload)
firewall-cmd --zone=public --add-service=http --permanent# 移除服务
firewall-cmd --zone=public --remove-service=http --permanent

4. 添加/移除端口

# 临时开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp# 永久开放8080-8090端口范围
firewall-cmd --zone=public --add-port=8080-8090/tcp --permanent# 开放UDP端口
firewall-cmd --zone=public --add-port=53/udp --permanent# 移除端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

5. 重新加载配置

firewall-cmd --reload
# 注意:--reload不会中断已有连接,--complete-reload会中断!

四、🎯 实战案例深度解析

案例1:开放Web服务器

# 需求:开放80端口,且永久生效
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload# 验证:
firewall-cmd --zone=public --query-service=http  # 输出: yes
netstat -tuln | grep 80                          # 确认服务监听

解析:使用预定义服务比直接开放端口更规范,因为服务配置文件包含端口和协议信息。


案例2:开放自定义应用端口

# 需求:部署在8080的Java应用
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload# 查看效果:
firewall-cmd --zone=public --list-ports
# 输出:8080/tcp

案例3:限制特定IP访问SSH

# 需求:仅允许192.168.1.100访问SSH
firewall-cmd --zone=public --remove-service=ssh --permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
firewall-cmd --reload# 查看富规则:
firewall-cmd --zone=public --list-rich-rules

富规则语法结构

rule [family="ipv4|ipv6"][source address="address/mask"][destination address="address/mask"][port port="port" protocol="tcp|udp"][service name="service"][log [prefix="prefix"] [level="loglevel"]][accept|reject|drop]

案例4:端口转发

# 需求:将公网8080转发到内网80
firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
firewall-cmd --reload# 需开启IP伪装(NAT)
firewall-cmd --zone=public --add-masquerade --permanent

案例5:临时测试端口

# 测试期间开放,不写入永久配置
firewall-cmd --zone=public --add-port=3000/tcp# 测试完成后移除
firewall-cmd --zone=public --remove-port=3000/tcp
# 无需reload,立即生效

案例6:创建自定义服务

# 1. 复制模板
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/myapp.xml# 2. 编辑服务文件
vi /etc/firewalld/services/myapp.xml
# 内容:
<?xml version="1.0" encoding="utf-8"?>
<service><short>MyApp</short><description>My custom application</description><port protocol="tcp" port="8888"/>
</service># 3. 重新加载配置
firewall-cmd --reload# 4. 使用自定义服务
firewall-cmd --zone=public --add-service=myapp --permanent
firewall-cmd --reload

五、⚠️ 关键注意事项

1. 🔥 致命误区:–permanent与立即生效

# 错误示范:只加--permanent,忘记reload
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 此时端口并未开放!必须执行:
firewall-cmd --reload

最佳实践:先临时测试,确认无误后再加--permanent

firewall-cmd --zone=public --add-port=3306/tcp          # 测试
# 验证正常后
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

2. 🔥 高危操作:生产环境防火墙关闭

# 极度危险!等同于服务器裸奔
systemctl stop firewalld
systemctl disable firewalld

替代方案:如果必须调试,临时添加信任IP

firewall-cmd --zone=trusted --add-source=你的IP/32 --permanent
firewall-cmd --reload

3. 🎯 区域选择策略

# 错误:所有服务都开在public区域
# 正确:根据网络环境选择区域# 内网服务器:
firewall-cmd --set-default-zone=internal# DMZ服务器:
firewall-cmd --set-default-zone=dmz

4. 🔍 验证端口真实开放

firewalld放行 ≠ 服务已监听!必须双重检查:

# 1. 检查防火墙
firewall-cmd --zone=public --query-port=8080/tcp# 2. 检查服务监听
ss -tuln | grep 8080
# 或
netstat -tuln | grep 8080# 3. 外部测试(在另一台机器)
telnet 服务器IP 8080
# 或
nc -vz 服务器IP 8080

5. 💾 配置文件位置

# 系统服务定义(不要修改)
/usr/lib/firewalld/services/# 自定义服务/配置(推荐)
/etc/firewalld/services/# 当前配置
/etc/firewalld/zones/public.xml

6. 🔧 防火墙与Docker冲突

# Docker会绕过firewalld直接操作iptables
# 解决方案:使用Docker的firewallD驱动
# 在/etc/docker/daemon.json中添加:
{"iptables": true,"ip6tables": true
}

7. 📈 性能影响

  • 规则越多,性能损耗越大
  • 建议使用--reload而非--complete-reload
  • 富规则(rich rules)比普通规则性能稍低

8. 🚫 拒绝规则优先

firewalld规则匹配顺序:

  1. 源地址匹配
  2. 富规则(按顺序)
  3. 服务/端口规则
  4. 默认区域策略

陷阱:富规则的拒绝可能覆盖后面的允许规则!


六、🎓 高级技巧

1. 运行时配置快照

# 保存当前配置
firewall-cmd --runtime-to-permanent# 锁定配置(防止修改)
firewall-cmd --lockdown-on

2. 查看iptables底层规则

# 查看firewalld生成的iptables规则
iptables -L -n -v | grep 8080

3. 应急处理:恢复默认

# 清空所有自定义规则
firewall-cmd --set-default-zone=public
firewall-cmd --runtime-to-permanent
firewall-cmd --reload

七、📋 快速备忘清单

操作命令是否持久化
查看状态firewall-cmd --state-
开放端口firewall-cmd --add-port=8080/tcp临时
永久开放端口firewall-cmd --add-port=8080/tcp --permanent
移除端口firewall-cmd --remove-port=8080/tcp --permanent
开放服务firewall-cmd --add-service=http --permanent
重载配置firewall-cmd --reload-
查看区域firewall-cmd --get-active-zones-

总结:firewalld是强大的动态防火墙工具,但权限管理要遵循**“最小开放、明确目的、测试验证”**三大原则!生产环境慎用777,防火墙慎用全开!



📖原文: 忘不了就忘不了吧,过往的羁绊弥足珍贵,但时间也会让我们结下新的缘分。-- 辰南《神墓年番》

⌛怡然: ...


🪁 LuminKu looks forward to seeing you again 🌌

http://www.dtcms.com/a/615252.html

相关文章:

  • 广州建设工程质量安全网站东莞互联网
  • C语言编译程序的工作原理与优化技巧 | 探索C语言编译过程中的核心技术
  • AlphaSteer: Learning Refusal Steering with Principled Null-Space Constraint
  • [c++]赋值运算符重载
  • 正负反馈的判别
  • 怎么自己建一个网站最有效的恶意点击
  • 专业的高端企业网站一起看在线观看免费
  • 【Git】2025全图文详解安装教程
  • 松江手机网站开发南阳网站推广排名
  • 关于网站设计的书籍哈尔滨网站制作软件
  • 好用的wordpress谷歌推广优化
  • 玄武网站制作收费报价东莞房产网
  • 九州建网站厦门seo排名公司
  • 浦江县建设局网站网站模板如何修改
  • 解码IPC-消息队列、共享内存与信号量集
  • 【MicroPython编程-ESP32篇】-WS2812B全彩LED驱动
  • 娱乐网站建设公司wordpress伪静态 page
  • 技术支持 上海做网站wordpress 文章 批量 分类
  • 惠州做网站的公司有哪些中建国际建设有限公司官网是央企吗
  • 一步一步学习使用LiveBindings() 实现对JSON数据的绑定
  • 优秀网站赏析网站开发属于专利吗
  • 网站任务界面郑州网站制作开发
  • dede网站版权信息修改平面设计师参考网站
  • 30岁转行做网站设计免费手机看电影app哪个软件好
  • 视频网站源码下载免费下载logo素材
  • 怎么学好网站开发wordpress oa插件下载
  • AI理论知识系统复习(6):梯度饱和、梯度消失、梯度爆炸
  • 昆明微网站搭建哪家好廊坊企业官网搭建
  • 吉林住房和城乡建设厅网站网站设计与规划
  • QT c++ 的数据类型有哪些?