Архивы за Октябрь, 2014
Почта для кириллических доменов
На текущий момент только один почтовик заявляет и выпускает хоть какие-то релизы с поддержкой SMTPUTF8 или RFC 6531. Это экспериментальные релизы Postfix 2.12.
Но даже при наличии поддержки в нём система доставки кириллической почты просто так не заработает. Поэтому запасаемся напильником.
Настраивать сервер будем под Debian 7. В моём случает он внутри VZ контейнера, а эксперименты проводились внутри LXC контейнера.
После создания контейнера сносим оттуда штатный почтовик, если он есть:
apt-get purge exim* sendmail* и пр.
Качаем последнюю версию Postfix 2.12 experimental release:
wget http://mirrors-ru.go-parts.com/postfix/source/experimental/postfix-2.12-20140905.tar.gz
Заранее создаём юзера и группу:
useradd postfix -s /bin/false groupadd postdrop
Распаковываем:
tar -zxf postfix-2.12-20140905.tar.gz
Патчим src/smtpd/smtpd.c:
apt-get install patch patch postfix-2.12-20140905/src/smtpd/smtpd.c smtpd.patch
где smtpd.patch имеет содержимое:
--- smtpd.c 2014-10-06 00:15:18.000000000 +0400 +++ smtpd.c.force.smtputf8 2014-10-07 15:36:21.352884670 +0400 @@ -2317,21 +2317,8 @@ return (-1); } - /* - * XXX The sender address comes first, but the optional SMTPUTF8 - * parameter determines what address syntax is permitted. We must process - * this parameter early. - */ - if (var_smtputf8_enable - && (state->ehlo_discard_mask & EHLO_MASK_SMTPUTF8) == 0) { - for (narg = 3; narg < argc; narg++) { - arg = argv[narg].strval; - if (strcasecmp(arg, "SMTPUTF8") == 0) { /* RFC 6531 */ - smtputf8 = 1; - break; - } - } - } + smtputf8 = 1; + if (extract_addr(state, argv + 2, PERMIT_EMPTY_ADDR, var_strict_rfc821_env, smtputf8) != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL;
Нужно это для того, чтобы почтовые клиенты, которые на данный момент не готовы полностью к таким серверам, могли через них всё-таки почту отправлять.
Дело в том, что эта сборка Postfix для активации SMTPUTF8 режима должна на входе получить:
RCPT TO:< юзер@домен.рус> SMTPUTF8
Быстрая проверка показала, что даже почтовые клиенты заявившие о поддержке IDN почты не отправляют SMTPUTF8 в RCPT TO и тем самым создают себе проблемы с отправкой.
Готовимся к сборке:
apt-get install build-essential libdb-dev libicu-dev libssl-dev apt-get install checkinstall apt-get install rsyslog telnet
Заодно готовимся к использованию Dovecot в качестве средства авторизации:
apt-get install dovecot-imapd dovecot-pop3d
Собираем с поддержкой SASL и TLS:
cd postfix-2.12-20140905 make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" -DUSE_TLS' AUXLIBS="-ldb -lnsl -lresolv -lssl" make make install
Теперь надо это всё настроить:
В /etc/dovecot/conf.d/10-master.conf правим сокет для авторизации (95 строка примерно):
# Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }
В /etc/dovecot/conf.d/10-auth.conf (99 строка примерно) добавляем любимые способы авторизации, например:
auth_mechanisms = plain login
Перезапускаем:
/etc/init.d/dovecot restart
Должно заработать.
После правки конфиг Postfix /etc/postfix/main.cf получился такой:
queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix myhostname = postfix.regtime.net mydomain = postfix.regtime.net inet_interfaces = all unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases home_mailbox = Mailbox mail_spool_directory = /var/mail debug_peer_level = 6 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq setgid_group = postdrop html_directory = no manpage_directory = /usr/local/man sample_directory = /etc/postfix readme_directory = no inet_protocols = ipv4 meta_directory = /etc/postfix shlib_directory = no smtputf8_autodetect_classes = all smtputf8_enable = yes virtual_mailbox_domains = русскийдомен.рф virtual_mailbox_base = /var/spool/mail virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 smtpd_sasl_type = dovecot smtpd_sasl_path = /var/spool/postfix/private/auth smtpd_sasl_local_domain = smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination smtpd_tls_CAfile = /etc/ssl/certs/ca.pem smtpd_tls_CApath = /etc/ssl/certs smtpd_tls_cert_file = /etc/dovecot/dovecot.pem smtpd_tls_key_file = /etc/dovecot/private/dovecot.pem smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache smtpd_use_tls = yes # Enable STARTTLS encryption smtp_use_tls = yes smtp_tls_CAfile = /etc/ssl/certs/ca.pem smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache smtpd_tls_security_level = may smtpd_tls_received_header = yes smtpd_tls_loglevel = 1 smtpd_tls_auth_only = no tls_random_source = dev:/dev/urandom
Настройка для довольно простого использования обычных системых mailbox’ов на одном кириллическом домене. Те кто разбирается в Postfix чуть более глубоко — может это легко перенастроить под более привычные ему варианты.
В /etc/postfix/virtual_mailbox пишем:
имя.фамилия@русскийдомен.рф user1
где user1 — системный юзер, которого нужно добавить штатной командой:
useradd user1 -s /bin/false
А в /etc/postfix/uid_maps:
имя.фамилия@русскийдомен.рф 1000
где 1000 — это uid для user1.
Тут же становится понятно, что для авторизации будет использован классический ASCII логин user1 и пароль к нему. В качестве POP3/IMAP4/SMTP сервера postfix.regtime.net.
Преобразуем это в хэш:
postmap /etc/postfix/aliases postmap /etc/postfix/virtual_mailbox postmap /etc/postfix/uid_maps
Перечитываем конфиг или запускаем, перезапускаем Postfix:
postfix reload/stop/start
Проверяем:
# telnet localhost 25 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 postfix.regtime.net ESMTP Postfix EHLO localhost 250-postfix.regtime.net 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 quit 221 2.0.0 Bye Connection closed by foreign host.
Теперь когда сервер умеет работать с кириллическими адресами настало время выбрать клиента.
Гарантировано работает Claws Mail начиная с версии 3.9.3.
Evolution 3.10.4 тоже справляется с этой задачей.
Есть специальный клиент — EAI-SMTPUTF8 v.2.0
Гарантированно не работает Mozilla Thunderbird.