User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

linux_faq:redmail_install_and_ad_config

Установка iRedMail на Ubuntu 14.04-minimal

Ставим то что нужно:

sudo su
apt-get update && apt-get upgrade && apt-get install bzip2 bsdutils

Скачиваем и распаковываем:

wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.2.tar.bz2 --no-check-certificate
tar xjf iRedMail-0.9.2.tar.bz2

переходим в папку и запускаем инсталляцию под root:

cd iRedMail-0.9.2
bash iRedMail.sh

при установке место для ящиков оставляем по-умолчанию, сервер - nginx, backend для аккаунтов - OpenLDAP. Дальше задаем пароли и указываем имена доменов. Из компонент я ставил все, кроме SoGo.

После установки перезагружаемся.

Интеграция с AD

http://www.iredmail.org/docs/active.directory.html

Создаем в AD пользователя с минимальными правами vmail. Проверяем что он может подключиться:

ldapsearch -x -h ad.example.com -D 'vmail' -W -b 'cn=users,dc=example,dc=com'

Тут ad.example.com это имя контроллера домена. На выходе должен быть список пользователей с аттрибутами.

Настройка AD для Postfix

Отключаем покане нужные параметры:

postconf -e virtual_alias_maps=''
postconf -e sender_bcc_maps=''
postconf -e recipient_bcc_maps=''
postconf -e relay_domains=''
postconf -e relay_recipient_maps=''

Добавляем домен в список виртульных доменов.

postconf -e smtpd_sasl_local_domain='example.com'
postconf -e virtual_mailbox_domains='example.com'

Прописываем файл настроек транспорта:

postconf -e transport_maps='hash:/etc/postfix/transport'

Прописываем файлы, в которых будет написано где в AD искать учетные записи разрешенных SMTP-отправителей, пользователей почты и почтовых групп:

postconf -e smtpd_sender_login_maps='proxy:ldap:/etc/postfix/ad_sender_login_maps.cf'
postconf -e virtual_mailbox_maps='proxy:ldap:/etc/postfix/ad_virtual_mailbox_maps.cf'
postconf -e virtual_alias_maps='proxy:ldap:/etc/postfix/ad_virtual_group_maps.cf'

Теперь создаем файлы настроек, прописанные в конфигурацию postfix предыдущими командами.


/etc/postfix/transport:

example.com dovecot


Для работы нужно сконвертировать текстовый файл в файл db, с которыми работает postfix:

cd /etc/postfix/
postmap ./transport

В /etc/postfix/transport прописан транспорт для домена. Определение транспорта dovecot хранится в файле /etc/postfix/master.cf.

Фильтры postfix

Как это работает. Когда postfix получает письмо (входящее или исходящее), он должен проверить, можно ли его доставлять и куда. Командами postconf мы прописали три фильтра, которые определяют разрешенных отправителей, виртуальные почтовые ящики для входящей почты и фильтры для групп.

Первый фильтр - фильтр разрешенных отправителей. Его добавили в файл /etc/postfix/main.cf с помощью команды:

postconf -e smtpd_sender_login_maps='proxy:ldap:/etc/postfix/ad_sender_login_maps.cf'

В этом файле указаны параметры домена и OU из которой брать пользователей, а также параметры фильтрации. На вход данного фильтра подается почтовый адрес отправителя письма. В данном случае через фильтр пройдут только объекты из cn=users,dc=example,dc=com типа objectClass=person, у которых аттрибут mail будет равен значению поданному на вход фильтра %s. Вернет фильтр аттрибут mail (строчка result_attribute=), объекта AD, удовлетворяющего фильтру query_filter =. И если возвращенное значение result_attribute= соотвествует попавшему на вход фильтра %s, то postfix решает, что отправитель хороший.

/etc/postfix/ad_sender_login_maps.cf:

server_host     = dc01.example.com # Domain Controller Name or IP
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = vmail  # Учетка с правами чтения списка пользователей и групп домена с аттрибутами
bind_pw         = vmail_password # этой учеткиПароль 
search_base     = cn=users,dc=example,dc=com # Где искать пользователей в домене
scope           = sub
query_filter    = (&(objectClass=person)(mail=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) 
result_attribute= mail
debuglevel      = 0



/etc/postfix/ad_virtual_mailbox_maps.cf:

server_host     = dc01.example.com # Domain Controller Name or IP
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = vmail # Учетка с правами чтения списка пользователей и групп домена с аттрибутами
bind_pw         = vmail_password # этой учеткиПароль 
search_base     = cn=users,dc=example,dc=com # Где искать пользователей и группы в домене
scope           = sub
query_filter    = (&(objectClass=person)(mail=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) 
result_attribute= mail
result_format   = %d/%s/Maildir/
debuglevel      = 0

Тут в параметре result_format жестко прописывается формат пути к ящикам пользователей. В данном случае это %d - имя домена, %s% - имя ящика, которое подается на вход фильтра (может быть заменено на %u - имя пользователя до @). То есть в результате для пользователя postmaster - example.com/postmaster@example.com/Maildir/.

/etc/postfix/ad_virtual_group_maps.cf:

server_host     = dc01.example.com # Domain Controller Name or IP
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = vmail # Учетка с правами чтения списка пользователей и групп домена с аттрибутами
bind_pw         = vmail_password # этой учетки Пароль 
search_base     = cn=users,dc=example,dc=com # Где искать пользователей и группы в домене
scope           = sub
query_filter    = (&(objectClass=group)(mail=%s))
special_result_attribute = member
leaf_result_attribute = mail  # Без этого параметра в списке адресов группы будет и адрес самой группы
result_attribute= mail # какой аттрибут возвращаем
debuglevel      = 0

В файле /etc/postfix/main.cf удалить строки типа check_policy_service inet:127.0.0.1:. Это указания на обработку писем разными политиками. Бывает полезно, если письма не приходят, а в журнале /var/log/mail.log сообщения типа Recipient address rejected: Greylisting in effect, please come back later;

Настройка AD для dovecot

Файл /etc/dovecot/dovecot-ldap.conf

hosts           = domain_controller_name:389
ldap_version    = 3
auth_bind       = yes
dn              = vmail
dnpass          = vmail_password
base            = cn=users,dc=example,dc=com
scope           = subtree
deref           = never

user_filter     = (&(userPrincipalName=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_filter     = (&(userPrincipalName=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_attrs      = userPassword=password
default_pass_scheme = CRYPT
user_attrs      = =home=/var/vmail/vmail1/%Ld/%Ln/Maildir/,=mail=maildir:/var/vmail/vmail1/%Ld/%Ln/Maildir/

Если у вас есть сертификат SSL для POP3, то путь к нему надо указать в /etc/dovecot/dovecot.conf, а если нет, то нужно отключить обязательное использование SSL. Для этого в /etc/dovecot/dovecot.confзадаем значения для двух параметров: ssl = yes (вместо required) и disable_plaintext_auth = no.

Рестарт dovecot:

service dovecot restart

Если адрес почтового ящика не соотвествует имени

Конфигурация, описаннная выше работает, если имя входа и имя ящика совпадают. Но что если это не так?. Например имя входа user@domain.com, а ящик - user.id@domain.com.

Значит нужно переписать фильтр в /etc/postfix/ad_virtual_mailbox_maps.cf:

server_host     = dc01.example.com # Domain Controller Name or IP
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = vmail # Учетка с правами чтения списка пользователей и групп домена с аттрибутами
bind_pw         = vmail_password # этой учеткиПароль 
search_base     = cn=users,dc=example,dc=com # Где искать пользователей и группы в домене
scope           = sub
query_filter    = (&(objectclass=person)(mail=%s))
result_attribute= mail
result_format   = %d/%u/Maildir/
debuglevel      = 0

А /etc/dovecot/dovecot-ldap.conf должен выглядеть так:

hosts           = dc01.example.com:389
ldap_version    = 3
auth_bind       = yes
dn              = vmail
dnpass          = vmail_password
base            = cn=users,dc=example,dc=com
scope           = subtree
deref           = never

user_filter = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_filter     = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_attrs      = mail=user,userPassword=password
default_pass_scheme = CRYPT
user_attrs      = =home=/var/vmail/vmail1/%Ld/%Ln/Maildir/,=mail=maildir:/var/vmail/vmail1/%Ld/%Ln/Maildir/

Тут в user_filer меняем userPrincipalName=%u на mail=%u, а в pass_attrs добавляем mail=user

Рестарт dovecot:

service dovecot restart

При этом, логиниться в web-интерейс надо по имени ящика.

Интеграция RoundCube в AD

Редактируем файлик /opt/www/roundcubemail/config/config.inc.php: В нижней части файлика приводим раздел Global LDAP address book к такому виду:

// Global LDAP address book.
$config['ldap_public']["global_ldap_abook"] = array(
    'name'          => 'Global LDAP Address Book',
    'hosts'         => array('DC.your.domain.com'),
    'port'          => 389,
    'use_tls'       => false,
    'ldap_version'  => '3',
    'network_timeout' => 10,
    'user_specific' => false,

    // Search mail users under same domain.
    'base_dn'       => 'cn=users,dc=your_domain,dc=name',
    'bind_dn'       => 'vmail',
    'bind_pass'     => 'vmail_AD_password',
    'hidden'        => false,
    'searchonly'    => false,
    'writable'      => false,

    'search_fields' => array('mail', 'cn', 'sAMAccountName', 'displayname', 'sn', 'givenName'),

    // mapping of contact fields to directory attributes
    'fieldmap' => array(
        'name'        => 'cn',
        'surname'     => 'sn',
        'firstname'   => 'givenName',
        'title'       => 'title',
        'email'       => 'mail:*',
        'phone:work'  => 'telephoneNumber',
        'phone:mobile' => 'mobile',
        'street'      => 'street',
        'zipcode'     => 'postalCode',
        'locality'    => 'l',
        'department'  => 'departmentNumber',
        'notes'       => 'description',
        'phone:workfax' => 'facsimileTelephoneNumber',
        'photo'       => 'jpegPhoto',
    ),
    'sort'          => 'cn',
    'scope'         => 'sub',
    'filter'        =>  '(&(objectclass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
    'fuzzy_search'  => true,
    'vlv'           => false,   // Enable Virtual List View to more efficiently fetch paginated data (if server supports it)
    'sizelimit'     => '0',     // Enables you to limit the count of entries fetched. Setting this to 0 means no limit.
    'timelimit'     => '0',     // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit.
    'referrals'     => false,  // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups

    'group_filters' => array(
        'departments' => array(
            'name'    => 'Mailing Lists',
            'scope'   => 'sub',
            'base_dn' => 'cn=users,dc=domain,dc=name',
            'filter'  => '(objectClass=group)',
            'name_attr' => 'cn',
            'email'     => 'mail',
        ),
    ),
);
$config['autocomplete_addressbooks'] = array('sql', 'global_ldap_abook');

Еще надо отредактировать /opt/www/roundcubemail/config/defaults.inc.php. Тут поправить два параметра:

$config['username_domain'] = 'your.domain.name';

$config['mail_domain'] = 'your.domain.name';

Если не поправлять, то в веб-интерфейсе почта юзверя буде выглядеть как username@127.0.0.1

Настройка виртуальных почтовых ящиков

Иногда нужно, чтобы у пользователя было два почтовых ящика. это называется virtual mailbox.

Как делать virtual mailbox средствами postfix описано тут: [http://www.postfix.org/VIRTUAL_README.html#virtual_alias].

Но администрировать это несколько неудобно.

Можно это сделать на базе AD.

Создается группа, в пределах OU, прописанного в конфигурации iRedMail - в этом гайдике это cn=Users,dn=domain,dn=name. Этой группе прописывается e-mail и пользователя, которому нужен этот второй e-mail добавляем в эту группу. Все. Письмо приходит на группу и отправляется всем пользователям в этой группе прописанным.

Включаем спаморезку и проверку антивирусом

sudo apt install amavisd-new spamassassin clamav-daemon
sudo apt install opendkim postfix-policyd-spf-python
sudo apt install pyzor razor
sudo apt install arj cabextract cpio lhasa nomarch pax rar unrar unzip zip
sudo adduser clamav amavis
sudo adduser amavis clamav

По-умолчанию, спаморезка и антивирус выключены. Для начала нужно включить spamassasin - в файлике /etc/default/spamassassin выставить:

 ENABLED=1

И выполнить:

sudo systemctl start spamassassin.service

Потом нужно отредактировать файлик /etc/amavis/conf.d/15-content_filter_mode. Там написано что нужно сделать.

Если у вас некоторый спам фильтруется, а некоторый проскакивает, то, возможно, нужно просто скорректировать пороговый spam level. Это можно сделать в файле /etc/amavis/conf.d/20-debian_defaults. Там есть группа параметров $sa_. Нужно уменьшить sa_kill_level_deflt. По умолчанию он 6.31. Я ставлю 4.0.

Чтобы спам удалялся нужно отредактировать файлик /etc/amavis/conf.d/20-debian_defaults. В нем найти параметр $final_spam_destiny и заменить его заначение на: $final_spam_destiny = D_DISCARD;

Отправка почты через SMTP Gmail

Ставим запчасти:

apt-get install mailutils libsasl2-2 ca-certificates libsasl2-modules

В файл /etc/postfix/main.cf нужно добавить:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes

Создать и положить на место самоподписанный сертификат:

openssl req -new > new.ssl.csr
openssl rsa -in privkey.pem -out new.cert.key
openssl x509 -in new.ssl.csr -out new.cert.cert -req -signkey new.cert.key -days 9999
cp ./new.cert.cert /etc/postfix/cacert.pem && cp ./new.cert.key /etc/postfix/cacert.key

Создать файл /etc/postfix/sasl_passwd с паролем для Gmail с таким содержимым:

[smtp.gmail.com]:587    USERNAME@gmail.com:PASSWORD

Изменить права на него:

chmod 400 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

Применяем параметры и проверяем что получилось. Вместо you@example.com указываем почту куда уйдет тестовое сообщение:

sudo /etc/init.d/postfix reload
echo "Test mail from postfix" | mail -s "Test Postfix" you@example.com

/etc/postfix/main.cf

Вот пример файла /etc/postfix/main.cf:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

myhostname = mail.autosys.tk
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
myorigin = mail.autosys.tk
mydestination = $myhostname, localhost, localhost.localdomain

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes


mynetworks = 127.0.0.1, 192.168.77.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
#inet_protocols = all
inet_protocols = ipv4
virtual_alias_domains =
mydomain = mail.autosys.tk
allow_percent_hack = no
swap_bangpath = no
mynetworks_style = host

########################################################
##SMTPD Restricrions
########################################################
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_reject_unlisted_recipient = yes
smtpd_reject_unlisted_sender = yes
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender, reject_unlisted_sender, permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated
delay_warning_time = 0h
maximal_queue_lifetime = 4h
bounce_queue_lifetime = 4h
proxy_read_maps = $canonical_maps $lmtp_generic_maps $local_recipient_maps $mydestination $mynetworks $recipient_bcc_maps $recipient_canonical_maps $relay_domains $relay_recipient_maps $relocated_maps $sender_bcc_maps $sender_canonical_maps $smtp_generic_maps $smtpd_sender_login_maps $transport_maps $virtual_alias_domains $virtual_alias_maps $virtual_mailbox_domains $virtual_mailbox_maps $smtpd_sender_restrictions
smtp_data_init_timeout = 240s
smtp_data_xfer_timeout = 600s
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, check_helo_access pcre:/etc/postfix/helo_access.pcre
queue_run_delay = 300s
minimal_backoff_time = 300s
maximal_backoff_time = 4000s
enable_original_recipient = no
disable_vrfy_command = yes
home_mailbox = Maildir/
allow_min_user = no
message_size_limit = 15728640
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
virtual_mailbox_base = /var/vmail
transport_maps = hash:/etc/postfix/transport
virtual_alias_maps = proxy:ldap:/etc/postfix/ad_virtual_group_maps.cf
virtual_mailbox_domains = autosys.tk

virtual_mailbox_maps = proxy:ldap:/etc/postfix/ad_virtual_mailbox_maps.cf

sender_bcc_maps =
recipient_bcc_maps =
relay_domains =
smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ad_sender_login_maps.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = autosys.tk
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = reject_unknown_recipient_domain, reject_non_fqdn_recipient, reject_unlisted_recipient, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_end_of_data_restrictions =  check_policy_service inet:127.0.0.1:10031
tls_random_source = dev:/dev/urandom
mailbox_command = /usr/lib/dovecot/deliver
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
content_filter = smtp-amavis:[127.0.0.1]:10024
smtp-amavis_destination_recipient_limit = 1
relay_recipient_maps =

#######################################################
# SSL/TLS parameters
#######################################################
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_tls_protocols = !SSLv2 !SSLv3
smtp_tls_protocols = !SSLv2 !SSLv3
lmtp_tls_protocols = !SSLv2 !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2 !SSLv3
smtp_tls_mandatory_protocols = !SSLv2 !SSLv3
lmtp_tls_mandatory_protocols = !SSLv2 !SSLv3
smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
smtpd_tls_dh1024_param_file = /etc/ssl/dhparams.pem
smtp_tls_security_level = may
#smtp_tls_CAfile = $smtpd_tls_CAfile
smtp_tls_loglevel = 0
smtp_tls_note_starttls_offer = yes

smtpd_tls_security_level = may
smtpd_tls_loglevel = 0
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt

smtpd_tls_auth_only = yes

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

Настройка postfix для работы с SSL сертификатом let's encrypt

/etc/dovecot/dovecot.conf

ssl = required
disable_plaintext_auth = yes
ssl_cert = </etc/letsencrypt/live/njoror.squashedfly.eu/fullchain.pem
ssl_key = </etc/letsencrypt/live/njoror.squashedfly.eu/privkey.pem

Тут важно обратить внимание на символы < перед путями к сертификату и ключу.

/etc/postfix/main.cf

smtpd_use_tls = yes
smtp_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_ciphers = high
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_loglevel = 1
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_cert_file=/etc/letsencrypt/live/njoror.squashedfly.eu/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/njoror.squashedfly.eu/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Затем выполняем:

/etc/init.d/postfix reload

Если в файлике конфигурации есть повторяющиеся строки - убираем ненужное.
Для того, чтобы убедиться, что все корректно стратует - перезагружаемся.
После этого можно проверить, что наш сервер корректно предоставляет сертификат при подключении SSL.
Подключения IMAP через SSL проверяем так:

openssl s_client -showcerts -connect mail.example.com:993

Сервер должен ответить сертификатом.
Подключения POP3 через SSL проверяем так:

openssl s_client -showcerts -connect mail.example.com:995

Discussion

Enter your comment. Wiki syntax is allowed:
M Q Y U T
 
linux_faq/redmail_install_and_ad_config.txt · Last modified: 2017/01/25 07:24 by admin