背景
Ubuntu 24.04 默认使用 nftables 作为底层防火墙,但 iptables 命令仍然可用(通过 iptables-nft 兼容层)。本文记录使用 iptables 管理端口的基本操作。
1. 查询当前开放的端口
iptables -L -n
输出示例:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
如果想查看带行号的输出(方便后续删除),使用:
iptables -L INPUT --line-numbers
2. 开启端口
2.1 添加规则
# 在 INPUT 链的第 5 条位置插入规则,放行 7777 端口 TCP 流量
iptables -I INPUT 5 -p tcp --dport 7777 -j ACCEPT
参数说明:
| 参数 | 含义 |
|---|---|
-I INPUT 5 |
插入到 INPUT 链的第 5 条位置 |
-p tcp |
协议为 TCP |
--dport 7777 |
目标端口为 7777 |
-j ACCEPT |
动作:允许 |
2.2 永久保存规则
iptables 规则默认保存在内存中,重启后会丢失。需要安装并保存:
# 安装持久化工具
apt install iptables-persistent
# 保存当前规则
netfilter-persistent save
# 或使用
iptables-save > /etc/iptables/rules.v4
如果安装
iptables-persistent时提示保存当前规则,选择 是。
3. 关闭端口
3.1 查找规则序号
iptables -L INPUT --line-numbers | grep 7777
输出示例:
5 ACCEPT tcp -- anywhere anywhere tcp dpt:7777
3.2 删除规则
# 删除 INPUT 链的第 5 条规则
iptables -D INPUT 5
3.3 永久保存
netfilter-persistent save
4. 完整操作示例
# 查看当前规则(带行号)
iptables -L INPUT --line-numbers
# 开启 7777 端口
iptables -I INPUT 5 -p tcp --dport 7777 -j ACCEPT
netfilter-persistent save
# 关闭 7777 端口
iptables -L INPUT --line-numbers | grep 7777
iptables -D INPUT 5
netfilter-persistent save
5. 注意事项
| 注意点 | 说明 |
|---|---|
| 规则顺序 | iptables 按顺序匹配,-I 插入到指定位置,-A 追加到末尾 |
| 重启丢失 | 未保存的规则重启后丢失,务必执行 netfilter-persistent save |
| Ubuntu 24.04 | 底层使用 nftables,iptables 通过兼容层运行,功能完全兼容 |
| ufw 冲突 | 如果同时使用 ufw,两者规则可能互相覆盖,建议只用一种 |
| 云服务商 | 阿里云/腾讯云/天翼云的安全组规则独立于系统防火墙,需在云控制台也放行端口 |
Professional English Terms
| Term | Meaning |
|---|---|
| iptables | Linux 内核防火墙管理工具,基于规则表的包过滤 |
| INPUT Chain | 入站流量处理链,控制进入本机的数据包 |
| ACCEPT / DROP | 允许 / 丢弃数据包的动作 |
| netfilter-persistent | iptables 规则持久化工具,保存规则到文件 |
| iptables-nft | Ubuntu 24.04 中 iptables 的 nftables 兼容层 |