我在Ubuntu 10.04更新了我的iptables,但它似乎没有任何影响打开的端口。
当我运行iptables --list ,下面的行显示
链条input(政策DROP) 目标人select源目的地 接受所有 - 在任何地方tcp dpt:smtp
但是,当我尝试执行端口扫描以查看端口25是否处于打开状态时,它会以封闭的方式响应。 难道上游会有阻塞端口的东西吗? 或者我需要做一些修改IP表后“重新启动”防火墙?
Linux Noob在这里,如果它不完全通过…
如果netstat -tapnl | grep 25 netstat -tapnl | grep 25不会返回类似于0:0:0:0: 25 (或者你查询的特定IP)的东西,这意味着没有任何东西在监听端口,IPTables也不是问题 – 或者至less不是唯一的问题。
它可能响应closures,因为您没有在该端口上侦听的服务。
一些Linux发行版(我正在查看我的RHEL安装)将sendmail设置为仅在本地主机上侦听。 所以如果我从另一台计算机上做我的端口扫描,它会返回closures状态。
此外,有些ISP(我在这里查看我的Cox)将阻止入站25.因此,如果我从像GRC的Shields Up这样的基于Web的扫描程序进行扫描,它将返回,就好像我已将其设置为DROP而不是接受。 他们这样做是为了在整个互联网上打击垃圾邮件。 您的ISP可能有一个策略来发送端口closures的消息,而不是让你回答。
以前的build议,你没有服务端口25监听是最有可能的。
另一个build议是validation规则和接口。 例如,运行:
iptables -L -v
也将显示接口。 因此,对于不同的接口可以有不同的规则(特别是对于所有业务通常是接受的lo接口)。
只是为了提供更多有关使用netstat的信息。 命令行选项-p(如上所示)将导致netstat显示与套接字/端口关联的程序。 在这种情况下,应该在输出中显示exim,指出负责端口25连接。 但是,关于使用这个选项有一个微妙的细节。 由于安全性,netstat只会显示您所拥有的应用程序的程序名称。 所以如果你还没有以root用户的身份进行testing,那么你的testing不会显示你的应用是否拥有25端口。一般来说,你不应该养成以root身份运行的习惯,但在这种情况下,这是一个有益的步骤。
另一个与此有关的细节是使用telnet。 此应用程序是一个经常错过的networking分析工具。 一个非常快速的testing,看看端口25是否做任何事情,只是远程login(这对任何其他服务端口很好)。 尝试telneting到本地主机,127.0.0.1,您的IP和您的主机名。 我指出的原因是,exim很可能会运行,并可能以某种方式打开端口25,但是如果exim被破坏(比如有人与configuration文件以不正常的方式混淆),netstat的使用将不会告诉你端口25不在说话。 而且,将在一个快速的远程login。
如果你想感受unixy老学校,你可以用nc来达到同样的目的。 或者,如果你更喜欢大锤的方法看看nmap的手册页(我其实不build议看这个手册页为更新的用户,但nmap是非常复杂的)。 为了更好玩,试试telnet到ssh端口,这是有启发性的。
尝试
$ lsof -i :25
如果您没有得到任何结果,则表示没有运行邮件服务器(或者在该端口上运行任何types的服务)。
我记得有一个与后缀类似的问题。 虽然postfix正在运行,但是端口扫描没有显示端口25是开放的。 问题是在文件中评论了以下行
/etc/postfix/master.cf smtp inet n - - - - smtpd
取消注释。
Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere tcp dpt:smtp
什么连接必须被允许? 什么已经被允许?
基本上你可以改变你的规则如下:
iptables -A INPUT -p tcp --dport 25 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT