Настройте прокси-серверы SMTP и IMAP с помощью HAProxy

Материал из support.qbpro.ru

Когда вам нужен прокси-сервер SMTP и IMAP?

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

Порт 25 заблокирован. У них нет статического IP-адреса. Они не могут создать запись PTR. Если порт 25 заблокирован, вы не сможете отправлять электронные письма напрямую получателям. А если у вас нет статического IP-адреса или записи PTR, ваши электронные письма, скорее всего, будут отклонены или попадут в папку со спамом. Если вы находитесь в такой ситуации, вы можете запустить VPS (виртуальный частный сервер) в центре обработки данных и использовать его в качестве прокси-сервера для вашего почтового сервера. VPS имеет статический IP-адрес, и вы можете создать запись PTR для этого IP-адреса. Другие почтовые серверы будут думать, что VPS запускает вашу почтовую службу, и когда вы отправляете электронное письмо, они будут думать, что электронное письмо пришло с вашего VPS.


Да, вы также можете использовать службы ретрансляции SMTP, такие как Sendinblue, для решения этих проблем, но существует ограничение на количество электронных писем, которые вы можете отправлять каждый день и каждый месяц. Если вы перейдете на платную учетную запись Mailjet, это будет стоить не менее 25 долларов в месяц. Чем больше писем вы отправите, тем выше будет ваша ежемесячная стоимость. Если вы используете VPS и настроили почтовый прокси, это будет стоить около 4 долларов в месяц, независимо от того, сколько писем вы собираетесь отправлять.

Если вы используете почтовый сервер для большого количества людей, вам может потребоваться настроить почтовый прокси для балансировки нагрузки и обеспечения высокой доступности. В этой статье я настрою прокси-сервер SMTP и IMAP с помощью HAProxy, который представляет собой бесплатный балансировщик нагрузки высокой доступности с открытым исходным кодом и прокси-сервер для приложений на основе TCP и HTTP. * Выберите правильный VPS для почтового прокси Вам нужен VPS, который

позволяет создавать PTR-запись не блокирует порт 25 позволяет отправлять неограниченное количество писем без ограничений. Не все провайдеры VPS соответствуют трем вышеуказанным требованиям. Например, DigitalOcean блокирует порт 25 и не разблокирует порт 25. Другая проблема заключается в том, что крупные известные хостинг-провайдеры, такие как DigitalOcean, подвергаются злоупотреблениям со стороны спамеров. Часто IP-адрес сервера находится в нескольких черных списках.

Я запускаю свои почтовые серверы на ScalaHosting и Kamatera VPS. Я всегда рекомендую их при настройке почтового сервера. Если вам нужен почтовый прокси, который не требует много процессора и оперативной памяти, вы можете выбрать Kamatera VPS. План с 1 процессором и 1 ГБ ОЗУ стоит всего 4 доллара в месяц, и вы получите один месяц бесплатно. Вы можете следовать приведенному ниже руководству, чтобы создать Kamatera VPS.

Как создать Linux VPS-сервер на Каматере Вы можете выбрать любой дистрибутив Linux для своего VPS, но я рекомендую вам использовать Debian, Ubuntu или CentOS/Rocky Linux.

Для входа на сервер вы используете SSH-клиент. Если вы используете Linux или macOS на своем компьютере, просто откройте окно терминала и выполните следующую команду, чтобы войти на свой сервер. Замените 12.34.56.78 на IP-адрес вашего VPS.

ssh root@12.34.56.78 Вам будет предложено ввести пароль. Если вы используете Windows, прочтите следующую статью о том, как использовать SSH-клиент.

3 способа использования SSH в Windows для входа на Linux-сервер * Настройте VPN-сервер на своем VPS Если у вас дома динамический IP-адрес, то вам необходимо настроить VPN-сервер на вашем VPS, чтобы ваш VPS мог обмениваться данными с вашим почтовым сервером без прерывания связи из-за смены IP-адреса. VPN-сервер также может помочь вам обойти блокировку порта 25.

Вы можете настроить WireGuard VPN на своем VPS, следуя одному из приведенных ниже руководств. Почему я выбираю WireGuard вместо других протоколов VPN, таких как OpenVPN? Потому что WireGuard позволяет назначать статические частные IP-адреса VPN-клиентам.

Настройте свой собственный VPN-сервер WireGuard в Ubuntu Настройте свой собственный VPN-сервер WireGuard на Debian Настройте свой собственный VPN-сервер WireGuard на CentOS/Rocky Linux При следовании инструкциям из приведенных выше статей ваш VPS является VPN-сервером, а ваш почтовый сервер — VPN-клиентом. VPS станет шлюзом по умолчанию для вашего почтового сервера, и весь исходящий трафик на вашем почтовом сервере будет туннелироваться через VPN, поэтому принимающие SMTP-серверы (Gmail, Hotmail, Yahoo Mail и т. д.) будут считать, что ваши электронные письма приходят с VPS. Если вы хотите отправлять исходящие электронные письма через VPS, но при этом другие типы трафика должны использовать исходный шлюз, WireGuard также позволяет вам сделать это, включив политику маршрутизации.

Вам следует установить запись PTR, или обратную запись DNS, для вашего VPS. Каматера не позволяет редактировать запись PTR в панели управления. Вместо этого вам нужно открыть заявку в службу поддержки и попросить их добавить для вас запись PTR. Вы можете подумать, что это неудобно, но это делается для того, чтобы спамеры не подпускали к платформе, поэтому законные отправители электронной почты, такие как мы, будут иметь отличную репутацию IP. Попросите службу поддержки обновить запись PTR IP-адреса вашего сервера на mail.your-domain.com. * Откройте порты в брандмауэре и настройте разрешения. VPS VPS необходимо открыть порты 25, 587, 465, 143 и 993 в брандмауэре. Выполните следующие команды, чтобы открыть эти порты.

Дебиан/Убунту:

sudo ufw allow 25,587,465,143,993/tcp CentOS/Рокки Линукс:

sudo firewall-cmd --permanent --add-service={smtp,smtp-submission,smtps,imap,imaps}

sudo systemctl reload firewalld Далее в этом руководстве HAProxy на VPS необходимо привязаться к различным портам электронной почты, таким как 25, 587, 465, 143 и 993, но SELinux не позволяет ему сделать это. Если вы используете CentOS/Rocky Linux на VPS, вам необходимо запустить следующую команду, чтобы разрешить HAProxy привязываться к этим портам.

sudo setsebool -P haproxy_connect_any 1 ** Почтовый сервер Почтовому серверу необходимо открыть различные порты для VPS. Выполните следующую команду.

Дебиан/Убунту:

sudo ufw insert 1 allow in from 10.10.10.0/24 CentOS/Рокки Линукс:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" accept'

sudo systemctl reload firewalld 10.10.10.0/24 — это частный диапазон IP-адресов, созданный VPN-сервером, поэтому VPS может получить доступ ко всем портам почтового сервера.

Подсказка. Последняя версия iRedMail запускается с использованием брандмауэра nftable. Проверьте, есть ли на вашем почтовом сервере файл /etc/nftables.conf. Если вы можете найти этот файл, откройте его и найдите следующие строки.

      # smtp, submission, smtps
       tcp dport 25 accept
       tcp dport 587 accept
       tcp dport 465 accept
       # pop3, pop3s
       tcp dport 110 accept
       tcp dport 995 accept
       # imap, imaps
       tcp dport 143 accept
       tcp dport 993 accept

Добавьте TCP-порты 2525, 1043, 10465, 10587 и 10993.

       # smtp, submission, smtps
       tcp dport 25 accept
       tcp dport 587 accept
       tcp dport 465 accept
       tcp dport 2525 accept
       tcp dport 10587 accept
       tcp dport 10465 accept
       # pop3, pop3s
       tcp dport 110 accept
       tcp dport 995 accept
       # imap, imaps
       tcp dport 143 accept
       tcp dport 993 accept
       tcp dport 10143 accept 
       tcp dport 10993 accept

Сохраните и закройте файл. Затем перезагрузите правила брандмауэра.

sudo nft -f /etc/nftables.conf * Настройте SMTP-прокси для получения электронной почты Теперь вам нужно настроить SMTP-прокси, чтобы другие почтовые серверы могли отправлять электронную почту на ваш почтовый сервер через VPS.

VPS SSH к вашему VPS и установите HAProxy.

Дебиан/Убунту

sudo apt install haproxy ЦентОС/Рокки Линукс

sudo dnf install haproxy Затем отредактируйте основной файл конфигурации HAProxy.

sudo nano /etc/haproxy/haproxy.cfg Добавьте следующие строки в конец файла. Замените 12.34.56.78 на общедоступный IP-адрес вашего VPS. Замените 10.10.10.101 частным IP-адресом вашего почтового сервера, назначенным вашим VPN-сервером.

frontend ft_smtp

     bind 12.34.56.78:25
     mode tcp
     timeout client 1m
     log global
     option tcplog
     default_backend bk_smtp

backend bk_smtp

     mode tcp
     log global
     option tcplog
     timeout server 1m
     timeout connect 7s
     server postfix 10.10.10.101:2525 send-proxy

Приведенная выше конфигурация заставит HAProxy прослушивать порт 25 и передавать SMTP-соединения на порт 2525 вашего почтового сервера. Сохраните и закройте файл. Перезапустите HAProxy.

sudo systemctl restart haproxy И включите автозапуск во время загрузки.

sudo systemctl enable haproxy

** Почтовый сервер Чтобы использовать HAProxy в качестве обратного прокси-сервера для SMTP-сервера Postfix, вам необходимо включить Postscreen в Postfix. Подключитесь по SSH к вашему почтовому серверу и отредактируйте главный файл конфигурации Postfix.

sudo nano /etc/postfix/master.cf Добавьте следующие строки в начало этого файла. Замените 10.10.10.101 частным IP-адресом вашего почтового сервера, назначенным VPN-сервером. Это включит Postscreen на порту 2525 и сможет принимать соединения HAProxy с вашего VPS. Postfix может получить исходный IP-адрес SMTP-клиента от HAProxy.

10.10.10.101:2525 inet n - - - 1 postscreen

 -o postscreen_upstream_proxy_protocol=haproxy
 -o postscreen_cache_map=btree:$data_directory/postscreen_2525_cache
 -o syslog_name=postfix/2525

Затем раскомментируйте следующие 3 строки. (Примечание. Если вы используете iRedMail или Moboboa для запуска своего почтового сервера, то следующие 3 строки по умолчанию раскомментированы.)

smtpd pass - - y - - smtpd dnsblog unix - - y - 0 dnsblog tlsproxy unix - - y - 0 tlsproxy Где :

Первая строка заставит Postscreen передать SMTP-соединение демону smtpd. Служба dnsblog (DNS Blacklist Logger) позволяет вести журнал проверок черного списка DNS. Служба tlsproxy включает поддержку STARTTLS для postscreen, поэтому удаленные SMTP-клиенты могут устанавливать зашифрованное соединение, когда Postscreen включен.


Сохраните и закройте файл. Перезапустите Postfix, чтобы изменения вступили в силу.

sudo systemctl restart postfix Выполните следующую команду:

sudo ss -lnpt | grep master Убедитесь, что главный процесс Postfix прослушивает TCP-порты 25, 587, 465, 2525, 10587 и 10465.

LISTEN 0 100 10.10.10.101:10465 0.0.0.0:* users:(("master",pid=13035,fd=148)) LISTEN 0 100 127.0.0.1:10025 0.0.0.0:* users:(("master",pid=13035,fd=139)) LISTEN 0 100 0.0.0.0:587 0.0.0.0:* users:(("master",pid=13035,fd=122)) LISTEN 0 100 127.0.0.1:10028 0.0.0.0:* users:(("master",pid=13035,fd=142)) LISTEN 0 100 0.0.0.0:465 0.0.0.0:* users:(("master",pid=13035,fd=126)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=13035,fd=17)) LISTEN 0 100 10.10.10.101:10587 0.0.0.0:* users:(("master",pid=13035,fd=145)) LISTEN 0 100 10.10.10.101:2525 0.0.0.0:* users:(("master",pid=13035,fd=13)) Теперь добавьте новую запись MX для вашего доменного имени, как показано ниже, и ваш почтовый сервер сможет получать электронную почту через VPS.

Record Type Name Mail Server Priority

MX @ hostname-of-your-VPS 0 Вы можете использовать любое имя хоста для своего VPS, если оно может быть преобразовано в IP-адрес вашего VPS. Для простоты вы можете использовать имя хоста почтового сервера (mail.yourdomain.com). Не забудьте добавить запись DNS A для имени хоста вашего VPS. * Настройте прокси-сервер для отправки Ваши пользователи могут отправлять исходящие электронные письма на ваш почтовый сервер без прокси-сервера, но что, если вы хотите, чтобы ваши пользователи могли отправлять исходящие электронные письма через VPS? Вам необходимо настроить прокси-сервер для службы отправки Postfix.

VPS Отредактируйте основной файл конфигурации HAProxy на вашем VPS.

sudo nano /etc/haproxy/haproxy.cfg Добавьте следующие строки в конец файла. Замените 12.34.56.78 на общедоступный IP-адрес вашего VPS. Замените 10.10.10.101 частным IP-адресом вашего почтового сервера, назначенным вашим VPN-сервером.

frontend ft_submission

     bind 12.34.56.78:587
     mode tcp
     timeout client 1m
     log global
     option tcplog
     default_backend bk_submission

backend bk_submission

     mode tcp
     log global
     option tcplog
     timeout server 1m
     timeout connect 7s
     server postfix 10.10.10.101:10587 send-proxy

frontend ft_smtps

     bind 12.34.56.78:465
     mode tcp
     timeout client 1m
     log global
     option tcplog
     default_backend bk_smtps

backend bk_smtps

     mode tcp
     log global
     option tcplog
     timeout server 1m
     timeout connect 7s
     server postfix 10.10.10.101:10465 send-proxy

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

TCP-порт 587 (STARTTLS) TCP-порт 465 (SMTPS) Итак, в приведенной выше конфигурации мы определили два внешних интерфейса в HAProxy, прослушивающих порты 587 и 465. Они будут передавать соединения на порты 10587 и 10465 вашего почтового сервера соответственно.

Сохраните и закройте файл. Перезапустите HAProxy.

sudo systemctl restart haproxy

** Почтовый сервер Затем отредактируйте главный файл конфигурации Postfix на вашем почтовом сервере.

sudo nano /etc/postfix/master.cf Добавьте следующие строки в конец этого файла. Замените 10.10.10.101 частным IP-адресом вашего почтового сервера, назначенным вашим VPN-сервером. Разрешите хотя бы один пробел (табуляция или пробел) перед -o. В постфиксных конфигурациях предшествующий пробел означает, что эта строка является продолжением предыдущей. Однако не следует добавлять пробел до или после знака равенства (=).

10.10.10.101:10587 inet n - y - - smtpd

 -o syslog_name=postfix/10587
 -o smtpd_tls_security_level=encrypt
 -o smtpd_tls_wrappermode=no
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o smtpd_upstream_proxy_protocol=haproxy

10.10.10.101:10465 inet n - y - - smtpd

 -o syslog_name=postfix/10465
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o smtpd_upstream_proxy_protocol=haproxy

В приведенной выше конфигурации мы включили две службы отправки, прослушивающие порты 10587 и 10465, и они поддерживают протокол haproxy, поэтому они смогут принимать соединения от HAProxy. Сохраните и закройте файл. Перезапустите Postfix, чтобы изменения вступили в силу.

sudo systemctl restart postfix


ИСТОЧНИКИ