题 如何通过iptables允许传出连接?


我有两台服务器。第一个程序需要与端口2194上的第二个进行通信。

我知道它不起作用,因为当我这样做时:

root@server1 [~]# telnet myserver2.com 2194
Trying 123.123.123.98...
telnet: connect to address 123.123.123.98: Connection timed out
telnet: Unable to connect to remote host: Connection timed out

server1# iptables -L -n

Chain INPUT (policy DROP)
...
...

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
...

Chain LOCALINPUT (1 references)
target     prot opt source               destination
...

Chain LOCALOUTPUT (1 references)
target     prot opt source               destination
...

Chain LOGDROPIN (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain LOGDROPOUT (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

14
2017-09-22 07:02




但是当你在server1上telnet localhost 2194时它可以工作吗?那么来自server1的telnet server1spublicip 2194呢? - Geraint Jones
server2上的telnet localhost 2194可以正常工作。 server2上的telnet server2ipaddress 2194也可以。 - siliconpi
你做的:两台服务器上的iptables -L -n,并告诉我你是否得到了以下(我不想看到你的规则等;-))链输入(策略接受)目标prot opt源目的地链FORWARD(策略ACCEPT)目标prot opt源目标链OUTPUT(策略ACCEPT)目标prot opt源目标 - Geraint Jones
你好!请看编辑... - siliconpi


答案:


要允许在TCP端口2194上从server1到server2的传出连接,请在server1上使用此连接:

iptables -A OUTPUT -p tcp -d <server2ip> --dport 2194 -j ACCEPT

要允许在TCP端口2194上从server1到server2的传入连接,请在server2上使用此连接:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT

19
2017-09-22 07:47



废话 - 我做了第一次,没有工作。我做了第二次,也没有工作......我可能有非常严格的设置......请参阅之前的编辑 - siliconpi
尝试使用“-I”代替“-A”;这就是新规则 以上 所有其他可能已经存在的。 - Massimo
如果应用程序实际使用域名而不是直接使用IP地址,我应该做些什么吗? - siliconpi
哇...只是通过做第一个声明就能从提示中远程登陆...... - siliconpi
对于那些可能将其视为L的人来说,它在“i”中为负 - siliconpi


只需几点

您正在运行的服务是否只在localhost上侦听?跑

netstat -ltn

如果你看到像这样的一条线 0.0.0.0:2194 那你没问题如果你看到 127.0.0.1:2194 然后你只是在本地连接上听(或者 :::2194 和 ::1:2194 分别用于IPv6地址,如图所示 tcp6 线)。

目前的iptables规则是什么?

iptables -L

政策是DROP / REJECT(如果它不应该是,对于所有连锁店)?您需要的端口是否有特定规则?

如果是防火墙问题,则修改违规规则或添加规则

iptables -A INPUT -p tcp --dport 2194 -j ACCEPT 

应该做的伎俩(未经测试)

===编辑===

测试网络问题是一个很好的工具 tcpdump。在尝试连接时在两台服务器上运行它,并查看数据包的去向。例如在服务器1上运行:

tcpdump -i eth0 -n host server2.com

并在服务器2上运行:

tcpdump -i eth0 -n host server1.com

然后尝试连接。您应该看到从源和目标在屏幕上转储的所有TCP数据包。有了这些信息,您应该能够确定问题所在。


4
2017-09-22 07:33



嗨丹 - 我不认为server2接受连接有任何问题(我可以使用我的家用电脑连接到它),但我认为server1不允许传出连接... - siliconpi
iptables -A OUTPUT -p tcp --dport 2194 -j ACCEPT - Geraint Jones
嗨c10k,那没工作......并且尝试telnet也没有工作 - siliconpi
添加了一些其他想法 - Dan Andreatta
您好2194是我的端口号或目标IP端口号? - Tommy