资讯动态

Linux防火墙:Netfilter/iptables原理与配置指南

发布时间:2026/10/27 5:14:29 来源:尧图企业网站定制
1. Netfilter/iptables 基础概念解析Netfilter是Linux内核中的一个数据包过滤框架它提供了一系列的钩子Hook在内核网络协议栈的关键位置允许内核模块在这些点上注册回调函数。当数据包经过这些钩子点时注册的回调函数就会被调用从而实现对网络数据包的控制和修改。iptables则是运行在用户空间的工具它允许系统管理员配置Netfilter提供的各种数据包过滤规则。通过iptables命令我们可以定义规则集ruleset来决定如何处理进出系统的网络数据包。这些规则按照表table和链chain的组织方式进行管理。注意虽然现在有nftables作为iptables的替代品但在大多数生产环境中iptables仍然是主流的防火墙配置工具特别是在较旧的Linux发行版中。1.1 Netfilter的五个钩子点Netfilter在内核网络协议栈中设置了五个关键的钩子点NF_IP_PRE_ROUTING数据包进入网络接口后但在路由决策之前NF_IP_LOCAL_IN数据包被路由到本地系统后NF_IP_FORWARD数据包被转发到另一个接口时NF_IP_LOCAL_OUT本地进程产生的数据包准备发送时NF_IP_POST_ROUTING数据包即将离开网络接口前这五个钩子点构成了Linux网络数据包处理的完整生命周期理解它们对于正确配置防火墙规则至关重要。1.2 iptables的四表五链iptables使用表table和链chain的概念来组织防火墙规则四个主要表filter表默认表用于过滤数据包接受、拒绝或丢弃nat表用于网络地址转换NATmangle表用于特殊的数据包修改raw表用于配置数据包免于连接跟踪五个内置链INPUT链处理目标是本机的数据包OUTPUT链处理本机产生的数据包FORWARD链处理经过本机路由的数据包PREROUTING链数据包进入路由决策前处理POSTROUTING链数据包即将发送前处理表与链的关系不是一一对应的某些链在某些表中不存在。例如FORWARD链只存在于filter和mangle表中。2. iptables规则配置详解2.1 基本命令语法iptables命令的基本语法结构如下iptables [-t 表名] 命令选项 [链名] [规则匹配条件] -j [目标动作]常用命令选项-A在链尾追加规则-I在指定位置插入规则-D删除规则-L列出规则-F清空链中所有规则-N创建新链-X删除用户自定义链-P设置链的默认策略2.2 常见匹配条件iptables规则可以基于多种条件进行匹配基本匹配-p协议tcp, udp, icmp等-s源IP地址-d目标IP地址-i输入接口-o输出接口扩展匹配--sport源端口--dport目标端口--tcp-flagsTCP标志位--state连接状态NEW, ESTABLISHED, RELATED等--limit匹配速率限制--mac-source源MAC地址2.3 目标动作当数据包匹配规则时可以指定以下常见动作ACCEPT接受数据包DROP丢弃数据包无响应REJECT拒绝数据包发送拒绝响应LOG记录数据包信息SNAT源地址转换DNAT目标地址转换MASQUERADE动态源地址转换用于动态IPREDIRECT端口重定向3. 实际应用场景与配置示例3.1 基本防火墙配置以下是一个基本的防火墙配置示例允许已建立的连接和必要的入站流量拒绝其他所有流量# 设置默认策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允许本地回环接口 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # 允许已建立的连接和相关的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许SSH连接端口22 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许HTTP和HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许ICMPping iptables -A INPUT -p icmp -j ACCEPT3.2 NAT配置示例配置NAT使内网设备通过网关访问互联网# 启用IP转发 echo 1 /proc/sys/net/ipv4/ip_forward # 设置源地址转换SNAT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 或者使用固定IP的SNAT iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 公网IP # 允许转发 iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT3.3 端口转发配置将外部访问网关80端口的流量转发到内网服务器的8080端口iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 内网IP:8080 iptables -t nat -A POSTROUTING -p tcp -d 内网IP --dport 8080 -j SNAT --to-source 网关内网IP iptables -A FORWARD -p tcp -d 内网IP --dport 8080 -j ACCEPT4. 高级功能与性能优化4.1 连接跟踪与状态检测Netfilter的连接跟踪conntrack功能可以跟踪网络连接的状态这是实现状态防火墙的基础。但连接跟踪会消耗系统资源在高负载环境下需要特别注意# 查看当前连接跟踪表 cat /proc/net/nf_conntrack # 调整连接跟踪表大小 echo 65536 /proc/sys/net/netfilter/nf_conntrack_max echo 300 /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established4.2 使用自定义链优化规则当规则数量较多时可以使用自定义链来组织规则提高匹配效率# 创建自定义链 iptables -N WEB_TRAFFIC # 向自定义链添加规则 iptables -A WEB_TRAFFIC -p tcp --dport 80 -j ACCEPT iptables -A WEB_TRAFFIC -p tcp --dport 443 -j ACCEPT # 从主链跳转到自定义链 iptables -A INPUT -j WEB_TRAFFIC4.3 限速与防DDoS使用limit模块可以实现简单的流量限制和DDoS防护# 限制ICMPping频率 iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 5 -j ACCEPT iptables -A INPUT -p icmp -j DROP # 防止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 4 --name SSH -j DROP5. 常见问题排查与维护5.1 规则调试与日志记录当规则不按预期工作时可以使用LOG目标进行调试# 记录被丢弃的数据包 iptables -A INPUT -j LOG --log-prefix IPTABLES-DROP: --log-level 4 iptables -A INPUT -j DROP # 查看日志 tail -f /var/log/messages5.2 规则持久化iptables规则默认不会在重启后保留需要手动保存和恢复# 保存规则根据发行版选择 iptables-save /etc/iptables.rules # 恢复规则 iptables-restore /etc/iptables.rules # 设置开机自动加载在/etc/rc.local中添加 iptables-restore /etc/iptables.rules5.3 性能问题排查当遇到网络性能问题时可以检查规则顺序是否合理常用规则应该放在前面是否有过于宽泛的规则导致大量不必要的数据包处理连接跟踪表是否已满是否使用了大量复杂匹配导致CPU负载过高# 查看规则处理计数器 iptables -L -v # 查看连接跟踪表状态 conntrack -L

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑