Linux 防火墙的两层
应用层规则(iptables / nftables / firewalld / ufw)
↓
netfilter(内核里的包过滤框架)
底层是 netfilter(内核组件),各种"防火墙工具"只是它的不同前端。常见的:
| 工具 | 偏好 | 风格 |
|---|---|---|
| ufw | Ubuntu | 极简(推荐新手) |
| firewalld | RHEL / CentOS / Fedora | 中等(zone 概念) |
| iptables | 通用 | 底层(复杂但精确) |
| nftables | 新方向 | iptables 替代 |
ufw(Ubuntu 推荐)
# 看状态
sudo ufw status
# 默认拒绝入站、允许出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 放行端口
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
# 放行端口范围
sudo ufw allow 6000:6100/tcp
# 仅允许某 IP 访问
sudo ufw allow from 1.2.3.4 to any port 22
# 删规则
sudo ufw delete allow 80/tcp
# 启用
sudo ufw enable
# 查规则编号
sudo ufw status numbered
# 按编号删
sudo ufw delete 3
开 ufw 之前先确认 22 端口已 allow——否则你下一秒就 SSH 不上来。
firewalld(RHEL 系)
# 看状态
sudo firewall-cmd --state
sudo firewall-cmd --list-all
# 放行服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=8080/tcp
# 删
sudo firewall-cmd --permanent --remove-port=8080/tcp
# 重新加载(让 --permanent 规则生效)
sudo firewall-cmd --reload
firewalld 用 zone 概念(trusted / public / dmz / drop 等)——可以一个网卡放一个 zone。
iptables(底层)
iptables 把规则组织成"链"(chain)和"表"(table):
表 (table):filter(包过滤)/ nat / mangle / raw
链 (chain):
filter 表:
INPUT 入站包
OUTPUT 出站包
FORWARD 转发包
nat 表:
PREROUTING 入站前
POSTROUTING 出站前
# 看规则
sudo iptables -L -n -v
# 允许已建立连接
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许 lo
sudo iptables -A INPUT -i lo -j ACCEPT
# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 默认丢弃入站
sudo iptables -P INPUT DROP
# 删规则(按行号)
sudo iptables -L INPUT --line-numbers
sudo iptables -D INPUT 3
⚠ iptables 规则默认不持久化——重启就丢。要装 iptables-persistent 或导出 iptables-save > /etc/iptables/rules.v4。
云上还有"安全组"
阿里云 / 腾讯云 / AWS 等都有云平台层防火墙(安全组)——这是第一道防线,云控制台配。
互联网 → 云安全组 → 服务器 OS 防火墙(ufw / firewalld)→ 应用
两层都要配:
- 安全组只开 22 / 80 / 443
- OS 防火墙再开同样几个
云上数据库绝对不要在安全组里开 0.0.0.0/0——只对应用服务器 IP 开。
实战:基础服务器防火墙
# Ubuntu,ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# 验证
sudo ufw status verbose
5 行命令搞定基础防御。
下一篇起进入模块六:Shell 脚本编程。