一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。
一、IPTABLES介绍
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它
netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm 和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED。
1.1 PREROUTING
PREROUTING 链是 mangle 和 nat 表中用于修改数据包的报头信息的链。
具体来说,PREROUTING 链主要用于处理刚到达本机并在路由转发前的数据包。在该链上添加的规则可以检查数据包的目标地址、端口等信息,然后根据实际需求进行处理,例如将目标地址修改为本地 IP 地址或者其他网络设备的 IP 地址,从而实现端口映射或者 DNAT(Destination NAT)等功能。
PREROUTING 链常常用于以下场景:
- 端口映射:通过在 PREROUTING 链上添加规则,将数据包中的目标端口转发到本地计算机的指定端口,从而实现端口映射的功能。
- 源地址转换:通过在 PREROUTING 链上添加规则,将数据包中的源 IP 地址替换为其他 IP 地址,从而实现匿名访问或者欺骗攻击等功能。
- DNAT:通过在 PREROUTING 链上添加规则,将数据包中的目标地址替换为其他 IP 地址,从而实现 NAT 转换、负载均衡等功能。
1.2 POSTROUTING
POSTROUTING 链是 mangle、nat 和 raw 表中用于修改数据包的报头信息的链。该链主要用于处理将要离开本机的数据包,其作用是对数据包的源 IP 地址进行 NAT 转换或者修改规则的匹配等操作。
一般来说,POSTROUTING 链被用于以下场景:
- SNAT:通过在 POSTROUTING 链上添加规则,将数据包中的源 IP 地址替换为其他 IP 地址,从而实现 NAT 转换,将内部 IP 地址转换为公网 IP 地址,从而实现外部网络对本地设备的访问。
- Masquerade:Masquerade 是一种特殊的 SNAT 操作,通过将数据包源地址都修改为本机的公网 IP 地址来实现 NAT 转换,通常用于连接互联网的本地网络设备,如路由器等。
- 连接跟踪:POSTROUTING 链上的一些规则可以使连接跟踪模块(conntrack)记录数据包的状态信息,跟踪连接的建立、维护和释放。
- 防火墙策略:在 POSTROUTING 链上也可以添加防火墙策略,通过设置过滤规则来保护本机或网络设备的安全和隐私。
1.3 INPUT
INPUT 链是 filter 表中用于处理传入数据包的链。该链主要用于过滤本机接收到的数据包,控制对本机服务的访问。
具体来说,INPUT 链可以用于以下场景:
- 防火墙策略:通过在 INPUT 链上添加过滤规则,可以限制和过滤不符合安全规范和政策的数据包,保护本机或网络设备的安全和隐私。
- 服务访问控制:通过在 INPUT 链上添加规则,可以限定允许访问本地服务的来源 IP 地址和端口号,防止未经授权的访问和攻击。
- ICMP 控制:在 INPUT 链上也可以添加规则控制 ICMP 数据包的传入,例如允许某些 ICMP 数据包类型,禁止某些 ICMP 数据包类型,从而保护本机的网络通信稳定性。
- 连接跟踪:对于已经建立连接的数据包,可以使用连接跟踪模块在 INPUT 链上记录连接状态,并根据实际需求进行处理,如允许、拒绝、重定向等。
1.4 OUTPUT
OUTPUT 链是 filter 表中用于处理传出数据包的链。该链主要用于过滤本机发送的数据包,控制本机对外部服务的访问。
具体来说,OUTPUT 链可以用于以下场景:
- 防火墙策略:通过在 OUTPUT 链上添加过滤规则,可以限制和过滤不符合安全规范和政策的数据包,阻止本机对外部网络的不当操作和请求。
- 服务访问控制:通过在 OUTPUT 链上添加规则,可以限定允许本机访问的目的地 IP 地址和端口号,防止访问未经授权或不安全的服务或设备。
- NAT 转换:在 OUTPUT 链上也可以添加规则实现 SNAT 转换,将本机的内网 IP 地址转换为公网 IP 地址,从而实现外部网络对本机的访问。
- 连接跟踪:对于已经建立连接的