我如何允许通过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 

要允许在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 

只是几个指针

您正在运行的服务仅在本地主机上进行侦听? 跑

 netstat -ltn 

如果你看到像0.0.0.0:2194这样的行,那么你没事。 如果你看到127.0.0.1:2194那么你只能监听本地连接(或者分别为:::2194::1:2194的IPv6地址,显示为tcp6行)。

目前的iptables规则是什么?

 iptables -L 

是拒绝/拒绝政策(如果不是,应该是,所有的连锁店)? 您需要的港口是否有特定的规定?

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

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

应该做的伎俩(未经testing)

===编辑===

为了testingnetworking问题,一个好的工具是tcpdump 。 在尝试连接时在两台服务器上运行它,并查看数据包的位置。 例如在服务器1上运行:

 tcpdump -i eth0 -n host server2.com 

并在服务器2上运行:

 tcpdump -i eth0 -n host server1.com 

然后尝试连接。 你应该看到从源和目的地转到屏幕上的所有TCP数据包。 有了这个信息,你应该能够确定问题出在哪里。