Почтовый сервер как у провайдера, часть 2: ClamAV, SpamAssassin, Dovecot

Почтовый сервер как у провайдера, часть 2: ClamAV, SpamAssassin, Dovecot

Продолжим с нашим почтовым сервером, ставим Spamassassin и ClamAV:

# cd /usr/ports/security/clamav
# make config

  ┌────────────────────────────────────────────────────────────────────┐
  │                    Options for clamav 0.95.3                       │
  │ ┌────────────────────────────────────────────────────────────────┐ │
  │ │    [X] ARC           Enable arch archives support              │ │
  │ │    [X] ARJ           Enable arj archives support               │ │
  │ │    [X] LHA           Enable lha archives support               │ │
  │ │    [X] UNZOO         Enable zoo archives support               │ │
  │ │    [X] UNRAR         Enable rar archives support               │ │
  │ │    [ ] MILTER        Compile the milter interface              │ │
  │ │    [ ] LDAP          libmilter was built with LDAP             │ │
  │ │    [X] ICONV         Enable ICONV support                      │ │
  │ │    [ ] STDERR        Print logs to stderr instead of stdout    │ │
  │ │    [ ] EXPERIMENTAL  Build experimental code                   │ │
  ├─└────────────────────────────────────────────────────────────────┘─┤
  │                       [  OK  ]       Cancel                        │
  └────────────────────────────────────────────────────────────────────┘

# make install clean
# cd /usr/ports/mail/p5-Mail-SpamAssassin/
# make config

   ┌────────────────────────────────────────────────────────────────────┐
   │             Options for p5-Mail-SpamAssassin 3.2.5_4               │
   │ ┌────────────────────────────────────────────────────────────────┐ │
   │ │   [X] AS_ROOT        Run spamd as root (recommended)           │ │
   │ │   [X] SPAMC          Build spamd/spamc (not for amavisd)       │ │
   │ │   [ ] SACOMPILE      sa-compile                                │ │
   │ │   [ ] DKIM           DKIM/DomainKeys Identified Mail           │ │
   │ │   [X] SSL            Build with SSL support for spamd/spamc    │ │
   │ │   [X] GNUPG          Install GnuPG (for sa-update)             │ │
   │ │   [X] MYSQL          Add MySQL support                         │ │
   │ │   [ ] PGSQL          Add PostreSQL support                     │ │
   │ │   [X] RAZOR          Add Vipul's Razor support                 │ │
   │ │   [X] SPF_QUERY      Add SPF query support                     │ │
   │ │   [ ] RELAY_COUNTRY  Relay country support                     │ │
   ├─└────────────────────────────────────────────────────────────────┘─┤
   │                       [  OK  ]       Cancel                        │
   └────────────────────────────────────────────────────────────────────┘
# make install clean

В дефолтной конфигурации clamav написаны вполне разумные значения, потому файл конфига /usr/local/etc/clamd.conf вышел маленький:

# Включаем логгирование. 
LogFile /var/log/clamav/clamd.log

# Писать ли в лог время события
#LogTime yes

# Расположение pid-файла
PidFile /var/run/clamav/clamd.pid

# Путь к временному каталогу
TemporaryDirectory /tmp

# Путь к базе данных
DatabaseDirectory /var/db/clamav

# Демон может работать в локальном режиме, сетевом или обоих сразу.
# Рекомендуется локальный, оставим.

# Путь к локальному сокету.
LocalSocket /var/run/clamav/clamd.sock

# Удалять сокет-файл после нечистого завершения
FixStaleSocket yes

# Работать под указанным юзером
User exim

# Дополнительные группы AllowSupplementaryGroups yes

# Включить e-mail сканер
ScanMail yes

/usr/local/etc/freshclam.conf:

# Путь к каталогу с базой, должен совпадать с путем самого clamav
DatabaseDirectory /var/db/clamav

# Путь к лог-файлу
UpdateLogFile /var/log/clamav/freshclam.log

# Логгировать ли время
LogTime yes

# PID-файл
PidFile /var/run/clamav/freshclam.pid

# Пользователь, под которым работать
DatabaseOwner exim

# Дополнительные группы
AllowSupplementaryGroups yes

# Зеркала для обновления, для Украины - ua
DatabaseMirror db.ua.clamav.net
DatabaseMirror database.clamav.net

# Настройки прокси, если кому надо
# Default: disabled
#HTTPProxyServer myproxy.com
#HTTPProxyPort 1234
#HTTPProxyUsername myusername
#HTTPProxyPassword mypass

# Исходящий ip-адрес, с которого будут запрашиваться обновления
#LocalIPAddress aaa.bbb.ccc.ddd

# Путь к конфигу clamd для его перегрузки с новыми базами
NotifyClamd /usr/local/etc/clamd.conf

Со SpamAssassin-ом та же история, большинство дефолтных опций нам подходит, /usr/local/etc/mail/spamassassin/local.cf:

# Хедеры, которые не принимаем во внимание при проверке
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

Теперь включаем Clamd и SpamAssassin и взлетаем:

# chown -R exim:mail /var/log/clamav
# chown -R exim:mail /var/db/clamav
# chown -R exim:mail /var/run/clamav
# chown -R exim:mail /var/run/spamd
# echo clamav_clamd_enable=\"YES\" >> /etc/rc.conf
# echo clamav_freshclam_enable=\"YES\" >> /etc/rc.conf
# echo spamd_flags=\"--socketpath=/var/run/spamd.sock\" >> /etc/rc.conf
# echo spamd_enable=\"YES\" >> /etc/rc.conf
# sa-update
# /usr/local/etc/rc.d/sa-spamd start
# /usr/local/etc/rc.d/clamav-clamd restart
# /usr/local/etc/rc.d/clamav-freshclam start

Теперь займемся POP3-сервером,  который будет отдавать почту клиентам. В качестве него мы используем давно проверенное и надежное решение на базе Dovecot. Это многофункциональный сервер, который умеет оба эти протокола, как с поддержкой SSL, так и без, плюс умеет работать с MySQL-базой, что, стобственно, нам и нужно. Итак, начнем:

# cd /usr/ports/mail/dovecot
# make config

 ┌────────────────────────────────────────────────────────────────────┐
 │                    Options for dovecot 1.2.8                       │
 │ ┌────────────────────────────────────────────────────────────────┐ │
 │ │              [X] KQUEUE       kqueue(2) support                │ │
 │ │              [X] SSL          SSL support                      │ │
 │ │              [ ] IPV6         IPv6 support                     │ │
 │ │              [X] LDA          LDA support                      │ │
 │ │              [ ] MANAGESIEVE  ManageSieve support              │ │
 │ │              [ ] GSSAPI       GSSAPI support                   │ │
 │ │              [ ] VPOPMAIL     VPopMail support                 │ │
 │ │              [ ] BDB          BerkleyDB support                │ │
 │ │              [ ] LDAP         OpenLDAP support                 │ │
 │ │              [ ] PGSQL        PostgreSQL support               │ │
 │ │              [X] MYSQL        MySQL support                    │ │
 │ │              [ ] SQLITE       SQLite support                   │ │
 │ │                                                                │ │
 │ │                                                                │ │
 │ │                                                                │ │
 ├─└────────────────────────────────────────────────────────────────┘─┤
 │                       [  OK  ]       Cancel                        │
 └────────────────────────────────────────────────────────────────────┘

# make install clean

Пока довкот собирается, напишем ему конфигурационные файлы и положим в /usr/local/etc. Большинство значений по умолчанию достаточно разумны, потому тут пишем только то, что нам надо заменить.

dovecot.conf:

# Каталог для хранения рабочих данных
base_dir = /var/run/dovecot/

# Протоколы, которые будем поддерживать
protocols = imap pop3 imaps pop3s

# Адреса, которые будем слушать, мы слушаем все
listen = *

# Отключать ли авторизацию без SSL
disable_plaintext_auth = no

# Сбрасывать ли клиентские подключения при остановке главного процесса.
# Теоретически с этой опцией можно апгрейдить довкот на ходу
shutdown_clients = no

# Лог-файл для ошибок
log_path = /var/log/dovecot.log

# Лог-файл для остального
info_log_path = /var/log/dovecot-info.log

# На каких адресах ждать соединений с SSL, нам надо на всех
ssl_listen = *

# Включаем SSL
ssl = yes

# Файлы ключа и сертификата SSL
ssl_cert_file = /etc/ssl/certs/mail.pem
ssl_key_file = /etc/ssl/certs/mail.pem

# Каталог, где довкот держит сокеты для логин-процессов
login_dir = /var/run/dovecot/login

# Делать ли chroot для логин-процессов
login_chroot = yes

# Пользователь, под которым запускать логин-процессы. НЕ должен совпадать с тем, под которым работает почтовый сервер
login_user = dovecot

# Надо ли для каждой попытки логина запускать новый процесс
#login_process_per_connection = no

# Приветственное сообщение для клиентов, не будем палиться :-))
login_greeting = Microsoft POP3 server

# Место и формат хранения пользовательской почты. У нас - Maildir
mail_location = maildir:/var/mail/%d/%n

# Пользователь и группа, под которыми работаем с почтой
mail_uid = exim
mail_gid = mail

# "Привелигированная группа" для доступа к письмам. У нас и так основная - mail, но пусть будет
mail_privileged_group = mail

# Если что - тут включается дебаг
mail_debug = no

# Показывать в top и ps более подробные данные о процессах
verbose_proctitle = yes

# Ограничиваем UID/GID, которым с нами можно вообще работать
first_valid_uid = 500
last_valid_uid = 0
first_valid_gid = 0
last_valid_gid = 0

# Каталоги, куда можно делать chroot
valid_chroot_dirs = /var/mail

protocol imap {

 # Исправление известных глюков с почтовыми клиентами
 imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}

protocol pop3 {
 # Поддерживать ли команду LAST из ранних спецификаций POP3
 #pop3_enable_last = no

 # Лочить ли ящик на время сессии
 #pop3_lock_session = no

 # Формат POP3 UIDL идентификатора
 pop3_uidl_format = %08Xu%08Xv

 # Формат POP3 logout сообщения:
 #pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s

 # Исправление известных глюков с почтовыми клиентами
 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

# Допустимые символы в логине
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

# Логгирование безуспешных попыток входа с причинами
auth_verbose = no

# Дебаг авторизации
#auth_debug = no

# Если пароль не подходит, записать его в лог
auth_debug_passwords = no

auth default {

 # Список желаемых механизмов авторизации. Допускаются:
 # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey gss-spnego
 mechanisms = plain login cram-md5

 # База откуда брать пароли
 passdb sql {
 # Путь к файлу конфигурации SQL
 args = /usr/local/etc/dovecot-sql.conf
 }

 # База откуда брать пользовательские данные (путь, uid/gid и т.д.)
 userdb sql {
 # Путь к файлу конфигурации SQL
 args = /usr/local/etc/dovecot-sql.conf
 }

 # Пользователь, под которым проводить авторизацию. По возможности - не root
 user = exim

}

dovecot-sql.conf:

# Тип SQL-сервера
driver = mysql

# Параметры соединения с SQL
connect = host=localhost user=vexim password=9gp784whp9w28wy5 dbname=vexim

# Схема хранения паролей
default_pass_scheme = PLAIN-MD5

# Запросы для извлечения данных из БД
password_query = SELECT users.crypt as `password` FROM users,domains WHERE users.username = '%u' AND users.enabled = '1' AND users.type='local' and domains.enabled='1' and domains.domain_id = users.domain_id
user_query = SELECT pop as home, uid, gid FROM users WHERE username = '%u'

Вот и все, конфигурация достаточно простая (хотя в дефолтном файле dovecot.conf есть еще большоt количество опций). Теперь запускаем всю конструкцию и тестируем:

# echo dovecot_enable=\"YES\" >> /etc/rc.conf
# /usr/local/etc/rc.d/dovecot restart
# telnet localhost 110
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Microsoft POP3 server
^C

Все хорошо, довкот нас приветствует правильно. Дальше уже тестировать будем вживую, почтовыми клиентами, хотя проблем быть не должно.

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

Почтовый сервер как у провайдера, часть 1: Exim

Почтовый сервер как у провайдера, часть 2: ClamAV, SpamAssassin, Dovecot

Почтовый сервер как у провайдера, часть 3: Vexim

Почтовый сервер как у провайдера, часть 4: взлетаем

Рейтинг 3.80/5

Спасибо за голос!

6 thoughts on “Почтовый сервер как у провайдера, часть 2: ClamAV, SpamAssassin, Dovecot

  1. Ошибочка в конфиге
    /etc/clamd.conf

    # Дополнительные группы AllowSupplementaryGroups yes
    опция и комментарий в одной строке

  2. Последнее время заметил что DatabaseMirror db.ua.clamav.net частенько валяется …

    Tue Oct 28 08:04:30 2014 -> main.cld is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)
    Tue Oct 28 08:04:30 2014 -> WARNING: getpatch: Can’t download daily-19548.cdiff from db.ua.clamav.net
    Tue Oct 28 08:04:30 2014 -> WARNING: getpatch: Can’t download daily-19548.cdiff from db.ua.clamav.net
    Tue Oct 28 08:04:30 2014 -> WARNING: getpatch: Can’t download daily-19548.cdiff from db.ua.clamav.net
    Tue Oct 28 08:04:30 2014 -> WARNING: getpatch: Can’t download daily-19548.cdiff from db.ua.clamav.net
    Tue Oct 28 08:04:30 2014 -> ERROR: getpatch: Can’t download daily-19548.cdiff from db.ua.clamav.net
    Tue Oct 28 08:04:30 2014 -> WARNING: Incremental update failed, trying to download daily.cvd
    Tue Oct 28 08:04:30 2014 -> ERROR: Can’t download daily.cvd from db.ua.clamav.net

    Пробую заюзать PL зеркало … може там лучше?

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

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