Почтовый сервер как у провайдера, часть 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: взлетаем
6 thoughts on “Почтовый сервер как у провайдера, часть 2: ClamAV, SpamAssassin, Dovecot”
Ошибочка в конфиге
/etc/clamd.conf
# Дополнительные группы AllowSupplementaryGroups yes
опция и комментарий в одной строке
=
=
=
=
Последнее время заметил что 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 зеркало … може там лучше?