如何通过修改iptables链的默认策略来显著增强网络安全防护?
- 内容介绍
- 文章标签
- 相关推荐
iptables 的链默认策略往往成为程序安全的第一道防线。许多管理员在配置时会遇到“改错导致服务中断”“不知道如何快速回滚”等痛点,
说到使用者痛点一。默认策略不清晰导致误操作
大多数程序安装后INPUT、FORWARD、OUTPUT 三条链的默认策略都是ACTION=ACCEPT这对外部攻击者来说相当宽松。若直接使用-P DROP而不先检查现有规则,可能会导致 SSH、Web 等正常流量被拒绝。
说到常见错误场景。
- 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. 准备工作——创建允许列表:
-
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` 的更改只在内存中生效,要想持久化需要保存配置并让服务重新加载。不同发行版略有差别:
# 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 容器环境。 常用方法这方面,备份与恢复机制
- `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 文件中,并开启永久生效。 ---
- PIPESAMPLE 输入 → → → → → OUTGOING → POSTROUTING。 ` ÅÅÅ Å Å Å
- 所有非标准端口请求都被即时丢弃,降低了攻击面。话说回来,
- 内部节点间通信依然畅通。无需暴露额外接口,
- 出站访问保持完整,可更新软件源。老实说,
实战案例 —— 公司内部服务器集群防护方案
# 场景描述 # 推荐设置 # 成果评估 web 应用服务器集群 仅暴露 HTTP,禁止其他端口接入;需要跨集群内部通信, PIPESAMPLE : 输入流量必须才能进入网关:效果
——掌握 IPTABLES 默认策略即拥有全局防御力场 ⚔️🛡️📈💡🔐🏰🔒🛠️🤖🚀🔥💪🚧🛑🧩🧪🗝️👨💻👩💻🎯🔎📊📚⏱️🌐📡⏳🚁🌟🙌✨🔗⚙️💬🎉🛣️🥇🚦✍️🔍🌈🍃📌📋🐱🏍🐱🏠🐱♂️🐱♀️📈🎁🚨❗✔️✅❌⛔🔓🔐🙈🙉🙊🔥⚡💥🍎🍏🍇🍉✂️🧰⚙🔬🌿🌸🌻🌞✨✨✨' />
• 问: 若要把某些特定 IP 跟踪监控。需要做哪些调整,答案…”
iptables 的链默认策略往往成为程序安全的第一道防线。许多管理员在配置时会遇到“改错导致服务中断”“不知道如何快速回滚”等痛点,
说到使用者痛点一。默认策略不清晰导致误操作
大多数程序安装后INPUT、FORWARD、OUTPUT 三条链的默认策略都是ACTION=ACCEPT这对外部攻击者来说相当宽松。若直接使用-P DROP而不先检查现有规则,可能会导致 SSH、Web 等正常流量被拒绝。
说到常见错误场景。
- 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. 准备工作——创建允许列表:
-
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` 的更改只在内存中生效,要想持久化需要保存配置并让服务重新加载。不同发行版略有差别:
# 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 容器环境。 常用方法这方面,备份与恢复机制
- `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 文件中,并开启永久生效。 ---
- PIPESAMPLE 输入 → → → → → OUTGOING → POSTROUTING。 ` ÅÅÅ Å Å Å
- 所有非标准端口请求都被即时丢弃,降低了攻击面。话说回来,
- 内部节点间通信依然畅通。无需暴露额外接口,
- 出站访问保持完整,可更新软件源。老实说,
实战案例 —— 公司内部服务器集群防护方案
# 场景描述 # 推荐设置 # 成果评估 web 应用服务器集群 仅暴露 HTTP,禁止其他端口接入;需要跨集群内部通信, PIPESAMPLE : 输入流量必须才能进入网关:效果
——掌握 IPTABLES 默认策略即拥有全局防御力场 ⚔️🛡️📈💡🔐🏰🔒🛠️🤖🚀🔥💪🚧🛑🧩🧪🗝️👨💻👩💻🎯🔎📊📚⏱️🌐📡⏳🚁🌟🙌✨🔗⚙️💬🎉🛣️🥇🚦✍️🔍🌈🍃📌📋🐱🏍🐱🏠🐱♂️🐱♀️📈🎁🚨❗✔️✅❌⛔🔓🔐🙈🙉🙊🔥⚡💥🍎🍏🍇🍉✂️🧰⚙🔬🌿🌸🌻🌞✨✨✨' />
• 问: 若要把某些特定 IP 跟踪监控。需要做哪些调整,答案…”

