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

【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南

目录

一、引言:你的服务器正在被扫描

二、iptables核心概念:四表五链

2.1 理解“表”和“链”

2.2 四表:规则的功能分类

2.3 五链:规则执行的时机

2.4 一个具体的数据包流转示例

三、firewalld:iptables的现代化封装

3.1 为什么要引入firewalld?

3.2 核心概念:区域(Zone)

3.3 临时规则 vs 永久规则

四、firewall-cmd实战操作

4.1 基础服务管理

4.2 端口管理

4.3 富规则(Rich Rule):精确访问控制

4.4 查看与删除规则

4.5 完整配置示例

五、紧急情况下的“拔网线”

六、iptables vs firewalld:如何选择?

七、本篇小结

动手练习

八、下篇预告


一、引言:你的服务器正在被扫描

在第19篇配置SSH密钥登录时,我们提到过:刚买来的云服务器,几分钟内就会收到来自全球的暴力破解尝试。

这些攻击之所以能到达你的服务器,是因为默认情况下,你开放了SSH端口。如果防火墙没有正确配置,攻击者可以不断尝试登录。

防火墙的作用就是:在服务器和外部网络之间设置一道“围墙”,只放行你允许的流量,拒绝所有未经授权的访问。

Linux系统中最主流的防火墙工具有两个:

  • iptables:经典工具,直接操作内核规则,功能强大但稍显复杂

  • firewalld:iptables的现代封装,引入区域(zone)概念,动态管理更友好

它们的底层都基于Linux内核的netfilter框架,只是管理方式不同。

二、iptables核心概念:四表五链

2.1 理解“表”和“链”

iptables用表(table)链(chain)两个维度来组织规则:

  • :按功能的分类。决定了规则能做什么(过滤?地址转换?修改数据包?)

  • :按时机分类。决定了规则在数据包经过的哪个环节生效

可以这样类比:

  • 就像不同的职能部门(财务部、安保部、运输部)

  • 就像进出大楼的检查点(大门口、走廊、电梯口)

  • 数据包就是在大楼中穿行的人,在每个检查点都可能被某个部门拦截处理

2.2 四表:规则的功能分类

表名功能优先级典型场景
raw控制连接追踪,可跳过状态跟踪最高高并发服务器、DDoS防护
mangle修改数据包标记(TTL、TOS等)第二流量整形、QoS控制
nat网络地址转换(SNAT/DNAT)第三端口映射、内网上外网
filter数据包过滤(放行/拒绝)最低最常用,端口访问控制

记忆技巧:优先级从高到低——raw → mangle → nat → filter。filter优先级最低但使用频率最高。

其中filter表是默认表,如果不指定-t参数,iptables命令操作的就是filter表。日常的端口放行、IP黑名单都在这个表中配置。

2.3 五链:规则执行的时机

数据包进入服务器后,会按固定路径经过这些“检查点”:

text

外网数据包 ↓ PREROUTING ← 路由决策前的检查(DNAT在这里做) ↓ [路由决策:这个包是给我的,还是需要转发的?] ↓ ↓ 给我 转发给别人 ↓ ↓ INPUT FORWARD ↓ ↓ 本机应用 转发处理 ↓ ↓ OUTPUT [继续转发] ↓ ↓ POSTROUTING ← 离开本机前的最后检查(SNAT在这里做) ↓ 离开服务器

简单记忆

  • PREROUTING:进门安检(所有入站包先经过这里)

  • INPUT:进自己房间(目标是本机)

  • FORWARD:穿堂而过(本机做路由器时)

  • OUTPUT:从房间出去(本机发出的包)

  • POSTROUTING:出门检票(所有出站包最后经过这里)

2.4 一个具体的数据包流转示例

假设外网用户访问你服务器的80端口(Nginx):

  1. 数据包到达网卡 → 进入PREROUTING链(可以做DNAT修改目标地址)

  2. 内核判断:目标是本机 → 进入INPUT

  3. filter表在INPUT链的规则被匹配:允许80端口 → 放行

  4. 数据包交给Nginx处理

  5. Nginx返回响应 → 进入OUTPUT

  6. 响应包经过POSTROUTING链 → 离开网卡

三、firewalld:iptables的现代化封装

3.1 为什么要引入firewalld?

iptables虽然强大,但有几个痛点:

  • 规则修改是一次性整体替换,修改一条规则需要重新加载全部配置

  • 没有持久化机制,重启后规则丢失(需要iptables-save手动保存)

  • 语法较复杂,新手容易写出有安全漏洞的规则

firewalld就是为了解决这些问题而设计的:

  • 动态管理:修改规则立即生效,不影响现有连接

  • 区域(Zone)概念:为不同网络环境预设信任级别

  • 服务(Service)抽象:可以直接放行http而不需要记端口号

3.2 核心概念:区域(Zone)

firewalld用“区域”来表示网络的信任级别:

区域信任级别默认行为适用场景
trusted最高接受所有连接完全可信任的内网
home较高接受选定连接家庭网络
work较高接受选定连接公司办公网络
internal中等接受选定连接内部网络
public默认拒绝入站连接公共网络(服务器默认用这个)
dmz较低拒绝入站连接隔离区服务器
block极低拒绝所有(回复ICMP)问题IP临时封锁
drop最低丢弃所有(不回复)最高安全级别

查看当前使用的区域

bash

firewall-cmd --get-default-zone # 通常输出 public

重要认知:云服务器默认使用public区域,这个区域默认拒绝所有入站连接,只允许你明确放行的服务或端口。

3.3 临时规则 vs 永久规则

firewalld区分两种规则:

类型特点生效时机重启后
临时规则(无--permanent立即生效立即可用丢失
永久规则(有--permanent写入配置文件--reload后生效保留

最佳实践:先用临时规则测试,确认无误后再加--permanent保存。

四、firewall-cmd实战操作

4.1 基础服务管理

bash

# 查看当前区域的所有规则 firewall-cmd --list-all # 允许HTTP服务(自动放行80端口) sudo firewall-cmd --permanent --add-service=http # 允许HTTPS服务(自动放行443端口) sudo firewall-cmd --permanent --add-service=https # 查看已允许的服务 firewall-cmd --list-services # 移除服务 sudo firewall-cmd --permanent --remove-service=http # 重载配置(让永久规则生效) sudo firewall-cmd --reload

4.2 端口管理

bash

# 开放指定端口 sudo firewall-cmd --permanent --add-port=8080/tcp # 开放端口范围 sudo firewall-cmd --permanent --add-port=3000-3100/tcp # 查看已开放的端口 firewall-cmd --list-ports # 关闭端口 sudo firewall-cmd --permanent --remove-port=8080/tcp # 重载 sudo firewall-cmd --reload

4.3 富规则(Rich Rule):精确访问控制

普通的--add-port会让所有人都能访问该端口。如果需要限制访问来源(如只允许特定IP访问SSH),就需要富规则

bash

# 只允许 192.168.1.100 访问SSH(22端口) sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' # 拒绝某个IP访问所有服务 sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="203.0.113.50" reject' # 允许某个网段访问特定端口 sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="3306" accept' sudo firewall-cmd --reload

富规则格式解读

  • rule family="ipv4":规则作用于IPv4

  • source address="IP":限制来源IP

  • port protocol="tcp" port="端口":限制协议和端口

  • accept / reject / drop:动作

4.4 查看与删除规则

bash

# 查看所有富规则 firewall-cmd --list-rich-rules # 删除富规则(需要完全匹配规则内容) sudo firewall-cmd --permanent --remove-rich-rule=' rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' sudo firewall-cmd --reload

4.5 完整配置示例

以下是一个Web服务器的标准防火墙配置:

bash

# 1. 确认firewalld正在运行 sudo systemctl status firewalld # 2. 查看默认区域 firewall-cmd --get-default-zone # 通常为 public # 3. 开放HTTP和HTTPS(所有IP可访问) sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # 4. SSH只允许公司IP访问(富规则) sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="203.0.113.0/24" port protocol="tcp" port="22" accept' # 5. 移除SSH的通用开放(如果之前开放过) sudo firewall-cmd --permanent --remove-service=ssh # 6. 应用所有配置 sudo firewall-cmd --reload # 7. 验证配置 firewall-cmd --list-all

五、紧急情况下的“拔网线”

如果服务器正在遭受DDoS攻击或发现被入侵,你需要立即切断所有网络流量,给自己留出排查时间。这就是firewalld的panic模式

bash

# 紧急断网(阻断所有入站和出站流量,仅保留已有连接) sudo firewall-cmd --panic-on # 检查是否处于panic模式 firewall-cmd --query-panic # 恢复正常(规则恢复为panic-on之前的状态) sudo firewall-cmd --panic-off

什么时候使用?

  • 发现服务器被DDoS攻击,流量异常

  • 检测到可疑的网络行为(如未知进程在往外传数据)

  • 正在进行安全事件应急响应,需要隔离服务器

⚠️注意:panic模式会阻断所有网络流量。如果你是SSH远程连接的,执行panic-on后你的SSH连接也会断开!所以这个操作通常需要在有带外管理(如VNC控制台)的情况下使用。

六、iptables vs firewalld:如何选择?

对比维度iptablesfirewalld
出现年代Linux 2.4(2001年)RHEL/CentOS 7(2014年)
规则修改整体替换,可能中断连接动态修改,不影响现有连接
持久化需手动iptables-save--permanent自动保存
易用性语法复杂,需要理解表链Zone+Service抽象,更直观
底层直接操作内核netfilter封装iptables或nftables

选择建议

场景推荐
新系统、初学防火墙firewalld
日常端口管理firewalld
复杂NAT规则、特殊协议iptables
老系统(CentOS 6)iptables
Docker/K8s环境直接用iptables(Docker自动管理)

核心原则不要同时运行iptables和firewalld,否则规则会互相冲突。如果你在用CentOS 7+、RHEL 7+或Fedora,直接使用firewalld即可。

七、本篇小结

iptables核心

  • 四表:raw(连接追踪)→ mangle(数据包修改)→ nat(地址转换)→ filter(过滤,最常用)

  • 五链:PREROUTING → INPUT/FORWARD → OUTPUT → POSTROUTING

  • 数据包按表优先级和链顺序依次匹配规则

firewalld核心命令

操作命令
开放服务firewall-cmd --permanent --add-service=http
开放端口firewall-cmd --permanent --add-port=8080/tcp
IP限制访问firewall-cmd --permanent --add-rich-rule='...'
查看规则firewall-cmd --list-all
重载配置firewall-cmd --reload
紧急断网firewall-cmd --panic-on
恢复网络firewall-cmd --panic-off

关键原则

  1. 最小权限:只开放必要的端口,能用富规则限制来源IP就不全局开放

  2. 先测试后保存:临时规则确认无误后,再加--permanent

  3. 永远留后路:修改防火墙前确保有回滚方式(云服务器至少保留VNC控制台通道)

动手练习

bash

# 1. 检查防火墙状态 sudo systemctl status firewalld firewall-cmd --state # 2. 查看当前所有规则 firewall-cmd --list-all # 3. 临时开放一个测试端口 sudo firewall-cmd --add-port=8888/tcp firewall-cmd --list-ports # 4. 移除并确认(不加--permanent,重启消失) sudo firewall-cmd --remove-port=8888/tcp # 5. 练习富规则(仅允许本机IP访问22端口——测试用,确认前不要加--permanent) # firewall-cmd --add-rich-rule='rule family="ipv4" source address="你的IP" port port="22" protocol="tcp" accept' # firewall-cmd --list-rich-rules # firewall-cmd --remove-rich-rule='...' # 用同样的规则内容移除

八、下篇预告

防火墙保护了端口,但真正处理请求的是Web服务器。下一篇我们将进入Nginx入门——高性能Web服务器搭建,学习如何安装Nginx、配置虚拟主机、理解反向代理的概念,以及那个运维最常用的命令——nginx -s reload的平滑重启原理。


延伸思考:为什么firewalld的public区域默认拒绝入站连接?这是安全上的“默认拒绝”原则——凡是没明确允许的,一律禁止。就像一栋大楼,默认所有门都锁着,只有你需要用的房间才配钥匙。这个原则也是纵深防御体系的基础。

http://www.jsqmd.com/news/723648/

相关文章:

  • 知识图谱与LLM融合:GraphRAG工程实践2026
  • 2026年帘式边坡防护网厂靠谱选型技术推荐:环形网生产厂家,环形被动网,覆盖式帘式网,钢丝环形网,实力盘点! - 优质品牌商家
  • 技术赋能浪漫:基于微信云开发的情侣互动小程序全栈实现方案
  • 四川斯华金属丝网:围网工程全流程对接与服务技术推荐 - 优质品牌商家
  • 【node.js | Ubuntu | update】如何升级旧的nodejs本版至最新;如何升级npm
  • Maker Pi Pico开发板评测与嵌入式开发实践
  • 阿里云代理商:阿里云部署的Hermes Agent 钉钉接入指南
  • 名词、形容词、副词后缀
  • 企业自动化革命 ——OpenClaw 如何成为降本增效的 “数字员工”,重塑职场生产力
  • Arduino Portenta X8:首款欧盟CRA合规SoM模块的安全架构解析
  • Vue 3 + TypeScript + Vite 构建现代化后台管理前端工程化实践
  • FineBI直连ClickHouse踩坑实录:从‘不允许上传驱动’到成功配置数据集的完整排错指南
  • 嵌入式Linux AI模型私有化部署完整技术方案
  • Raspberry Pi Zero 2 W与Radxa Zero单板计算机深度对比
  • 等角度采样谐波减速器故障诊断【附代码】
  • 基于事件驱动的轻量级编码计划监控技能设计与实现
  • COW(Copy-on-Write):开抄开抄,哎嘿,我装的
  • Golang goroutine泄漏怎么排查_Golang协程泄漏排查教程【实战】
  • 认证榜单:2026年AI搜索行业GEO优化公司推荐与选型指南
  • 工控人出差必带的 10 样东西,少一样都麻烦
  • 告别传统天线:用紧耦合阵列(TCA)实现超宽带通信的保姆级原理拆解
  • FPGA并行计算与硬件加速实战解析
  • SAM2S:手术视频语义长期跟踪分割技术解析
  • 【2024边缘AI落地关键突破】:.NET 9原生支持TinyML推理+轻量服务网格,仅需128MB RAM即可部署
  • CMOS Ising机器在文本摘要中的高效优化应用
  • 【GraphWorX32】忘记最高权限密码解决方法(9.20)
  • MemOS:内存优先计算范式解析与应用实践
  • 别再到处找PDK了!手把手教你用ADS自带的DemoKit设计10GHz切比雪夫滤波器(附完整工程)
  • Spring Cloud 2027 云原生支持:构建现代化云应用
  • 自动化工作流:全平台社交媒体评论区数据采集与关键词筛选系统