简介
前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。
这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。
TPROXY
TPROXY
(Transparent Proxying)允许代理服务器透明地处理网络流量,而无需修改客户端或服务器的配置。在 TCP/IP 栈中,这通常是通过修改 IP 地址或端口号来完成的,但 TPROXY
允许代理服务器接收原始数据包,并在不修改 IP 地址或端口号的情况下转发它们
以下是关于 TPROXY 的详细解释:
1. 功能与特点
透明性:客户端和服务端感知不到代理的存在,无需修改任何配置或代码。
灵活性:可以拦截、修改或转发任何进出网络的流量。
高性能:由于直接在内核层面处理流量,因此具有较低的性能开销。
2. 工作原理
流量拦截:使用 iptables 在 PREROUTING 链的 mangle 表中创建一个规则,拦截需要处理的流量。
路由规则:创建一个路由规则,将所有带有特定标记的数据包查找特定的路由表。
数据包映射:在特定的路由表中将所有 IPv4 地址声明为本地,实现数据包的映射。
数据包处理:在 tproxy 的监听端口上接收数据包,并编写网络应用或使用支持 tproxy 的软件(如 Squid 或 Envoy)来处理数据包。
3. 配置步骤(以 iptables 为例)
流量拦截:
使用 iptables 的 -t mangle 选项和 -A PREROUTING 命令,创建一个规则拦截特定流量到 tproxy 处理。例如,iptables -t mangle -A PREROUTING -p tcp -dport 9080 -j TPROXY --on-port 15001 --on-ip 127.0.0.1 --tproxy-mark 0x1/0x1。
路由规则:
使用 ip rule 命令创建一个规则,将所有带有特定标记的数据包查找特定的路由表。例如,ip rule add fwmark 1 lookup 100。
数据包映射:
使用 ip route 命令在特定的路由表中将所有 IPv4 地址声明为本地。例如,ip route add local 0.0.0.0/0 dev lo table 100。
4. 优点
提高带宽和减少传输延迟:通过缓存和减少网络中的冗余流量,提高服务质量。
安全性:可以记录和限制客户端请求,用于计费或审计。
灵活性:支持多种网络协议和应用场景,如 HTTP、HTTPS、MySQL 等。
5. 注意事项
内核版本:确保你的 Linux 内核版本支持 TPROXY。
防火墙规则:确保防火墙或安全组规则允许相关流量通过。
性能监控:定期监控代理服务器的性能和资源使用情况,确保系统稳定运行。
6. 应用场景
网络监管:用于屏蔽或允许对某些主机、网站的访问。
负载均衡:作为网络中继,实现负载均衡和流量分发。
TCP 连接分析:用于分析 gRPC、MySQL 等 TCP 连接的连接状态、生命周期等信息。
总之,通过透明地处理网络流量,为网络监管、负载均衡和 TCP 连接分析等多种应用场景提供了灵活的解决方案。
mangle表
在第一篇文章我们介绍Iptables基本原理的时候就提到过mangle表,现在我们再来回顾一下mangle表。
我们对每个”链”上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候我们把实现相同功能的规则放在一起,那么具有相同功能的规则的集合就叫做”表”。不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能。
- filter 表:负责过滤功能;与之对应的内核模块是 iptables_filter
- nat(Network Address Translation) 表:网络地址转换功能,典型的比如 SNAT、DNAT,与之对应的内核模块是 iptables_nat
- mangle 表:解包报文、修改并封包,与之对应的内核模块是 iptables_mangle
- raw 表:关闭 nat 表上启用的连接追踪机制;与之对应的内核模块是 iptables_raw
表 | 链 |
raw | PREROUTING,OUTPUT |
mangle | PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING |
nat | PREROUTING,OUTPUT,POSTROUTING,INPUT |
filter | INPUT,FORWARD,OUTPUT |
如上图所示,mangle表可以有REEROUTING、INPUT、FORWARD,OUTPUT,POSTROUTING链。