在 TencentOS Server 3.1(TencentOS Tiny / TOS)中,启用和管理 iptables 服务需要特别注意其底层架构与传统 CentOS/RHEL 的区别。
核心背景:
TencentOS Server 默认使用 firewalld 作为防火墙管理工具,并且内核层面可能启用了 nftables 后端或兼容层。虽然 iptables 命令通常仍可用(通过兼容性模块),但直接操作 iptables 规则可能与 firewalld 的状态冲突,导致规则被覆盖或无效。
因此,最佳实践是:优先使用 firewalld 进行网络过滤管理。如果因特殊需求必须直接使用 iptables,需确保与 firewalld 解耦或正确协调。
一、确认当前环境状态
首先,检查系统是否安装了 iptables 和 firewalld:
# 检查 iptables 是否安装
rpm -qa | grep iptables
# 检查 firewalld 状态
systemctl status firewalld
⚠️ 注意:TencentOS 3.1 默认可能未预装
iptables-services包,而是使用iptables-nft或iptables-legacy。建议使用which iptables查看实际路径。
二、方案一:推荐方式 —— 使用 firewalld 管理防火墙(官方推荐)
这是 TencentOS 和大多数现代 Linux 发行版的标准做法,能避免规则冲突。
1. 启动并设置开机自启
sudo systemctl enable --now firewalld
2. 常用操作示例
# 查看当前所有规则(简洁模式)
sudo firewall-cmd --list-all
# 开放特定端口(如 SSH 22, HTTP 80, HTTPS 443)
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
# 永久生效重载配置
sudo firewall-cmd --reload
# 临时添加规则(立即生效,重启后失效)
sudo firewall-cmd --add-service=http
3. 删除规则
sudo firewall-cmd --permanent --remove-port=80/tcp
sudo firewall-cmd --reload
✅ 优点:与 TencentOS 云安全组协同更好,避免规则丢失,支持动态更新。
三、方案二:强制使用 iptables(不推荐,仅限特殊场景)
如果你必须直接使用 iptables 命令(例如迁移旧脚本、调试底层问题),请按以下步骤操作:
1. 安装 iptables-services(如需完整 service 支持)
sudo yum install -y iptables-services
2. 禁用 firewalld(关键步骤!防止冲突)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
3. 启用 iptables 服务
sudo systemctl enable --now iptables
📌 注意:此时系统将使用
iptables-legacy或iptables-nft作为后端。可通过以下命令确认:update-alternatives --display iptables # 或 ls -l /usr/sbin/iptables
4. 管理 iptables 规则
# 查看规则
sudo iptables -L -n -v
# 允许 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-save > /etc/sysconfig/iptables
# 或写入持久化文件(取决于 init 系统)
sudo service iptables save # 如果使用了 iptables-services
5. 恢复 firewalld(如需重新切换)
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl enable --now firewalld
四、重要注意事项 & 常见问题
❗ 1. 规则冲突警告
- 切勿同时运行 firewalld 和 iptables 服务。两者都会尝试控制 netfilter 内核模块,会导致规则混乱、丢包或服务不可用。
- 如果使用 firewalld,不要手动执行
iptables -F或iptables -P INPUT DROP,这会绕过 firewalld 的管理机制。
❗ 2. TencentOS 的 nftables 兼容性
- TencentOS 3.1 可能默认使用
iptables-nft(基于 nftables 的 iptables 兼容层)。 - 验证方法:
sudo iptables --version # 输出应包含 "nft" 字样,如: iptables v1.8.7 (nf_tables) - 如果是
nft后端,部分老旧脚本可能需要调整语法,但大多数标准iptables命令仍可正常工作。
❗ 3. 云服务器安全组 vs 主机防火墙
- 腾讯云 CVM 实例:建议优先通过 控制台 → 安全组 配置入站/出站规则。
- 主机内
iptables/firewalld可作为第二道防线,用于细粒度控制(如 IP 白名单、端口限制等)。 - 若安全组已放行,主机防火墙再拦截,则流量不通;反之亦然。请确保两层策略一致。
❗ 4. 规则持久化
- 使用
iptables-services时,务必执行iptables-save或将规则写入/etc/sysconfig/iptables。 - 使用 firewalld 时,所有带
--permanent的参数会自动持久化,无需额外保存。
五、总结建议
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 日常运维、新部署 | firewalld | 官方支持好、动态更新、无冲突风险 |
| 迁移旧系统、调试底层 | iptables | 兼容性强、脚本丰富 |
| 云服务器基础访问控制 | 安全组 + firewalld | 双层防护,职责清晰 |
✅ 最终建议:除非有特殊遗留系统依赖,否则请始终使用
firewalld管理 TencentOS Server 3.1 的防火墙。直接操作iptables仅在必要时作为应急手段,并务必先停止 firewalld 以避免冲突。
CLOUD云枢