centos 7中iptables规则永久生效需先停用firewalld、修改规则后执行iptables-save > /etc/sysconfig/iptables并启用systemctl enable iptables,否则重启后规则丢失。

iptables 是 CentOS 7 上直接修改流量包过滤规则的核心工具,但前提是必须先停用并禁用 firewalld ——否则你对 iptables 的任何改动都会被 firewalld 覆盖或冲突。
下面分三步讲清楚「怎么改」、「为什么得这么改」、「最容易卡住哪」:
停用 firewalld 才能真正控制 iptables
CentOS 7 默认启用 firewalld,它在后台持续接管 iptables 规则。你手动运行 iptables -A INPUT ... 后立刻查 iptables -L 看似生效,但重启或 reload 后规则就消失,因为 firewalld 会重载自己的配置。
- 执行
systemctl stop firewalld和systemctl disable firewalld - 确认已卸载:运行
systemctl is-active firewalld应返回inactive;systemctl is-enabled firewalld应返回disabled - 可选但推荐:安装
iptables-services(yum install iptables-services),否则iptables规则无法持久化
修改 filter 表的 INPUT 链最常用
绝大多数包过滤需求都落在 INPUT 链(处理进来的连接),比如放行 SSH、拒绝某端口、限制 IP 段。注意规则是**从上到下匹配**,第一条匹配就执行动作,不再往下看。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
- 加一条允许本机 ping:
iptables -I INPUT -p icmp -j ACCEPT(-I插入开头,避免被默认 DROP 挡住) - 只允许某网段访问 SSH:
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT - 拒绝所有访问 80 端口的 TCP 请求:
iptables -A INPUT -p tcp --dport 80 -j DROP(-A追加末尾,适合“兜底”类规则) - 查看带行号的规则以便后续删改:
iptables -nL --line-numbers(-n避免 DNS 反查,更快更准)
保存规则并确保重启后仍生效
iptables 命令改的是内存里的规则,系统重启就清空。CentOS 7 不像老版本自动调用 service iptables save,必须手动持久化。
- 保存当前规则到文件:
iptables-save > /etc/sysconfig/iptables - 验证文件内容是否写入成功:
cat /etc/sysconfig/iptables应看到完整规则文本 - 启用开机自加载:
systemctl enable iptables(依赖iptables-services包) - 切勿用
iptables -F清空后再保存——这会导致空规则表被写入,所有流量都被默认策略拦死
真正容易被忽略的是:规则顺序和默认策略的组合效应。比如先设 iptables -P INPUT DROP,再插 ACCEPT 规则,但忘了加 -i lo 允许本地回环,连 localhost 的服务都会失联。动手前务必用 iptables -nL --line-numbers 看清当前链结构,再决定用 -I 还是 -A。










