我正在尝试制定一条 iptables 规则,以便将所有通过 eth0 传入的 tcp 流量重定向到 127.0.0.1:1234。然后我将使用我的 C 程序监听 127.0.0.1 并将原始数据包打印到控制台。这可能吗?还是我完全用错了方法?
请记住,我对 iptables 的了解非常有限。
以下是我迄今为止尝试过的:
sudo iptables -A INPUT -s 127.0.0.1 -p tcp -j DROP
但我不想 DROP - 我想转发到 127.0.0.1:1234!
答案1
首先启用路由:
echo 1 > /proc/sys/net/ipv4/ip_forward
尝试这个:
iptables -A PREROUTING -t nat -p tcp -i eth0 -j DNAT --to 127.0.0.1:1234
可选择隐藏真实IP:
iptables -t nat -A POSTROUTING -j MASQUERADE
答案2
更好的想法是配置 iptables 以使用 netlink 将数据包发送到您的进程(在 iptables 手册页中搜索 NFLOG)或仅使用 libpcap 捕获原始流量。
这样您就不会丢失信息并且可以使事情变得简单。