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:
Вы можете попробовать запросить убрать ваш адрес из заблокированных https://support.google.com/mail/contact/bulk_send_new?rd=1
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.
- Oulook:
Что можно улучшить
- TLS
- Firewall для портов
- DKIM