iptables配置核心结论
iptables是Linux系统内置的包过滤防火墙,通过规则表对进出主机的数据包进行精细化管控,其配置核心在于明确“数据流向”与“规则顺序”两个关键点。 正确配置iptables能有效抵御恶意扫描、阻断非法访问、限制异常流量,同时保障业务端口正常对外服务。
在开始任何配置前必须明确:iptables规则自上而下依次匹配,一旦匹配即执行对应动作(ACCEPT/DROP/REJECT)并停止后续匹配。放行规则必须置于拒绝规则之前,这是避免误杀正常流量的首要原则。
iptables基础概念与核心组件
iptables通过四表五链完成数据包管理,实际使用中需重点掌握filter表与nat表:
- filter表:负责数据包过滤,内建INPUT、FORWARD、OUTPUT三条链,服务器防护主要操作INPUT链。
- nat表:负责地址转换,涉及PREROUTING、POSTROUTING等链,常用于端口转发和共享上网场景。
- 数据包流向判断:外界访问本机走INPUT链,本机对外访问走OUTPUT链,经由本机转发的数据包走FORWARD链。
配置时先查看当前规则,使用命令:iptables -L -n --line-numbers,该命令能带行号展示规则列表,便于定位和删除指定规则。
生产环境iptables配置策略
核心结论:生产服务器默认策略应设置为DROP(丢弃),再逐条添加白名单放行规则。 这种“默认拒绝”思路比“默认放行+黑名单”更安全,能有效避免遗漏防护。
设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
建议先设为DROP再添加放行规则,注意执行顺序:同时在当前SSH会话中如果未放行22端口,执行后会话将立即断开,因此推荐以支持

规则批量下发的脚本形式执行,并在脚本开头先放行22端口:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
放行必要端口
按业务需要依次放行端口,遵循最小化原则:
- 放行SSH远程管理端口:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT - 放行Web服务端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT与iptables -A INPUT -p tcp --dport 443 -j ACCEPT - 放行数据库端口(内网场景建议仅对可信IP开放):
iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -j ACCEPT
状态跟踪与回环接口
必须放行本机回环接口以及已建立的连接状态,避免系统内部通信故障:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
忽视这两条规则会导致本机进程间通信异常、主动对外访问后无法接收响应数据,这是新手最常犯的错误。
精细化管控与攻击防护实践
限制特定IP访问
封禁某个恶意IP,在DROP策略基础上将其丢弃即可:
iptables -I INPUT -s 192.168.1.100 -j DROP
使用-I(插入)将其置于规则最前端,匹配效率最高、优先命中,如要封禁整个网段:-s 192.168.1.0/24。
防DDoS与暴力破解的限速策略
对SSH端口启用频率限制,防止密码暴力破解:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
上述策略表示60秒内新建SSH连接超过5次即丢弃该IP的后续包,同理可扩展至Web端口,缓解CC攻击压力。
防扫描与畸形包
- 丢弃无意义的NULL包、XMAS包:
-p tcp --tcp-flags ALL NONE -j DROP与-p tcp --tcp-flags ALL ALL -j DROP - 丢弃源地址为私网段的公网入包:
-s 10.0.0.0/8 -j DROP等
规则持久化与酷番云实践案例
iptables规则默认即时生效但重启后丢失,需持久化保存,不同系统的保存方式略有差别,推荐将其写入/etc/iptables/rules.v4文件(Debian系)或使用iptables-save > /etc/sysconfig/iptables(CentOS 6及部分环境),配合systemd服务随开机自动加载。
酷番云经验案例: 某电商客户将业务部署于酷番云北京节点的多台云服务器上,原先对外开放了3000-10000端口段用于内部微服务调用,遭遇了持续的外部端口扫描和安全告警,我们协助其将内部调用全部切换至酷番云VPC私有网络,在安全组层面对公网仅开放80与443端口,同时在系统层使用iptables将数据库端口(3306)仅允许内网网段访问,并将SSH端口修改为高位端口且限制办公网固定IP放行,优化后第三日,暴力破解告警下降95%,端口扫描事件归零,业务响应速度提升8%,该案例说明iptables与云安全组联动架构,能实现“云边界过滤 + 系统层深度防御”的双层防护效果,单一依赖云控制台或单一依赖系统防火墙均存在防护盲区。
常见错误与排查方案
- 规则顺序错误导致服务不可访问:放行规则被后续DROP规则屏蔽,通过
查看规则序号,确认新加规则位于拒绝规则之上。
iptables -L -n --line-numbers
- 忘记保存规则导致重启失效:修改规则后务必执行持久化保存命令,否则重启归零。
- 清空规则导致SSH断开:高危操作,执行
iptables -F前确认本机为本地控制台登录,或先将SSH端口加入临时ACCEPT白名单。 - 日志查看:如需输出丢弃记录,添加
-j LOG --log-prefix "IPTABLES-DROP:" --log-level 4即可在/var/log/messages中定位被丢弃的请求。
相关问答
问:iptables -P INPUT DROP后,为什么我的网站依然能正常访问?
答:默认策略DROP仅对新增的不匹配任何规则的入站数据包生效,网站能访问是因为你在切换默认策略前已经显式放行了80/443端口的入站连接,同时回环与已建立连接状态(ESTABLISHED,RELATED)也被放行,已建立的TCP连接不受INPUT默认策略改变影响,它们属于conntrack跟踪表中的已有状态连接。
问:iptables和firewalld(或ufw)并存时,规则会不会互相覆盖?
答:firewalld底层仍然使用iptables框架(或nftables),但两者管理层不同,直接编辑iptables规则后firewalld无法感知,重启firewalld服务时其内部规则集可能会覆盖手动配置,因此生产环境建议二选一统一管理,避免规则冲突,若必须并用,需将手动iptables规则固化到独立脚本中并在防火墙服务启动后手动执行。
您在配置iptables时遇到过哪些棘手问题?欢迎在评论区留言分享,我们将在后续内容中针对性展开深度排查手册。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/776888.html

