Linux系统基础12:防火墙管理 新手超详细教程
2026/7/15 4:54:14 网站建设 项目流程

Linux 防火墙管理 新手超详细教程

目录

Linux 防火墙管理 新手超详细教程

一、先搞懂:防火墙核心基础概念

1. 防火墙管什么?三个流量方向

2. 核心工作逻辑:规则匹配 + 默认策略

三种基础动作

二、底层核心工具:iptables

1. 基础语法结构

2. 常用操作与匹配条件

核心操作命令

常用匹配条件

3. 新手必学实操举例

例 1:查看当前所有规则

例 2:允许 SSH(22 端口)的 TCP 入站流量

例 3:设置入站默认策略为丢弃(白名单模式)

例 4:只允许特定 IP 访问 SSH(白名单)

例 5:拉黑恶意 IP,所有流量都丢弃

例 6:允许 ping 通本机(ICMP 协议)

例 7:删除一条规则

4. 新手重要注意事项

三、新手首选工具:ufw

1. 基础状态管理

例 1:查看防火墙状态

例 2:启用防火墙

例 3:关闭防火墙

例 4:重置所有规则,恢复默认

2. 默认策略(新手不用改,默认就很安全)

3. 核心实操:端口与 IP 规则

例 1:开放 SSH 服务(22 端口)

例 2:开放网页服务 80 和 443 端口

例 3:开放一段端口范围

例 4:只允许指定 IP 访问 SSH(IP 白名单)

例 5:禁止某个 IP 访问所有端口

例 6:限制 SSH 连接速率(防暴力破解)

4. 删除规则

5. 新手完整配置流程示例

四、区域化管理工具:firewalld

1. 核心概念:区域(Zone)

2. 最容易踩的坑:运行时 vs 永久配置

3. 基础状态命令

例 1:查看防火墙运行状态

例 2:查看当前默认区域

例 3:查看当前区域的所有生效规则

例 4:启动 / 停止 firewalld 服务

4. 常用规则配置举例

例 1:永久开放 HTTP 服务(80 端口)

例 2:永久开放自定义端口(比如 MySQL 3306)

例 3:移除端口 / 服务

例 4:添加 IP 白名单,允许该 IP 所有访问

例 5:禁止指定 IP 访问(富规则)

五、新手选型与避坑指南

1. 我该选哪个工具?

2. 新手最高频踩坑预警

坑 1:远程配置先把自己关外面了

坑 2:firewalld 改完规则不生效

坑 3:分不清 DROP 和 REJECT

坑 4:WSL 里防火墙不生效

3. 排错小技巧


防火墙是 Linux 系统安全的第一道防线,核心作用是管控进出系统的网络流量:允许合法的访问通过,拦截非法、可疑的连接,相当于系统的「网络门卫」。

Linux 主流的防火墙工具有三层:

  1. 底层核心iptables(操作内核 netfilter 模块,所有发行版通用,功能极强但语法复杂)
  2. 上层简化工具
    • ufw:Ubuntu/Debian 系列默认,专为简化 iptables 设计,语法极其简单,新手首选
    • firewalld:CentOS/RHEL 系列默认,引入「区域」概念,适合多网络环境,支持动态更新

本质关系:ufw 和 firewalld 都是「壳」,底层最终还是调用 iptables(或新一代 nftables)来执行规则,只是把复杂的语法封装成了简单易懂的命令。

下面我们从基础原理到每个工具的实操,逐层讲解,每个命令都配逐成分拆解 + 真实场景举例 + 新手避坑提醒


一、先搞懂:防火墙核心基础概念

1. 防火墙管什么?三个流量方向

防火墙根据流量的走向,分成三类管控,新手 99% 的场景只需要管「入站流量」。

流量方向对应链名含义日常场景
入站流量INPUT外部机器主动发往本机的数据包别人 SSH 连你、别人访问你搭的网站
出站流量OUTPUT本机主动发往外部的数据包你访问百度、你下载软件、你连别人的服务器
转发流量FORWARD经过本机转发给其他机器的数据包本机当路由器、网关时,中转其他设备的流量

2. 核心工作逻辑:规则匹配 + 默认策略

防火墙是一条条「规则」的集合,数据包过来时从上到下按顺序匹配

  1. 匹配到某条规则:直接执行规则对应的动作,不再往下检查
  2. 所有规则都不匹配:执行「默认策略」
三种基础动作
动作效果适用场景
ACCEPT允许数据包通过开放合法的端口 / IP
DROP直接丢弃数据包,不做任何回应拉黑恶意 IP,对方会表现为「连接超时」,不知道端口是否存在,更安全
REJECT拒绝数据包,并返回「连接被拒绝」的提示明确告诉对方端口不可用,调试时用

安全最佳实践:默认策略设为拒绝,只手动开放需要的端口(白名单模式),比「默认全放,只拉黑」安全得多。


二、底层核心工具:iptables

iptables是 Linux 内核级防火墙的标准管理工具,所有发行版都支持,嵌入式精简系统也基本自带。它功能极强,但语法繁琐、容易写错,新手先掌握基础入站规则即可。

1. 基础语法结构

iptables [-t 表名] 操作命令 [链名] [匹配条件] -j 执行动作
  • 表名:不写默认是filter表,新手 99% 的场景都用这个表(专门管控数据包过滤);其他表(nat、mangle 等)新手不用深入。
  • 操作命令:增、删、查、改规则
  • 链名:INPUT / OUTPUT / FORWARD,对应三个流量方向
  • 匹配条件:按 IP、端口、协议等条件过滤数据包
  • 动作:ACCEPT / DROP / REJECT

2. 常用操作与匹配条件

核心操作命令
命令作用
-L查看当前链的所有规则
-A追加一条规则到链的末尾
-I插入一条规则到链的开头(优先级最高,先匹配)
-D删除指定规则
-P设置链的默认策略
常用匹配条件
条件作用示例
-p 协议匹配网络协议-p tcp-p udp-p icmp
--dport 端口匹配目标端口(入站时是本机被访问的端口)--dport 22
-s 源IP匹配发送方的 IP 地址-s 192.168.1.100
-i 网卡名匹配从哪个网卡进来的数据包-i eth0

3. 新手必学实操举例

⚠️ 远程操作服务器 / 开发板警告:永远先放开 SSH 22 端口,再修改默认策略!不然直接把自己挡在外面,只能通过串口 / 机房恢复。

例 1:查看当前所有规则
iptables -L -n
  • 逐成分拆解
    • iptables:命令名
    • -L:列出所有规则
    • -n:以数字形式显示 IP 和端口,不解析域名,速度更快
  • 输出会按 INPUT、FORWARD、OUTPUT 分成三块,分别对应三个链的规则。
例 2:允许 SSH(22 端口)的 TCP 入站流量
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 逐成分拆解
    • -A INPUT:给 INPUT 入站链追加一条规则
    • -p tcp:只匹配 TCP 协议的数据包
    • --dport 22:目标端口是 22(SSH 默认端口)
    • -j ACCEPT:匹配到就执行「允许通过」的动作
  • 效果:外部机器可以通过 22 端口 SSH 连接到本机。
例 3:设置入站默认策略为丢弃(白名单模式)
iptables -P INPUT DROP
  • 拆解-P INPUT DROP给 INPUT 链设置默认策略为 DROP
  • 效果:所有没被规则明确允许的入站数据包,全部直接丢弃,安全性最高。
  • 🚨 再次提醒:执行这条之前,必须已经放开了 SSH 端口!
例 4:只允许特定 IP 访问 SSH(白名单)
iptables -I INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
  • 拆解
    • -I INPUT:插入到入站链最开头,优先匹配
    • -s 192.168.1.100:只有源 IP 是 192.168.1.100 才匹配
    • 后面的端口和协议和之前一致
  • 效果:只有 192.168.1.100 这台机器能 SSH 连过来,其他 IP 都被默认策略挡住,是最安全的远程登录方式。
例 5:拉黑恶意 IP,所有流量都丢弃
iptables -I INPUT -s 192.168.1.200 -j DROP
  • 效果:192.168.1.200 这个 IP 发的所有包直接丢掉,完全访问不了本机。
例 6:允许 ping 通本机(ICMP 协议)
iptables -A INPUT -p icmp -j ACCEPT
  • 效果:别人执行ping 你的IP能收到回应,方便调试网络。
例 7:删除一条规则

方法一:按编号删除(推荐,不容易写错)

# 先查看规则编号 iptables -L -n --line-numbers # 删除 INPUT 链第 3 条规则 iptables -D INPUT 3

方法二:按规则内容删除

iptables -D INPUT -p tcp --dport 80 -j ACCEPT

4. 新手重要注意事项

  1. 规则是临时的:iptables 规则默认存在内存里,重启系统就会全部消失
    • 保存规则到文件:iptables-save > /etc/iptables.rules
    • 重启后恢复:iptables-restore < /etc/iptables.rules
    • Ubuntu 可以装iptables-persistent工具实现开机自动加载。
  2. 规则顺序很重要:从上到下匹配,匹配到就停。比如前面已经 DROP 了某个 IP,后面再写允许也没用。
  3. 嵌入式场景:OK62xx 这类精简嵌入式 Linux 一般只带 iptables,没有 ufw/firewalld,直接用 iptables 配置即可。

三、新手首选工具:ufw

ufw全称 Uncomplicated Firewall,是 Ubuntu/Debian 系列默认的防火墙工具,专门为了简化 iptables 设计,语法极其简单,是新手学习防火墙的最佳选择。

WSL 里的 Ubuntu 也自带 ufw,但注意:WSL2 网络共享 Windows 内核,流量优先经过 Windows 防火墙,ufw 的管控效果有限;实体机 / 虚拟机 / 服务器上的 Ubuntu 完全生效。

1. 基础状态管理

例 1:查看防火墙状态
sudo ufw status
  • 输出Status: inactive代表未启用,Status: active代表已启用
  • 启用状态下会列出当前所有生效的规则
例 2:启用防火墙
sudo ufw enable
  • ⚠️远程操作必须先放开 SSH 端口再执行
  • 执行后会提示「可能中断现有 SSH 连接」,输入y回车确认即可。
例 3:关闭防火墙
sudo ufw disable
例 4:重置所有规则,恢复默认
sudo ufw reset
  • 清空所有自定义规则,回到初始状态。

2. 默认策略(新手不用改,默认就很安全)

ufw 出厂默认就是最安全的白名单模式:

  • 入站默认:deny(全部拒绝)
  • 出站默认:allow(全部允许)

也就是:你主动访问外面不受限制,外面主动连你默认全被挡住,需要什么端口就手动开放什么端口,完全符合最小权限原则。


3. 核心实操:端口与 IP 规则

语法非常直观:ufw 动作 条件,动作主要有allow(允许)、deny(拒绝)、limit(限流)。

例 1:开放 SSH 服务(22 端口)

写法一:按服务名(ufw 内置了常用服务和端口的对应关系)

sudo ufw allow ssh

写法二:按端口 + 协议(更精准,推荐)

sudo ufw allow 22/tcp
  • 拆解:允许 TCP 协议的 22 端口入站
  • 为什么指定 tcp:SSH 只用 TCP 协议,不写的话会同时放开 TCP 和 UDP,没必要。
例 2:开放网页服务 80 和 443 端口
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
  • 对应 HTTP 和 HTTPS 服务,搭网站必开。
例 3:开放一段端口范围

比如开放 1000~2000 的所有 TCP 端口:

sudo ufw allow 1000:2000/tcp
例 4:只允许指定 IP 访问 SSH(IP 白名单)
sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
  • 逐成分拆解
    • allow from 192.168.1.100:只有源 IP 是这个地址才允许
    • to any port 22:目标端口是 22
    • proto tcp:TCP 协议
  • 效果:除了 192.168.1.100,其他 IP 都连不上 SSH,生产环境推荐这么配置。
例 5:禁止某个 IP 访问所有端口
sudo ufw deny from 192.168.1.200
  • 效果:这个 IP 的所有入站流量全部拒绝。
例 6:限制 SSH 连接速率(防暴力破解)
sudo ufw limit ssh/tcp
  • 作用:同一个 IP 30 秒内最多发起 6 次 SSH 连接,超过就拒绝,能有效防止暴力破解密码。
  • 只要开了 SSH 远程登录,都建议加上这条规则。

4. 删除规则

方法一:按规则内容删除

sudo ufw delete allow 80/tcp
  • 拆解:在原来的允许命令前面加delete,就能删除对应规则。

方法二:按编号删除(不容易错)

# 先查看带编号的规则列表 sudo ufw status numbered # 删除第 2 条规则 sudo ufw delete 2

5. 新手完整配置流程示例

场景:新服务器配置防火墙,只开放 SSH 和网页端口,限制 SSH 暴力破解

# 1. 先放开SSH,防止启用后自己断连 sudo ufw allow 22/tcp # 2. 开启SSH速率限制,防暴力破解 sudo ufw limit 22/tcp # 3. 开放网页端口 sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 4. 启用防火墙 sudo ufw enable # 5. 查看状态,确认规则都在 sudo ufw status

四、区域化管理工具:firewalld

firewalld是 CentOS、RHEL、Rocky Linux 等红帽系发行版的默认防火墙,和 ufw 同级,都是上层简化工具。它的核心特点是「区域(Zone)」设计:不同网络环境对应不同安全级别的区域,网卡可以归属到不同区域,适合经常切换网络、多网卡的场景。

1. 核心概念:区域(Zone)

系统预设了多个安全等级不同的区域,常用的有:

区域安全等级说明
drop最高所有入站包全部丢弃,只允许出站,相当于隐身模式
block入站全部拒绝,返回拒绝提示
public中(默认)公共网络环境,只开放手动添加的端口 / 服务,默认最常用
home/internal中低家庭 / 内部局域网,信任度高,开放更多服务
trusted最低完全信任,所有流量都允许

新手只用默认的public区域就足够了。

2. 最容易踩的坑:运行时 vs 永久配置

firewalld 的规则分两种:

  • 运行时配置:默认修改的就是这个,立即生效,但重启 firewalld 服务就消失
  • 永久配置:加--permanent参数,不立即生效,重启服务后永久保留

✅ 标准操作流程:加--permanent写规则 → 执行firewall-cmd --reload加载生效 → 既立即生效,又永久保存。


3. 基础状态命令

例 1:查看防火墙运行状态
sudo firewall-cmd --state
  • 输出running代表正在运行,not running代表未启动。
例 2:查看当前默认区域
sudo firewall-cmd --get-default-zone
  • 默认一般是public
例 3:查看当前区域的所有生效规则
sudo firewall-cmd --list-all
  • 会输出区域名、绑定的网卡、开放的服务、开放的端口等完整信息。
例 4:启动 / 停止 firewalld 服务
# 启动服务 sudo systemctl start firewalld # 设置开机自启 sudo systemctl enable firewalld # 停止服务 sudo systemctl stop firewalld

4. 常用规则配置举例

以下都以默认public区域为例,不指定--zone就默认操作当前区域。

例 1:永久开放 HTTP 服务(80 端口)
# 添加永久规则 sudo firewall-cmd --permanent --add-service=http # 重新加载,让规则立即生效 sudo firewall-cmd --reload
  • 拆解
    • --permanent:标记为永久规则
    • --add-service=http:添加 http 服务,系统内置了服务对应的端口,不用记端口号
  • 可用的内置服务可以用firewall-cmd --get-services查看全部。
例 2:永久开放自定义端口(比如 MySQL 3306)
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
  • 格式:--add-port=端口号/协议
例 3:移除端口 / 服务
# 移除服务 sudo firewall-cmd --permanent --remove-service=http # 移除端口 sudo firewall-cmd --permanent --remove-port=3306/tcp # 重载生效 sudo firewall-cmd --reload
例 4:添加 IP 白名单,允许该 IP 所有访问
sudo firewall-cmd --permanent --add-source=192.168.1.100 sudo firewall-cmd --reload
例 5:禁止指定 IP 访问(富规则)
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.200' drop" sudo firewall-cmd --reload
  • 效果:丢弃 192.168.1.200 的所有入站数据包。

五、新手选型与避坑指南

1. 我该选哪个工具?

系统 / 场景推荐工具理由
Ubuntu / Debian / WSLufw语法最简单,新手零门槛,系统默认自带
CentOS / RHEL / Rockyfirewalld系统默认,区域化管理适合服务器场景
嵌入式 Linux / 精简系统iptables体积小,通用性强,上层工具一般没装

❌ 不要多个工具混着用!选一个就好,同时启用多个会导致规则混乱、异常。

2. 新手最高频踩坑预警

坑 1:远程配置先把自己关外面了
  • 错误操作:直接启用防火墙,没先开放 SSH 端口。
  • 后果:SSH 连接直接断开,再也连不上,只能通过串口 / 机房重装 / 控制台恢复。
  • 正确顺序:永远先加 SSH 允许规则 → 确认规则生效 → 再启用防火墙 → 不要关闭当前终端,新开一个终端测试登录正常再退出。
坑 2:firewalld 改完规则不生效
  • 原因:没加--permanent,或者加了但没reload
  • 记住口诀:加永久,必重载。
坑 3:分不清 DROP 和 REJECT
  • DROP:静默丢包,对方表现为连接超时,不知道端口是否存在,更安全隐蔽,生产环境用。
  • REJECT:明确返回拒绝,对方知道端口存在但不让连,调试的时候用。
坑 4:WSL 里防火墙不生效

WSL2 的网络是共享 Windows 的,流量优先经过 Windows 防火墙,WSL 内部的 ufw/iptables 只能管控 WSL 内部的流量,要对外管控端口需要在 Windows 防火墙里设置。

3. 排错小技巧

  • 服务连不上,先临时关防火墙测试一下:关了就能通,99% 是防火墙规则的问题。
  • 检查规则顺序:iptables/ufw 都是从上到下匹配,前面拒绝了后面再允许也没用。
  • 嵌入式设备排查:先用iptables -L -n看有没有规则,嵌入式系统默认一般是空规则、全放行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询