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


17

我有两台服务器。第一个程序需要与第二个程序在端口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

但是当您在server1上执行telnet localhost 2194时,它可以工作吗?来自server1的telnet server1spublicip 2194呢?
Geraint Jones

server2上的telnet localhost 2194正常工作。server2上的telnet server2ipaddress 2194也可以正常工作。
Siliconpi

1
你做的是:在两台服务器上使用iptables -L -n,并告诉我是否获得了以下收益(我不想看到您的规则等;-))Chain INPUT(策略接受)目标prot opt源目标Chain FORWARD(政策接受)目标保护来源目的地链(政策接受)目标保护来源目的地
Geraint Jones 2010年

你好!请查看编辑内容...
Siliconpi

Answers:


21

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

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

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

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

废话-我做了第一次,没有工作。我做了第二次,那还是没有用...我可能已经设置了非常严格的设置...请参阅前面的编辑
Siliconpi 2010年

1
尝试使用“ -I”代替“ -A”;这将新规则置于可能已经存在的所有其他规则之上
Massimo 2010年

如果应用程序实际使用域名而不是直接使用IP地址,我应该做些不同的事情吗?
Siliconpi

哇...只需执行第一个语句就可以从提示符进行telnet的登录
Siliconpi 2010年

3
对于那些可能会读作L的人来说,它的减号-I就像“ i”一样
-Siliconpi

6

只是几个指针

您运行的服务仅在本地主机上监听吗?跑

netstat -ltn

如果您看到类似的行,0.0.0.0:2194那么您就可以了。如果你看到127.0.0.1:2194(或则仅在本地连接监听:::2194::1:2194IPv6地址,分别显示为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数据包。有了此信息,您应该能够查明问题出在哪里。


嗨,丹-我认为server2接受连接没有任何问题(我可以使用家用PC来连接它),但是我认为server1不允许传出连接...
Siliconpi 2010年

iptables -A OUTPUT -p tcp --dport 2194 -j ACCEPT
Geraint Jones

嗨,c10k,那没用...而telnet的tryign也没用
Siliconpi

添加了其他一些想法
Dan Andreatta 2010年

您好,这里2194是我的端口号还是目标IP端口号?
汤米
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.