据报道端口25是开放的,但是没有服务正在监听

操作系统是Ubuntu 12.04 LTS(服务器;没有GUI)。 该机器是远程服务器场中运行数百英里的虚拟服务器。

我卸载了postfix及其所有组件(courier,dovecot),我甚至停止了sendmail并卸载它。

现在在端口25上似乎没有程序监听:

netstat -lnptu | grep :25 

没有input(0行)。 我得到相同的结果

 netstat -anp | grep :25 

而且这个命令的结果也是0行:

 fuser -v 25/tcp 

从服务器端口25内无法访问telnet:

 > telnet localhost 25 Trying ::1... Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused 

(当我尝试连接到端口24我得到完全相同的答案)

即使我用我的机器IP地址replace“localhost”,我也无法从内部连接到端口25:

 > telnet <IP-address of my server> 25 Trying <IP-address of my server>... telnet: Unable to connect to remote host: Connection refused 

但是…

…当我做一个端口扫描http://www.dnstools.ch/port-scanner.html端口25据报道是开放的。

当我尝试使用外部的telnet连接到我的服务器上的端口25时,我得到这个:

 > telnet <IP-address of my server> 25 Trying <address>... Connected to <resolved name>. Escape character is '^]'. Connection closed by foreign host. 

所以我得到一个连接,但它立即closures。

当我尝试连接到一个封闭的端口,我得到这个:

 > telnet <IP-address of my server> 24 Trying <address>... telnet: connect to address <address>: Connection refused telnet: Unable to connect to remote host 

我什至尝试添加一些规则到端口25的iptables,但是这绝对没有影响。 从外面看,25号港口似乎仍然是开放的,但没有任何程序正在听它。

问题1:这怎么发生?
问题2:在这种情况下如何closures端口25?

您可能有一个安全设备代表您的networking中的IP地址应答。 “拾起挂断”行为是典型的。 您可以通过观察端口25响应的IP TTL值并将它们与您计算机的实际开放端口响应进行比较来确认此行为(端口24的响应也可能来自安全设备)比较不会有用)。 你可以像这样使用Nmap:

 sudo nmap -sS -p 25,80 target.example.com -oX - | grep reason_ttl 

假设端口80在你的目标上是开放的,并且端口25给出了奇怪的响应,你应该看到这样的东西:

 <host starttime="1398878935" endtime="1398878935"><status state="up" reason="reset" reason_ttl="52"/> <ports><port protocol="tcp" portid="25"><state state="open" reason="syn-ack" reason_ttl="54"/><service name="smtp" method="table" conf="3"/></port> <port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="52"/><service name="http" method="table" conf="3"/></port> 

请原谅XML的reason_ttl ,但是如果您查看state元素的reason_ttl属性,则可以看到在一种情况下,响应的TTL低于另一个,表明数据包在引发响应之前进入networking较远。 这不是一个万无一失的方法,因为安全设备可能会涉及出站TTL,但它可能有助于满足您的好奇心。

无论如何,根据netstat和其他工具的输出,可以肯定的是,这个端口并不是真的在你的机器上监听。