iptables端口重定向不适用于localhost


54

我想将所有流量从端口443重定向到内部端口8080。我将此配置用于iptables:

iptables -t nat -I PREROUTING --source 0/0 --destination 0/0 -p tcp \
         --dport 443 -j REDIRECT --to-ports 8080

这适用于所有外部客户端。但是,如果我尝试从同一台机器访问端口443,则会收到拒绝连接错误。

wget https://localhost

如何扩展iptables规则来重定向本地流量呢?


本主题提供了一个更通用的答案:serverfault.com/questions/380447/iptables-preroute-localhost
Jeroen 2012年

1
带有rep的人可以在换行之前在命令中添加反斜杠吗?
Ciro Santilli新疆改造中心法轮功六四事件2014年

Answers:


68

回送接口不使用PREROUTING,您还需要添加OUTPUT规则:

iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports 8080

3
不需要第一条规则。本地生成的数据包不通过PREROUTING链传递。
哈立德

9
出于竞争的考虑,我添加了初始规则,因为他也希望外部流量也能够重定向。该规则不需要源/目的,如果他们只说接受所有IP
安迪

抱歉,当我回复时,我没有看到您的答案。
安迪

嗨,安迪,我仍在连接到server.com | <ip> | :: 443 ...失败:连接被拒绝。
克里斯,2010年

克里斯,您好,是正在连接到localhost | 127.0.0.1 | 443还是域?如果是后者,并且您正在服务器上运行它,则可能是内部路由问题。您可以通过尝试wget server.com:8080进行双重检查(尽管我认为您进行端口转发的原因是因为它在外部被阻止?)。我自己的VPC遇到了这个问题,但是您可以通过在/ etc / hosts文件中将域定义为127.0.0.1来解决。
安迪

10

要将数据包从本地主机重定向到另一台计算机,请执行以下规则:

 iptables -t nat -A OUTPUT -o lo -d 127.0.0.1 -p tcp --dport 443 -j DNAT  --to-destination 10.x.y.z:port

将起作用,但是您还需要在内核中启用此选项:

sysctl -w net.ipv4.conf.all.route_localnet=1

没有该内核设置,它将无法正常工作。


那也可以。我认为在iptables中做所有事情都比较干净。
Quadruplebucky

实际上,如果目标位于另一台计算机,VM或远程计算机上,则需要设置内核设置。

如果您具有以上Andy建议的两个规则,则不是这样。
quadruplebucky

抱歉,我正在谈论转发到DNAT无法正常工作的另一台计算机的情况。当我尝试转发一些认为它已将localhost连接到同一台机器上的容器时,我正在查看此问题的解决方案。例如,在容器中运行名称服务器以进行本地查询。

实际上,显然,它取决于内核版本> = 3.6。
quadruplebucky

3

这个怎么样?

iptables -t nat -A输出-d 127.0.0.1 -p tcp --dport 443 -j REDIRECT-至端口8080


2

您说您收到连接被拒绝的错误。这意味着您尝试连接的端口上没有本地进程在监听!要检查侦听过程,请使用以下命令:

$ sudo netstat -lnp | grep 8080

应用规则后,您应该有一个进程监听8080端口以建立连接。

似乎应该改为遵循以下规则:

$ iptables -t nat -I OUTPUT --source 0/0 --destination 0/0 -p tcp
                                       --dport 443 -j REDIRECT --to-ports 8080

请记住,您是从本地主机发送的。因此,您需要重定向输出数据包。


1
感谢您的答复。该进程正在侦听端口8080。因此,我想将所有流量重定向到该端口。
克里斯,2010年

您确定进程也在监听循环接口吗?它可能仅在您的物理接口上监听。通常,您的网络服务器将需要侦听0.0.0.0,而不是192.168.10.0
MrMajestyk
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.