![将 HTTP(s) 流量重定向到另一台服务器](https://linux22.com/image/660716/%E5%B0%86%20HTTP(s)%20%E6%B5%81%E9%87%8F%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我正在尝试建立一个用于无线平台研究/逆向工程的测试环境。
我有一个路由器 AP 广播我的网络,我正在研究的硬件连接到该网络,从那里 AP 会将所有流量重定向到服务器进行分析。
我在 AP 上用于重定向流量的 iptables nat 规则是:
iptables -t nat -A PREROUTING -p tcp --dport 80 -m conntrack --ctstate NEW -j DNAT --to x.x.x.x:8880
iptables -t nat -A PREROUTING -p tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to x.x.x.x:8443
iptables -t nat -A PREROUTING -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
AP 和服务器都启用了 IP_FORWARD。
在我的服务器上,我有 sslsplit、mitmproxy 或其他软件,它们可以接收流量并允许我对其进行分析。
问题是,当我以这种方式重定向流量时,由于某种原因,我的服务器上的软件仍然想要连接到自身,而不是连接到正确的端口/域。
例如,如果我的服务器 IP 是 1.1.1.1:8443;当连接到我的 AP 的硬件 192.168.0.100 访问解析为 2.2.2.2:443 的网站时,iptables 规则会将我所有前往 2.2.2.2:443 的流量重定向到 1.1.1.1:8443 进行分析。这一切都很好,但是当软件尝试将连接转发到远程 http 服务器以完成请求/获取响应时,它不是将流量传递到 2.2.2.2:443 以获得响应,而是将其发送到 1.1.1.1:8443(即它自己)。
这是我的 iptables 规则的错误还是某种软件问题?当以远程处理方式使用时,少数软件也会出现相同的结果,因此我相信这是我重定向流量的方式存在问题。
这样的流量重定向是否可行或者是否必须通过其他方式进行?
设置是客户端(192.168.0.100)-> AP -> 路由器 -> 互联网 -> 数据处理服务器(1.1.1.1:8443)-> 互联网 -> 网络主机(2.2.2.2:443)
任何建议都将受到赞赏。
答案1
从您的服务器到 2.2.2.2:443 (原始目的地)的流量是否经过 AP?
在这种情况下,转换将适用,因此请更改您的 DNAT 规则,以便来自服务器的流量被排除在 DNAT 转换之外。
iptables -t nat -A PREROUTING -p tcp ! -s x.x.x.x --dport 80 -m conntrack --ctstate NEW -j DNAT --to x.x.x.x:8880