仅转发来自一个进程的流量

仅转发来自一个进程的流量

我想检查和修改一个进程发送到另一个进程的 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

希望这可以帮助。

相关内容