Вопрос или проблема
У меня настроен почтовый сервер с использованием postfix, dovecot, opendkim и spamassassin. После некоторых трудностей мне удалось настроить прием входящих писем — я даже создал эту учетную запись, используя этот сервер.
Однако у меня возникла проблема с исходящей почтой. Мой провайдер, каким бы он ни был толстым, блокирует связь через порт 25… что, очевидно, означает, что отправка сообщений не работает. Вот логи после попытки отправить письмо на мой старый аккаунт Protonmail (из Neomutt на внешней машине):
postfix/qmgr[653083]: 7E2BD9006AB: from=<[email protected]>, size=479, nrcpt=1 (очередь активна)
// отключение от внешнего клиента
postfix/smtp[653086]: connect to mail.protonmail.ch[185.70.41.101]:25: Connection timed out
postfix/smtp[653093]: connect to mail.protonmail.ch[185.70.41.101]:25: Connection timed out
postfix/smtp[653086]: connect to mailsec.protonmail.ch[185.70.40.102]:25: Connection timed out
postfix/smtp[653086]: 44DED90068A: to=<[email protected]>, relay=none, delay=115, delays=55/0.05/60/0, dsn=4.4.1, status=deferred (connect to mailsec.protonmail.ch[185.70.40.102]:25: Connection timed out)
Так что да… Провайдер блокирует порт 25 (исходящий), поэтому мне нужно найти способ обойти это. Один из способов, о котором я много слышал, — это настроить использование внешнего smtpd. Я либо должен использовать smtpd моего провайдера (что не идеальное решение), либо настроить postfix на VPS у друга (что тоже не совсем идеально, но если все else не сработает, я его спрошу). ТЕХНИЧЕСКИ я мог бы попросить своего провайдера разблокировать порт 25, но это, я так понимаю, может не сработать.
Тем не менее, я бы хотел перенаправить всю исходящую почту на порты 465 или 587 внешних серверов, а не 25, используя только свою локальную установку postfix. Я не смог найти ничего об этом в интернете, и изменение исходящего smtp порта на альтернативный в master.cf
все равно отправляет сообщения через 25. Так как мне поступить? Имейте в виду, если я действительно ничего не могу сделать, то я просто могу спросить у друга о его VPS.
postconf -n
:
alias_database = $alias_maps
alias_maps = hash:/etc/postfix/aliases
command_directory = /usr/bin
compatibility_level = 3.6
daemon_directory = /usr/lib/postfix/bin
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Mail/Inbox/
html_directory = no
inet_protocols = ipv4
mail_owner = postfix
mailbox_command = /usr/lib/dovecot/deliver
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
meta_directory = /etc/postfix
milter_default_action = accept
milter_protocol = 6
mydestination = $myhostname $mydomain localhost localhost.localdomain
mydomain = doma.in
myhostname = mail.doma.in
mynetworks = 127.0.0.0/8 [::1]/128 MY.IP/32 192.168.86.1 192.168.86.0/24
newaliases_path = /usr/bin/newaliases
non_smtpd_milters = inet:127.0.0.1:12301
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix
relay_domains = $mydestination
sample_directory = /etc/postfix
sendmail_path = /usr/bin/sendmail
setgid_group = postdrop
shlib_directory = /usr/lib/postfix
smtp_tls_CAfile = /etc/letsencrypt/live/doma.in/cert.pem
smtp_tls_loglevel = 1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_security_level = may
smtpd_milters = inet:127.0.0.1:12301
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/doma.in/fullchain.pem
smtpd_tls_exclude_ciphers = aNULL, LOW, EXP, MEDIUM, ADH, AECDH, MD5, DSS, ECDSA, CAMELLIA128, 3DES, CAMELLIA256, RSA+AES, eNULL
smtpd_tls_key_file = /etc/letsencrypt/live/doma.in/privkey.pem
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_security_level = may
tls_preempt_cipherlist = yes
unknown_local_recipient_reject_code = 550
Вы можете использовать порт 587 с:
postconf -ev relayhost=smtp.example.com:submission
При использовании порта 587, хост ретрансляции может потребовать аутентификации, в этом случае вам нужно будет указать требуемое имя пользователя и пароль в файле /etc/postfix/sasl_passwd
.
Если DNS-имя выбранного хоста не является его основным именем (т.е. dig -x <ip-address-of-relay-host>
возвращает другое имя для хоста ретрансляции), вы можете переопределить проверку канонического имени, поместив имя хоста ретрансляции в квадратные скобки и добавив кавычки, чтобы защитить скобки от оболочки:
postconf -ev "relayhost=[smtp.example.com]:submission"
Я попросил своего провайдера разблокировать порт 25, но, к сожалению, высшее руководство корпорации не позволяет пользователям пользоваться этим портом, поэтому его нельзя разблокировать.
Из-за этого я просто смирился и купил VPS, и это сработало идеально. Оказалось, он полезен для многих вещей помимо почты, таких как VPN, быстрый процессор для более требовательных серверных задач (таких как домашний сервер Matrix) и т.д.
К сожалению, мне так и не удалось выяснить, как заставить postfix работать таким образом. Если кто-то знает, как это сделать, пожалуйста, ответьте.
Для всех, чей провайдер блокирует порт 25, пожалуйста, подумайте о том, чтобы инвестировать в VPS или сменить провайдера.
Меня удивляет, что никто не ответил на этот вопрос. Если я правильно понимаю вопрос, у вас есть сервер в облаке, и вы хотите отправлять электронные письма с вашего компьютера, используя, например, Thunderbird или другое ПО, но ваш провайдер блокирует порт 25.
Это просто.
У вас должен быть конфигурационный файл вроде
/etc/postfix/master.cf
В котором есть что-то вроде
smtp inet n - y - - smtpd
Так что выберите любой порт, который хотите, например, 255, 10025, 465 или 1234, и введите строку под предыдущим примером как
465 inet n - y - - smtpd
Теперь у вас будет файл, который выглядит так:
smtp inet n - y - - smtpd
465 inet n - y - - smtpd
И, очевидно, вам нужно будет перезапустить postfix.
А также сервер продолжит отвечать на порт 25. Так что эта настройка не повредит этому.
Отредактируйте файл /etc/services, изменив порт 25 на 587, сохраните и перезагрузите службу postfix. Postfix прекратит прослушивание порта 25 и переключится на 587, я не знаю, будет ли это проблемой, но это решение.
Ответ или решение
Для решения проблемы отправки исходящей почты с использованием Postfix через порты 465 или 587 в условиях, когда ваш провайдер блокирует порт 25, следуйте следующим шагам:
Шаг 1: Настройка Postfix для отправки через внешний SMTP-сервер
-
Выбор внешнего SMTP-сервера:
Вы можете использовать SMTP-сервер вашего провайдера или внешний SMTP-сервер (например, SMTP вашего VPS). Убедитесь, что выбранный сервер поддерживает аутентификацию и работает на порту 587 или 465. -
Настройка файла конфигурации Postfix:
Откройте файл конфигурацииmain.cf
, который обычно расположен в/etc/postfix/
. Добавьте или измените следующие строки:relayhost = [smtp.example.com]:587
Обратите внимание, что в квадратных скобках указано имя хоста вашего SMTP-сервера. Если ваш сервер требует аутентификации, вам также нужно создать файл для хранения паролей:
/etc/postfix/sasl_passwd
Заполните его следующей строкой:
[smtp.example.com]:587 username:password
Затем выполните команду для создания хеша файла паролей и защиты его:
postmap /etc/postfix/sasl_passwd chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
-
Настройка аутентификации:
Убедитесь, что вmain.cf
присутствуют следующие параметры для включения аутентификации:smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_sasl_type = dovecot smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_use_tls = yes
Шаг 2: Перезапуск Postfix
После всех изменений не забудьте перезапустить службу Postfix для применения настроек. Введите команду:
sudo systemctl restart postfix
Шаг 3: Проверка конфигурации
Для проверки правильности конфигурации выполните команду:
postconf -n
Убедитесь, что параметры relayhost
, а также аутентификация и TLS включены.
Дополнительные рекомендации
-
Использование собственного VPS: Если у вашего провайдера по-прежнему возникают проблемы с портом 25, рассмотрите возможность аренды VPS, что обеспечит вам большую гибкость и контроль. Вы сможете настроить свой собственный SMTP-сервер и избежать блокировок.
-
Прочие порты: Вы также можете попробовать изменить настройки в
/etc/postfix/master.cf
, чтобы использовать нестандартные порты (например, 465 или 587) для приема и отправки почты, если это разрешено вашим SMTP-поставщиком.
Применяя эти шаги, вы сможете отправлять исходящие письма через порты 465 или 587, минуя ограничения вашего провайдера.