Настройка почтового сервера с антивирусом и спам-фильтром на Debian: Exim4 / VEXIM, Dovecot, SpamAssassin, Clamav

В статье рассматривается настройка полноценного почтового сервера на операционной системе Debian с использованием шифрования для безопасной передачи почты.
EXIM4 - агент для передачи почты.
Dovecot - сервис для передачи почты клиенту.
VEXIM - управление почтовыми доменами и ящиками через веб-интерфейс.
SpamAssassin - спам-фильтр.
Clamav - антивирус.

Исходные данные: настроенный Apache сервер с PHP и MySQL.

Как театр начинается с вешалки, так почтовый сервер начинается с домена. Необходимо добавить записи для почтового домена:

example.com. 3600 IN MX 10 mail.example.com.
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 не используется, то третью строку пропускаем. Но при этом могут быть проблемы с Гуглом.
Без третьей строки почтовик Гугла отказывается принимать почту, выдавая такую ошибку:

Our system has detected that this message does
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 exim4-daemon-heavy
apt-get install dovecot-pop3d dovecot-common dovecot-mysql
apt-get install clamav-daemon clamav-freshclam spamassassin

Установка и настройка VEXIM

Проверить, есть ли php-pear – требуется для vexim.

apt-get install php-pear

Должно быть сообщение, что пакет уже установлен.

VEXIM - набор php-скриптов, которые нужно скачать и распаковать:

cd /var/www
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

Создать каталог, где будет храниться почта:

mkdir /var/mail/vmail

Изменить владельца этого каталога: пользователь - Debian-exim, группа - mail.

Добавление пользователя vexim:

adduser --system --home /var/mail/vmail --disabled-password --disabled-login --group vexim

Подготовка базы данных для VEXIM:
Раскомментировать команду создания базы данных в скрипте /var/www/vexim2-master/setup/mysql.sql, не забывая вместо CHANGE указать свой пароль:

CREATE DATABASE IF NOT EXISTS `vexim` DEFAULT CHARACTER SET utf8;
USE `vexim`;
GRANT SELECT,INSERT,DELETE,UPDATE ON `vexim`.* to "vexim"@"localhost"
IDENTIFIED BY 'CHANGE';
FLUSH PRIVILEGES;

И запустить скрипт (требует пароль mysql):

mysql -u root -p < /var/www/vexim2-master/setup/mysql.sql

Запоминаем пароль пользователя siteadmin или меняем его. Важно! Этот скрипт не подходит для MySQL версии 8 и выше.

Создать файл variables.php:

cp /var/www/vexim2-master/vexim/config/variables.php.example /var/www/vexim2-master/vexim/config/variables.php

В файле variables.php правим следующие строки:

$sqlpass = "";
$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 -u root -p vexim
mysql>CREATE USER 'mail_user'@'localhost' IDENTIFIED BY 'CHANGE';
mysql>GRANT SELECT ON vexim.* TO 'mail_user'@'localhost';
mysql>flush privileges;

Создание сертификатов SSL

Сертификаты SSL используются для шифрования передачи почты, что хорошо для защиты от несанкционированного чтения почты.

openssl dhparam -out /etc/exim4/dhparam.pem 4096
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:

cp /var/www/vexim2-master/docs/configure /etc/exim4/exim4.conf.template

Также необходимо скопировать все файлы конфигурации из docs/vexim* в /usr/local/etc/exim/.

Пример файла конфигурации Exim
Особое внимание следует уделить строкам:

primary_hostname = mail.example.com
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 следует обратить внимание на строки:

listen = *, ::
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 отредактировать строки:

driver = mysql
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:

#ENABLED=1
CRON=1

Дополнительную настройку и работу с белыми/черными списками можно выполнить через Webmin или добавлением директив в файл конфигурации /var/mail/vmail/.spamassassin/user_prefs

whitelist_from user@domain.com
blacklist_from *@domain.com

Создать директорию и назначить владельца - vexim:

mkdir /var/mail/vmail/.spamassassin

Проверить настройки групп (файл /etc/group), чтобы все наши почтовые сервисы были в группе mail:

mail:x:8:dovecot,clamav,Debian-exim,www-data,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 и следующим содержимым:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Exim в логах должен написать о блокировке письма с вирусом.

Примечание: копирование почты

Для дублирования всей почты на отдельный почтовый ящик name@domain.com необходимо добавить в конфиг exim4 после begin routers:

auditor:
driver = redirect
domains = *
data = name@domain.com
unseen

Редактирование заголовка писем

Для удаления IP-адреса отправителя из заголовка письма необходимо добавить переменную received_header_text в конфиг Exim. Текущее значение этой переменной можно посмотреть с помощью команды:

exim -bP received_header_text

Добавить комментарий

Ваш адрес email не будет опубликован.

Confirm that you are not a bot - select a man with raised hand: