Внедрение универсального принятия доменных имен и адресов электронной почты
Универсальное принятие доменных имен и адресов электронной почты
Универсальное принятие (UA) – это состояние, когда все допустимые доменные имена и адреса электронной почты правильно и единообразно принимаются, проверяются, хранятся, обрабатываются и отображаются любым программным обеспечением, системой или устройством.
Сегодня доменные имена могут включать строки доменов верхнего уровня, длина которых превышает длину строк привычных старых доменов (то есть более трех символов). При этом в доменных именах и адресах электронной почты теперь могут использоваться символы из набора Unicode, который гораздо шире традиционного ASCII. При этом перечень доменов верхнего уровня теперь меняется динамически.
Универсальное принятие для системных администраторов
Техническая документация
- Тестовые случаи для разработчиков для оценки систем на готовность к универсальному принятию, разработанные Группой управления по универсальному принятию (Universal Acceptance Steering Group (UASG)) (UASG004)
- Данные для тестовых случаев, описанных в UASG 004 (Data UASG004A)
- Рекомендации для системного администратора по построению сервиса электронной почты с поддержкой интернационализированных (кириллических) адресов
- Рекомендации по присвоению имен интернационализированных адресов электронной почты
Настройка 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/
Универсальное принятие для разработчиков
Техническая документация
- Тестовые случаи для разработчиков для оценки систем на готовность к универсальному принятию, разработанные Группой управления по универсальному принятию (Universal Acceptance Steering Group (UASG)) (UASG004))
- Данные для тестовых случаев, описанных в UASG 004 (Data UASG004A)
- Обзор соответствия библиотек и фреймворков языков программирования передовым практикам универсального принятия, 2019 (UASG018)
- Результаты проверки готовности к универсальному принятию языков C, C#, Go, Java, Javascript, Python3, Rust и фреймворков, включая тестирование интернационализированной электронной почты, 2020 (UASG018A)
- Документ для оценки готовности к универсальному принятию ПО с открытым программным кодом (UASG033)
- Отчет об оценке поддержки EAI в программном обеспечении и электронной почте (UASG030)
- Отчет-продолжение UASG030 с проверкой семи дополнительных программных пакетов: Mozilla Thunderbird Beta, Xgenplus и Spamjadoo, Sendmail 8.17 alpha, Halon, Dovecot, Mailchannels и Spamassassin (UASG030A)
- Ответы на часто задаваемые вопросы (FAQ) о поддержке UA в языках программирования, а также о поддержке EAI в инструментах и службах электронной почты (UASG031 FAQs)
- Рекомендации системным администраторам электронной почты по предоставлению почтовых ящиков, настройке и управлению системами, совместимыми с интернационализированными адресами электронной почты (UASG028)
Разработчики, внедряющие в своих программных продуктах поддержку интернационализированных доменных имен и адресов электронной почты, могут получить тестовые кириллические адреса электронной почты для опытной эксплуатации и проведения тестирования — заявка на предоставление тестового кириллического email адреса
- Актуальный список проверенного программного обеспечения и сервисов с указанием их текущего статуса поддержки IDN/EAI
- Рекомендации по внедрению в программном обеспечении поддержки интернационализированных доменных имен и адресов электронной почты в домене верхнего уровня .РФ
- Рекомендации по внедрению в программном обеспечении поддержки доменных имен и адресов электронной почты c использованием символов кириллицы
Тестирование ПО на соответствие универсальному принятию
Разработчики могут проанализировать свои продукты на соответствие критериям универсального принятия и получить подтверждение такого соответствия:
- Методика анализа готовности к универсальному принятию для программного обеспечения, обрабатывающего доменные имена и e-mail
- Получение подтверждения соответствия вашего ПО или сервиса критериям универсального принятия домена .РФ