- 结构和流程:表格、链条以及流量如何流动
- 规则和政策:命令、比赛和关键目标
- NAT 和发布:实际场景中的 SNAT/MASQUERADE 和 DNAT
- 安全设计:功能性 DMZ 和良好操作实践
如果你管理Linux 发行版来保护你的安全和隐私,那么迟早你会遇到 iptables。这个数据包过滤系统是 GNU/Linux 经典防火墙的核心,它能够决定哪些流量可以进出网络,以及哪些流量可以在网络之间转发。配置得当的话,它就像在你网络入口处安排了一位训练有素的门卫,能够完美且精准地执行你的规则。
以下内容将为您提供一份完整且最新的指南,涵盖防火墙基础知识:防火墙概念、Netfilter、规则表和链、数据包流、关键命令、规则扩展和高级目标,以及NAT、重定向、默认策略和功能性DMZ等实际应用场景。所有内容均以清晰严谨的语言进行解释,方便您立即将其应用到您的基础架构中。
防火墙背景:从夜总会保镖到 DMZ
防火墙本质上是网络之间的过滤器,它应用规则来决定每个数据包的命运。你可以把它想象成夜总会的保安,手里拿着一张清单:如果数据包符合标准,就放行;否则,就被拒之门外。这个比喻有助于理解,关键在于规则的逻辑以及规则的执行顺序。
在网络设计中,某些拓扑结构比其他拓扑结构更安全。DMZ (非军事区)是一个中间网络,用于托管公共服务(例如网站或FTP服务器),并将其与企业局域网隔离。为什么呢?因为即使攻击者攻破了公共服务器,这种隔离也能阻止他们直接访问内部网络的其余部分。
Linux 作为防火墙:Netfilter 和 iptables
Linux 内核集成了Netfilter 框架,该框架提供了用于拦截和操控数据包的钩子。在用户空间,iptables 工具定义了内核将应用于网络流量的规则。这种内核/用户分离的设计使得系统能够在保证高性能的同时,实现高度的灵活性。
按协议区分这些实用程序很有用:iptables(IPv4)、ip6tables(IPv6)、arptables(ARP)和ebtables(以太网帧)。在内核中,通用模块是x_tables,它共享用于匹配扩展和目标的逻辑。历史背景:iptables取代了ipchains,而nftables又在内核3.13中取代了iptables,尽管iptables在许多系统中仍然被广泛使用。
要操作,您需要管理员权限。 以 root 身份运行 iptables (或使用 sudo),通常在 /usr/sbin/iptables (Debian/衍生产品)或 /sbin/iptables (Red Hat/衍生产品)。官方文档位于 man iptables 以及 netfilter.org。
iptables结构:表、链和规则
iptables 将其逻辑组织成由规则链组成的表格。每条规则都指定了匹配条件以及数据包匹配时要应用的目标。
- 过滤表 (默认,纯过滤)
- INPUT:指向机器本身的流量。
- 前锋:通过设备(路由)的流量。
- OUTPUT:本地生成的流量。
- NAT表 (地址转换;在新连接上评估)
- PREROUTING:在决定路线之前;非常适合 DNAT/端口转发。
- OUTPUT:路由之前本地发起的数据包。
- POSTROUTING:路由之后;SNAT/MASQUERADE 的典型特征。
- 红树林桌 (精细的标题调整:TOS、TTL、标记等)
- 预路由、输入、转发、输出、后路由:全程可用。
- 原始表 (连接跟踪控制/conntrack)
- PREROUTING y OUTPUT:标记应被 conntrack 跳过的流量。
当数据包到达链的末端时,它会依次与每条规则进行比较;如果匹配,则执行其目标操作,遍历停止。如果到达末端时未匹配到任何规则,且该链是预定义的,则应用该链的默认策略。
数据包流:它们在何时何地通过
了解流量路径是正确应用规则的关键。数据包从局域网 (LAN) 流向互联网通常会经历以下处理过程:首先是路由前处理(可能包括 DNAT/mangle),然后是转发(传输过滤),最后在离开设备之前,还会进行路由后处理(如果适用,则包括 SNAT/MASQUERADE)。
反之,如果目标地址是防火墙本身,则路由为 PREROUTING → INPUT;如果目标地址来自本地计算机,则路由为OUTPUT → POSTROUTING。这种思路框架可以避免在遇到不合理之处时造成困扰。
基本命令:列出、清除、创建和默认策略
要审核当前状态, 美国 iptables -L (可选 -v 详细信息和 -n (不解析名称)。您还可以使用 -N y -X 并设置默认策略 -P.
当你需要从头开始时, 清理规则 -F (冲洗) 以及(如果适用)计数器。请记住,您可以使用 -t 以及特定的连锁店;例如, iptables -F -t nat 对于 NAT。
定义规则时,最常见的选项很简单: -A 鸭子, -I 插入, -R 取代和 -D 抹去。然后添加选择器,例如 -p (协议), -s/-d (出发地/目的地), -i/-o (接口)和目标 -j (例如。, 接受、丢弃或拒绝).
该 默认策略 定义当所有规则都不匹配时会发生什么。主机上典型的强化方案是 INPUT DROP, FORWARD DROP, OUTPUT ACCEPT, 阻止除明确允许的传入之外的所有传入 并允许结果出来。
匹配扩展(-m):TCP、UDP、ICMP、MAC、状态和多端口
Iptables 使用以下匹配模块扩展其过滤器 -m. TCP 允许通过端口和标志进行调整: --dport/--sport y --syn 例如,用于新的连接开口。
对于 UDP 协议,您还可以限制源端口和目标端口。一个经典的例子是:向 Web 服务器开放 80/443 端口,或者允许通过 53/UDP 端口发出 DNS 查询。
使用 ICMP, --icmp-type 让你区分类型 (例如。, 回显请求 y 回显回复 用于 ping)。这对于允许诊断而不向完整 ICMP 敞开大门非常有用。
还有模块 mac 按 MAC 地址过滤 同 --mac-source。如果您想授权具有动态 IP 的托管计算机在不依赖 IP 的情况下 ping 防火墙,则很有用。
也许最重要的是在操作层面, 模块 state (或 conntrack) --state NEW, ESTABLISHED, RELATED这允许已建立的连接的响应,从而大大减少所需的规则数量。
要对端口进行分组, multiport 增加 --sports y --dports 使用逗号分隔的列表. 可以方便地在单个规则中打开HTTP,HTTPS和SSH。
ACCEPT/DROP 之外的目标:NAT 和公司
除了接受或拒绝流量之外,iptables 还可以重写地址和端口,以将私有网络连接到互联网或发布内部服务。
MASQUERADE (在 POSTROUTING 从表中 nat)将源 IP 替换为防火墙的输出 IP,理想情况是 公共IP是动态的 (DHCP)。这是典型的整个 LAN 的出站 NAT。
SNAT (也在 POSTROUTING)明确设置源 IP/端口 --to-source. 当你拥有静态公共 IP 时使用它 并且您想精确控制翻译。
DTA (在 PREROUTING o OUTPUT)使用以下方式更改目标 IP --to-destination. 这就是著名的“开放港口”:您在公共 IP 上接收流量并将其重定向到 DMZ 中的服务器,例如 192.168.1.2 的内部网站。
简单示例:过滤两个网络之间的流量
想象一下一台机器充当两个子网之间的路由器/防火墙。 如果您只希望主机 B 与 C 通信并且仅通过 TCP,表格将是 filter 正确的字符串是 FORWARD,因为流量会经过该设备。
首先,您需要对转发 (FORWARD) 协议应用默认的丢弃 (DROP) 策略,然后显式授权 TCP 上的 B→C 流量(以及,如果适用,C→B 流量)。这种“默认拒绝,仅允许最低限度流量”的模式是构建强大安全态势的基础。
时装秀上的日常案例:典型规则
例如,具有两个接口的网关 eth1(LAN)和 eth0(WAN),通常需要将数据包从 LAN 转发到 Internet。为此,它添加了 FORWARD -i eth1 -o eth0 -j ACCEPT,而 仅允许反向 ESTABLISHED,RELATED 同 -m state.
在防火墙本身中,建议授权 响应传出连接的传入流量 同 INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT,并始终允许环回: INPUT -i lo -j ACCEPT.
要允许 LAN 计算机浏览,请应用出站 NAT: -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source X.Y.Z.W (o MASQUERADE 如果 IP 是动态的)。这会将私有 IP 转换为您的公共 IP。
基本的加固措施是阻止源 IP 地址不正确的传入 WAN 数据包(您自己的公网 IP 地址、私有网段 192.168.0.0/24、127.0.0.0/8 等),因为它们通常表示欺骗。
要在防火墙上公开服务(例如 SMTP 25、HTTP 80、HTTPS 443 或 SSH 22),您可以 允许带有 SYN 标志的 TCP 数据包到达这些目标端口。如果您想按目标 IP 缩小范围,请添加 -d 到服务的IP。
典型的基础架构服务包括局域网接口上的DHCP (端口 68 至 67 的流量)以及来自权威解析器的DNS(UDP 端口 53,如果按源地址过滤)。这些端口允许客户端获取 IP 地址并解析域名。
如果需要阻止访问,DROP 传入的 SSH/Telnet非常简单;您还可以拒绝发送到本地网络上被阻止的 IP 地址的传出消息,以便发送者收到拒绝通知。
在 Red Hat/CentOS 系统上安装和管理服务
在 CentOS/RHEL 5/6 的传统环境中, 安装 yum -y install iptables尽管如今许多新的发行版都青睐 nftables,但 iptables 仍然存在于生产系统和设备中。
与整合 SysV 服务 允许管理和保留规则: service iptables start|stop|restart y service iptables save, 节省 /etc/sysconfig/iptables. 要在启动时启用: chkconfig iptables on 级别 2-5。
在现代系统中,尽管包装器发生了变化,但其理念仍然存在:定义规则、测试规则并使其持久化,以便它们能够在重启后仍然存在,无论是使用系统工具还是脚本。
精确列出、删除和编辑规则
要查看规则编号的状态, 美国 iptables -L --line-numbers -n -v。这样你就可以通过索引删除 -D INPUT 3 或替换为 -R 沒有溷續。
如果需要选择性删除, 只清洁接触的链条或板 (-F FORWARD o -F -t nat)。避免在没有“安全网”的情况下进行远程全球扫描,否则您可能会失去 SSH 访问权限。
一般做法是,首先制定允许 SSH 会话的规则,逐步应用更改,并设置回滚窗口(例如,如果 5 分钟内没有提交更改,则使用 cron 作业恢复规则)。
使用 iptables-save 和 iptables-restore 实现持久化
要保存您的设置, iptables-save > /ruta/backup/iptables.rules 生成所有表的机器可读转储。非常适合变更控制和迁移。
要充电,请使用 iptables-restore < /ruta/backup/iptables.rules您可以使用 systemd、init 脚本或 cron 作业自动执行启动恢复。 @reboot,确保防火墙在重启后仍然保持活动状态。
除此之外,还有以下良好的操作规范: 以适当的权限运行,将文件保存在外部 /tmp 并使其与环境(正确的接口和子网)保持一致,以避免意外。
DMZ 详解:一个完整而现实的例子
假设一台 Linux 防火墙以“单用户”模式(无 NAT)连接到路由器,该防火墙有三个接口:eth0(LAN 192.168.1.1/24)、eth1(DMZ 192.168.2.1/24)和 eth2(WAN,通过 DHCP 获取 IP 地址)。DMZ 中托管着一台Apache Web 服务器(192.168.2.2)和一台 FTP 服务器(192.168.2.3)。
策略目标:允许从DMZ向互联网发布HTTP/HTTPS和FTP流量,允许从局域网通过SSH管理防火墙,并允许局域网浏览网页(HTTP/HTTPS)、通过FTP传输文件以及解析DNS。所有其他访问均被拒绝。
广义上讲: 过滤/转发 允许 LAN→WAN 传输并响应,并且 WAN→DMZ 仅到已发布的端口 同 ESTABLISHED,RELATED 寻找答案。在 nat/预路由,应用DNAT发布服务;在 nat/后路由,用于 LAN/DMZ 输出的 SNAT/MASQUERADE。
开场白示例: DNAT 80/443 到 192.168.2.2 和 21/20(取决于模式)到 192.168.2.3 与相应的 FORWARD 允许这些端口。保护 FTP(主动/被动)的控制和数据通道,或限制被动范围,并在防火墙上反映这一点。
对于 LAN: 允许出口至 80、443、21 和 53 及其返回,应用出站 NAT POSTROUTING. 在防火墙中,授权 仅来自 192.168.1.0/24 子网的传入 SSH 并阻止来自 WAN 的不必要的访问。
别忘了注意安全:限制广域网(包括私有链路、环回链路和您自己的公网链路)上无效的流量范围,并且只记录您感兴趣的数据。通过严格的默认策略和最小化的流量开放,您可以将风险暴露降至最低。
良好做法和操作技巧
做事一定要有计划:记录允许的事情以及原因,用简单的图表验证预期的流程,并按正确的顺序应用规则以避免重叠。
使用带有头部的模块组合: 状态/连接跟踪响应,tcp con --syn 在开口处,以及 multiport 分组这样,您就可以简化并降低不一致的风险。
对于频繁变化的环境,请考虑按功能分离规则: 定制链条 (带 -N) 从 INPUT/OUTPUT/FORWARD 调用,这样保存或反转片段就更加清晰了。
许多发行版正在向 nftables 过渡,但如果您的平台/产品使用 iptables,那么深入了解这些组件将使您拥有完全的控制权。如果您迁移到 nftables,您将很容易掌握相应的概念框架。
通过以上学习,您现在已经具备了在生产环境中部署和维护 iptables 的坚实基础:您了解其架构(表、链和流),熟练掌握了基本命令,能够使用 DNAT/SNAT 实现 NAT 和发布流量,并且知道如何设置安全的 DMZ。接下来,您需要根据自身需求进行定制,定期进行审计,并确保您的规则与您的网络模型一样清晰明了。