Не удается подключиться к SMTP-порту 567

Я построил почтовый сервер postfix+dovecot.

openssl s_client -starttls smtp -crlf -connect localhost:587

Это работает, и вы можете отправлять электронную почту вручную.

openssl s_client -starttls smtp -crlf -connect smtp.example.com:587

показывает эту ошибку

connect: Connection refused
connect:errno=61

То, что я проверил, это netstat, iptables.

Оба выглядят хорошо для подачи 587.

netstat -anutp

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:58592         127.0.0.1:587           ESTABLISHED 2793/openssl    
tcp        0    388 133.242.184.252:22      210.149.252.243:46415   ESTABLISHED -               
tcp        0      0 127.0.0.1:587           127.0.0.1:58592         ESTABLISHED -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
udp        0      0 133.242.184.252:123     0.0.0.0:*                           -               
udp        0      0 127.0.0.1:123           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:123             0.0.0.0:*                           -               
udp6       0      0 :::123                  :::*                                -    

iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:3000
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

Есть ли другие моменты, которые я должен проверить ???

2 ответа2

1

Помните, что правила iptables читаются сверху вниз. Когда вы добавляете правило с -A оно добавляется в конце (или после заданного номера), когда вы используете -I оно вставляется впереди.

Теперь у вас есть:

  1. принимать ICMP, HTTP, SSH, ...
  2. отвергнуть все
  3. принять SMTP, POP3

Поэтому вам нужно переместить правила «принять SMTP ...» выше общего отклонения.

Вы можете удалить их и повторно добавить, указав позицию вручную:

     iptables -A INPUT 7 -p tcp ...
(or) iptables -I INPUT 8 -p tcp ...

(Используйте iptables -L --line для просмотра номеров правил.)

В качестве альтернативы, отредактируйте полный список сразу - и просто поменяйте местами строки:

iptables-save > rules.txt
nano rules.txt
iptables-restore < rules.txt

Примечания стороны:

  • В будущем было бы лучше, если бы вы опубликовали правила, используя iptables -S или даже iptables-save ; это немного легче сканировать, чем сильно переформатированный вывод -L . (Или, может быть, оба.)

  • Dovecot говорит только по POP/IMAP/LMTP, но не по SMTP. Ваш SMTP-сервер - это Postfix.

  • При использовании netstat с параметром -p вы должны запустить команду как пользователь root, в противном случае она не будет отображать какую-либо информацию о процессе.

1

Iptables последовательно пытается соответствовать вашим правилам в порядке их появления. В вашем случае (как сказано в комментариях, предоставьте, пожалуйста, результат команд- iptables -S , так как нам не хватает информации с iptables -L такой как соответствующий интерфейс)

  1. если пакеты соответствуют state RELATED,ESTABLISHED на интерфейсе ? они приняты, и с этими пакетами больше нет совпадений;
  2. иначе, если пакеты соответствуют icmp на интерфейсе ? они приняты, и сопоставление с этими пакетами больше не выполняется;
  3. иначе iptables принимает все пакеты на интерфейсе ?
  4. ....

Поэтому, учитывая, что мы не знаем, для какого интерфейса выполняются правила, я думаю, что ваше единственное правило REJECT (в таблице INPUT) сопоставляется на том же интерфейсе, что и правило tcp dpt:smtp . Поскольку ваше правило REJECT сопоставляется до правила snmp, последнее никогда не сопоставляется.

РЕДАКТИРОВАТЬ слишком долго, чтобы написать сообщение ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .