Linux系统基础12:防火墙管理 新手超详细教程

发布时间:2026/7/15 4:54:43
Linux系统基础12:防火墙管理 新手超详细教程 Linux 防火墙管理 新手超详细教程目录Linux 防火墙管理 新手超详细教程一、先搞懂防火墙核心基础概念1. 防火墙管什么三个流量方向2. 核心工作逻辑规则匹配 默认策略三种基础动作二、底层核心工具iptables1. 基础语法结构2. 常用操作与匹配条件核心操作命令常用匹配条件3. 新手必学实操举例例 1查看当前所有规则例 2允许 SSH22 端口的 TCP 入站流量例 3设置入站默认策略为丢弃白名单模式例 4只允许特定 IP 访问 SSH白名单例 5拉黑恶意 IP所有流量都丢弃例 6允许 ping 通本机ICMP 协议例 7删除一条规则4. 新手重要注意事项三、新手首选工具ufw1. 基础状态管理例 1查看防火墙状态例 2启用防火墙例 3关闭防火墙例 4重置所有规则恢复默认2. 默认策略新手不用改默认就很安全3. 核心实操端口与 IP 规则例 1开放 SSH 服务22 端口例 2开放网页服务 80 和 443 端口例 3开放一段端口范围例 4只允许指定 IP 访问 SSHIP 白名单例 5禁止某个 IP 访问所有端口例 6限制 SSH 连接速率防暴力破解4. 删除规则5. 新手完整配置流程示例四、区域化管理工具firewalld1. 核心概念区域Zone2. 最容易踩的坑运行时 vs 永久配置3. 基础状态命令例 1查看防火墙运行状态例 2查看当前默认区域例 3查看当前区域的所有生效规则例 4启动 / 停止 firewalld 服务4. 常用规则配置举例例 1永久开放 HTTP 服务80 端口例 2永久开放自定义端口比如 MySQL 3306例 3移除端口 / 服务例 4添加 IP 白名单允许该 IP 所有访问例 5禁止指定 IP 访问富规则五、新手选型与避坑指南1. 我该选哪个工具2. 新手最高频踩坑预警坑 1远程配置先把自己关外面了坑 2firewalld 改完规则不生效坑 3分不清 DROP 和 REJECT坑 4WSL 里防火墙不生效3. 排错小技巧防火墙是 Linux 系统安全的第一道防线核心作用是管控进出系统的网络流量允许合法的访问通过拦截非法、可疑的连接相当于系统的「网络门卫」。Linux 主流的防火墙工具有三层底层核心iptables操作内核 netfilter 模块所有发行版通用功能极强但语法复杂上层简化工具ufwUbuntu/Debian 系列默认专为简化 iptables 设计语法极其简单新手首选firewalldCentOS/RHEL 系列默认引入「区域」概念适合多网络环境支持动态更新本质关系ufw 和 firewalld 都是「壳」底层最终还是调用 iptables或新一代 nftables来执行规则只是把复杂的语法封装成了简单易懂的命令。下面我们从基础原理到每个工具的实操逐层讲解每个命令都配逐成分拆解 真实场景举例 新手避坑提醒。一、先搞懂防火墙核心基础概念1. 防火墙管什么三个流量方向防火墙根据流量的走向分成三类管控新手 99% 的场景只需要管「入站流量」。流量方向对应链名含义日常场景入站流量INPUT外部机器主动发往本机的数据包别人 SSH 连你、别人访问你搭的网站出站流量OUTPUT本机主动发往外部的数据包你访问百度、你下载软件、你连别人的服务器转发流量FORWARD经过本机转发给其他机器的数据包本机当路由器、网关时中转其他设备的流量2. 核心工作逻辑规则匹配 默认策略防火墙是一条条「规则」的集合数据包过来时从上到下按顺序匹配匹配到某条规则直接执行规则对应的动作不再往下检查所有规则都不匹配执行「默认策略」三种基础动作动作效果适用场景ACCEPT允许数据包通过开放合法的端口 / IPDROP直接丢弃数据包不做任何回应拉黑恶意 IP对方会表现为「连接超时」不知道端口是否存在更安全REJECT拒绝数据包并返回「连接被拒绝」的提示明确告诉对方端口不可用调试时用安全最佳实践默认策略设为拒绝只手动开放需要的端口白名单模式比「默认全放只拉黑」安全得多。二、底层核心工具iptablesiptables是 Linux 内核级防火墙的标准管理工具所有发行版都支持嵌入式精简系统也基本自带。它功能极强但语法繁琐、容易写错新手先掌握基础入站规则即可。1. 基础语法结构iptables [-t 表名] 操作命令 [链名] [匹配条件] -j 执行动作表名不写默认是filter表新手 99% 的场景都用这个表专门管控数据包过滤其他表nat、mangle 等新手不用深入。操作命令增、删、查、改规则链名INPUT / OUTPUT / FORWARD对应三个流量方向匹配条件按 IP、端口、协议等条件过滤数据包动作ACCEPT / DROP / REJECT2. 常用操作与匹配条件核心操作命令命令作用-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 eth03. 新手必学实操举例⚠️ 远程操作服务器 / 开发板警告永远先放开 SSH 22 端口再修改默认策略不然直接把自己挡在外面只能通过串口 / 机房恢复。例 1查看当前所有规则iptables -L -n逐成分拆解iptables命令名-L列出所有规则-n以数字形式显示 IP 和端口不解析域名速度更快输出会按 INPUT、FORWARD、OUTPUT 分成三块分别对应三个链的规则。例 2允许 SSH22 端口的 TCP 入站流量iptables -A INPUT -p tcp --dport 22 -j ACCEPT逐成分拆解-A INPUT给 INPUT 入站链追加一条规则-p tcp只匹配 TCP 协议的数据包--dport 22目标端口是 22SSH 默认端口-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 ACCEPT4. 新手重要注意事项规则是临时的iptables 规则默认存在内存里重启系统就会全部消失。保存规则到文件iptables-save /etc/iptables.rules重启后恢复iptables-restore /etc/iptables.rulesUbuntu 可以装iptables-persistent工具实现开机自动加载。规则顺序很重要从上到下匹配匹配到就停。比如前面已经 DROP 了某个 IP后面再写允许也没用。嵌入式场景OK62xx 这类精简嵌入式 Linux 一般只带 iptables没有 ufw/firewalld直接用 iptables 配置即可。三、新手首选工具ufwufw全称 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 端口入站为什么指定 tcpSSH 只用 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 访问 SSHIP 白名单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目标端口是 22proto tcpTCP 协议效果除了 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 25. 新手完整配置流程示例场景新服务器配置防火墙只开放 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四、区域化管理工具firewalldfirewalld是 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 firewalld4. 常用规则配置举例以下都以默认public区域为例不指定--zone就默认操作当前区域。例 1永久开放 HTTP 服务80 端口# 添加永久规则 sudo firewall-cmd --permanent --add-servicehttp # 重新加载让规则立即生效 sudo firewall-cmd --reload拆解--permanent标记为永久规则--add-servicehttp添加 http 服务系统内置了服务对应的端口不用记端口号可用的内置服务可以用firewall-cmd --get-services查看全部。例 2永久开放自定义端口比如 MySQL 3306sudo firewall-cmd --permanent --add-port3306/tcp sudo firewall-cmd --reload格式--add-port端口号/协议例 3移除端口 / 服务# 移除服务 sudo firewall-cmd --permanent --remove-servicehttp # 移除端口 sudo firewall-cmd --permanent --remove-port3306/tcp # 重载生效 sudo firewall-cmd --reload例 4添加 IP 白名单允许该 IP 所有访问sudo firewall-cmd --permanent --add-source192.168.1.100 sudo firewall-cmd --reload例 5禁止指定 IP 访问富规则sudo firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.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 允许规则 → 确认规则生效 → 再启用防火墙 → 不要关闭当前终端新开一个终端测试登录正常再退出。坑 2firewalld 改完规则不生效原因没加--permanent或者加了但没reload。记住口诀加永久必重载。坑 3分不清 DROP 和 REJECTDROP静默丢包对方表现为连接超时不知道端口是否存在更安全隐蔽生产环境用。REJECT明确返回拒绝对方知道端口存在但不让连调试的时候用。坑 4WSL 里防火墙不生效WSL2 的网络是共享 Windows 的流量优先经过 Windows 防火墙WSL 内部的 ufw/iptables 只能管控 WSL 内部的流量要对外管控端口需要在 Windows 防火墙里设置。3. 排错小技巧服务连不上先临时关防火墙测试一下关了就能通99% 是防火墙规则的问题。检查规则顺序iptables/ufw 都是从上到下匹配前面拒绝了后面再允许也没用。嵌入式设备排查先用iptables -L -n看有没有规则嵌入式系统默认一般是空规则、全放行。