Postfix Dovecot LDAP

postfix-dovecotВ корпоративной среде электронная почта является одним из основных инструментов обмена информацией. Не всегда оптимальным является внедрение таких гигантов как Microsoft Exchange Server. Альтернативой может служить связка Postfix Dovecot с поддержкой протокола LDAP. Данный протокол обеспечивает просмотр содержимого службы каталогов Active Directory (AD), что позволяет использовать AD в качестве почтовой базы пользователей. Рассмотрим как это выглядит на практике. В качестве контроллеров домена выступают два сервера:

  • dc1 (IP 192.168.1.21/24);
  • dc2 (IP 192.168.1.22/24).

Оба сервера работают под управлением MS Windiows Server 2012 R2. Корпоративный домен называется 4skill.loc. Почтовый домен 4skill.ru.

Почтовый сервер будет называться mail. В локальном DNS для него были добавлены записи типа A и MX. IP адрес почтового сервера будет 192.168.1.34.

mail_a_mx

Чтобы почтовый сервер мог обмениваться сообщениями с другими почтовыми серверами в сети интернет, на DNS сервере своего провайдера нужно добавить записи типа A и MX.

Откроем консоль своего DNS провайдера и добавить запись типа A для почтового сервера.

mail.4skill.ru A 79.165.121.230

 
mail_add_a_record

Создадим MX запись, ссылающуюся на почтовый сервер.

@ MX 10 mail.4skill.ru

 
mail_mx_record

Перед тем как принять почту, многие почтовые системы проверяют наличие PTR записи для почтового сервера. Обычно PTR запись создается на DNS сервере обслуживающего интернет провайдера через запрос в службу технической поддержки.

Из внешней сети почтовый сервер должен быть доступен по белому IP адресу, в данном примере это 79.165.121.230. Также необходимо опубликовать во внешнюю сеть порты 25(SMTP), 143(IMAP), 587(SMTP для клиентских подключений), 110(POP3 по необходимости).

Для хранения доменных пользователей создан контейнер Domain Users. В контейнере созданы объекты:

  • group1 — группа распространения;
  • user1 — пользователь;
  • user2 — пользователь.

ad_mail_objects

В данном примере у пользователя user1 определены атрибуты:

  • mail (Эл. почта) = user1@4skill.ru;
  • postOfficeBox (Почтовый ящик) = 1G.

mail_user1

Как можно догадаться из примера, атрибут mail будет использоваться для хранения адреса эл. почты пользователя, атрибут postOfficeBox для хранения значения квоты почтового ящика пользователя. В конце значения квоты обязательно нужно указать единицу измерения (G — гигабайты, M — мегабайты). Без указания единицы измерения будет считаться, что значение указано в байтах. У пользователя user2 по аналогии с пользователем user1 определены атрибуты mail и postOfficeBox.

Объект группа будет использоваться для создания групп рассылки и псевдонимов (алиасов). В примере group1 используется в качестве группы рассылки. Если отправить письмо на адрес group1@4skill.ru, оно попадет в почтовые ящики членов этой группы, а именно user1 и user2. Если оставить в group1 только одного пользователя, group1 будет выполнять роль псевдонима.

mail_group1

Также необходимо создать служебного пользователя vmail. Сделать это можно в PowerShell, используя следующую команду

PS C:\> New-ADUser -Name vmail -AccountPassword (ConvertTo-SecureString -AsPlainText 'Pa$$w0rd' -Force) -PasswordNeverExpires $true -Enabled $true -Description "Системный пользователь для работы Postfix и Dovecot"

От имени этого пользователя будет осуществляться поиск содержимого в AD по протоколу LDAP.

Теперь можно перейти к настройке Linux сервера. В качестве операционной системы будет традиционно выступать Ubuntu Server 16.04. Об ее установке писалось ранее, в статье установка Ubuntu Server 16.04.  После установки ОС изменим имя сервера на mail

# hostnamectl set-hostname mail

Укажем полное и сокращенное имя в файле hosts

# nano /etc/hosts

127.0.0.1       localhost
127.0.1.1       mail.4skill.loc mail
. . .

Определим название сетевого интерфейса

# lshw -C network | grep name
       logical name: ens32

Настроим конфигурацию сети

# nano /etc/network/interfaces
. . .
# The primary network interface
auto ens32
iface ens32 inet static
        address 192.168.1.34
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 192.168.1.21 192.168.1.22
        dns-search 4skill.loc

В dns-nameservers нужно указать IP адреса доменных DNS серверов. В dns-search нужно указать название домена. Подробнее о настройке сети можно прочитать в статье Ubuntu Server настройка сети.

Перезагрузим систему

# reboot

Обновим индексы пакетов и систему

# apt update
# apt upgrade

Более подробно об обновлении Ubuntu Server можно прочитать в статье Обновление Ubuntu Server.

Для синхронизации времени с контроллерами домена установим пакет NTP

# apt install ntp

В /etc/ntp.conf нужно закоментировать все строки, начинающиеся со слова pool, и добавить информацию о контроллерах домена

# nano /etc/ntp.conf
. . .
# Specify one or more NTP servers.

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
#pool 0.ubuntu.pool.ntp.org iburst
#pool 1.ubuntu.pool.ntp.org iburst
#pool 2.ubuntu.pool.ntp.org iburst
#pool 3.ubuntu.pool.ntp.org iburst

# Use Ubuntu's ntp server as a fallback.
#pool ntp.ubuntu.com

# Domain controllers
pool 4skill.loc
. . .

4skill.loc — нужно заменить на название своего домена.

Перезапустим ntp сервис и проверим статус синхронизации времени

# service ntp restart
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 4skill.loc      .POOL.          16 p    -   64    0    0.000    0.000   0.000
 dc2.4skill.loc  192.168.1.21     3 u   27   64    1    0.286  -74.963   0.000
 dc1.4skill.loc  192.36.143.130   2 u   27   64    1    0.385    7.133   0.000

Отредактируем openssl.cnf. В настройках по умолчанию укажем свою страну, закоментируем строку с названием штата и укажем название своей организации

# nano /etc/ssl/openssl.cnf
. . .
countryName_default             = RU
. . .
#stateOrProvinceName_default    = Some-State
. . .
0.organizationName_default     = FOR SKILL
. . .

Сгенерируем сертификат для обеспечения защищенного соединения

# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/mail-selfsigned.key -out /etc/ssl/certs/mail-selfsigned.crt
Generating a 2048 bit RSA private key
.......................................................................................+++
.................+++
writing new private key to '/etc/ssl/private/mail-selfsigned.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) [FOR SKILL]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:mail.4skill.ru
Email Address []:

В строке Common Name нужно указать полное DNS имя почтового сервера.

Установка Postfix и Dovecot c поддержкой LDAP

# apt install postfix postfix-ldap dovecot-core dovecot-ldap dovecot-imapd dovecot-pop3d

Если на сервере не нужна поддержка протокола POP3, пакет dovecot-pop3d можно не устанавливать.

Настройка Postfix

Тип настройки почтового сервера оставляем без изменений и нажимаем «Ok»

postfix_setup

В поле системное почтовое имя нужно указать название своего почтового домена. В данном случае это 4skill.ru.

postfix_setup_domain

Создадим необходимые карты поиска для Postfix. Карты поиска определяют настройки подключения к почтовой базе (AD) и параметры фильтрации результатов поиска. При создании карт, в поле server_host нужно указать название своего домена. В полях bind_dn и bind_pw расположение и пароль пользователя vmail. Параметр search_base указывает где искать почтовых пользователей. Подробное описание всех параметров можно посмотреть по ссылке Postfix LDAP table.

Карта ad_sender_login_maps.cf в сочетании с ограничением reject_sender_login_mismatch, запрещает отправку почты от имени другого пользователя.

# nano /etc/postfix/ad_sender_login_maps.cf

server_host     = 4skill.loc
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = cn=vmail,cn=users,dc=4skill,dc=loc
bind_pw         = Pa$$w0rd
search_base     = dc=4skill,dc=loc
scope           = sub
query_filter    = (&(mail=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute= mail
debuglevel      = 0

Карта ad_virtual_mailbox_maps.cf используется для поиска почтовых ящиков пользователей.

# nano /etc/postfix/ad_virtual_mailbox_maps.cf

server_host     = 4skill.loc
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = cn=vmail,cn=users,dc=4skill,dc=loc
bind_pw         = Pa$$w0rd
search_base     = dc=4skill,dc=loc
scope           = sub
query_filter    = (&(objectclass=person)(mail=%s))
result_attribute= mail
result_format   = %d/%u/
debuglevel      = 0

Карта ad_virtual_group_maps.cf нужна для поиска групп рассылки и псевдонимов.

# nano /etc/postfix/ad_virtual_group_maps.cf

server_host     = 4skill.loc
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = cn=vmail,cn=users,dc=4skill,dc=loc
bind_pw         = Pa$$w0rd
search_base     = dc=4skill,dc=loc
scope           = sub
query_filter    = (&(objectClass=group)(mail=%s))
special_result_attribute = member
leaf_result_attribute = mail
result_attribute= mail
debuglevel      = 0

Выполним проверку созданных карт

# postmap -q user1@4skill.ru ldap:/etc/postfix/ad_sender_login_maps.cf
user1@4skill.ru

ad_sender_login_maps.cf — возвращает имя, от которого пользователь может отправить сообщение.

# postmap -q user1@4skill.ru ldap:/etc/postfix/ad_virtual_mailbox_maps.cf
4skill.ru/user1/

ad_virtual_mailbox_maps.cf — возвращает  расположение почтового ящика, относительно пути, указанного в параметре virtual_mailbox_base.

# postmap -q group1@4skill.ru ldap:/etc/postfix/ad_virtual_group_maps.cf
user2@4skill.ru,user1@4skill.ru

ad_virtual_group_maps.cf — возвращает состав членов группы.

Сменим группу созданных карт на postfix, выставим права на карты и создадим индексы командой postmap

# chgrp postfix /etc/postfix/ad_*
# chmod 640 /etc/postfix/ad_*
# postmap /etc/postfix/ad_*

Создадим на Linux сервере пользователя vmail. От имени этого пользователя будет осуществляться запись и чтение почтовых ящиков в системе. Домашний каталог /var/vmail будет местом хранения всех почтовых ящиков.

# useradd vmail -c "Virtual Domain User" -m -d /var/vmail -s /usr/sbin/nologin

Узнаем UID и GID пользователя vmail

# grep vmail /etc/passwd
vmail:x:1001:1001:Virtual Domain User:/var/vmail:/usr/sbin/nologin

Эти данные нужно указать в параметрах virtual_uid_maps и virtual_gid_maps.

Создадим файлы для списков ограничений и их индексы. Для header_checks создавать индекс не нужно!

# cd /etc/postfix/
# touch client_access helo_access sender_access header_checks
# postmap *_access

Примеры списков ограничений:

Запретим принимать почту от узла с IP 94.118.109.17 и узла с именем spammer.domain.com

# nano /etc/postfix/client_access

94.118.109.17           REJECT  You do not have permission to connect to this mail server
spammer.domain.com      REJECT  Go away spammer!

После изменения файла client_access обязательно нужно выполнить команду postmap

# postmap /etc/postfix/client_access

Запретим принимать почту от пользователя spammer@domain.com и разрешим принимать почту в обход проверок от friend@domain.com

# nano /etc/postfix/sender_access

spammer@domain.com      REJECT  Go away spammer!
friend@domain.com       OK

После изменения файла sender_access обязательно нужно выполнить команду postmap

# postmap /etc/postfix/sender_access

Файл header_checks должен содержать регулярные выражения. В отличие от вышеперечисленных проверок, он проверяет заголовок письма, а не содержимое SMTP конверта. В примере ниже запрещено принимать почту, если в заголовке письма, в поле From, указан отправитель из домена domain.ru. Вся почта отправленная пользователю user1@4skill.ru, будет перенаправлена в почтовый ящик user2@4skill.ru. Если в теме письма содержится слово spam, письмо будет отброшено без уведомления отправителю.

# nano /etc/postfix/header_checks

/^From:.*@domain.ru/ REJECT
/^To: user1@4skill.ru/ REDIRECT user2@4skill.ru
/^Subject:.*spam/ DISCARD

После изменения файла header_checks выполнять команду postmap не нужно!

Более подробно о заполнении таблиц написано на страницах официального руководства в разделе access.

Заменим основной конфигурационный файл Postfix на приведенный ниже

# nano /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
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

# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/mail-selfsigned.crt
smtpd_tls_key_file = /etc/ssl/private/mail-selfsigned.key
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_CApath = /etc/ssl/certs

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

myhostname = mail.4skill.ru
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
compatibility_level = 2
message_size_limit = 15630000

# Virtual Domain parameters
virtual_mailbox_domains = 4skill.ru
smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ad_sender_login_maps.cf
virtual_mailbox_maps = proxy:ldap:/etc/postfix/ad_virtual_mailbox_maps.cf
virtual_alias_maps = proxy:ldap:/etc/postfix/ad_virtual_group_maps.cf
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
virtual_mailbox_base = /var/vmail

# Virtual Transport
dovecot_destination_recipient_limit = 1
virtual_transport = dovecot

# SASL
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# Restrictions
smtpd_client_restrictions =
 permit_mynetworks
 check_client_access hash:/etc/postfix/client_access
 reject_unknown_client_hostname

mua_client_restrictions =
 check_client_access hash:/etc/postfix/client_access

smtpd_helo_required = yes

smtpd_helo_restrictions =
 permit_mynetworks
 check_helo_access hash:/etc/postfix/helo_access
 reject_invalid_helo_hostname
 reject_non_fqdn_helo_hostname
 reject_unknown_helo_hostname

mua_helo_restrictions =
 check_helo_access hash:/etc/postfix/helo_access
 reject_invalid_helo_hostname

smtpd_sender_restrictions =
 permit_mynetworks
 check_sender_access hash:/etc/postfix/sender_access
 reject_non_fqdn_sender
 reject_unknown_sender_domain
 reject_sender_login_mismatch
 reject_unlisted_sender

mua_sender_restrictions =
 check_sender_access hash:/etc/postfix/sender_access
 reject_sender_login_mismatch

smtpd_relay_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 defer_unauth_destination

smtpd_recipient_restrictions =
 reject_non_fqdn_recipient
 reject_unknown_recipient_domain
 check_policy_service inet:127.0.0.1:12340

smtpd_data_restrictions =
 reject_unauth_pipelining
 reject_multi_recipient_bounce

smtpd_etrn_restrictions =
 permit_mynetworks
 reject

disable_vrfy_command = yes
smtpd_discard_ehlo_keywords = vrfy etrn

header_checks = regexp:/etc/postfix/header_checks

В параметрах myhostname и virtual_mailbox_domains, имя почтового сервера и почтовый домен нужно заменить на свои соответственно. Описание всех параметров Postfix доступно на странице Postfix Configuration Parameters.

Поскольку локальной доставкой почты будет заниматься Dovecot, в конце файла master.cf нужно добавить следующие строки

# nano /etc/postfix/master.cf
. . .
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

Для клиентских подключений будет использоваться порт 587(submission). Для включения данного порта раскоментируем следующие строки в файле master.cf

# nano /etc/postfix/master.cf
. . .
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=$mua_client_restrictions
  -o smtpd_helo_restrictions=$mua_helo_restrictions
  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
. . .

Перезапустим Postfix

# postfix reload

 
Настройка Dovecot

Поменяем строку приветствия

# nano /etc/dovecot/dovecot.conf
. . . 
login_greeting = mail.4skill.ru ready.
. . .

mail.4skill.ru — нужно поменять на имя своего почтового сервера.

Создадим LDAP карту для Dovecot. Для этого заменим файл dovecot-ldap.conf.ext на следующий

# nano /etc/dovecot/dovecot-ldap.conf.ext

hosts           = 4skill.loc
ldap_version    = 3
auth_bind       = yes
dn              = cn=vmail,cn=users,dc=4skill,dc=loc
dnpass          = Pa$$w0rd
base            = ou=domain users,dc=4skill,dc=loc
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      = userPassword=password
default_pass_scheme = CRYPT
user_attrs      = =home=/var/vmail/%Ld/%Ln/,=mail=maildir:/var/vmail/%Ld/%Ln/,=quota_rule=*:bytes=%{ldap:postOfficeBox}

Тут есть одна тонкость. В LDAP картах Postfix, в поле поиска учетных записей был указан путь, состоящий из названия домена

search_base = dc=4skill,dc=loc

В Dovecot нужно обязательно указать путь до контейнера

base = ou=domain users,dc=4skill,dc=loc

В данном случае поиск почтовых пользователей происходит в контейнере Domain Users.

Выставим права доступа на файл dovecot-ldap.conf.ext

# chown root:dovecot /etc/dovecot/dovecot-ldap.conf.ext
# chmod 640 /etc/dovecot/dovecot-ldap.conf.ext

Добавим поддержку механизма аутентификации login. Выключим возможность аутентификации системных пользователей и включим поддержку LDAP карт

# nano /etc/dovecot/conf.d/10-auth.conf
. . .
auth_mechanisms = plain login
. . .
#!include auth-system.conf.ext
. . .
!include auth-ldap.conf.ext
. . .

Определим место расположения почтовых ящиков, укажем пользователя и группу, от имени которых записывается почта и включим поддержку квот

# nano /etc/dovecot/conf.d/10-mail.conf
. . .
mail_location =  maildir:/var/vmail/%Ld/%Ln/
. . .
mail_uid = vmail
mail_gid = vmail
. . .
mail_plugins = quota
. . .

Определим пользователя и группу, от имени которых записывается почта. Укажем пользователя и группу, от имени которых Postfix производит SMTP аутентификацию

# nano /etc/dovecot/conf.d/10-master.conf
. . .
  unix_listener auth-userdb {
    mode = 0666
    user = vmail
    group = vmail
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
. . .

Включим поддержку SSL\TLS и укажем путь к сертификату и закрытому ключу

# nano /etc/dovecot/conf.d/10-ssl.conf
. . .
ssl = required
. . .
ssl_cert = </etc/ssl/certs/mail-selfsigned.crt
ssl_key = </etc/ssl/private/mail-selfsigned.key
. . .

Укажем postmaster адрес

# nano /etc/dovecot/conf.d/15-lda.conf
. . .
postmaster_address = postmaster@4skill.ru
. . .

4skill.ru — нужно поменять на название своего почтового домена.

Включим возможность автоматического создания и подписки почтовых ящиков IMAP

# nano /etc/dovecot/conf.d/15-mailboxes.conf
. . .
namespace inbox {
  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }

  # For \Sent mailboxes there are two widely used names. We'll mark both of
  # them as \Sent. User typically deletes one of them if duplicates are created.
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
. . .

Включим поддержку IMAP квот

# nano /etc/dovecot/conf.d/20-imap.conf
. . .
mail_plugins = $mail_plugins imap_quota
. . .

Заменим конфигурационный файл квот на следующий

# nano /etc/dovecot/conf.d/90-quota.conf

plugin {
  quota = maildir:User quota
  quota_rule2 = Trash:storage=+100M
  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
  quota_grace = 10%%
  # 10% is the default
  quota_status_success = DUNNO
  quota_status_nouser = DUNNO
  quota_status_overquota = "552 5.2.2 Mailbox is full"  
}

service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  unix_listener quota-warning {
    user = vmail
  }
}

service quota-status {
    executable = quota-status -p postfix
    inet_listener {
        port = 12340
        # You can choose any port you want
    }
    client_limit = 1
}

Создадим скрипт, отправляющий уведомления о превышении квоты

# nano /usr/local/bin/quota-warning.sh

#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: postmaster@4skill.ru
Subject: quota warning

Your mailbox is now $PERCENT% full.
EOF

4skill.ru — нужно поменять на название своего почтового домена.

Сделаем скрипт исполняемым

# chmod +x /usr/local/bin/quota-warning.sh

Перезапустим Dovecot

# service dovecot restart

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

Thunderbird (предпочтительный)

thander_setup

Outlook

outlook_mail_setup

О методах борьбы со спамом можно прочитать в статьях:

Postfix Dovecot LDAP: 20 комментариев

  1. Андрей

    Авторизовался, теперь не отправляет письма. Ошибка входа на сервер . в maillog

    Feb 19 12:02:16 srv15 postfix/submission/smtpd[65834]: connect from unknown[192.168.0.6]
    Feb 19 12:02:18 srv15 postfix/submission/smtpd[65834]: warning: unknown[192.168.0.6]: SASL PLAIN authentication failed:
    Feb 19 12:02:24 srv15 postfix/submission/smtpd[65834]: warning: unknown[192.168.0.6]: SASL LOGIN authentication failed: UGFzc3dvcmQ6

    1. Андрей Автор записи

      Если почтовый клиент подгружает письма, но не может их отправить, нужно поставить галочку «SMTP-серверу требуется проверка подлинности», на вкладке «Сервер исходящей почты» на примере MS Outlook(видно на скриншоте настроек почтовых клиентов).

  2. Андрей

    И еще при остановке и запуске postfix выдает :

    postfix/postfix-script: warning: group or other writable: /usr/lib/postfix/./libpostfix-util.so.1
    postfix/postfix-script: warning: group or other writable: /usr/lib/postfix/./sbin/lmtp
    postfix/postfix-script: warning: group or other writable: /usr/lib/postfix/./libpostfix-master.so.1
    postfix/postfix-script: warning: group or other writable: /usr/lib/postfix/./libpostfix-global.so.1
    postfix/postfix-script: warning: group or other writable: /usr/lib/postfix/./libpostfix-dns.so.1
    postfix/postfix-script: warning: group or other writable: /usr/lib/postfix/./libpostfix-tls.so.1
    postfix/postfix-script: warning: group or other writable: /usr/lib/postfix/sbin/./lmtp
    Потом стартует

  3. Андрей

    Постоянно возвращает ошибку что адрес отправителя отклонен: не принадлежит пользователю. В чем может быть проблема ?

    1. Андрей Автор записи

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

      # postmap -q user1@4skill.ru ldap:/etc/postfix/ad_sender_login_maps.cf
      user1@4skill.ru

      За такое поведение отвечает ограничение reject_sender_login_mismatch, на время тестирования его можно закоментировать в разделе mua_sender_restrictions, файла /etc/postfix/main.cf.

  4. Андрей

    Теперь пишет что User unknown in virtual mailbox table, командой postmap проверил все карты поиска, возвращает все что нужно

  5. Андрей

    Отправил письмо на группу, к которой принадлежит пользователь, все приходит, а вот самого пользователя не видит

  6. Андрей Автор записи

    Если команда postmap «возвращает все что нужно» то ошибка «User unknown in virtual mailbox table» маловероятна. Стоит еще раз проверить, правильно ли указан ящик пользователя в поле mail, в оснастке «Пользователи и компьютеры» и определена ли там квота. В итоге не совсем понятно, работает ли вообще отправка и прием, проблему имеет конкретный пользователь, или она глобальная? Лучше приложить часть лога…

  7. Андрей

    Проблема глобальная, группам отправляет отдельным пользователям нет. Команда postmap -q itka@corp.lisma.su ldap:/etc/postfix/ad_sender_login_maps.cf возвращает почтовый адрес из поля mail: andrey.kislyakov@lisma.su. Или должен возвращать имя пользователя ?
    Может не правильны фильтр в ad_sender_login_maps.cf ?
    ****
    #ad_sender_login_maps.cf
    server_host = CORP.LISMA.SU
    server_port = 389
    version = 3
    bind = yes
    start_tls = no
    bind_dn = cn=vmail,cn=users,DC=CORP,DC=LISMA,DC=SU
    bind_pw = password
    search_base = DC=CORP,DC=LISMA,DC=SU
    scope = sub
    query_filter = (&(|(mail=%s)(objectclass=person))(userPrincipalName=%s))
    result_attribute= mail
    debuglevel = 0

    Лог

    Feb 19 16:57:22 srv15 postfix/submission/smtpd[3734]: connect from unknown[192.168.0.6]
    Feb 19 16:57:22 srv15 postfix/submission/smtpd[3734]: discarding EHLO keywords: ETRN VRFY
    Feb 19 16:57:22 srv15 postfix/submission/smtpd[3734]: discarding EHLO keywords: ETRN VRFY
    Feb 19 16:57:22 srv15 postfix/submission/smtpd[3734]: NOQUEUE: reject: RCPT from unknown[192.168.0.6]: 550 5.1.1 : Recipient address rejected: User unknown in virtual mailbox table; from=<andrey.kislyakov@lisma.su
    Feb 19 16:57:26 srv15 postfix/submission/smtpd[3734]: disconnect from unknown[192.168.0.6] ehlo=2 starttls=1 auth=1 mail=1 rcpt=0/1 quit=1 commands=6/7

    1. Андрей Автор записи

      На сайте в карте /etc/postfix/ad_sender_login_maps.cf указан фильтр

      query_filter    = (&(mail=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

      у Вас

      query_filter = (&(|(mail=%s)(objectclass=person))(userPrincipalName=%s))

      Для диагностики состава группы, используется карта /etc/postfix/ad_virtual_group_maps.cf. Она возвращает значение поля mail пользователей, являющихся её членами.

      # postmap -q itka@corp.lisma.su ldap:/etc/postfix/ad_virtual_group_maps.cf
      andrey.kislyakov@lisma.su

      Очевидно далее вы получаете ошибку «User unknown in virtual mailbox table», потому что «andrey.kislyakov@lisma.su» не имеет адреса в поле mail в AD, либо он отличается от andrey.kislyakov@lisma.su.
      Выполните команду

      # postmap -q andrey.kislyakov@lisma.su ldap:/etc/postfix/ad_virtual_mailbox_maps.cf
      lisma.su/andrey.kislyakov/

      Команда должна вернуть путь почтового каталога пользователя.

  8. Андрей

    Учетная запись itka@corp.lisma.su, в поле mail у него andrey.kislyakov@lisma.su. Диагностика состава группы : postmap -q grup@lisma.su ldap:/etc/postfix/ad_virtual_group_maps.cf возвращает mail всех членов группы, в том числе andrey.kislyakov@lisma.su.
    postmap -q itka@corp.lisma.su ldap:/etc/postfix/ad_virtual_mailbox_maps.cf возвращает lisma.su/andrey.kislyakov/
    Фильтр query_filter = (&(mail=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) у меня почему то не работает и я его заменил на свой. Но команда postmap во всех трех картах в принципе все возвращает не пойму почему не работает.

  9. Андрей

    Все заработало, разобрался, спасибо большое !!!!!!!!!!!!!!!!!! Если будут еще будут вопросы вопросы уж побеспокою.

  10. Андрей

    Привет! Не работает перенаправление писем через header_checks. В чем моет быть проблема?

    1. Андрей Автор записи

      Добрый день!
      1. В /etc/postfix/main.cf должна быть указана строка

      header_checks = regexp:/etc/postfix/header_checks

      2. Файл /etc/postfix/header_checks должен существовать по указанному пути.
      Нужно понять, по какому критерию будет происходить выборка.

      Пример:

      # cat /etc/postfix/header_checks
      /^To: user1@test.loc/ REDIRECT user2@test.loc

      Синтаксис следующий: /что менять/ REDIRECT «на что менять».
      Чтобы данное правило отработало, письмо должно содержать строку, начинающуюся с «To: user1@test.loc

      Отправим 2 письма через telnet

      220 mail.test.loc ESMTP Postfix (Ubuntu)
      mail from: adm@dom.loc
      250 2.1.0 Ok
      rcpt to: user1@test.loc
      250 2.1.5 Ok
      data
      354 End data with .
      To: user1@test.loc
      .
      250 2.0.0 Ok: queued as 33C3A400FF
      quit
      221 2.0.0 Bye

      В первом случае отправка происходила без указания получателя(To: user1@test.loc) после команды data.
      Во втором, с указанием получателя(To: user1@test.loc).

      Проверим почту

      # cat /var/spool/mail/user1
      From adm@dom.loc  Tue Jun 26 13:43:08 2018
      Return-Path: <adm@dom.loc>
      X-Original-To: user1@test.loc
      Delivered-To: user1@test.loc
      Received: from unknown (unknown [192.168.1.10])
              by mail.test.loc (Postfix) with SMTP id 2DC37400FF
              for ; Tue, 26 Jun 2018 13:42:56 +0300 (MSK)
      
      # cat /var/spool/mail/user2
      From adm@dom.loc  Tue Jun 26 13:47:32 2018
      Return-Path: <adm@dom.loc>
      X-Original-To: user1@test.loc
      Delivered-To: user2@test.loc
      Received: from unknown (unknown [192.168.1.10])
              by mail.test.loc (Postfix) with SMTP id 33C3A400FF
              for ; Tue, 26 Jun 2018 13:47:00 +0300 (MSK)
      To: user1@test.loc

      В первом случае, письмо не было перенаправлено, во втором было.

      1. Андрей

        Да дело в том, что раньше работало, запись в main.cf есть. Непонятно почему перестало работать

        1. Андрей Автор записи

          Поля тела сообщения, такие как From, To, Data, Subject и прочие формирует почтовый клиент, как пример Outlook. Возможно проблема в нем. В любом случае я описал выше, как это работает. Вам только остается взять любое тестовое письмо, и убедиться, что в нем есть искомая в регулярном выражении конструкция. Либо задать другое условие выборки в header_checks. Ну и конечно много интересного можно увидеть в /var/log/mail.log.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *