Внедрение универсального принятия доменных имен и адресов электронной почты

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску

Универсальное принятие доменных имен и адресов электронной почты

Универсальное принятие (UA) – это состояние, когда все допустимые доменные имена и адреса электронной почты правильно и единообразно принимаются, проверяются, хранятся, обрабатываются и отображаются любым программным обеспечением, системой или устройством.

Сегодня доменные имена могут включать строки доменов верхнего уровня, длина которых превышает длину строк привычных старых доменов (то есть более трех символов). При этом в доменных именах и адресах электронной почты теперь могут использоваться символы из набора Unicode, который гораздо шире традиционного ASCII. При этом перечень доменов верхнего уровня теперь меняется динамически.

Универсальное принятие для системных администраторов

Техническая документация

Настройка EAI почтового сервиса

Инструкция по установке почтового сервера с поддержкой интернационализированных адресов под ОС FreeBSD 10.2

Установка Postfix с расширением SMTPUTF8, Cyrus SASL и OpenSSL

Почтовый сервер: общая информация

С помощью данной инструкции вы сможете установить почтовый сервер, который сможет получать почту с интернационализированных почтовых адресов за счет поддержки расширения SMTPUTF8.

Система поддерживает протоколы IMAP и POP3 при помощи почтового сервера Courier. Пользователи добавляются как локальные, с логином SSH, так и без него. Их почта хранится в папке /home/user.

Используется ОС Freebsd 10.2

Уведомление, требования и первичная установка

  • Убедитесь, что у вас установлена версия Postfix не ниже 3.0
  • Если вы устанавливаете какие-либо компоненты почты после установки сервера, обязательно протестируйте сервер на предмет возврата почты SMTPUTF8.
  • Предварительно необходимо настроить ресурсные записи DNS, имя хоста – это имя вашего домена (например, domain.com )
  • mail.hostname – это имя вашего почтового сервера (например, mail.domain.com)

Необходим рабочий сервер FreeBSD с аккаунтом root (привилегии sudo)

  • Установка функционирует как root, если не указано иное
Update your hostname 

Если вы используете интернационализированный домен, используйте эквивалент в кодировке punycode. Например, mail.ёпочта.рф в кодировке punycode выглядит как mail.xn--80a1acny1d.xn--p1ai

vi /etc/hostname

ОБНОВИТЕ имя хоста для почтового сервера на ВАШЕ

mail.domain.com

Перезагрузите сервер для обновления имени хоста.

После перезагрузки команда ниже покажет ваше имя хоста mail.domain.com

hostname

Установите Postfix из репозитария и необходимые библиотеки (Cyrus SASL, OPENSSL)

Найдите версию Postfix 3.0.1 или выше чтобы можно было активировать расширение SMTPUTF8. Ссылка для скачивания: http://www.postfix.org/download.html. В примере ниже мы работаем с postfix-3.0.1.tar.gz, ваша версия может отличаться. Установив Postfix с помощью apt-get, вы получите более раннюю версию, которая еще не поддерживает SMTPUTF8. В будущем это может измениться.

Установите необходимые библиотеки с помощью портов с опциями по умолчанию

cd /usr/ports/security/openssl 
make && make install

cd /usr/ports/security/cyrus-sasl2
make && make install

cd /usr/ports/devel/icu
make && make install
Refresh your environment

Создайте необходимых пользователей и права на использование каталога

pw groupadd postfix -g 32 
pw groupmod mail -m postfix
pw groupadd postdrop 
pw useradd postfix -c "Postfix Daemon User" -d /var/spool/postfix -g postfix  -s /bin/false -u 32  
chown -v postfix:postfix /var/mail

Скачайте Postfix 3.x.x или более позднюю версию и скомпилируйте с openssl и sasl auth

tar -xzvf postfix-3.0.1.tar.gz
cd postfix-3.0.1
make CCARGS="-DUSE_TLS -I/usr/include/openssl/   -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl" AUXLIBS="-lssl -lcrypto -lsasl2" makefiles 
make

Установите Postfix

sh postfix-install -non-interactive   daemon_directory=/usr/lib/postfix  \
                    manpage_directory=/usr/share/man  \
                    html_directory=/usr/share/doc/postfix-3.0.1/html  \
                    readme_directory=/usr/share/doc/postfix-3.0.1/readme

Отредактируйте или обновите /etc/rc.conf как указано ниже

postfix_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Отредактируйте, создайте или обновите /etc/periodic.conf

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

Отключите sendmail и запустите postfix

service sendmail stop
postfix start

Конфигурация Postfix

Измените mail.domain.tld, domain.tld, yourotherdomain.tld

postconf -e 'myhostname  = mail.domain.tld'
postconf -e 'mydomain    = domain.tld'
postconf -e 'myorigin    = $mydomain'
postconf -e 'inet_interfaces = all'
postconf -e 'mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24'
postconf -e 'alias_database = hash:/etc/aliases'
postconf -e 'alias_maps = hash:/etc/aliases'
postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, yourotherdomain.tld'
postconf -e 'smtputf8_enable = yes'
postfix reload

@TODO

Enable Postfix as service and run at startup

Попробуйте отправить письмо с помощью Telnet и отправьте письмо на внешний сервер (например, Gmail)

Проверка, что SMTPUTF8 активирован

Введите команду для подключения к SMTP

telnet localhost 25

Результат должен быть следующий:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 YourHostName ESMTP Postfix

Введите следующий текст и нажмите Enter

EHLO localhost

Если в ответе вы видите 250 SMTPUTF8, то ваш сервер может отправлять и получать почту с интернационализированных адресов

250-YourHostName
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8

Если вы не видите 250 SMTPUTF8, попробуйте удалить Postfix и повторите описанную процедуру установки. Возможно, вы установили компонент, который установил старую версию Postfix.

Включение SMTP Auth

Установите saslauthd с настройками по умолчанию

cd /usr/ports/security/cyrus-sasl2-saslauthd
make && make install

Отредактируйте /etc/rc.conf

saslauthd_enable="YES"

Создайте или отредактируйте /usr/local/lib/sasl2/smtpd.conf . Используете только механизм PLAIN.

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Обновите конфигурацию Postfix sudo postconf -e 'smtpd_sasl_path = smtpd' sudo postconf -e 'smtpd_sasl_auth_enable = yes' service saslauthd start sudo postfix reload


Создайте пользователя для проверки аутентификации, замените AnyUserName на свое имя.

<pre>
sudo useradd -m AnyUserName  -s /usr/sbin/nologin
sudo passwd AnyUserName

Сгенерируйте ключ аутентификации, замените username на свое имя, а yourpassword на свой пароль.

perl -MMIME::Base64 -e 'print encode_base64("\000username\000yourpassword")'

Замените dGVzdAB0ZXN0AHRlc3Q= на сгенерированный

telnet 	localhost 25
EHLO localhost
AUTH PLAIN dGVzdAB0ZXN0AHRlc3Q=

Должно появиться сообщение Authentication successful.

Возможная ошибка: если в сгенерированном base64 есть два символа == в конце строки, терминал может его не принять. Тогда используйте пароль, который не дает в результате два символа == в конце строки.

Завершите конфигурацию Postfix, чтобы только прошедшие аутентификацию пользователи могли отправлять почту через SMTP

postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'smtpd_sasl_local_domain = $mydomain'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'
postconf -e 'smtpd_relay_restrictions =  permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_sender_login_mismatch '
postfix reload

Включение TLS

Создайте сертификаты

cd /etc/postfix

openssl req -new -outform PEM -out smtpd.cert \
   -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM \
   -days 365 -x509

Ответьте на появившиеся вопросы

Обновите конфигурацию Postfix

postconf -e 'smtpd_enforce_tls = no'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_key_file  = /etc/postfix/smtpd.key'
postconf -e 'smtpd_tls_cert_file  = /etc/postfix/smtpd.cert'
postfix reload

Вы можете проверить с помощью telnet доступность порта 25 и выполнение EHLO. Должна появиться строка «STARTTLS»

250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8

Введите команду

STARTTLS

Результат должен быть

220 2.0.0 Ready to start TLS

Отправка и получение почты через интернет

Отправка почты с помощью telnet

telnet localhost 25
EHLO localhost

MAIL FROM: <youruser@domain.tld> SMTPUTF8
RCPT FROM: <EAI@IDN.idn>
data
Subject: A Test

This is the body

.

Обратите внимание на точку в конце. Она необходима для завершения и отправки сообщения.

На данном этапе убедитесь, что можете отправлять и посылать почту.

Теперь вы можете отправлять почту с помощью интернационализированного адреса, проверьте /var/mail/mail.log, в логе под test@domain.tld находится локальный получатель

Aug  3 02:48:49 ip-172-31-21-209 postfix/local[21614]: 7EAD343550: to=<test@domain.tld>, relay=local, delay=0.62, delays=0.62/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Aug  3 02:48:49 ip-172-31-21-209 postfix/qmgr[21586]: 7EAD343550: removed

Почта хранится в /var/mail/ Если вы не получаете почту, используйте онлайн-инструмент, например, mxtoolbox.com, для диагностики проблемы.

Конфигурация Courier authlib, Courier imap

Данные команды запускают imap и pop3

cd /usr/ports/security/courier-authlib
make && make install

cd  /usr/ports/mail/courier-imap
make && make install

Отредактируйте /usr/local/etc/authlib/authdaemonrc и измените метод аутентификации

authmodulelist="authpam"

Добавьте /etc/rc.conf

courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_imapd_ssl_enable="YES"
courier_imap_pop3d_enable="YES"
courier_imap_pop3d_ssl_enable="YES"

Задайте конфигурацию Postfix для использования Maildir в качестве почтового хранилища

postconf -e 'home_mailbox = Maildir/'
service courier-authdaemond start
service courier-imap-imapd
service courier-imap-imapd-ssl
service courier-imap-pop3d
service courier-imap-pop3d-ssl

service courier-imap-imapd start
service courier-imap-imapd-ssl start
service courier-imap-pop3d start
service courier-imap-pop3d-ssl start
postfix reload

Обновите Skeleton и создайте папку для пользователя, созданного ранее. В данном примере мы использовали пользователя test

mkdir -p /usr/share/skel/Maildir/{cur,new,tmp}

mkdir -p /home/test/Maildir/{cur,new,tmp}
chown test:test /home/test/Maildir/{,cur,new,tmp}
chmod 0700 /home/test/Maildir/{,cur,new,tmp}

Протестируйте imap, pop3

telnet localhost imap
ok login username password
telnet localhost pop3
User username
Pass password

Установите Squirrel-mail

Установите модифицированный Squirrel mail

cd to-your-public-html-filder
wget http://interlab.ait.ac.th/eai-wiki/files/squirrelmail.zip
unzip squirrelmail.zip

Отредактируйте файл конфигурации и измените attachchment_dir и data_dir. Не забудьте создать папки. Измените права пользования на вашего пользователя apache, затем разрешите ему доступ для редактирования.

vi squirrelmail/config/config.php

Зайдите в squirrelmail

http://your-domain/squirrelmail/

Универсальное принятие для разработчиков

Техническая документация

Разработчики, внедряющие в своих программных продуктах поддержку интернационализированных доменных имен и адресов электронной почты, могут получить тестовые кириллические адреса электронной почты для опытной эксплуатации и проведения тестирования — заявка на предоставление тестового кириллического email адреса

Тестирование ПО на соответствие универсальному принятию

Разработчики могут проанализировать свои продукты на соответствие критериям универсального принятия и получить подтверждение такого соответствия:

Тренинги по внедрению поддержки IDN и EAI

Обучающие семинары и тренинги