如何通过修改iptables链的默认策略来显著增强网络安全防护?

更新于
2026-08-21 19:17:17
4阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐
按理说,

iptables 的链默认策略往往成为程序安全的第一道防线。许多管理员在配置时会遇到“改错导致服务中断”“不知道如何快速回滚”等痛点,

说到使用者痛点一。默认策略不清晰导致误操作

大多数程序安装后INPUT、FORWARD、OUTPUT 三条链的默认策略都是ACTION=ACCEPT这对外部攻击者来说相当宽松。若直接使用-P DROP而不先检查现有规则,可能会导致 SSH、Web 等正常流量被拒绝。

如何通过修改iptables链的默认策略来显著增强网络安全防护?

说到常见错误场景。

  • SSH 被拒绝: 未先保留已有允许 SSH 的规则,接下来直接把 INPUT 改为 DROP。
  • NAT 与 FORWARD 冲突: 在 NAT 表里已有转发规则,却把 FORWARD 链改为 REJECT。
  • 无备份导致恢复困难: 更改后发现程序无法访问,但没有备份文件可用。

步骤一的观点是,查看当前链的默认策略

sudo iptables -L -n -v --line-numbers | grep 'Chain'

This command 列出所有链及其当前动作。每行格式类似的观点是,

Chain INPUT
Chain FORWARD
Chain OUTPUT 

从提示来看,

- 如果你使用的是 CentOS7 并开启了 firewalld,请先停用它: sudo systemctl stop firewalld && sudo systemctl disable firewalld

说到步骤二。安全地修改默认策略

A. 准备工作——创建允许列表:

如何通过修改iptables链的默认策略来显著增强网络安全防护?
  • sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH 必须开放
  • sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP 必须开放

B. 修改链默认政策:

命令示例作用说明
sudo iptables -P INPUT DROP sudo iptables -P FORWARD REJECT sudo iptables -P OUTPUT ACCEPT将未明确允许的数据包全部丢弃;转发请求被拒绝,出站保持开放。
sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT DROP 仅保留明确定义的入站和转发,禁止所有出站。
*根据业务场景自行组合*
⚠️ 在执行上述命令前。请务必确认已保存允许必要端口的规则,否则会立即失去远程管理权限!如果你是在云主机上,可通过云控制台控制台直接访问进行修复。老实说,

情况处理——IPv6 与 NAT 表支持一样要检查:

  • NAT 表中已有 SNAT/DNAT 时不要轻易把 FORWARD 改为 DROP。否则 NAT 转发会失效。
  • Iptables 对 IPv6 的语法略有差异,例如:
    ip6tables –L
    ip6tables –P INPUT DROP
    ip6tables –P OUTPUT ACCEPT
    ip6tables –P FORWARD DROP
    
    请根据你的发行版对应命令调整。—‑‑‑ —‑‑‑

    ⚠️ 小心误删关键规则!如果你是第一次使用 iptables ,建议先以临时方式设置一个 “倒计时” 防火墙,例如:
    # 临时开启阻止所有入站,保留 SSH
    sudo iptables-save> /root/iptables.backup # 备份
    sudo iptables-reset # 清空所有规则
    sudo iptables -A INPUT -i lo -j ACCEPT # 本地环回通行
    sudo iptables -A INPUT -m state --state ESTABLISHED。RELATED –j ACCEPT
    sudo iptables -A INPUT –p tcp --dport 22 –j ACCEPT # SSH 必须通行
    # 最终再设定 DEFAULT 策略为 DROP:
    sudo iptables-P INPUT DROP
    This 方法可以让你在出现连不上服务器时通过本地 console 或 cloud console 快速恢复。---
    

    步骤三这方面。 保存并重启 IPTABLES 服务

    `iptables` 的更改只在内存中生效,要想持久化需要保存配置并让服务重新加载。不同发行版略有差别:

    常用方法这方面,备份与恢复机制

    • `iptables-save> ~/myrules.v4` 把当前配置导出到文件;可以随时用 `iptables-restore <~/myrules.v4` 恢复。
    • `crontab` 定期导出配置,以防意外删除或硬件故障。 例如每天凌晨 02:00 自动保存一次。 话说回来,
    • `rsync` 将 `/etc/sysconfig/iptables`或 `/etc/iptables/rules.v4`同步到离线仓库或云存储。以便灾难恢复,
    • `tcpdump + tshark` 用于捕获被拒绝的数据包做日志分析,以定位误拦规则原因。
    • `--test-run`: 在生产环境里先跑 “dry-run” 模式,例如 `/sbin/xtables-multi --test-run …--apply-policy'`,确保不会触发连通性问题后再正式应用。不过,
    • `firewall-cmd --permanent …&& firewall-cmd --reload`: 如果你坚持使用 firewalld。记得把上述逻辑迁移到 `/etc/firewalld/zones/public.xml’ 等 zone 文件中,并开启永久生效。
    • ---

      实战案例 —— 公司内部服务器集群防护方案

    # Linux 程序   # 保存与重启命令  
    CentOS7 / RHEL7 # 安装服务包: yum install igetc-services # 保存配置: service iptables save # 重新启动: service iptables restart 或 systemctl restart iptables.service `service` 是兼容旧版本;推荐使用 `systemctl`。
    Debian / Ubuntu apt-get install netfilter-persistent # 保存配置: netfilter-persistent save # 重新启动: netfilter-persistent reload
    CentOS8+ / RHEL8+ bash systemctl stop firewalld && systemctl disable firewalld yum install epel-release && yum install nftables # 若需 nftables 转换 接下来手动启动 `iptables`: `systemctl start nftables`. 但建议还是继续使用 firewalld 或切换到 Docker 容器环境。
    # 场景描述 # 推荐设置 # 成果评估
    web 应用服务器集群 仅暴露 HTTP,禁止其他端口接入;需要跨集群内部通信,
    PIPESAMPLE : 输入流量必须才能进入网关:
    • PIPESAMPLE 输入 → → → → → OUTGOING → POSTROUTING。 ` ÅÅÅ Å Å Å

    效果

    • 所有非标准端口请求都被即时丢弃,降低了攻击面。话说回来,
    • 内部节点间通信依然畅通。无需暴露额外接口,
    • 出站访问保持完整,可更新软件源。老实说,

    ——掌握 IPTABLES 默认策略即拥有全局防御力场 ⚔️🛡️📈💡🔐🏰🔒🛠️🤖🚀🔥💪🚧🛑🧩🧪🗝️👨‍💻👩‍💻🎯🔎📊📚⏱️🌐📡⏳🚁🌟🙌✨🔗⚙️💬🎉🛣️🥇🚦✍️🔍🌈🍃📌📋🐱‍🏍🐱‍🏠🐱‍♂️🐱‍♀️📈🎁🚨❗✔️✅❌⛔🔓🔐🙈🙉🙊🔥⚡💥🍎🍏🍇🍉✂️🧰⚙🔬🌿🌸🌻🌞✨✨✨' />

    问: 若要把某些特定 IP 跟踪监控。需要做哪些调整,答案…”

标签:Linux
按理说,

iptables 的链默认策略往往成为程序安全的第一道防线。许多管理员在配置时会遇到“改错导致服务中断”“不知道如何快速回滚”等痛点,

说到使用者痛点一。默认策略不清晰导致误操作

大多数程序安装后INPUT、FORWARD、OUTPUT 三条链的默认策略都是ACTION=ACCEPT这对外部攻击者来说相当宽松。若直接使用-P DROP而不先检查现有规则,可能会导致 SSH、Web 等正常流量被拒绝。

如何通过修改iptables链的默认策略来显著增强网络安全防护?

说到常见错误场景。

  • SSH 被拒绝: 未先保留已有允许 SSH 的规则,接下来直接把 INPUT 改为 DROP。
  • NAT 与 FORWARD 冲突: 在 NAT 表里已有转发规则,却把 FORWARD 链改为 REJECT。
  • 无备份导致恢复困难: 更改后发现程序无法访问,但没有备份文件可用。

步骤一的观点是,查看当前链的默认策略

sudo iptables -L -n -v --line-numbers | grep 'Chain'

This command 列出所有链及其当前动作。每行格式类似的观点是,

Chain INPUT
Chain FORWARD
Chain OUTPUT 

从提示来看,

- 如果你使用的是 CentOS7 并开启了 firewalld,请先停用它: sudo systemctl stop firewalld && sudo systemctl disable firewalld

说到步骤二。安全地修改默认策略

A. 准备工作——创建允许列表:

如何通过修改iptables链的默认策略来显著增强网络安全防护?
  • sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH 必须开放
  • sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP 必须开放

B. 修改链默认政策:

命令示例作用说明
sudo iptables -P INPUT DROP sudo iptables -P FORWARD REJECT sudo iptables -P OUTPUT ACCEPT将未明确允许的数据包全部丢弃;转发请求被拒绝,出站保持开放。
sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT DROP 仅保留明确定义的入站和转发,禁止所有出站。
*根据业务场景自行组合*
⚠️ 在执行上述命令前。请务必确认已保存允许必要端口的规则,否则会立即失去远程管理权限!如果你是在云主机上,可通过云控制台控制台直接访问进行修复。老实说,

情况处理——IPv6 与 NAT 表支持一样要检查:

  • NAT 表中已有 SNAT/DNAT 时不要轻易把 FORWARD 改为 DROP。否则 NAT 转发会失效。
  • Iptables 对 IPv6 的语法略有差异,例如:
    ip6tables –L
    ip6tables –P INPUT DROP
    ip6tables –P OUTPUT ACCEPT
    ip6tables –P FORWARD DROP
    
    请根据你的发行版对应命令调整。—‑‑‑ —‑‑‑

    ⚠️ 小心误删关键规则!如果你是第一次使用 iptables ,建议先以临时方式设置一个 “倒计时” 防火墙,例如:
    # 临时开启阻止所有入站,保留 SSH
    sudo iptables-save> /root/iptables.backup # 备份
    sudo iptables-reset # 清空所有规则
    sudo iptables -A INPUT -i lo -j ACCEPT # 本地环回通行
    sudo iptables -A INPUT -m state --state ESTABLISHED。RELATED –j ACCEPT
    sudo iptables -A INPUT –p tcp --dport 22 –j ACCEPT # SSH 必须通行
    # 最终再设定 DEFAULT 策略为 DROP:
    sudo iptables-P INPUT DROP
    This 方法可以让你在出现连不上服务器时通过本地 console 或 cloud console 快速恢复。---
    

    步骤三这方面。 保存并重启 IPTABLES 服务

    `iptables` 的更改只在内存中生效,要想持久化需要保存配置并让服务重新加载。不同发行版略有差别:

    常用方法这方面,备份与恢复机制

    • `iptables-save> ~/myrules.v4` 把当前配置导出到文件;可以随时用 `iptables-restore <~/myrules.v4` 恢复。
    • `crontab` 定期导出配置,以防意外删除或硬件故障。 例如每天凌晨 02:00 自动保存一次。 话说回来,
    • `rsync` 将 `/etc/sysconfig/iptables`或 `/etc/iptables/rules.v4`同步到离线仓库或云存储。以便灾难恢复,
    • `tcpdump + tshark` 用于捕获被拒绝的数据包做日志分析,以定位误拦规则原因。
    • `--test-run`: 在生产环境里先跑 “dry-run” 模式,例如 `/sbin/xtables-multi --test-run …--apply-policy'`,确保不会触发连通性问题后再正式应用。不过,
    • `firewall-cmd --permanent …&& firewall-cmd --reload`: 如果你坚持使用 firewalld。记得把上述逻辑迁移到 `/etc/firewalld/zones/public.xml’ 等 zone 文件中,并开启永久生效。
    • ---

      实战案例 —— 公司内部服务器集群防护方案

    # Linux 程序   # 保存与重启命令  
    CentOS7 / RHEL7 # 安装服务包: yum install igetc-services # 保存配置: service iptables save # 重新启动: service iptables restart 或 systemctl restart iptables.service `service` 是兼容旧版本;推荐使用 `systemctl`。
    Debian / Ubuntu apt-get install netfilter-persistent # 保存配置: netfilter-persistent save # 重新启动: netfilter-persistent reload
    CentOS8+ / RHEL8+ bash systemctl stop firewalld && systemctl disable firewalld yum install epel-release && yum install nftables # 若需 nftables 转换 接下来手动启动 `iptables`: `systemctl start nftables`. 但建议还是继续使用 firewalld 或切换到 Docker 容器环境。
    # 场景描述 # 推荐设置 # 成果评估
    web 应用服务器集群 仅暴露 HTTP,禁止其他端口接入;需要跨集群内部通信,
    PIPESAMPLE : 输入流量必须才能进入网关:
    • PIPESAMPLE 输入 → → → → → OUTGOING → POSTROUTING。 ` ÅÅÅ Å Å Å

    效果

    • 所有非标准端口请求都被即时丢弃,降低了攻击面。话说回来,
    • 内部节点间通信依然畅通。无需暴露额外接口,
    • 出站访问保持完整,可更新软件源。老实说,

    ——掌握 IPTABLES 默认策略即拥有全局防御力场 ⚔️🛡️📈💡🔐🏰🔒🛠️🤖🚀🔥💪🚧🛑🧩🧪🗝️👨‍💻👩‍💻🎯🔎📊📚⏱️🌐📡⏳🚁🌟🙌✨🔗⚙️💬🎉🛣️🥇🚦✍️🔍🌈🍃📌📋🐱‍🏍🐱‍🏠🐱‍♂️🐱‍♀️📈🎁🚨❗✔️✅❌⛔🔓🔐🙈🙉🙊🔥⚡💥🍎🍏🍇🍉✂️🧰⚙🔬🌿🌸🌻🌞✨✨✨' />

    问: 若要把某些特定 IP 跟踪监控。需要做哪些调整,答案…”

标签:Linux