Linux 防火墙完全指南:UFW 与 firewalld 从入门到精通

服务器安全的第一道防线就是防火墙。Linux 下最常用的三款防火墙管理工具是 iptablesUFWfirewalld。本文将从对比入手,逐一深入讲解 UFW 和 firewalld 的完整用法,并通过大量实战场景帮你快速上手。


一、三大防火墙工具对比

iptables / UFW / firewalld 适用场景

工具底层机制适用发行版复杂度适用场景
iptablesNetfilter所有 Linux需要精细控制每条规则、编写脚本自动化、内核级调优
UFWiptables/nftablesUbuntu/Debian快速配置主机防火墙、个人服务器、简单规则场景
firewalldnftables(RHEL8+)/ iptables(RHEL7)RHEL/CentOS/Fedora企业服务器、需要 zone 隔离、动态规则管理

简而言之:

  • iptables:底层原始工具,功能最强大,但规则管理复杂,适合高级用户和脚本场景。
  • UFW:iptables 的前端封装,语法简洁,Ubuntu/Debian 用户首选。
  • firewalld:基于 zone 的动态管理,支持运行时/永久规则分离,RHEL 系首选。

重要说明:三者底层都是 Linux 内核的 Netfilter 框架。同一个系统上不要同时启用多个防火墙管理工具,避免规则冲突。


二、UFW 完整教程

2.1 安装与启用

# Ubuntu/Debian 通常预装,如果没有:
sudo apt update
sudo apt install ufw

# 启用 UFW(启用前务必先放行 SSH,否则远程服务器会断连!)
sudo ufw allow ssh
sudo ufw enable

# 查看状态
sudo ufw status
sudo ufw status verbose    # 显示详细信息
sudo ufw status numbered   # 带编号显示,方便删除规则

2.2 默认策略

# 查看默认策略
sudo ufw status verbose
# 输出示例:
# Default: deny (incoming), allow (outgoing), disabled (routed)

# 设置默认策略
sudo ufw default deny incoming     # 拒绝所有入站(推荐)
sudo ufw default allow outgoing    # 允许所有出站(推荐)
sudo ufw default deny routed       # 拒绝转发(非路由器场景推荐)

最佳实践:默认拒绝入站,按需开放端口。这是最小权限原则的体现。

2.3 allow / deny 规则

# 允许特定端口
sudo ufw allow 80              # 允许 TCP 80
sudo ufw allow 443             # 允许 TCP 443
sudo ufw allow 8080/tcp        # 仅允许 TCP 协议的 8080 端口
sudo ufw allow 53/udp          # 仅允许 UDP 协议的 53 端口

# 允许端口范围
sudo ufw allow 3000:4000/tcp   # 允许 TCP 3000-4000 端口段
sudo ufw allow 6000:6007/udp   # 允许 UDP 6000-6007 端口段

# 拒绝特定端口
sudo ufw deny 23               # 拒绝 telnet 端口
sudo ufw deny 3306/tcp         # 拒绝 MySQL 端口

# 按服务名称(需 /etc/services 中有定义)
sudo ufw allow http
sudo ufw allow https
sudo ufw allow ssh
sudo ufw allow ftp
sudo ufw allow smtp
sudo ufw allow dns

2.4 IP 限制

# 允许特定 IP 访问所有端口
sudo ufw allow from 192.168.1.100

# 允许特定 IP 访问特定端口
sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw allow from 192.168.1.100 to any port 3306

# 允许特定子网
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 10.0.0.0/8 to any port 6379

# 拒绝特定 IP
sudo ufw deny from 203.0.113.50
sudo ufw deny from 203.0.113.0/24

# 指定网卡
sudo ufw allow in on eth0 to any port 80
sudo ufw allow in on eth1 from 192.168.1.0/24

2.5 应用配置文件

# 查看可用的应用配置文件
sudo ufw app list

# 查看某个应用的详细信息
sudo ufw app info 'Nginx Full'
# 输出示例:
# Profile: Nginx Full
# Title: Web Server (Nginx, HTTP + HTTPS)
# Ports:
#   80,443/tcp

# 使用应用配置文件添加规则
sudo ufw allow 'Nginx Full'     # 放行 HTTP + HTTPS
sudo ufw allow 'Nginx HTTP'     # 仅放行 HTTP
sudo ufw allow 'OpenSSH'        # 放行 SSH

# 自定义应用配置文件
sudo vim /etc/ufw/applications.d/myapp

自定义配置文件格式:

[MyWebApp]
title=My Custom Web Application
description=My web app running on ports 8080 and 8443
ports=8080/tcp|8443/tcp

[MyDB]
title=Database Server
description=PostgreSQL and Redis
ports=5432/tcp|6379/tcp
# 重新加载应用列表
sudo ufw app update
sudo ufw app update 'MyWebApp'

# 使用自定义应用
sudo ufw allow 'MyWebApp'

2.6 删除规则

# 方法一:按规则内容删除
sudo ufw delete allow 80
sudo ufw delete deny from 203.0.113.50
sudo ufw delete allow from 192.168.1.100 to any port 3306

# 方法二:按编号删除(推荐)
sudo ufw status numbered
# 输出示例:
# [ 1] 22/tcp                     ALLOW IN    Anywhere
# [ 2] 80/tcp                     ALLOW IN    Anywhere
# [ 3] 443/tcp                    ALLOW IN    Anywhere

sudo ufw delete 2    # 删除第 2 条规则

# 重置所有规则(谨慎使用!)
sudo ufw reset

2.7 日志

# 开启日志
sudo ufw logging on
sudo ufw logging low       # 级别:off / low / medium / high / full
sudo ufw logging medium
sudo ufw logging high

# 日志位置
# /var/log/ufw.log
# /var/log/syslog(也会记录 UFW 日志)

# 查看日志
sudo tail -f /var/log/ufw.log
sudo grep "UFW" /var/log/syslog

# 实时监控被拒绝的连接
sudo tail -f /var/log/ufw.log | grep "BLOCK"

2.8 UFW 与 iptables 的关系

UFW 本质上是 iptables 的前端封装,所有 UFW 规则最终都会转换为 iptables 规则:

# 查看 UFW 生成的 iptables 规则
sudo iptables -L -n -v
sudo iptables -t nat -L -n -v

# UFW 的规则文件位于
# /etc/ufw/user.rules       - IPv4 规则
# /etc/ufw/user6.rules      - IPv6 规则
# /etc/ufw/before.rules     - 在用户规则之前加载
# /etc/ufw/after.rules      - 在用户规则之后加载
# /etc/ufw/sysctl.conf      - 内核参数配置

# 可以直接编辑 before.rules 添加高级规则
# 例如:在 UFW 规则之前添加 NAT 规则
sudo vim /etc/ufw/before.rules

# 编辑后重新加载
sudo ufw reload

注意:不要混用 ufw 命令和直接 iptables 命令。如果需要自定义 iptables 规则,建议放在 before.rulesafter.rules 文件中,由 UFW 统一管理。


三、firewalld 完整教程

3.1 安装与基本操作

# CentOS/RHEL 7+ 通常预装
sudo yum install firewalld       # CentOS 7
sudo dnf install firewalld       # CentOS 8/9、Fedora

# 启动与开机自启
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo systemctl status firewalld

# 检查是否正在运行
sudo firewall-cmd --state

# 重载配置
sudo firewall-cmd --reload

3.2 Zone(区域)概念

Zone 是 firewalld 的核心概念。每个网络接口绑定一个 zone,zone 决定了该接口的默认信任级别和允许的服务。

# 查看所有 zone
sudo firewall-cmd --get-zones
# 输出示例:block dmz drop external home internal public trusted work

# 查看当前活动的 zone 及其绑定的接口
sudo firewall-cmd --get-active-zones

# 查看默认 zone
sudo firewall-cmd --get-default-zone

# 修改默认 zone
sudo firewall-cmd --set-default-zone=public

# 将接口绑定到指定 zone
sudo firewall-cmd --zone=internal --change-interface=eth0 --permanent
sudo firewall-cmd --zone=public --change-interface=eth1 --permanent

# 查看某个 zone 的详细配置
sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --zone=public --list-all --permanent

3.3 Zone 信任级别

Zone信任级别说明
drop最低丢弃所有入站包,不回复任何信息
block拒绝所有入站包,返回 ICMP 拒绝消息
public默认仅允许选定的入站连接(默认 zone)
external用于 NAT 路由的外部网络,仅允许选定服务
dmz隔离区域,仅允许选定服务
work较高工作网络,信任大部分计算机
home较高家庭网络,信任大部分计算机
internal内部网络,信任大部分计算机
trusted最高信任所有网络连接

3.4 服务管理

# 查看所有预定义服务
sudo firewall-cmd --get-services

# 查看当前 zone 允许的服务
sudo firewall-cmd --list-services

# 添加服务(运行时生效,重启后失效)
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --add-service=ssh
sudo firewall-cmd --add-service=mysql

# 添加服务(永久生效)
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent

# 批量添加
sudo firewall-cmd --add-service={http,https,ssh} --permanent

# 移除服务
sudo firewall-cmd --remove-service=http --permanent

# 在指定 zone 中操作
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=internal --add-service=mysql --permanent

# 自定义服务
sudo vim /etc/firewalld/services/myapp.xml

自定义服务 XML 文件示例:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MyApp</short>
  <description>My custom web application</description>
  <port protocol="tcp" port="8080"/>
  <port protocol="tcp" port="8443"/>
</service>
# 重新加载 firewalld 使自定义服务生效
sudo firewall-cmd --reload
sudo firewall-cmd --add-service=myapp --permanent

3.5 端口管理

# 添加端口
sudo firewall-cmd --add-port=8080/tcp
sudo firewall-cmd --add-port=3000-3100/tcp
sudo firewall-cmd --add-port=53/udp

# 永久添加端口
sudo firewall-cmd --add-port=8080/tcp --permanent

# 查看开放的端口
sudo firewall-cmd --list-ports

# 移除端口
sudo firewall-cmd --remove-port=8080/tcp --permanent

# 在指定 zone 中操作
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

3.6 富规则(Rich Rules)

富规则提供了比简单服务/端口更精细的控制能力:

# 允许特定 IP 访问特定端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept' --permanent

# 允许特定子网访问特定端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent

# 拒绝特定 IP
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="203.0.113.50" reject' --permanent

# 允许特定 IP 每分钟最多 5 次新连接(限流)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept limit value="5/m"' --permanent

# 允许特定 IP 段访问,并记录日志
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port port="6379" protocol="tcp" log prefix="REDIS-ACCESS: " level="info" accept' --permanent

# 查看所有富规则
sudo firewall-cmd --list-rich-rules

# 删除富规则
sudo firewall-cmd --remove-rich-rule='rule family="ipv4" source address="203.0.113.50" reject' --permanent

3.7 永久规则 vs 运行时规则

firewalld 有两套规则:运行时规则(runtime)永久规则(permanent)

# 运行时规则:立即生效,重启 firewalld 后消失
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-port=8080/tcp

# 永久规则:写入配置文件,需要 reload 或重启才生效
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=8080/tcp --permanent

# 查看差异
sudo firewall-cmd --list-all              # 运行时
sudo firewall-cmd --list-all --permanent  # 永久

# 将运行时规则持久化(保存当前运行时规则为永久规则)
sudo firewall-cmd --runtime-to-permanent

# 重新加载使永久规则生效
sudo firewall-cmd --reload

# 永久配置文件位置
# /etc/firewalld/zones/public.xml
# /etc/firewalld/firewalld.conf

最佳实践:生产环境建议总是使用 --permanent,然后 --reload。这样可以先用不带 --permanent 的命令测试,确认无误后再加 --permanent 持久化。

3.8 转发配置

# 启用 IP 转发(内核层面)
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# firewalld 端口转发(在 zone 中配置)
# 将外部 80 端口转发到内部 192.168.1.100:8080
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent

# 同端口不同主机的转发
sudo firewall-cmd --add-forward-port=port=443:proto=tcp:toport=443:toaddr=10.0.0.50 --permanent

# 启用伪装(NAT)
sudo firewall-cmd --add-masquerade --permanent

# 查看转发规则
sudo firewall-cmd --list-forward-ports

# 删除转发规则
sudo firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent

四、UFW vs firewalld 对比表

对比项UFWfirewalld
默认发行版Ubuntu/DebianRHEL/CentOS/Fedora
底层实现iptables/nftablesnftables/iptables
配置方式命令行为主命令行 + XML 配置文件
核心概念允许/拒绝规则Zone 区域 + 服务/端口/富规则
运行时/永久无区分,操作即持久分离,需 --permanentreload
默认策略deny in, allow out取决于 zone 配置
复杂度⭐ 低⭐⭐ 中
学习曲线5 分钟上手需要理解 zone 概念
精细控制有限(需结合 iptables)强(富规则支持条件组合)
图形界面gufw(第三方)firewall-config(官方)
Docker 兼容性需额外配置需额外配置
适合人群个人开发者、小服务器企业运维、多网卡服务器

选择建议:

  • Ubuntu/Debian 系统 → 优先用 UFW,简单高效
  • RHEL/CentOS/Fedora 系统 → 优先用 firewalld,功能全面
  • 需要 zone 隔离、富规则、动态管理 → firewalld
  • 只需要快速开关端口 → UFW

五、端口转发实战

5.1 UFW 端口转发

步骤一:编辑 sysctl 启用 IP 转发

sudo vim /etc/ufw/sysctl.conf
# 取消注释或添加:
# net/ipv4/ip_forward=1

步骤二:编辑 before.rules 添加 NAT 规则

sudo vim /etc/ufw/before.rules

*filter 部分之前添加 NAT 表:

# 在文件头部(*filter 之前)添加:
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
COMMIT

步骤三:修改 UFW 默认转发策略并重载

# /etc/default/ufw 中修改
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw

# 或者使用 UFW 转发规则
sudo ufw route allow in on eth0 out on eth0 to 192.168.1.100 port 8080

sudo ufw reload

简化方式(使用 ufw route):

# 允许从 eth0 转发到本地 8080
sudo ufw route allow to 127.0.0.1 port 8080 proto tcp from any

5.2 firewalld 端口转发

# 方法一:使用内建的端口转发功能

# 启用伪装(NAT 必需)
sudo firewall-cmd --add-masquerade --permanent

# 转发规则:将 80 端口转发到本地 8080
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

# 转发到其他主机:将 80 端口转发到 192.168.1.100 的 8080
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent

# 重新加载
sudo firewall-cmd --reload

# 方法二:使用富规则(更灵活)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" forward-port port="80" protocol="tcp" to-port="8080" to-addr="10.0.0.100"' --permanent

sudo firewall-cmd --reload

5.3 iptables 端口转发

# 启用 IP 转发
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 方式一:DNAT 转发到其他主机
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

# 方式二:本地端口重定向
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# 方式三:使用 DNAT 转发到本地
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

# 保存规则(安装 iptables-persistent)
sudo apt install iptables-persistent    # Debian/Ubuntu
sudo netfilter-persistent save

# CentOS/RHEL 保存方式
sudo service iptables save

六、常见场景速查

6.1 Web 服务器(Nginx/Apache)

UFW 方式:

sudo ufw allow 'Nginx Full'    # 放行 80 + 443
# 或者
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow ssh
sudo ufw default deny incoming
sudo ufw enable

firewalld 方式:

sudo firewall-cmd --permanent --add-service={http,https,ssh}
sudo firewall-cmd --reload

6.2 数据库仅内网访问(MySQL/PostgreSQL/Redis)

UFW 方式:

# 允许内网段访问 MySQL
sudo ufw allow from 192.168.1.0/24 to any port 3306

# 允许内网段访问 Redis
sudo ufw allow from 192.168.1.0/24 to any port 6379

# 允许内网段访问 PostgreSQL
sudo ufw allow from 192.168.1.0/24 to any port 5432

# 确保默认策略为拒绝
sudo ufw default deny incoming

firewalld 方式:

# MySQL 只允许内网 zone 访问
sudo firewall-cmd --zone=internal --add-service=mysql --permanent

# 或使用富规则精确控制
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="6379" protocol="tcp" accept' --permanent

# 从 public zone 移除(如果之前误加了)
sudo firewall-cmd --zone=public --remove-service=mysql --permanent
sudo firewall-cmd --reload

6.3 SSH 安全加固

UFW 方式:

# 限制 SSH 连接频率(30 秒内最多 6 次连接)
sudo ufw limit ssh
# 等价于:
sudo ufw limit 22/tcp

# 只允许特定 IP SSH 登录
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

# 只允许特定子网 SSH 登录
sudo ufw allow from 10.0.0.0/8 to any port 22 proto tcp

firewalld 方式:

# 使用富规则限流
sudo firewall-cmd --add-rich-rule='rule service name="ssh" limit value="3/m" accept' --permanent

# 只允许特定 IP SSH
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="22" protocol="tcp" accept' --permanent

# 修改 SSH 端口后放行新端口
sudo firewall-cmd --add-port=2222/tcp --permanent
sudo firewall-cmd --reload

6.4 Docker 与防火墙冲突

Docker 默认直接操作 iptables,会绕过 UFW/firewalld 的规则,这是个常见坑。

问题现象:即使 UFW 设置了 deny incoming,Docker 容器暴露的端口仍然可以从外部访问。

UFW 解决方案(推荐使用 ufw-docker):

# 安装 ufw-docker
sudo apt install git
git clone https://github.com/chaifeng/ufw-docker.git
sudo cp ufw-docker/ufw-docker /usr/local/bin/
sudo chmod +x /usr/local/bin/ufw-docker

# 重新加载 UFW
sudo systemctl reload ufw

# 允许外部访问 Docker 容器端口
sudo ufw-docker allow 80      # 允许访问容器的 80 端口
sudo ufw-docker allow 443     # 允许访问容器的 443 端口

# 允许特定 IP 访问容器端口
sudo ufw-docker allow 3306 default  # 只允许 default 网络

# 删除规则
sudo ufw-docker delete allow 80

# 查看规则
sudo ufw-docker list

firewalld 解决方案:

# 方法一:让 Docker 使用 firewalld 管理的 zone
# 编辑 Docker daemon 配置
sudo vim /etc/docker/daemon.json
{
  "iptables": false
}
# 然后使用 firewalld 手动管理 Docker 端口
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 0 -i docker0 -j ACCEPT
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 0 ! -i docker0 -p tcp --dport 8080 -j ACCEPT
sudo firewall-cmd --reload

方法二:修改 before.rules(UFW 方案替代)

sudo vim /etc/ufw/after.rules
# 在文件末尾添加:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.0.0/12 ! -o docker0 -j MASQUERADE
COMMIT
sudo ufw reload

七、注意事项

7.1 远程操作防火墙的安全提示

# ⚠️ 永远先放行 SSH 再启用防火墙!
# 错误示范(会导致服务器失联):
sudo ufw enable              # 如果默认策略是 deny,SSH 被切断
sudo systemctl start firewalld  # 如果 public zone 没有 ssh 服务

# 正确示范:
sudo ufw allow ssh
sudo ufw enable

7.2 规则顺序很重要

  • UFW:规则按添加顺序排列,但无编号管理时不方便调整。建议用 status numbered 查看并用编号删除。
  • firewalld:规则评估顺序为 富规则 → 服务 → 端口,更具体的规则优先。

7.3 不要同时使用多个防火墙工具

# 检查当前活跃的防火墙
sudo ufw status
sudo systemctl status firewalld
sudo iptables -L -n

# 如果从 firewalld 迁移到 iptables,先禁用 firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 反之亦然
sudo ufw disable

7.4 备份与恢复

# UFW 备份
sudo cp -r /etc/ufw /etc/ufw.backup
sudo cp /etc/default/ufw /etc/default/ufw.backup

# UFW 恢复
sudo cp -r /etc/ufw.backup/* /etc/ufw/
sudo ufw reload

# firewalld 备份
sudo cp -r /etc/firewalld /etc/firewalld.backup

# firewalld 恢复
sudo cp -r /etc/firewalld.backup/* /etc/firewalld/
sudo firewall-cmd --reload

7.5 IPv6 支持

# UFW 自动启用 IPv6(如果 /etc/default/ufw 中 IPV6=yes)
# UFW 的 IPv6 规则存储在 /etc/ufw/user6.rules

# firewalld 默认支持 IPv6
sudo firewall-cmd --add-rich-rule='rule family="ipv6" source address="::1" port port="80" protocol="tcp" accept'

7.6 排错技巧

# 查看当前生效的规则
# UFW
sudo ufw status verbose
sudo iptables -L -n -v | head -40

# firewalld
sudo firewall-cmd --list-all
sudo firewall-cmd --list-all --permanent
sudo nft list ruleset           # CentOS 9 / RHEL 9 查看 nftables 规则

# 测试端口连通性(从客户端)
nc -zv server_ip 22        # 测试 TCP 端口
telnet server_ip 80        # 测试 TCP 端口
nmap -p 22,80,443 server_ip  # 扫描多个端口

# 检查服务是否监听
sudo ss -tlnp              # 查看所有 TCP 监听端口
sudo ss -ulnp              # 查看所有 UDP 监听端口
sudo netstat -tlnp         # 传统方式(需安装 net-tools)

总结

你需要做什么用 UFW用 firewalld
放行 HTTP/HTTPSufw allow 80,443firewall-cmd --add-service={http,https} --permanent
仅内网访问数据库ufw allow from 192.168.1.0/24 to any port 3306富规则指定 source 地址
限制 SSH 连接频率ufw limit ssh富规则 + limit
查看所有规则ufw status numberedfirewall-cmd --list-all
持久化自动持久--permanent--reload
端口转发编辑 before.rulesfirewall-cmd --add-forward-port

防火墙配置是服务器安全的基石。建议在每台新服务器部署时就把防火墙配置纳入初始化流程,避免裸奔上线。记住三条原则:默认拒绝、按需开放、定期审计

使用 Hugo 构建
主题 StackJimmy 设计