加油
努力

如何在TencentOS Server 3.1上通过iptables设置端口访问控制?

在 TencentOS Server 3.1(基于 CentOS/RHEL 体系,使用 iptables 作为默认防火墙工具)上配置端口访问控制,需遵循“先放行必要服务,再拒绝其他流量”的原则。以下是完整操作步骤:


✅ 前置准备

  1. 确认 iptables 已安装并运行

    systemctl status iptables
    # 若未运行,启动并设置开机自启
    sudo systemctl start iptables
    sudo systemctl enable iptables
  2. 备份当前规则(重要!)

    sudo iptables-save > /root/iptables-backup-$(date +%F).rules
  3. 确保远程连接安全
    ⚠️ 操作前务必保留 SSH 端口(默认 22)的允许规则,避免被锁死!


🔐 基础端口访问控制示例

步骤 1:清除现有规则(可选,谨慎操作)

sudo iptables -F          # 清空所有链的规则
sudo iptables -X          # 删除用户自定义链
sudo iptables -Z          # 清零计数器

💡 生产环境建议仅修改特定规则,而非全清。

步骤 2:设置默认策略(推荐 DROP,但需先开放必要端口)

# 默认丢弃所有入站流量
sudo iptables -P INPUT DROP
# 默认允许出站流量(通常无需限制)
sudo iptables -P OUTPUT ACCEPT
# 默认允许本地回环通信
sudo iptables -P FORWARD DROP

步骤 3:允许必要服务(按顺序添加,避免误封)

# 允许本地回环接口(必需)
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接和关联连接(关键!否则无法维持会话)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许 SSH(22 端口)——防止自己断连
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP(80)和 HTTPS(443)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许自定义端口(例如 8080)
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

# (可选)限制来源 IP:只允许特定 IP 访问 SSH
# sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT

步骤 4:记录并保存规则

# 查看当前规则
sudo iptables -L -n -v

# 保存规则到文件(TencentOS 3.1 兼容方式)
sudo iptables-save > /etc/sysconfig/iptables
# 或复制到腾讯云推荐路径
sudo cp /etc/sysconfig/iptables /etc/iptables/rules.v4

📌 注意:TencentOS 3.1 中 iptables.service 会自动从 /etc/sysconfig/iptables 加载规则;若使用 systemd 管理,也可通过 systemctl restart iptables 生效。


🔒 进阶安全建议

场景 命令示例
限制 SSH 登录尝试次数(防暴力破解) 安装 fail2ban + iptables 联动
仅允许特定网段访问数据库(如 3306) sudo iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 3306 -j ACCEPT
禁止 ICMP 广播风暴 sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
记录被拒绝的访问日志 sudo iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4

🧪 验证测试

  • 在另一台机器尝试 telnet <服务器IP> 22 → 应成功
  • 尝试 telnet <服务器IP> 8080(若未开放)→ 应超时或被拒绝
  • 检查日志:sudo tail -f /var/log/messagesjournalctl -u iptables

⚠️ 重要提醒

  • 切勿在无备用通道时直接设置 INPUT DROP,建议先用 ACCEPT 测试,确认无误后再切换为 DROP
  • 若使用云安全组(腾讯云控制台),优先在安全组层面控制,iptables 作为主机层补充防护。
  • 定期审计规则:sudo iptables -L -n -v --line-numbers

需要我为你生成一个针对具体业务场景(如 Web 服务器、数据库服务器)的完整 iptables 脚本模板吗?

云服务器