适用系统:Ubuntu、Debian、CentOS 7/8、Rocky/Alma 9、Fedora、Arch
1. 选型速览
| 发行版/场景 | 默认前端 | 底层引擎 | 建议方案 |
|---|
| Ubuntu ≥18、Debian ≥10 | UFW | iptables | 继续用 UFW |
| CentOS 7 | Firewalld | iptables | 继续用 Firewalld |
| CentOS 8、Rocky/Alma 9、Fedora | Firewalld | nftables | 继续用 Firewalld |
| Arch Linux | 无 | nftables | 任选:nftables 原生 或 UFW |
| 极简镜像 / 容器内 | — | — | 直接 nftables/iptables 规则 |
2. 端口开关一句话命令
2.1 UFW(Ubuntu / Debian)
# 安装(若最小化镜像)
sudo apt update && sudo apt install ufw -y
# 允许 80、443、22443
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22443/tcp comment 'SSH-Alt'
# 拒绝 3306
sudo ufw deny 3306/tcp
# 启用
sudo ufw --force enable
# 查看
sudo ufw status numbered
2.2 Firewalld(CentOS / Rocky / Alma / Fedora)
# 安装 & 启动
sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
# 永久放行端口
sudo firewall-cmd --permanent --add-port=22443/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 立即生效
sudo firewall-cmd --reload
# 查看
sudo firewall-cmd --list-all
2.3 iptables(传统,CentOS 7 底层)
# 安装
sudo yum install -y iptables-services
sudo systemctl enable --now iptables
# 放行 22443
sudo iptables -I INPUT -p tcp --dport 22443 -j ACCEPT
# 持久化
sudo service iptables save
2.4 nftables(CentOS 8+/Arch 默认)
# 创建规则文件
sudo tee /etc/nftables.conf <<'EOF'
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
tcp dport {22,22443,80,443} accept
}
}
EOF
# 启动
sudo systemctl enable --now nftables
3. 场景化速查表
| 任务 | UFW | Firewalld | iptables | nftables |
|---|
| 临时放行 8080 | ufw allow 8080/tcp | firewall-cmd --add-port=8080/tcp | iptables -I INPUT -p tcp --dport 8080 -j ACCEPT | nft add rule inet filter input tcp dport 8080 accept |
| 仅允许某 IP 22 | ufw allow from 1.2.3.4 to any port 22 | firewall-cmd --add-rich-rule='rule family="ipv4" source address="1.2.3.4/32" port protocol="tcp" port="22" accept' | iptables -I INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT | nft add rule inet filter input ip saddr 1.2.3.4 tcp dport 22 accept |
| 删除规则 | ufw delete allow 8080/tcp | firewall-cmd --remove-port=8080/tcp --permanent | 先 iptables -L --line-numbers 再 iptables -D INPUT <num> | 先 nft list ruleset 再 nft delete rule ... handle <num> |
| 查看规则 | ufw status numbered | firewall-cmd --list-all | iptables -L -n -v | nft list ruleset |
| 持久化 | 自动 | --permanent + --reload | service iptables save | 修改 /etc/nftables.conf 后 reload |
4. 常见坑 & 修复
| 错误提示 | 原因 | 修复 |
|---|
ERROR: initcaps | UFW 未加载内核模块 | sudo ufw reset && sudo ufw enable |
FirewallD is not running | 服务未启动 | sudo systemctl start firewalld |
| 端口已放行仍不通 | SELinux / 云安全组 | getenforce 查看 + 云控制台检查 |
| nftables 规则不生效 | 未启用服务 | sudo systemctl enable --now nftables |
5. 一键快速模板
5.1 Ubuntu / Debian:最小可用 UFW 规则
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from <你的IP> to any port 22
sudo ufw allow 80,443/tcp
sudo ufw --force enable
5.2 CentOS 8:最小 Firewalld 规则
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
6. 延伸阅读