Модуль предназначен для упрощения процесса создания и управления почтовыми ящиками пользователей из интерфейса биллинга.
Возможности
Авторизация на отправку почты (Plain Password, TLS)
Авторизация на приём почты (Plain Password, TLS)
Квоты на размер почтового ящика и количество писем
Управление неограниченным количеством доменов
Фильтры, аксеслисты, алиасы
Антиспам
Антивирус
Заведение нескольких почтовых ящиков на один пользовательский акаунт
Возможность изменять пароль на почтовый ящик пользователем
Установка
abills/libexec/config.pl
@MODULES = ( 'Mail' );
При использовании SpamAssasin
mysql -D abills < db/Mail.sql
$conf{MAIL_CHG_PASSWD}=1; | Разрешить пользователям изменять пароли для своих почтовых ящиков |
---|---|
$conf{MAIL_USER_FULL_CONTROL}=1; | Разрешить пользователям удалять и добавлять себе почтовые ящики с возможностью снятия платы за услугу |
$conf{MAIL_USER_DOMAIN_MNG}=1; | Разрешить пользователю управлять своим доменом |
$conf{MAIL_SPAMD}='spamassasin'; | Включить поддержку SpamAssasin |
Настройка
Меню Настройка>E-MAIL
Domains
Список виртуальных доменов системы.
Domain | Название домена |
---|---|
Transport | Транспорт для данного домена. Возможные варианты: virtual: maildrop: Почтовый агент maildrop local: relay: |
Backup MX | Сервер является промежуточный MX для данного домена |
Disable | Блокировать |
Comments | Коментарии |
Access
Контроль доступа к почтовой службе.
Меню Клиенты>Логины>E-MAIL List - Список почтовых ящиков системы.
Меню Customers>Logins>Information>Services>E-MAIL - Управление почтовым ящиком пользователя.
Postfix
Используемые константы:
%user% - имя пользователя в MySQL
%password% - пароль в MySQL
%dbname% - база MySQL
%hosts% - хост MySQL
cyrus-sasl2
SASL - (Simple Authentication and Security Layer) служит для авторизации входящих соединений от пользователей.
Сборка
cd /usr/ports/security/cyrus-sasl2 make USE_MYSQL_VERSION=5 WITHOUT_OTP=yes WITHOUT_NTML=yes && make install
Конфигурация
Создаем файл /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd auxprop mech_list: login plain auxprop_plugin: sql sql_engine: mysql mysql_user: %dbuser% mysql_passwd: %dbpasswd% mysql_database: %dbname% mysql_hostnames: %dbhost% mysql_statement: SELECT DECODE(mb.password, 'test12345678901234567890') FROM mail_boxes mb, mail_domains md WHERE CONCAT(mb.username, '@', md.domain)='%u@%r' and mb.domain_id=md.id and mb.status = '0' and (mb.expire = '0000-00-00' or mb.expire > curdate())
Далее
chmod 750 /usr/local/lib/sasl2 chgrp mail /usr/local/lib/sasl2
Автостарт saslauthd при запуске системы FreeBSD
echo saslauthd_enable=\"YES\" >> /etc/rc.conf
проверить механизм авторизации
saslauthd -v
Postfix
Postfix При установке postfix в меню выбираем поддержку SASL2, VDA, TLS и MYSQL.
cd /usr/ports/mail/postfix && make install clean
Проверяем собран ли Postfix c поддержкой Cyrus-SASL
postconf -a
Если включён должна присутствовать строка:
cyrus
Проверяем собран ли Postfix c поддержкой Mysql
postconf -m
Если включён должна присутствовать строка:
mysql
После установки
newaliases
main.cf должен содержать:
Для TLS авторизации создаём сертификат x509 добавляем в конфиг main.cf:
# tls config smtp_use_tls = yes smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /usr/abills/Certs/smtpd.key smtpd_tls_cert_file = /usr/abills/Certs/smtpd.cert smtpd_tls_CAfile = /usr/abills/Certs/smtpd.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom
Создание сертификата
/usr/abills/misc/certs_create.sh postfix_tls
Обратите внимание! Что virtual uid и gid имеют статическую привязку и эти значения следует изменить на uid и gid юзера, от которого будет работать maildrop. В моем случае, это юзер vmail с uid 1005 и gid 1005. Транспорт virtual не поддерживает квоты, в отличии от maildrop, поэтому, если вы хотите включить поддержку квот для virtual, установите патч VDA
Создайте пользователя vmail с UID 1005 и GID 1005
Каталог для виртуальных хостов
# mkdir /var/spool/virtual # chown -R vmail:vmail /var/spool/virtual # chmod -R 771 /var/spool/virtual
user = %dbuser% password = %dbpasswd% dbname = %dbname% hosts = %dbhost% query = SELECT transport FROM mail_domains WHERE domain='%d'
user = %dbuser% password = %dbpasswd% dbname = %dbname% hosts = %dbhost% query = SELECT action FROM mail_access WHERE pattern='%s'
user = %dbuser% password = %dbpasswd% dbname = %dbname% hosts = %dbhost% query = SELECT goto FROM mail_aliases WHERE address='%s'
user = %dbuser% password = %dbpasswd% hosts = %dbhost% dbname = %dbname% query = SELECT domain FROM mail_domains WHERE domain='%s' AND backup_mx='0' AND status='0'
user = %dbuser% password = %dbpasswd% dbname = %dbname% hosts = %dbhost% query = SELECT CONCAT(md.domain,'/',mb.username,'/') FROM mail_boxes mb, mail_domains md WHERE CONCAT(mb.username, '@', md.domain)='%s' and mb.domain_id=md.id and mb.status = '0' and (mb.expire = '0000-00-00' or mb.expire > curdate())
user = %dbuser% password = %dbpasswd% hosts = %dbhost% dbname = %dbname% query = SELECT box_size * 1048576 FROM mail_boxes mb, mail_domains md WHERE CONCAT(mb.username, '@', md.domain)='%s' and mb.domain_id=md.id and mb.status = '0'
# Не запускать sendmail sendmail_enable="NONE" mta_start_script="" sendmail_outbound_enable="NO" sendmail_submit_enable="NO" sendmail_msp_queue_enable="NO" # Запуск postfix postfix_enable="YES"
maildrop
http://www.courier-mta.org/maildrop
maildrop является альтернативой широко используемому procmail и имеет гораздо большие возможности - поддержка mysql и ldap, поддержка квот, более мощный язык фильтрации, повышенная безопасность, поддержка формата Maildir++. Более подробная документации в директории /usr/local/share/doc/maildrop
cd /usr/ports/mail/maildrop make WITH_AUTHLIB=yes MAILDROP_TRUSTED_USERS=vmail MAILDROP_SUID=1005 MAILDROP_SGID=1005 make install
После сборки запустите maildrop -v. Должны быть следующие строки
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
В /usr/local/etc/postfix/master.cf измените конфиг maildrop на
maildrop unix - n n - - pipe flags=Rhu user=vmail argv=/usr/local/bin/maildrop -w 90 -d ${recipient}
Создаем файл /var/spool/virtual/.mailfilter со следующим содержанием
Ставим права на запись и чтение только пользователю иначе maildrop откажется работать.
chmod 600 /var/spool/virtual/.mailfilter chown vmail:vmail /var/spool/virtual/.mailfilter
Создаем директорию /var/spool/virtual/mailfilters
mkdir -m 700 /var/spool/virtual/.mailfilters chown vmail:vmail /var/spool/virtual/.mailfilters
Для включения пользовательского фильтра, который будет раскладывать почту по дополнительным ящикам, создаем include файл в формате user@domain соответствующему переменной $LOGNAME /var/spool/virtual/.mailfilters/user@test.local.net со следующим содержанием
user=`echo $LOGNAME|sed s/\@/\ /| awk '{print $1}'` domain=`echo $LOGNAME|sed s/\@/\ /| awk '{print $2}'` MAILDIR="$HOME/$domain/$user/" if ( /^X-Spam-Status: Yes/:h ) { to "$MAILDIR/.Spam" # или отправляем в /dev/null # to "| cat - >/dev/null" } to $MAILDIR
Файл /var/spool/virtual/.mailfilters/user@test.local.net - предоставляет возможность maildrop выбрать нужный конфиг для пользователя, используя его логин, который берется из переменной $LOGNAME (user@domain). В директории .mailfilters хранятся конфиги для каждого виртуального юзера. Maildrop будет искать конфиг в формате user@domain и использовать его.
Можно написать скрипт, который при создании maildir, автоматически создает нужный конфиг с дефолтными опциями в .mailfilters.
В данном примере maildrop отбирает почту с заголовком X-Spam-Status: Yes, который генерирует spamassassin, установка которого будет рассмотрена ниже, и кладет ее в папку Spam. Остальная почта направляется в INBOX. Примеры фильтров для maildrop можно найти на mdropspammailfilter
Создаем файл /usr/local/etc/quotawarnmsg.
courier-authlib
Демон авторизации для dropmail, courier-imap, courier-pop3d
cd /usr/ports/security/courier-authlib && make && make install
Для доступа к спулу почты /var/spool/virtual courier работает от юзера vmail (uid 1005,gid 1005)
Правим конфигурационный файл для courier-authlib /usr/local/etc/authlib/authmysqlrc
MYSQL_CLEAR_PWFIELD DECODE(mb.password, '%secretkey%') MYSQL_DATABASE %dbname% MYSQL_PASSWORD %dbpasswd% MYSQL_USERNAME %dbuser% MYSQL_SERVER %dbhost% MYSQL_GID_FIELD '1005' MYSQL_HOME_FIELD CONCAT('/var/spool/virtual/') MYSQL_LOGIN_FIELD CONCAT(mb.username, '@', md.domain) MYSQL_MAILDIR_FIELD CONCAT('/var/spool/virtual/', md.domain,'/',mb.username,'/') MYSQL_NAME_FIELD CONCAT(mb.username, '@', md.domain) MYSQL_OPT 0 MYSQL_PORT 3306 MYSQL_QUOTA_FIELD CONCAT(mb.box_size * 1048576,'S') MYSQL_UID_FIELD '1005' MYSQL_USER_TABLE mail_boxes mb, mail_domains md MYSQL_WHERE_CLAUSE mb.status='0' AND mb.domain_id=md.id
Убедитесь что использована табуляция, а не пробелы, иначе конфиг не будет работать.
Делаем возможность доступа пользователя vmail к сокету авторизации
chown vmail /var/run/authdaemond/
Автозагрузка при старте системы /etc/rc.conf
courier_authdaemond_enable="YES"
Установка Courier-imap
Courier-imap
Courier Authentication Library
cd /usr/ports/mail/courier-imap && make WITH_CRAM=yes WITH_MYSQL=yes install clean chmod 700 /usr/local/etc/courier-imap/ chown vmail:vmail /var/run/authdaemond/
Создаем SSL сертификат (для работы в защищённом режиме)
cd /usr/local/etc/courier-imap/ cp /usr/local/etc/courier-imap/imapd.cnf.dist /usr/local/etc/courier-imap/imapd.cnf mkimapdcert cp /usr/local/etc/courier-imap/pop3d.cnf.dist /usr/local/etc/courier-imap/pop3d.cnf mkpop3dcert cp /usr/local/etc/courier-imap/imapd.dist /usr/local/etc/courier-imap/imapd cp /usr/local/etc/courier-imap/pop3d-ssl.dist /usr/local/etc/courier-imap/pop3d-ssl
В /usr/local/etc/courier-imap/imapd меняем
TCPDOPTS="-nodnslookup -noidentlookup"
на
TCPDOPTS="-nodnslookup -noidentlookup -user=vmail"
Для автозагрузки при старте систему прописываем в /etc/rc.conf
Для IMAP сервера:
courier_imap_imapd_enable="YES"
Для POP3 сервера
courier_imap_pop3d_enable="YES"
Данная установка рассчитана на мультидоменные почтовые системы, по этому в качестве логина для авторизации при получении почты нужно использовать связку логин@домен.
/etc/rc.conf
courier_imap_pop3d_ssl_enable="YES" courier_imap_imapd_ssl_enable="YES"