Модуль предназначен для упрощения процесса создания и управления почтовыми ящиками пользователей из интерфейса биллинга.
Авторизация на отправку почты (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
Список виртуальных доменов системы.
Domain | Название домена |
---|---|
Transport | Транспорт для данного домена. Возможные варианты: virtual: maildrop: Почтовый агент maildrop local: relay: |
Backup MX | Сервер является промежуточный MX для данного домена |
Disable | Блокировать |
Comments | Коментарии |
Контроль доступа к почтовой службе.
Меню Клиенты>Логины>E-MAIL List - Список почтовых ящиков системы.
Меню Customers>Logins>Information>Services>E-MAIL - Управление почтовым ящиком пользователя.
Используемые константы:
%user% - имя пользователя в MySQL
%password% - пароль в MySQL
%dbname% - база MySQL
%hosts% - хост MySQL
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 в меню выбираем поддержку 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 должен содержать:
debug_peer_level = 2 command_directory = /usr/local/sbin daemon_directory = /usr/local/libexec/postfix #mydestination = $myhostname disable_vrfy_command = yes smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_unknown_hostname, reject_non_fqdn_hostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient, reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain, check_sender_access mysql:/usr/local/etc/postfix/sql/access.cf # reject_rhsbl_sender dsn.rfc-ignorant.org transport_maps = mysql:/usr/local/etc/postfix/sql/transport.cf virtual_alias_maps = mysql:/usr/local/etc/postfix/sql/aliases.cf virtual_gid_maps = static:1005 virtual_mailbox_base = /var/spool/virtual virtual_mailbox_domains = mysql:/usr/local/etc/postfix/sql/virtual_domains.cf virtual_mailbox_maps = mysql:/usr/local/etc/postfix/sql/virtual_mailbox.cf virtual_mailbox_limit = 51200000 virtual_minimum_uid = 1005 virtual_uid_maps = static:1005 # Additional for quota support for virtual transport #virtual_create_maildirsize = yes #virtual_mailbox_extended = yes #virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/sql/virtual_mailbox_limits.cf #virtual_mailbox_limit_override = yes #virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. #virtual_overquota_bounce = yes maildrop_destination_recipient_limit=1 readme_directory = no sample_directory = /usr/local/etc/postfix sendmail_path = /usr/local/sbin/sendmail html_directory = no setgid_group = maildrop manpage_directory = /usr/local/man newaliases_path = /usr/local/bin/newaliases mailq_path = /usr/local/bin/mailq queue_directory = /var/spool/postfix mail_owner = postfix |
Для 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' |