iptables与firewalld使用教程:Linux防火墙进阶配置指南

发布于:2025-09-04 ⋅ 阅读:(21) ⋅ 点赞:(0)

更多云服务器知识,尽在hostol.com

你可能已经学会了使用ufw这位友好的“社区保安”,为你服务器的大门,设置了简单的“访客准-入”规则,体验到了“一键开关”的便捷。

但当你的“社区”,要升级成一座拥有“军事区”、“商业区”、“使馆区”的复杂“城市”时;当你想制定更精细、更动态、更专业的“出入境管理条例”时,一位只会看“访客名单”的保安,就显得力不从心了。

今天,我们将深入“城防系统”的“控制核心”,去认识并驾驭那两位真正掌控着你服务器所有网络命脉的、更强大、也更专业的“上古守护神”——iptablesfirewalld。掌握它们,你才算真正地,从一个“防火墙使用者”,晋升为了一个“网络规则的制定者”。


Linux服务器防火墙进阶:详解iptables与firewalld的规则配置

在我们开始之前,你必须先理解一个现实:你之前使用的ufw,其实并不是一个“防火墙”,它更像一个“遥控器”。而它在后台真正“遥控”的那个强大无比的“电视机本体”,在大多数Debian/Ubuntu系统上,就是我们今天要聊的第一位大神——iptables

第一位大神:iptables —— 严谨、强大、无处不在的“网络炼金术士”

iptables是Linux内核中netfilter防火墙框架的“首席大祭司”。它古老、强大、无处不在,几乎所有的Linux发行版都离不开它。它的配置,就像是在编写一套“网络数据包的炼金法则”,拥有无与伦比的灵活性和控制力。

  • 核心比喻:一座拥有三道“魔法门”的城堡 要理解iptables,你只需要记住它的三个核心“链 (Chains)”,你可以把它们想象成城堡的三道“魔法门”:
    1. INPUT (输入链): 这是通往“城堡内部”的吊桥。所有目的地是你服务器本身的数据包(比如,用户访问你的网站,你SSH登录),都必须经过这道门的盘查。
    2. OUTPUT (输出链): 这是从城堡“向外射箭”的箭垛。所有从你服务器主动发出的数据包(比如,你的服务器去请求一个API,或者返回网页给用户),都必须经过这道门的许可。
    3. FORWARD (转发链): 这就像是你允许“盟军”穿过你的城堡,去攻击另一个敌人。它处理的是那些目的地不是你,但需要经过你的数据包。对于一台普通的服务器(而不是路由器),我们通常会把这条路彻底堵死
  • iptables的“魔法咒语” iptables的命令,初看起来像天书,但一旦你理解了它的“语法”,就会发现其中的逻辑之美。1. 查看“规则之书” (-L) 我们先来看看城堡里,现在都有哪些规则。

Bash

sudo iptables -L -v -n

  • -L: List,列出规则。
  • -v: Verbose,显示更详细的信息。
  • -n: Numeric,以数字形式显示IP和端口,更快更清晰。 你可能会看到INPUTFORWARDOUTPUT三张“规则列表”,以及它们的默认“策略 (policy)”,比如policy ACCEPT(默认全部接受)或policy DROP(默认全部丢弃)。

2. 篆刻“准入法则” (-A) 现在,我们要亲手写入一条规则:允许所有来自我们自己家IP(比如22.33.44.55)的SSH连接。

Bash

sudo iptables -A INPUT -p tcp -s 22.33.44.55 --dport 23456 -j ACCEPT

我们来为这句“咒语”进行“解咒”:

  • -A INPUT: Append,在INPUT这条链的末尾,追加一条新规则。
  • -p tcp: protocol,这条规则只适用于tcp协议。
  • -s 22.33.44.55: source,只适用于源地址22.33.44.55的数据包。
  • --dport 23456: destination port,只适用于目标端口23456(我们修改后的SSH端口)的数据包。
  • -j ACCEPT: jump,如果以上条件全部满足,就“跳转”到ACCEPT这个动作,也就是“接受”和“放行”。

3. 擦除“错误法则” (-D) 如果你写错了一条规则,可以用-D (Delete)来删除它。

Bash

# 先查看带行号的规则列表
sudo iptables -L INPUT --line-numbers
# 假设要删除的是第5条规则
sudo iptables -D INPUT 5

iptables的“阿喀琉斯之踵”——规则不持久 iptables有一个让无数新手“一夜回到解放前”的特性:你用命令设置的所有规则,在服务器重启后,都会烟消云散! 为了解决这个问题,我们需要安装一个“记忆法术”:

Bash

# Ubuntu/Debian
sudo apt install iptables-persistent
# 安装过程中,它会问你是否要保存当前的IPv4和IPv6规则,选择“是”。
# 以后每次修改完规则,执行 sudo netfilter-persistent save 即可永久保存。

第二位大神:firewalld —— 更现代、更聪明的“区域安保总管”

firewalld是现代RHEL系(如CentOS 7+)默认的防火墙管理工具。如果说iptables是一位需要你亲自去指导每一个“卫兵”动作的“老将军”,那么firewalld就是一位更聪明的“区域安保总管”。

  • 核心比喻:拥有多个“安全区域”的智能大厦firewalld最核心、也最颠覆性的理念,是“区域 (Zone)”。 它不再把服务器看作一个只有“进”和“出”的简单城堡。它把整栋“智能大厦”(服务器),划分成了多个拥有不同安全等级的“区域”。比如:
    • public (公共区域): 这是大厦的“临街大堂”。默认情况下,安保最严格,只信任最少的服务。所有连接到互联网的网卡,都应该被划入这个区域。
    • internal (内部区域): 这是大厦的“员工办公区”。安保等级可以适当放宽,允许内部员工(内网服务器)之间进行更多的互信访问。
    • drop (黑洞区域): 这是大厦的“垃圾焚化炉”。任何被扔进这个区域的连接,都会被立刻、无声地“焚毁”,连一个“拒绝”的回应都不会给。
  • firewalld的“现代管理指令” (firewall-cmd) firewalld的所有操作,都通过firewall-cmd这个命令来完成,它的语法,比iptables要友好得多。
  • 1. 查看“安保状态”

Bash

sudo firewall-cmd --state       # 查看防火墙是否在运行
sudo firewall-cmd --get-active-zones # 查看当前哪个区域正在被哪个网卡使用
sudo firewall-cmd --zone=public --list-all # 查看public区域的所有规则

2. 发布“许可令” 我们要为public区域,永久地,开放HTTP和HTTPS服务。

Bash

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https- --permanent

  • --add-service=http: firewalld已经预先为我们定义好了像http(80), ssh(22)这些常用服务的“套餐”,非常方便。
  • --permanent: 这是firewalld最棒的特性之一! 加上这个参数,这条规则就会被永久保存。你再也不用担心重启后规则会丢失了。

3. 发布“自定义许可令” 我们要为public区域,永久地,开放我们自定义的8080端口。

Bash

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

4. 让“新规章”立刻生效 所有带了--permanent的修改,都需要执行一次“重新加载”,才能在当前会话中生效。

Bash

sudo firewall-cmd --reload

终极对决:我到底该用谁?

对比维度 iptables firewalld
底层原理 直接操作内核netfilter 通过后端(默认是iptables)来管理规则
管理哲学 “链”式思维,面向数据包 “区域”式思维,面向网络接口
持久化 需要额外工具 (iptables-persistent) 内置 (--permanent 参数)
动态更新 重启服务会中断连接 reload平滑重载,不中断连接
易用性 陡峭,但极其灵活 相对平缓,逻辑清晰

给你最直接的建议:

  • 如果你正在使用CentOS 7+、RHEL 7+等现代企业级发行版: 请拥抱firewalld 它是官方的、推荐的、更现代、也更安全的管理方式。
  • 如果你使用的是Debian/Ubuntu,或者一个极简的Linux环境: 学习iptables是你的必修课。 它是最基础、最通用的“语言”。即使你日常使用ufw,理解iptables的底层逻辑,也会让你在排查疑难杂症时,功力大增。

你,已是“网络规则的立法者”

现在,你不再是一个只会开关ufw这个“总电闸”的“住户”了。你成了一位能读懂底层“电路图”(iptables)、并能熟练操作“智能家居总控面板”(firewalld)的“首席安全工程师”。

你掌握的,是Linux网络安全最核心、最底层的“语法”。拥有了这份知识,你才能真正地,为你那座日益庞大的数字帝国,构建起一道随心所欲、坚不可摧的“次元壁”。