iptables端口镜像


8

我需要能够将在端口8001上接收到的数据包的副本复制到端口8002。我尝试了以下操作,但是我收到一个错误---tee未定义。

sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee


这个问题是在这里找到答案:superuser.com/questions/753294/mirror-port-via-iptables/...
帕特

Answers:


6

--tee标志不是DNAT链的一部分,它是ROUTE的一部分。您只能在声明之后使用它-j ROUTE。您可以从iptables获得关于该主题的特定帮助,如下所示:

 $ iptables -j ROUTE help

我正在查看您的iptables命令,对我来说这没有任何意义。为什么想要当你的问题,你说“收到packegs来匹配数据包的源和源端口端口”?您是在尝试将传入流量拆分为两个端口,还是将一个端口的输出连接到另一个端口的输入?

如果是前者,实际上有两个步骤。您不能使用tee来获取数据包的副本,也不能使用该数据包来同时更改端口号。您可以分两步进行尝试,首先向自己发送数据包的副本,然后仅匹配副本并处理目标端口。警告:未经测试,请考虑以下伪代码:

$ sudo iptables -A PREROUTING -t mangle -p tcp -s !127.0.0.1/32 --dport 8001 -j ROUTE --gw 127.0.0.1 --tee
$ sudo iptables -A POSTROUTING -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

1
警告...另一位网站访问者已经注意到,与此类似的版本实际上会导致无限循环!您可能需要弄清楚如何在同一操作中标记重复的数据包,然后在标记上进行匹配。
Caleb'4

ROUTE似乎已经过时了,对吧?
雏菊

这只是一个错字,172.0.0.1-> 127.0.0.1。
Aki

1
对于SE读者来说是NB:ROUTE以上答案中使用的目标在撰写本文时已过时,并且在最新发行版的iptables中不可用。见serverfault.com/questions/333155/...
乔纳森·本·亚伯拉罕

6

除了Caleb的回答,如果您使用的是较新的版本iptables(v1.4.14),该版本不再具有ROUTE目标,您将需要以下类似内容,并在Debian Wheezy *上进行了测试:

iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1 --dport 8001 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

使用“ netcat”(man nc)进行测试。在终端窗口中,键入以下内容,然后Enter按键:

nc -l 8002

该命令将等待您在第二个终端窗口中键入的输入。

在第二个终端窗口中,键入以下内容,然后Enter按键:

nc 127.0.0.1 8001

该命令将等待进一步的输入。输入任何内容,然后Enter按键。在Enter第二个终端窗口中按键后,您在第二个终端窗口中键入的文本应出现在第一个终端窗口中。Ctrl在第二个窗口中按-c结束会话。


* RHEL / Centos(6.5或更早版本)支持此语法:-(因此,您需要使用socattee将原始端口上的传入数据包发送和转发到两个新端口。如果您有进程在原始接收端口上进行侦听,则您需要重新配置他们的tee'd港口之一聆听socat现在是原来的端口上监听。见这SE后例如socat端口克隆语法。


有关Debian的某种原因,你需要用的netcat明确指定端口nc -l -p 8002
马塞洛拉塞尔达

我一直试图在我的Mint 19 Tessa上复制此解决方案,但无济于事。我发现有些包裹只是在内部反弹,两个端口中只有一个接收包裹。如果我错误地添加了日志以尝试对规则进行故障排除,则日志(内核,系统日志,日志)会很快耗尽我的存储空间。
hanzo2001

我也不明白为什么将DNAT设置在OUTPUT链上。程序包是否已经将我的程序留给了外界?还是回送地址行为不同?
hanzo2001
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.