Назад | Перейти на главную страницу

Сообщается, что порт 25 открыт, но служба не прослушивает

ОС - Ubuntu 12.04 LTS (сервер; без графического интерфейса). Машина представляет собой виртуальный сервер, работающий за сотни миль в удаленной ферме серверов.

Я удалил postfix и все его компоненты (courier, dovecot) и даже остановил sendmail и удалил его.

Теперь похоже, что программа не прослушивает порт 25:

netstat -lnptu | grep :25  

не дает записи (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, я получаю точно такой же ответ)

Даже если я заменю localhost на IP-адрес моей машины, я не смогу подключиться к порту 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 открыт.

Когда я пытаюсь подключиться к порту 25 на моем сервере с помощью telnet извне, я получаю следующее:

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

Так я получаю соединение, но оно сразу закрывается.

Когда я пытаюсь подключиться к закрытому порту, я получаю следующее:

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

Я даже попытался добавить некоторые правила в iptables для порта 25, но это не имело абсолютно никакого эффекта. Порт 25 все еще кажется открытым при взгляде на него извне, но ни одна программа его не слушает.

Вопрос 1: Как такое могло случиться?
Вопрос 2: Как я могу закрыть порт 25 при таких обстоятельствах?

Вероятно, у вас есть устройство безопасности, которое отвечает от имени IP-адресов в вашей сети. Типичное поведение «поднял и положил трубку». Вы можете подтвердить это поведение, наблюдая за значениями IP TTL для ответа порта 25 и сравнивая их с фактическим откликом открытого порта вашего компьютера (ответы закрытого порта, такие как порт 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, но если вы посмотрите на state элемент reason_ttl Вы можете видеть, что в одном случае TTL ответа был ниже, чем в другом, что указывает на то, что пакет прошел дальше в сеть, прежде чем вызвать ответ. Это не надежный метод, поскольку устройство безопасности может лгать об исходящих TTL, но он может удовлетворить ваше любопытство.

В любом случае вы можете быть уверены, основываясь на выводе netstat и других инструментов, что порт на самом деле не прослушивает ваш компьютер.