Skip to content

Exim как шлюз для Gmail

Настройка Exim4 как шлюза для исходящей почты Gmail.

Ситуация

IP адрес Gmail находится в чёрном списке. Из-за чего страдает репутация его исходящих писем. И письма попадают в спам у получателя.

Проблема

IP адрес почтового сервера Gmail является общим, т.е. злонамеренное поведение одного отправителя Gmail влияет на репутацию всех отправителей Gmail.

Вопрос

Как улучшить репутацию отправляемых писем?

Ответ

Использовать выделенный сервер с Exim для пересылки писем из Gmail. Рекомендации Гугла.

Как

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

Арендуем VPS сервер со статичным IP адресом

Например, 1.2.3.4.

Установим Exim на сервер

apt install exim4
rm -rf /etc/exim4/*
# запишем файл конфигурации ниже в /etc/exim4/exim4.conf
systemctl restart exim4

Exim конфигурация в /etc/exim4/exim4.conf

daemon_smtp_ports = 25
primary_hostname = myserver.mydomain.com
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_mail = acl_check_mail
never_users = root
local_interfaces = <; ::
# List of GMAIL IP addresses from https://support.google.com/a/answer/60764
hostlist relay_from_hosts = 35.190.247.0/24 : 64.233.160.0/19 : 66.102.0.0/20 : 66.249.80.0/20 : 72.14.192.0/18 : 74.125.0.0/16 : 108.177.8.0/21 : 173.194.0.0/16 : 209.85.128.0/17 : 216.58.192.0/19 : 216.239.32.0/19 : 172.217.0.0/19 : 172.217.32.0/20 : 172.217.128.0/19 : 172.217.160.0/20 : 172.217.192.0/19 : 172.253.56.0/21 : 172.253.112.0/20 : 108.177.96.0/19 : 35.191.0.0/16 : 130.211.0.0/22
begin acl
acl_check_rcpt:
    # Accept messages that are coming from our network
    accept
        hosts = +relay_from_hosts
    # Deny everything else
    deny
        message = "Relay not permitted"
        logwrite = "[exim4] WARNING: Denied sender: IP: $sender_host_address; Envelope From: $sender_address"
acl_check_mail:
    # Accept mail with sender envelope from mydomain.com
    accept
        condition = ${if eq {$sender_address_domain}{mydomain.com}}
    # Deny everything else
    deny
        message = "Sender domain not permitted"
        logwrite = "[exim4] WARNING: Denied sender: IP: $sender_host_address; Envelope From: $sender_address"
begin routers
dnslookup:
    driver = dnslookup
    transport = remote_smtp
    ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
    no_more
begin transports
remote_smtp:
    driver = smtp
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h

Отредактируем DNS записи в нашем домене

A

HELO должно иметь A запись соответствующую серверу. Т.е. если ваш сервер в процессе установки соединения используется HELO myserver.mydomain.com, то нужно чтобы существовала A запись myserver.mydomain.com.

rDNS PTR

PTR запись переводит IP адрес в имя сервера. Как правило PTR запись редактируется владельцем пула IP адресов. Часто для редактирования PTR записи нужно просто правильно установить имя виртуальной машины на хостинге. Например, если myserver.mydomain.com использует адрес 1.2.3.4, то PTR запись будет 4.3.2.1.in-addr.arpa. PTR myserver.mydomain.com..

SPF

SPF запись определяет серверы, которые могут отправлять почту от имени вашего домена. Она должна включать IP адрес сервера. Например, для отправки от серверов Google и вашего сервера она будет v=spf1 include:_spf.google.com ip4:1.2.3.4 ~all.

DKIM

DKIM запись использует электронную подпись для проверки, что письмо не было изменено в процессе передачи. В данном примере мы полагаемся на Gmail в подписке письма. Вам нужно её получить из панели управления Google Workspace, пример myserver._domainkey.mydomain.com. IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIGfMA...".

Настроим Gmail Workspace (GSuite)

  • Перейти в панель управления GSuie https://admin.google.com/
  • Apps/Google Workspace/Gmail/Hosts
    • Add mail route
    • Name: myserver
    • Single host: myserver.mydomain.com
    • Options: снять галку MX lookup and Secure channel (мы не используем это в данном примере)
  • Apps/Google Workspace/Gmail/Routing/Configure
    • Affect: Outbound
    • Action: Modify the message: Route: myserver.mydomain.com
    • Advanced options: Account types: users
    • Advanced options: Envelope filter: Only affect specific envelope senders. Указать адрес отправителя из вашего домена, исходящие письма которого убдут пересылаться через Exim сервер.

Проверка

Exim тест

exim -bh 5.6.7.8 <<EOF >/root/exim-output.txt 2>&1

EHLO some.mydomain.com
MAIL FROM:<sender@mydomain.com>
RCPT TO:<recepient@outlook.com>
DATA
From: sender@mydomain.com
To: recepient@outlook.com
Subject: TESTSUBJECT
TESTBODY
.
QUIT
EOF
Посмотрите лог отправки в файле /root/exim-output.txt

Curl тест

echo "From: sender@mydomain.com
To: recepient@outlook.com
Subject: TESTSUBJECT

TESTBODY" | curl --insecure --verbose smtp://myserver.mydomain.com --mail-from sender@mydomain.com --mail-rcpt recepient@outlook.com --upload-file /dev/stdin
Посмотрите письмо в почтовом ящике получателя recepient@outlook.com. Не рекомендую использовать Outlook.com т.к. у них существуют своих чёрные списки из-за которых они блокируют многие новые сервера. Это касается даже крупных облачных провайдеров, таких как Amazon SES.

Exim лог отправки

/var/log/exim4/mainlog

Web тест

Отправить письмо можно на специально созданный ящик, который выведет репутацию письма: https://www.mail-tester.com/ или https://mxtoolbox.com/deliverability/ DMARC тест: https://www.learndmarc.com/

Факты

  • Выделенный IP адрес Gmail не предоставляет.
  • Маршрутизация Gmail не поддерживает SMTP аутентификацию.
  • Большинство SMTP сервисов требуют использовать SMTP аутентификацию.
  • Крупные email провайдеры используют свой список блокировки (black list), когда IP адрес исходящего сервера может быть добавлен в заблокированные. Например:
    • Oulook:
      550 5.7.1 Unfortunately, messages from [X.X.X.X] weren't sent. Please contact your Internet service provider since part of their network is on our block list (S3140). You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors.
      
    • Gmail:
      550-5.7.28 Gmail has detected an unusual rate of unsolicited mail originating from your IP address. To protect our users from spam, mail sent from your IP address has been blocked.
      For more information, go to https://support.google.com/mail/?p=UnsolicitedIPError to review our Bulk Email Senders Guidelines. 
      
      Вы можете попробовать запросить убрать ваш адрес из заблокированных https://support.google.com/mail/contact/bulk_send_new?rd=1

Что можно улучшить

  • TLS
  • Firewall для портов
  • DKIM