В статье рассматривается настройка полноценного почтового сервера на операционной системе Debian с использованием шифрования для безопасной передачи почты.
EXIM4 - агент для передачи почты.
Dovecot - сервис для передачи почты клиенту.
VEXIM - управление почтовыми доменами и ящиками через веб-интерфейс.
SpamAssassin - спам-фильтр.
Clamav - антивирус.
Исходные данные: настроенный Apache сервер с PHP и MySQL.
Как театр начинается с вешалки, так почтовый сервер начинается с домена. Необходимо добавить записи для почтового домена:
mail.example.com. 3600 IN A IPv4-address
mail.example.com. 3600 IN AAAA IPv6-address
@.example.com. 3600 IN TXT v=spf1 +a +mx -all
Если на почтовом сервере используется только один домен, то SPF запись должна быть такой: "v=spf1 mx -all".
2 и 3 строки – связь домена с сервером, в формате IPv4 и IPv6. Если адресация IPv6 не используется, то третью строку пропускаем. Но при этом могут быть проблемы с Гуглом.
Без третьей строки почтовик Гугла отказывается принимать почту, выдавая такую ошибку:
550-5.7.1 not meet IPv6 sending guidelines regarding PTR records and
550-5.7.1 authentication.
Для почтового домена необходимо указать обратную зону (связать IP-адрес с доменом) - Reverse DNS entry, как для IPv4, так и для IPv6.
Важно! Проверить IP-адрес почтового сервера на отсутствие в спамовых черных списках. Для этого можно воспользовать сервисом MX ToolBox. Если адрес светится в черных списках - удалить (делистинг) до запуска почтового севрера.
Установка сервисов:
apt-get install dovecot-pop3d dovecot-common dovecot-mysql
apt-get install clamav-daemon clamav-freshclam spamassassin
Установка и настройка VEXIM
Проверить, есть ли php-pear – требуется для vexim.
Должно быть сообщение, что пакет уже установлен.
VEXIM - набор php-скриптов, которые нужно скачать и распаковать:
wget https://github.com/vexim/vexim2/archive/master.zip
apt-get install unzip
unzip master.zip
chown -R root:www-data /var/www/vexim2-master
Создать каталог, где будет храниться почта:
Изменить владельца этого каталога: пользователь - Debian-exim, группа - mail.
Добавление пользователя vexim:
Подготовка базы данных для VEXIM:
Раскомментировать команду создания базы данных в скрипте /var/www/vexim2-master/setup/mysql.sql, не забывая вместо CHANGE указать свой пароль:
USE `vexim`;
GRANT SELECT,INSERT,DELETE,UPDATE ON `vexim`.* to "vexim"@"localhost"
IDENTIFIED BY 'CHANGE';
FLUSH PRIVILEGES;
И запустить скрипт (требует пароль mysql):
Запоминаем пароль пользователя siteadmin или меняем его. Важно! Этот скрипт не подходит для MySQL версии 8 и выше.
Создать файл variables.php:
В файле variables.php правим следующие строки:
$uid = "90";
$gid = "90";
$mailroot = "/var/mail/vmail/";
$cryptscheme = "sha512";
Здесь uid и gid - данные пользователя Debian-exim (можно посмотреть в файле /etc/passwd).
$cryptscheme должна совпадать со схемой, указанной в sql-конфиге Dovecot (рассматривается ниже).
Создать пользователя mail_user, который будет использоваться службами Exim и Dovecot для проверки авторизации, доступ к базе vexim только на чтение (вместо CHANGE задать свой пароль):
mysql>CREATE USER 'mail_user'@'localhost' IDENTIFIED BY 'CHANGE';
mysql>GRANT SELECT ON vexim.* TO 'mail_user'@'localhost';
mysql>flush privileges;
Создание сертификатов SSL
Сертификаты SSL используются для шифрования передачи почты, что хорошо для защиты от несанкционированного чтения почты.
cd /etc/ssl && openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 100000 -subj '/O=Some Org/CN=mail.example.com'
Для других почтовых доменов указываем другое имя файла вместо smtpd.pem, например, mail.example.com.pem.
Права доступа к сертификату: 0440 (только чтение для владельца рут и группы мейл).
Примечание.
Недостаток самоподписанных сертификатов - их нельзя импортировать в аккаунт Гугл, чтобы Гугл забирал почту с нашего ящика. С некоторого момента времени Гугл доверяет только центрам сертификации, например, таким как Mozilla CA. Поэтому или покупаем сертификат, или не паримся с Гуглом, т.к. самоподписанные сертификаты прекрасно работают как на ПК, так и на мобильных устройствах (Android - проверено).
Настройка Exim
Копируем конфиг из папки VEXIM:
Также необходимо скопировать все файлы конфигурации из docs/vexim* в /usr/local/etc/exim/.
Пример файла конфигурации Exim
Особое внимание следует уделить строкам:
daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
domainlist local_domains = @ : ${lookup mysql{VIRTUAL_DOMAINS}} : ${lookup mysql{ALIAS_DOMAINS}}
hide mysql_servers = localhost::(/var/run/mysqld/mysqld.sock)/vexim/mail_user/passwd
log_selector = +all_parents +connection_reject +incoming_interface +lost_incoming_connection +received_sender +received_recipients +smtp_confirmation +smtp_syntax_error +smtp_protocol_error +queue_run
tls_certificate = ${if exists{/etc/ssl/${tls_sni}.pem}{/etc/ssl/${tls_sni}.pem}{/etc/ssl/smtpd.pem}}
tls_privatekey = ${if exists{/etc/ssl/${tls_sni}.pem}{/etc/ssl/${tls_sni}.pem}{/etc/ssl/smtpd.pem}}
auth_advertise_hosts = ${if eq {$tls_cipher}{}{}{*}}
exim_user = Debian-exim
av_scanner = clamd:/var/run/clamav/clamd.ctl
spamd_address = 127.0.0.1 783
CHECK_RCPT_REVERSE_DNS = yes
Здесь используется технология TLS SNI, которая позволяет использовать разные сертификаты для нескольких почтовых доменов на сервере. Но smtpd.pem обязателен (сертификат главного почтового домена).
Настройка Dovecot
Пример файлов конфигурации Dovecot.
В файле dovecot.conf следует обратить внимание на строки:
base_dir = /var/run/dovecot/
protocols = pop3
disable_plaintext_auth = yes
ssl = required
ssl_cert = </etc/ssl/smtpd.pem
ssl_key = </etc/ssl/smtpd.pem
local_name mail.example.com {
ssl_cert = </etc/ssl/mail.example.com.pem
ssl_key = </etc/ssl/mail.example.com.pem
}
login_greeting = POP3 server ready.
mail_location = maildir:/var/mail/vmail/%d/%n/Maildir
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot_info.log
verbose_proctitle = yes
first_valid_uid = 26
first_valid_gid = 6
maildir_copy_with_hardlinks = yes
service auth {
unix_listener auth-client {
mode = 0600
user = Debian-exim
}
unix_listener auth-master {
mode = 0600
user = Debian-exim
}
user = root
}
service pop3-login {
chroot = login
process_limit = 200
process_min_avail = 3
service_count = 1
vsz_limit = 64 M
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
postmaster_address = postmaster@example.com
auth_socket_path = /var/run/dovecot/auth-master
}
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
passdb {
driver = pam
}
userdb {
args = blocking=yes
driver = passwd
}
userdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
##!include conf.d/*.conf
##!include_try local.conf
С помощью local_name{} задаются разные сертификаты для нескольких доменов.
В файле dovecot-sql.conf.ext отредактировать строки:
connect = host=/var/run/mysqld/mysqld.sock user=mail_user password=CHANGE dbname=vexim
default_pass_scheme = SHA512-CRYPT
password_query = SELECT crypt AS password, '/var/mail/vmail/%d/%n' AS userdb_home, 'mail' AS userdb_uid, 'mail' AS userdb_gid FROM users WHERE username = '%n@%d' AND enabled = '1'
user_query = SELECT pop AS home, uid AS uid, gid AS gid FROM users WHERE username = '%n@%d'
Примечание: в файле конфигурации Dovecot по умолчанию подключаются дополнительные настройки в директории conf.d.
Настройка SpamAssassin
Редактируем файл /etc/default/spamassassin:
CRON=1
Дополнительную настройку и работу с белыми/черными списками можно выполнить через Webmin или добавлением директив в файл конфигурации /var/mail/vmail/.spamassassin/user_prefs
blacklist_from *@domain.com
Создать директорию и назначить владельца - vexim:
Проверить настройки групп (файл /etc/group), чтобы все наши почтовые сервисы были в группе mail:
Debian-exim:x:113:clamav
clamav:x:116:Debian-exim
/var/run/clamav - доступ на запись должен быть для пользователя и группы clamav.
Перезапустить службы:
/etc/init.d/exim4 restart
/etc/init.d/dovecot restart
/etc/init.d/spamassassin restart
/etc/init.d/clamav-daemon restart
/var/spool/exim4/scan – настроить право записи для группы mail
Настройка Apache:
добавляем алиас для нашего хоста: /vexim > /var/www/vexim2-master/vexim (можно сделать через Webmin).
Проверяем работу: https://IPv4-address/vexim/. После успешной авторизации создать новые домены и почтовые ящики. В каталоге /var/mail/vmail/ должна появиться новая структура. Если этот каталог остался пустым - проверять права доступа и создавать домены заново.
Отправляем тестовое сообщение и смотрим логи на предмет ошибок.
Дополнительные команды:
Проверка SSL: openssl s_client -connect mail.example.com:pop3s
Выполнить обработку очереди: exim -qf
Очистка очереди: exipick -i | xargs exim -Mrm
Настройка Outlook: при первом подключении к серверу появится окно «Предупреждение безопасности». Нажать кнопку «Показать сертификат», установить.
NB! Могут возникнуть трудности с настройкой MS Outlook 2003 SP1: не подхватывает сертификат. При подключении к серверу дает ошибку 0x800CCC0F. Требуется ручная установка и настройка.
Если включить функцию пересылки сообщений для почтового ящика и указать ящик Гугл, то последний будет блокировать пересылаемые сообщения из-за проверки DKIM. Хотя прямая отправка писем на Гугл прекрасно работает. Помним и на Гугл не пересылаем.
Проверка антвируса Clamav
Отправить на свой почтовый ящик заархивированный файл с расширением COM и следующим содержимым:
Exim в логах должен написать о блокировке письма с вирусом.
Примечание: копирование почты
Для дублирования всей почты на отдельный почтовый ящик name@domain.com необходимо добавить в конфиг exim4 после begin routers:
driver = redirect
domains = *
data = name@domain.com
unseen
Редактирование заголовка писем
Для удаления IP-адреса отправителя из заголовка письма необходимо добавить переменную received_header_text в конфиг Exim. Текущее значение этой переменной можно посмотреть с помощью команды: