我希望测试一个通过 TCP 与其他子系统通信的子系统。我使用了以下方法:
"iptables -A OUTPUT -p tcp --dport "+port_number" -j DROP"
停止端口上的流量,这样我就可以通过脚本将自己的数据发送到被测系统。这个方法确实很有效。
我现在希望将流量转发到我的脚本,而不是简单地丢弃它。然后我希望在将数据转发到被测子系统之前处理脚本中的数据。
我可以使用 iptables 来做到这一点吗? 有更好的方法吗?
答案1
您可以尝试这个(到端口的传入流量1234
将被重定向到4321
本地主机,您可以在那里监听脚本):
iptables -I INPUT -p tcp --dport 1234 -j ACCEPT
iptables -I INPUT -p tcp --dport 4321 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1234 -j REDIRECT --to-ports 4321
如果您也想1234
从同一台机器访问该端口,则需要添加一条OUTPUT
规则,因为PREROUTING
环回接口未使用该规则:
iptables -t nat -I OUTPUT -p tcp -o lo --dport 1234 -j REDIRECT --to-ports 4321
现在,您可以在服务器上尝试监听nc -l 4321
(这里您可以使用自己的脚本)。在客户端上,尝试nc server_host_name_or_ip 1234
写入任何内容以验证服务器是否正确执行重定向。
不要忘记保存iptables
配置!