вторник, 29 октября 2013 г.

Отправка почты на Gmail (Debian, Exim4)

Добрый день!

Настраивая новый сервер для нового проекта, наткнулся на такую ситуацию, что не отправляется почта на Gmail. Сервер EX40-SSD от Hetzner.de. В данной краткой заметке я опишу, как я решил данную проблему. Свой домен я заменил на example.com.
На сервере установлен Debian Wheezy, ISPmanager Lite. В качестве MTA выступает Exim4.

Тестирование

Тестировал отправку почты с помощью утилиты mail:
# mail -s "Test message" qqw1mb0@gmail.com
Введем тело письма: Test mail
И нажмем клавиши: Ctrl+D.

Ошибка

Сама ошибка в exim4:
# tail /var/log/exim4/mainlog

2013-10-29 16:42:37 1VbCNI-0003uR-TB <= root@example.com U=root P=local S=474 from <root@example.com> for qqw1mb0@gmail.com
2013-10-29 16:42:37 1VbCNI-0003uR-TB ** qqw1mb0@gmail.com R=dnslookup T=remote_smtp: SMTP error from remote mail server after end of data: host gmail-smtp-in.l.google.com [2a00:1450:4001:c02::1a]: 550-5.7.1 [2a01:4f8:200:64ee::2      16] Our system has detected that this\n550-5.7.1 message does not meet IPv6 sending guidelines regarding PTR records\n550-5.7.1 and authentication. Please review\n550-5.7.1 https://support.google.com/mail/?p=ipv6_authentication_error for more\n550 5.7.1 information. j42si19319297eew.194 - gsmtp
2013-10-29 16:42:37 1VbCNJ-0003uW-Jd <= <> R=1VbCNI-0003uR-TB U=Debian-exim P=local S=1700 from <> for root@example.com
2013-10-29 16:42:37 1VbCNJ-0003uW-Jd ** root@example.com R=unknown_users: Unknown user
2013-10-29 16:42:37 1VbCNJ-0003uW-Jd Frozen (delivery error message)
2013-10-29 16:42:37 1VbCNI-0003uR-TB Completed


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

Есть 2 способа решения данной проблемы, я же выбрал самый простой.

Первый способ

Необходимо запретить exim'у общаться по протоколу IPv6:
# vim /etc/exim4/exim4.conf.template

Над строкой begin acl необходимо добавить такую запись:
disable_ipv6 = true

И все, перезагружаем почтовый сервер:
# service exim4 restart

Теперь при отправке письма увидим, что письмо было успешно доставлено адресату.

Второй способ

Добавить PTR-запись для IPv6-адреса на DNS-сервер.
Допустим наш сервер получил IPv6-адрес: 2001:0db8:85a3::8a2e:0370:7334
Можно воспользоваться сервисом - ipv6-literal куда вставим наш адрес и получим результат напротив поля ipv6.arpa он будет выглядеть так: 4.3.3.7.0.7.3.0.e.2.a.8.0.0.0.0.0.0.0.0.3.a.5.8.8.b.d.0.1.0.0.2.ip6.arpa
Необходимо на DNS-сервере добавить адрес: 4.3.3.7.0.7.3.0.e.2.a.8.0.0.0.0.0.0.0.0.3.a.5.8.8.b.d.0.1.0.0.2.ip6.arpa IN PTR example.com

Вот и все. 

3 комментария:

  1. Привет!

    Подскажи, а куда добавлять PTR запись из второго способа?
    В файл зоны, туда где:
    ------------------
    $TTL 86400
    @ IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. (
    2013112000 ; serial
    14400 ; refresh
    1800 ; retry
    604800 ; expire
    86400 ) ; minimum

    @ IN NS robotns3.second-ns.com.
    @ IN NS robotns2.second-ns.de.
    @ IN NS ns1.first-ns.de.

    localhost IN A 127.0.0.1
    ...
    ftp IN CNAME www
    imap IN CNAME www
    loopback IN CNAME localhost
    pop IN CNAME www
    relay IN CNAME www
    smtp IN CNAME www
    @ IN MX 10 mail
    4.3.3.7.0.7.3.0.e.2.a.8.0.0.0.0.0.0.0.0.3.a.5.8.8.b.d.0.1.0.0.2.ip6.arpa IN PTR example.com
    ------------------

    Так?

    ОтветитьУдалить
  2. Всё, разобрался. Спасибо :)

    p.s. пример выше не верен, не то скопировал что надо :)

    ОтветитьУдалить
  3. а я тоже не поняла, куда добавлять запись из второго способа!

    ОтветитьУдалить