如何在本地使用iptables将出站流量重定向到端口80?


19

我正在尝试使用本地重定向Ubuntu计算机上的端口iptables。类似于透明代理。我想捕捉所有试图将系统保留在端口80上并将其重定向到远程主机和端口的信息。

我可以使用NAT和预路由功能来实现此目的iptables吗?

Answers:


30

尝试以下iptables规则:

$ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination IP:80

上面说:

  • 将以下规则添加到NAT表(-t nat)。
  • 此规则将附加(-A)到出站流量(OUTPUT)。
  • 我们只对TCP通信量(-p tcp)感兴趣。
  • 我们仅对目标端口为80(--dport 80)的流量感兴趣。
  • 进行比赛时,跳至DNAT(-j DNAT)。
  • 将此流量路由到其他服务器的IP @端口80(--to-destination IP:80)。

什么是DNAT?

DNAT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT 
    chains, and user-defined chains which are only called from those chains.
    It specifies that the destination address of the packet should be modified 
    (and all future packets in  this  connection will also be mangled), and
     rules should cease being examined.

参考文献


谢谢你,但它似乎没有用。但是,从那时起,我发现这确实可行。
2013年

sudo iptables -t nat -A输出-p tcp --dport 80 -j DNAT --to-destination xx.xx.xx.xx:3128
pjf

那是因为这是本地的而不是通过网关的吗?您的SNAT是否可以通过网关工作?
2013年

@pjf-我相信。我已经更新了答案。
slm

@pjf-我找到了两个规则,并且正在同时更新两个规则。我不确定你处于哪种情况。
slm

6

可以使其更具体,以便仅对到达特定目标主机的流量进行操作。例如,当postfix出错时,队列中的邮件要发送到旧的ip地址。

iptables -t nat -A OUTPUT -p tcp -d {ONLY_TO_THIS_DESTINATION} --dport 25 -j DNAT --to-destination {NEW_IP}:25

4

这可以允许您将端口转换为所有IP地址。这里的主要区别是该--to-destination字段中缺少IP地址。

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80

非常有用的提示;正是我所需要的。有没有办法增加端口号?假设我有100个端口,并希望将它们全部提高特定数量。
Zdenek

不明白你的意思。您能在Bash中编写一个for循环吗?
费利佩·阿尔瓦雷斯

添加100个iptables规则的循环会起作用,但会降低速度。我希望能够告诉它在单个规则中增加许多连续的端口。
Zdenek

@Zdenek我不知道iptables是否可行。你看了firewalld吗?
费利佩·阿尔瓦雷斯
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.