nftables是iptables的全面升级,非简单命令替换;Ubuntu 22.04+默认启用其后端,iptables仅作兼容层;核心由表、链、规则三层构成,支持inet协议族、原子操作与集合语法,6行可建最小安全策略,规则量减40%且语义更清晰。

在 Linux 中,iptables 是传统且功能强大的防火墙工具,可用于放行指定端口。不过要注意:现代发行版(如 Ubuntu 22.04+、CentOS 8+)默认使用 nftables,iptables 命令可能只是兼容层(调用 nft 后端)。若系统已切换到 nftables,建议优先用 nft;但若确认仍在使用原生 iptables(如 CentOS 7、Debian 10),以下方法完全适用。
确认当前防火墙状态和规则
执行前先查看当前规则,避免重复添加或误删:
-
sudo iptables -L -n -v:列出所有规则(-n 禁用 DNS 解析,-v 显示详细统计) -
sudo iptables -L INPUT -n:只看 INPUT 链(入站流量,端口放行主要在此链) -
sudo systemctl status iptables(RHEL/CentOS)或sudo systemctl status netfilter-persistent(Debian/Ubuntu)确认服务是否运行
放行单个 TCP 端口(如 80 或 3306)
以放行 Web 服务端口 80 为例,需在 INPUT 链中插入一条允许规则:
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT-
-I表示“插入到最前面”,确保它在 DROP 规则之前生效;若用-A(追加),可能被后续的 DROP 拦截 -
-p tcp指定协议;若要放行 UDP(如 DNS 的 53 端口),改用-p udp -
--dport是目标端口(即客户端访问你服务器时的目标端口号)
放行多个端口或端口范围
可批量添加,也可用 multiport 模块一次匹配多个离散端口:
- 放行 22、80、443:
sudo iptables -I INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT - 放行端口范围(如 8000–8010):
sudo iptables -I INPUT -p tcp --dport 8000:8010 -j ACCEPT - 注意:
multiport不支持范围写法,范围必须用--dport 起始:结束
保存规则并设置开机生效
iptables 规则默认不持久——重启后丢失,必须手动保存:
- Debian/Ubuntu:
sudo iptables-save | sudo tee /etc/iptables/rules.v4(IPv4) - RHEL/CentOS 7:
sudo service iptables save(要求iptables-services已安装) - 通用方式(推荐):
sudo apt install iptables-persistent(Debian/Ubuntu),安装后会自动处理保存与加载 - 验证保存效果:重启 iptables 服务或重启机器后,再运行
iptables -L确认规则仍在
操作完成后,记得测试端口是否真正可达(如用 telnet your_ip 80 或 curl -v http://localhost),同时确认对应服务(如 nginx、mysql)本身已在监听该端口(sudo ss -tlnp | grep :80)。


















