Попытка настроить почтовый сервер, не может заставить работать порты (25, 587)

9

Я искал везде, и я действительно борюсь с этим. Я думаю, что я попробовал почти все.

Справочная информация

  • VPS с CentOS 6,7
  • Постфикс 2.6.6
  • dovecot, amavis, mysql, fail2ban
  • Я проверил с моим провайдером VPS, что они не блокируют никакие порты.

Что я сделал

  • Удален сток sendmail
  • Я установил postfix, dovecot, mysql и т. Д. Для полного почтового решения
  • Я разрешаю только imap, smtp с STARTTLS (порты 143 и 587)
  • SSH логины отключены, только с ключами
  • Я могу получать почту (через порт 143)
  • Я могу telnet с localhost на оба порта (587, 25), и я получаю приветствие postfix
  • Попытка подключиться к 587 или 25 (почтовый клиент или telnet) дает мне нулевой ответ, т.е. время ожидания подключения

Вещи, которые я пробовал

1) Порты открыты? Да, iptables:

Chain INPUT (policy DROP 11 packets, 1375 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
   25  2579 f2b-dovecot  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 110,995,143,993,587,465,4190
   68  7788 f2b-postfix  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,465,587
    0     0 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 22
   25  2579 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
    7   600 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
23464 2662K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   49  2940 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3915
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
    5   300 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 23235 packets, 2494K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain f2b-dovecot (1 references)
 pkts bytes target     prot opt in     out     source               destination
   25  2579 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-postfix (1 references)
 pkts bytes target     prot opt in     out     source               destination
   68  7788 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

2) Прослушивает ли постфикс порт 587? Да. Он слушает только на локальном хосте? Нет, любой хост.

Вот netstat:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      917/httpd
tcp        0      0 127.0.0.1:4190              0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 127.0.0.1:24                0.0.0.0:*                   LISTEN      749/dovecot

А вот и postfix / main.cf, на всякий случай:

# Enable both IPv4 and/or IPv6: ipv4, ipv6, all.
inet_protocols = ipv4

# Enable all network interfaces.
inet_interfaces = all

3) Правильно ли вы выполняете принудительные соединения? Насколько мне известно, да, вот postfix / master.cf:

# Submission, port 587, force TLS connection.
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o content_filter=smtp-amavis:[127.0.0.1]:10026

4) Как насчет ограничений smtpd? Кажется нормально

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_non_fqdn_helo_hostname
    reject_invalid_helo_hostname
    check_helo_access pcre:/etc/postfix/helo_access.pcre

5) Правильно ли работает postfix?

Да, вход на сервер и отправка тестовой почты с консоли работает, и электронная почта принимается на другом конце, то есть:

echo "Test mail from postfix" | mail -s "Test Postfix" user@something.com

6) Что происходит при подключении к порту 587?

Видимо, вообще ничего. Если я пытаюсь подключиться к любому случайному порту, я по крайней мере что-то получаю. Например, попытка подключиться по telnet к порту 666 (который не открыт) не дает ответа клиенту, но по крайней мере я получаю что-то в tcpdump:

15:22:20.305697 IP xxx > xxx.com.mdqs: Flags [S], seq 3195304468, win 8192, options [mss 1352,nop,wscale 8,nop,nop,sackOK], length 0

Когда tcpdumping порт 587, абсолютно ничего не происходит при попытке telnet к нему.

Чего мне еще не хватает?

Все вышеперечисленное исчерпывает мои знания о том, что я еще могу попробовать. Мне удалось прибить его к моему порту 587, полностью заблокированному чем-то. Как я уже сказал, мой провайдер VPS подтвердил, что они вообще не блокируют порты. Я попробовал порт 25, и это та же история.

Единственное, что я вижу, это то, что я как-то заблокировал эти порты при настройке моего сервера, но я не могу вспомнить, так ли это, и я не знаю, как это проверить.

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

reachergilt
источник
3
Не могли бы вы заменить iptablesвышеприведенный вывод на тот iptables -L -n -v, который был целым и не обработанным? Кроме того, учитывая ваше tcpdupmpтестирование и уверенность вашего провайдера в том, что я не блокирую входящие 25 и 587 , также возможно, что вы тестируете место из исходящих блоков 25 и 587 . Если вы опубликовали IP-адрес, было бы намного проще подтвердить или опровергнуть эту гипотезу.
MadHatter
Спасибо за ответ. Конечно, я отредактировал свой пост. Хм, я никогда не думал о блокировке портов на моем конце, это хорошая идея. Я постараюсь проверить это.
Реахергильт
1
@MadHatter, вы были совершенно правы на заблокированных портах на моей стороне. Оказалось (после многих звонков), что администратор VPN моей компании решил начать блокировать определенные порты, 25 и 578 - один из них, но не другие. Это объясняет, почему у меня никогда не было таких проблем раньше, и я даже не думал об этом. Мой сервер, вероятно, уже работал нормально последние пару дней, пока я терял рассудок. Если хотите, можете написать как реальный ответ, и я приму его. Кроме того, пожалуйста, отправьте мне свою PayPal (или аналогичную) информацию, вы действительно заслуживаете большой холодной информации, бог знает, когда я это выясню.
Реахергилт
Я написал это, так что вы можете принять ответ - потому что иначе вопрос будет зависать вечно, и это плохо. Кроме того, это может быть полезно для других в будущем. Я имел в виду то, что я сказал в своем ответе о том, что вы уже проделали большую часть следственной работы (больше власти для вас!), Но если вы чувствуете себя обязанным отправить мне одно пиво, вы можете найти мои контактные данные на моем личном сайте, через мой профайл.
MadHatter
Готово и еще раз спасибо за вашу помощь, вы, вероятно, сэкономили мне часы, если не дни потерянного времени. Я свяжусь с вами завтра, уже проверил ваш сайт.
Реахергилт

Ответы:

4

Reachergilt, добро пожаловать в SF, и спасибо за отличный первый вопрос. Вы можете чувствовать, что мы вас спасли, но, честно говоря, вы уже проделали всю тяжелую работу и представляли ее очень систематически. С таким судебно-медицинским складом ума, я надеюсь, что вы останетесь в этих местах еще какое-то время.

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

Вооружившись этим указателем, вы ушли и подтвердили, что ваши исходящие соединения были заблокированы, поэтому ваши тесты никогда не доходили до вашего сервера. Это довольно (удручающе) нормально для 25 (и в меньшей степени, 587) быть заблокированными исходящими от современных сетей, потому что ботнеты, рассылающие спам, используют их.

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

Безумный Шляпник
источник
3
Да, мой пост делает хороший контрольный список для тех, у кого есть подобные проблемы. Достаточно забавно, потому что я думал, что что-то не так с моим сервером, я четыре раза проверил все от А до Я, что позволило мне документировать все здесь.
Реахергилт