我想检查和修改一个进程发送到另一个进程的 http 请求。为此,我在本地主机端口 8080/tcp 上运行了一个代理。进程所有者是 root,它发送到的应用程序在本地主机端口 50000/tcp 上运行。该进程会产生新的子进程,这就是我选择上述路由的原因。我不能使用--pid-owner
。这个的 iptables 命令是什么样子的?
或者换一种说法:
情况:
- 有一个进程 p2,它使用 HTTP 与另一个进程 p1 进行通信。
- p2 和 p1 在本地主机上运行
- p1 在 50000/tcp 上运行
- p2->p1
目标:
- 通过代理运行流量。
- 代理也在本地主机上运行。
- 端口 8080/tcp。
- p2->代理->p1
困难:
- 我没有在 p2 中指定代理的选项。
- 一切都在本地主机上运行
答案1
我们需要拦截与 localhost TCP/50000 的 P2 连接并将其转发到在 TCP/8080 上监听的 PROXY - 必须将 PROXY 配置为将请求转发到 LOCALHOST TCP/5000。
为了使其工作,我们需要激活本地主机端口到 IPTABLES 的转发,并更改以下系统参数:
sysctl -w net.ipv4.conf.all.route_localnet=1
随后,此 IPTABLES 命令应将 P2 连接连接到 TCP/50000,并对监听端口 TCP/8080 的代理进行 NAT:
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -m owner --uid-owner 0 -p tcp --dport 50000 -j DNAT --to-destination 127.0.0.1:8080
此配置也可以使用外部代理(意味着不在 P1 和 P2 正在运行的同一台机器上运行)将 IP 地址 127.0.0.1 更改为外部地址:
--to-destination X.X.X.X:8080
希望这可以帮助。