Ubuntu 24.04 LTS ufw防火墙完整配置指南(新手入门+运维必备)
Ubuntu 24.04 LTS ufw防火墙完整配置指南(新手入门+运维必备)
在Linux服务器运维中,防火墙是保障系统安全的第一道防线。对于Ubuntu 24.04 LTS系统而言,ufw(Uncomplicated Firewall,简易防火墙)是官方内置的轻量级防火墙工具,它基于iptables进行封装,无需掌握复杂的iptables语法,通过简洁的命令即可实现端口管理、IP限制、访问控制等核心防护功能。
本文将从基础操作到进阶配置,再到常见问题排查,全方位拆解ufw的使用方法,结合实测案例说明每一步操作的意义,适合Linux新手快速上手,也可作为运维人员的日常参考手册,确保服务器端口安全、合理开放。
一、前提说明(新手必看,避免踩坑)
- 预装情况:ufw 已默认预装在 Ubuntu 24.04 LTS 系统中,无需额外安装;若检测到缺失(执行ufw命令提示不存在),可通过
sudo apt install ufw -y快速安装。 - 权限要求:所有ufw配置命令均需root权限,全程使用sudo前缀执行,避免权限不足导致操作失败。
- 核心警告:若通过SSH远程连接服务器配置ufw,务必先配置SSH允许规则,再启用防火墙!否则会直接被锁机,无法远程连接(只能通过本地终端/虚拟机控制台恢复)。
二、基础操作:启用/禁用/状态查看(入门必备)
ufw的基础操作主要围绕“状态查看”“启用”“禁用”“重置”展开,命令简洁,执行后即时反馈结果,新手可快速上手。
1. 查看ufw当前状态(最常用)
通过不同参数,可查看简洁状态、详细状态或带编号的规则,适配不同场景需求:
# 简洁查看(仅显示防火墙状态和核心规则)sudo ufw status # 详细查看(显示规则、端口、协议、来源IP、默认策略等)sudo ufw status verbose # 数字端口+编号显示(不显示服务名,规则前加编号,方便后续删除)sudo ufw status numbered 默认情况下,ufw状态为 inactive(未启用),无任何自定义规则;启用后状态变为 active,并显示已配置的所有规则。
2. 启用ufw防火墙
# 启用防火墙,默认策略:拒绝所有入站连接,允许所有出站连接sudo ufw enable启用成功后,终端会输出:Firewall is active and enabled on system startup,表示防火墙已激活,且设置为开机自启(无需额外配置)。
3. 禁用ufw防火墙
若需临时关闭防火墙(如调试服务、排查端口问题),执行以下命令:
sudo ufw disable 禁用后,所有ufw规则暂时失效,系统不再进行端口访问控制,调试完成后建议重新启用。
4. 重置ufw配置(恢复默认)
若规则配置混乱、出现冲突,或想重新配置ufw,可执行重置命令(谨慎使用,会清除所有自定义规则):
sudo ufw reset 重置后,ufw恢复为默认状态(inactive),所有允许/拒绝规则、端口配置全部清空,可重新开始配置。
三、核心配置:端口/服务规则管理(重点)
ufw支持通过「端口号」或「服务名」配置访问规则(服务名对应 /etc/services 文件,如ssh=22、http=80、https=443),规则优先级遵循:更具体的规则 > 通用规则,且规则添加后立即生效(需确保ufw处于active状态)。
1. 允许入站连接(常用场景,必学)
入站连接控制是ufw的核心功能,以下是日常运维中最常用的允许规则,覆盖远程管理、网页服务、数据库等场景:
# 1. 允许特定端口(默认TCP协议,可指定UDP)sudo ufw allow 22/tcp # 允许SSH(22端口,远程连接必备,重中之重)sudo ufw allow 80/tcp # 允许HTTP(80端口,静态网页服务)sudo ufw allow 443/tcp # 允许HTTPS(443端口,加密网页服务,推荐)sudo ufw allow 3306/tcp # 允许MySQL(3306端口,数据库服务)sudo ufw allow 5432/tcp # 允许PostgreSQL(5432端口,开源数据库)sudo ufw allow 8080/udp # 示例:允许UDP协议的8080端口(按需配置)# 2. 允许特定端口范围(如1000-2000端口,TCP协议)sudo ufw allow 1000:2000/tcp # 3. 允许特定服务名(等价于对应端口,更直观,适合新手)sudo ufw allow ssh# 等价于allow 22/tcpsudo ufw allow http # 等价于allow 80/tcpsudo ufw allow https # 等价于allow 443/tcp# 4. 允许特定IP访问所有端口(信任单个IP,如内网管理机192.168.1.100)sudo ufw allow from 192.168.1.100 # 5. 允许特定网段访问特定端口(如允许内网192.168.1.0/24网段访问SSH)sudo ufw allow from 192.168.1.0/24 to any port 22/tcp # 6. 允许特定网卡的入站连接(如仅允许eth0网卡的80端口入站)sudo ufw allow in on eth0 to any port 80/tcp 2. 拒绝入站连接
ufw默认策略已拒绝所有未明确允许的入站连接,若需针对性拒绝某个IP、端口(如黑名单、防止恶意扫描),可执行以下命令:
# 拒绝某个IP访问所有端口(添加IP到黑名单,如192.168.1.200)sudo ufw deny from 192.168.1.200 # 拒绝所有IP访问3389端口(Windows远程桌面端口,避免被恶意扫描)sudo ufw deny 3389/tcp # 拒绝特定网段访问特定端口(如拒绝10.0.0.0/8网段访问MySQL)sudo ufw deny from 10.0.0.0/8 to any port 3306/tcp 3. 允许/拒绝出站连接
ufw默认允许所有出站连接(服务器可正常访问外部网络,如下载依赖、更新系统),若需限制出站连接(如增强安全性、禁止访问外部无关端口),可参考以下配置:
# 警告:拒绝所有出站连接(谨慎使用,会导致服务器无法访问外部网络)sudo ufw default deny outgoing # 允许出站SSH连接(仅允许服务器访问外部22端口,用于远程连接其他机器)sudo ufw allow outgoing 22/tcp # 允许出站HTTP/HTTPS(服务器可访问网页、更新系统、下载依赖)sudo ufw allow outgoing 80/tcp sudo ufw allow outgoing 443/tcp # 允许出站数据库连接(如服务器需访问外部MySQL数据库)sudo ufw allow outgoing 3306/tcp 4. 删除规则(易错点,重点掌握)
删除规则前,建议先通过 sudo ufw status numbered 查看规则编号(最精准),避免删除错误规则,以下是两种常用删除方法:
# 方法1:通过规则编号删除(推荐,精准无误差)sudo ufw status numbered # 先查看规则编号,假设要删除编号为3的规则sudo ufw delete 3# 删除编号为3的规则# 方法2:通过原命令反向删除(需完全匹配,包括端口、协议,易出错)sudo ufw delete allow 80/tcp # 删除“允许80端口TCP”规则sudo ufw delete deny from 192.168.1.200 # 删除“拒绝192.168.1.200”规则注意:删除规则后立即生效,无需重启ufw,若删除错误,重新添加对应规则即可。
四、进阶配置:常见场景实战(运维必备)
结合实际运维场景,整理4个高频进阶配置,直接复制命令即可使用,覆盖服务器基础防护、防暴力破解、ping测试、端口转发等需求。
1. 服务器基础防护(推荐所有服务器配置)
适合Web服务器、应用服务器、数据库服务器,仅开放必要端口,拒绝无关访问,最大化提升安全性:
# 1. 允许SSH(远程管理,必开)sudo ufw allow ssh# 2. 允许HTTP/HTTPS(网页服务,无需则删除)sudo ufw allow http sudo ufw allow https # 3. 允许数据库端口(按需开启,如MySQL 3306,无需则删除)sudo ufw allow 3306/tcp # 4. 配置默认策略:拒绝所有入站,允许所有出站sudo ufw default deny incoming sudo ufw default allow outgoing # 5. 启用防火墙(确认无问题后执行)sudo ufw enable2. 限制SSH连接(防暴力破解,重点)
SSH端口(22)是远程管理的入口,易被暴力破解,通过以下配置限制访问来源或连接频率,提升安全性:
# 方案1:仅允许内网网段访问SSH(推荐,避免外部IP暴力破解)sudo ufw allow from 192.168.1.0/24 to any port 22/tcp # 内网网段sudo ufw deny 22/tcp # 拒绝其他所有IP访问SSH# 方案2:限制SSH连接频率(10秒内最多5次连接,防暴力破解)# Ubuntu 24.04已预装相关模块,直接执行即可sudo ufw limit ssh/tcp 3. 允许ICMP(ping测试,调试必备)
默认情况下,ufw允许出站ping(服务器可ping通其他机器),但禁止入站ping(其他机器无法ping通服务器),若需调试网络,可允许入站ping:
# 允许入站ping(ICMP协议,其他机器可ping通服务器)sudo ufw allow in proto icmp from any to any icmp-type echo-request # 允许出站ping回复(服务器ping其他机器后,可接收回复)sudo ufw allow out proto icmp from any to any icmp-type echo-reply 4. 配置NAT/端口转发(需内核支持)
若需将服务器端口转发到内网其他机器(如将服务器8080端口转发到内网192.168.1.10的80端口),需先启用内核IP转发,再配置转发规则:
# 1. 临时启用内核IP转发(重启服务器后失效)sudo sysctl net.ipv4.ip_forward=1# 2. 永久启用内核IP转发(编辑sysctl配置文件)sudonano /etc/sysctl.conf # 取消注释或添加一行:net.ipv4.ip_forward=1# 保存退出后,执行以下命令使配置生效sudo sysctl -p # 3. 添加端口转发规则(假设服务器外网网卡为eth0)# 将服务器8080端口(TCP)转发到内网192.168.1.10的80端口sudo ufw route allow in on eth0 from any to any port 8080/tcp to 192.168.1.10 port 80/tcp 五、开机自启与规则持久化
ufw启用后,默认已设置为开机自启,所有自定义规则会自动持久化到 /etc/ufw/ 目录下,重启服务器后规则不会丢失,无需额外配置。
若需确认自启状态,或手动调整自启设置,执行以下命令:
# 查看ufw服务状态(确认是否开机自启)sudo systemctl status ufw # 启用开机自启(默认已启用,若被禁用则执行)sudo systemctl enable ufw # 禁用开机自启(不推荐,重启后防火墙失效)sudo systemctl disable ufw 六、常见问题排查(新手救星)
整理4个ufw配置中最常见的问题,包含原因分析和解决方案,新手遇到问题可直接对照排查。
1. 远程连接被锁机(SSH无法连接)
原因:启用ufw前未允许SSH端口(22/tcp),默认策略拒绝所有入站连接,导致远程连接被阻断。
解决方案:通过本地终端/虚拟机控制台登录服务器,执行 sudo ufw allow ssh,然后重新启用ufw(sudo ufw enable),即可恢复远程连接。
2. 规则添加后不生效
常见原因:ufw未启用、规则冲突(如先允许再拒绝,以最后一条规则为准)、规则配置不精准(如端口协议错误)。
解决方案:
1. 确认ufw处于启用状态:sudo ufw status(需显示active);
2. 查看规则是否冲突:sudo ufw status verbose,删除冲突规则;
3. 重启ufw使规则生效:sudo ufw disable && sudo ufw enable。
3. 无法访问外部网络(出站被限制)
原因:误将默认出站策略设置为deny(拒绝所有出站),且未配置允许的出站规则。
解决方案:恢复默认出站策略:sudo ufw default allow outgoing,然后根据需求添加必要的出站规则。
4. 查看ufw日志(排查异常连接)
若需排查异常连接、规则生效情况,可启用ufw日志,查看连接记录:
# 启用日志(低级别,仅记录关键连接信息,推荐)sudo ufw logging on # 启用高级日志(记录所有连接细节,适合精准排查问题)sudo ufw logging full # 实时查看日志(默认日志路径:/var/log/ufw.log)sudotail -f /var/log/ufw.log # 关闭日志sudo ufw logging off 七、总结与实用技巧
1. 核心操作流程(新手必记)
ufw配置核心逻辑:允许必要端口 → 配置默认策略 → 启用防火墙 → 验证规则,无需过度开放端口,仅保留业务必需端口,即可最大化提升服务器安全性。
2. 快速查看端口策略技巧
- 快速查看:
sudo ufw status(适合确认防火墙状态和核心规则); - 详细查看:
sudo ufw status verbose(适合确认规则细节、默认策略); - 数字端口+编号:
sudo ufw status numbered(适合删除规则); - 过滤查看:
sudo ufw status verbose | grep -E "ALLOW|To"(仅看允许规则)、sudo ufw status verbose | grep -E "DENY|To"(仅看拒绝规则)。