Debian + postfix + dovecot + multidomain + ssl + ipv6 + openvpn + multi-interfaces + spamassassin-learn + bind

Введение

Для крупных почтовых серверов абсолютно непрактично использовать в Postfix системные учетные записи для отправки/доставки почты. Гораздо логичнее в таком случае воспользоваться виртуальными почтовыми ящиками. Для этого необходимо изменить ряд настроек Postfix и подготовить окружение ОС.

Также как и предыдущие, эта статья не предлагает готовое решение, которое заработает сразу после выполнения руководства. Цель статьи — показать принцип использования виртуальных почтовых ящиков, рассмотрев для этого лишь самые необходимые этапы и откинув лишний мусор, не относящийся к тематике.

Установка Postfix на Debian

Процесс установки очень простой, во время него вам всего лишь придется ответить на пару вопросов.

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

Второй раз диалоговое окно запросит fqdn-имя. Забегая вперед скажу, что тут лучше всего будет указать имя, на которое ссылается MX-запись вашего домена (пример: для записи mail.bissquit.com лучше всего указать имя сервера — mail). План минимум — не указывать вообще ничего, оставить предложенное имя по умолчанию (оно будет совпадать с именем системы). Для особенно бдительных и недоверчивых читателей: нет, серьезно, вы можете оставить все как есть, ведь в основном конфигурационном файле Postfix мы все равно будем вписывать необходимое нам имя, то есть шаг с указанием имени при установке Postfix для нас в принципе лишний.

Дожидаемся окончания выполнения всех задач по установке и плавно переходим к небольшой начальной настройке нашего MTA.

Настройка Postfix на работу с MySQL

Для каждой таблицы в MySQL нам следует создать файл соответствия для Postfix.

Создадим файл для работы с почтовыми доменами Postfix:

В созданный файл /etc/postfix/mysql-virtual_domains.cf нужно добавить следующие строки, замените пароль «mail_admin_password» на пароль пользователя «mail_admin»:

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

В созданный файл /etc/postfix/mysql-virtual_forwardings.cf нужно добавить следующие строки, замените пароль «mail_admin_password» на пароль пользователя «mail_admin»:

Далее создадим файл для работы с почтовыми аккаунтами:

В созданный файл /etc/postfix/mysql-virtual_mailboxes.cf нужно добавить следующие строки, замените пароль «mail_admin_password» на пароль пользователя «mail_admin»:

И наконец создаём вспомогательный файл для виртуального отображения почты:

Установим нужные права и владельца на только что созданные файлы:

Добавим почтовую группу и пользователя для передачи почты. Все сообщения виртуальных почтовых ящиков будут храниться в папке /home/vmail на сервере:

На редактирование файл /etc/postfix/main.cf и убедимся в наличии следующих строк, адрес сервера следует заменить на выбранный ранее:

На этом мы закончим конфигурировать Postfix и перейдём к настройке SSL и генерации сертификата.

Установка amavisd-new, SpamAssassin, и ClamAV

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2
                libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax
mcedit /etc/amavis/conf.d/15-content_filter_mode
use strict;
# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.
#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#
@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#
@bypass_spam_checks_maps = (
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
1;  # insure a defined return
mcedit /etc/amavis/conf.d/50-user
use strict;
$pax='pax';
#Считываем таблицу обслуживаемых доменов. Письма адресованные пользователям этих доменов будут проверяться на спам
@lookup_sql_dsn = ( );
$sql_select_policy = 'SELECT domain FROM domains';
#Что дописываем в тему спам сообщения
$sa_spam_subject_tag                 = '***СПАМ***';
$sa_spam_modifies_subj = 1;
#Дописывать данные о проверке на спам в заголовок письма всегда
$sa_tag_level_deflt                  = undef;
#Пропускаем спам письма адресату.
$final_spam_destiny                  = D_PASS;
#Пропускаем письма содержащие вирус адресату.
$final_virus_destiny                 = D_PASS;
$final_banned_destiny  = D_PASS; 
#Добавляем в тему письма содержащего вирус
$subject_tag_maps_by_ccat{+CC_VIRUS} = ;
#Таким образом отключим оповещения о вирусах и спаме
$virus_admin                         = undef;
$spam_admin                          = undef;
1;
addgroup clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart
content_filter             = amavis::10024
receive_override_options   = no_address_mappings
amavis unix - - - - 2 smtp
       -o smtp_data_done_timeout=1200
       -o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - - - - smtpd
       -o content_filter=
       -o local_recipient_maps=
       -o relay_recipient_maps=
       -o smtpd_restriction_classes=
       -o smtpd_client_restrictions=
       -o smtpd_helo_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o mynetworks=127.0.0.0/8
       -o strict_rfc821_envelopes=yes
       -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
       -o smtpd_bind_address=127.0.0.1
/etc/init.d/postfix restart
netstat -tap
tcp        0      0 localhost.localdo:10024 *:*                     LISTEN     16043/amavisd
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN     15794/master
tcp        0      0 *:smtp                  *:*                     LISTEN     15794/master

Начальная настройка Postfix

Итак, чтобы Postfix мог отправлять и принимать почту, необходимо задать несколько настроек и в итоге мы получим минимально работающую конфигурацию агента пересылки. В интернете есть множество мануалов по настройке, прочтя которые, пропадает любое желание возиться с MTA. На деле же для получения работающего агента нужно произвести минимум изменений, большинство настроек определены оптимальным образом по умолчанию, при этом сделан неплохой упор на безопасность, чем, собственно, и славится Postfix.

/etc/postfix/main.cf

Для начала сделаем бэкап оригинального конфигурационного файла (в данном случае и когда бы то ни было рекомендую начинать править конфиги всегда с создания их бэкапа):

Shell

cp /etc/postfix/main.cf{,.orig}

1 cpetcpostfixmain.cf{,.orig}

Открываем конфиг:

Shell

nano /etc/postfix/main.cf

1 nanoetcpostfixmain.cf

Как я и говорил выше, мы можем определить имя обслуживаемого почтовым сервером домена прямо в конфиге Postfix, управляя параметрами myhostname и mydomain.

Зададим значение параметра myhostname:

Shell

myhostname = mail.mydomain.com

1 myhostname = mail.mydomain.com

Зная myhostname, Postfix может получить значение параметра mydomain, просто отбросив все до первой точки. В моем случае останется просто mydomain.com. Postfix будет считать, что именно этот домен он обслуживает.

Если же обслуживаемый домен вы хотите определить самостоятельно, задайте параметр mydomain:

Shell

mydomain = mydomain.com

1 mydomain = mydomain.com

Зная mydomain, Postfix может получить myhostname, просто объединив mydomain и имя хоста. Ничего страшного, если у вас будут заданы оба параметра.

Теперь пришло время определить для каких доменов почта будет доставляться локальным получателям, а не пересылаться на третью сторону. Это как раз те домены (в моем примере всего один), которые будет обслуживать наш MTA. Это можно сделать с помощью параметра mydestination.

Shell

mydestination = $myhostname, $mydomain

1 mydestination = $myhostname, $mydomain

$myhostname, $mydomain — переменные, значения которых мы определили ранее.

Следующий параметр — myorigin — отвечает за добавление к адресам отправителей/получателей имени домена. Думаю разумнее будет присвоить ему значение $mydomain.

Shell

myorigin = $mydomain

1 myorigin = $mydomain

На этом основная настройка завершена, можно закрывать файл, сохранив изменения. На всякий случай проверим наличие необходимых адресов в параметре mydestination командой:

Shell

postconf mydestination

1 postconf mydestination

С настройкой /etc/postfix/main.cf мы закончили, идем дальше.

/etc/aliases

С доставкой почты пользователю root возникнут проблемы, а потому нужно заранее перенаправить всю входящую для него почту на другую учетную запись. В моем случае это будет пользователь mailserveradmin, под которым я и выполняю все действия.

Для этого открываем файл:

Shell

nano /etc/aliases

1 nanoetcaliases

Добавим строчку

Shell

root: mailserveradmin

1 root: mailserveradmin

Кстати, у меня в системе по умолчанию эта запись уже присутствовала, а полное содержимое файла выглядело следующим образом:

Как можно заметить, в каталоге /etc/ находятся два файла с именем aliases:

Shell

ls -l /etc/ | grep aliases

1 ls-letc|grepaliases

Первый — это собственно сам файл алиасов, второй — его индексированная копия, к которой обращается Postfix. То есть пока мы не пересоздадим эту индексированную копию, изменений Postfix не заметит.

Для этого выполним команду:

Shell

postalias hash:/etc/aliases

1 postalias hashetcaliases

Для обновления конфигурации Postfix без необходимости перезапуска демона введите команду:

Shell

postfix reload

1 postfix reload

На этом начальная настройка агента пересылки почты Postfix завершена. Уже в этой конфигурации он может отправлять почту любым внешним и локальным получателям, разумеется если у вас правильно созданы все необходимые публичные DNS-записи и они успели распространиться (обычно на это нужно от пары десятков минут, до нескольких часов или даже суток, но это очень редкий случай).

Конечно в этой статье я не затрагивал защиту от спама, а также множество других настроек, но Postfix уже по умолчанию как минимум не разрешает открытую пересылку и это уже хорошо. Если вы все же захотите попробовать, то получите ошибку 454 4.7.1: Relay access denied.

Заняться более сложными вещами я планирую в следующих статьях.

Подключение LDAP

И так, наш сервер требует ввода логина и пароля от системных учетных записей для отправки писем. Теперь сделаем так, чтобы эти учетные записи брались из LDAP (на примере Active Directory).

В службе каталогов нам нужна учетная запись со стандартными правами — ее мы будем использовать для подключения к LDAP. Создаем служебную учетную запись, например, postfix в корневом контейнере Users. Таким образом, в моем примере, это будет запись cn=postfix,cn=Users,dc=dmosk,dc=local (в домене dmosk.local).

Теперь возвращаемся на наш сервер. Если у нас Debian/Ubuntu, необходимо установить пакет dovecot-ldap:

apt-get install dovecot-ldap

Открываем файл:

vi /etc/dovecot/dovecot-ldap.conf.ext

* в системах deb файл уже будет создан и в нем будут приведены примеры настройки; в системах RPM файл будет создан новый файл.

Добавляем в него следующее:

hosts            = dmosk.local
ldap_version     = 3
auth_bind        = yes
dn               = cn=postfix,cn=Users,dc=dmosk,dc=local
dnpass           = ldap-password-for-postfix
base             = ou=Пользователи,dc=dmosk,dc=local
scope            = subtree
deref            = never
pass_filter = (&(objectCategory=Person)(sAMAccountName=%n))
user_filter = (&(objectCategory=Person)(sAMAccountName=%n))

* где:

  • hosts — имя нашего сервера ldap (в моем примере указан домен, так как по нему у меня разрешается кластер LDAP).
  • ldap_version — версия ldap. Как правило, третья.
  • auth_bind — указываем, нужно ли выполнять аутентификацию при связывании с LDAP.
  • dn — учетная запись для прохождения авторизации при связывании со службой каталогов.
  • dnpass — пароль от записи для прохождения авторизации.
  • base — базовый контейнер, в котором мы ищем наших пользователей. Нельзя использовать поиск на уровне домена. Внимательнее проверяем путь на предмет использования контейнеров (CN) или организационных юнитов (OU).
  • scope — указывает на каком уровне нужно искать пользователей:
    • subtree — во всех вложенных контейнерах.
    • onelevel — во всех вложенных контейнерах, но на один уровень.
    • base — только в контейнере, который указан в base.
  • deref — параметр означает использование поиска по разыменованным псевдонимам. К сожалению, не нашел подробного описания. Обычно, не используется.
  • pass_filter — фильтр для поиска паролей пользователей. Его формат зависит от используемой реализации LDAP. В нашем примере это Active Directory.
  • user_filter — фильтр для поиска учетных записей пользователей. Формат зависит от того, какую реализацию для LDAP мы используем.

Не знаю причину, но если для base указать корневой путь к домену, например, dc=dmosk,dc=local, наша связка не будет работать, а система вернет ошибку … failed: Operations error.

Открываем файл:

vi /etc/dovecot/conf.d/10-auth.conf

Комментируем строку для использования аутентификации по системных учетных записям и снимаем комментарий для аутентификации в ldap. Получим следующий результат:

#!include auth-system.conf.ext

!include auth-ldap.conf.ext

Проверяем корректность настройки dovecot:

doveconf > /dev/null

И перезапускаем его:

systemctl restart dovecot

Возвращаемся к настроенному почтовому клиенту и меняем параметры для авторизации с smtptest на учетную запись из домена, например, [email protected]. Проверяем отправку письма — системы должна запросить пароль и отправить письмо при успешной проверке пользователя.

Можно переходить к настройке почтовых ящиков для пользователей из LDAP.

Команды

Проверка синтаксиса postfix -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf check
Состояние очереди postqueue -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -p
Обработка очереди немедленно postqueue -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -f
Очистка очереди postsuper -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -d ALL
Тест адресации postmap -q [email protected] ldap:/etc/postfix/ldap-users.cf

Работа с несколькими экземплярами

При решении некоторых задач можно воспользоваться возможностью работы с несколькими экземплярами (instance) сервера.

Для работы нужно добавить такие строки:/etc/postfix/main.cf

multi_instance_enable = yes
multi_instance_wrapper = ${command_directory}/postmulti -p -g ИМЯ_ГРУППЫ reload
multi_instance_directories = /etc/postfix-mx /etc/postfix-1 /etc/postfix-n

1
2
3

multi_instance_enable=yes

multi_instance_wrapper=${command_directory}postmulti-p-gИМЯ_ГРУППЫreload

multi_instance_directories=etcpostfix-mxetcpostfix-1etcpostfix-n

в переменной 
multi_instance_directories указывается экземпляры программы, в примере использованы следующие:

  • etcpostfix-mx
  • etcpostfix-1
  • etcpostfix-n

Для того, чтобы при запуске/останове и перезапуске Postfix и по команде

service postfix …

1 service postfix…

нужно параметре 
multi_instance_wrapper нужно указать имя группы (
ИМЯ_ГРУППЫ) в куда входя нужные экземпляров программы.

Также для того, чтобы разрешить работу с несколькими экземплярами можно использовать команду

postmulti -e init

1 postmulti-einit

Для управления служит программа 
postmulti.

Примеры:

Создание postmulti -I ИМЯ_ЭКЗЕМПЛЯРА -G ИМЯ_ГРУППЫ -e create
Активация postmulti -i ИМЯ_ЭКЗЕМПЛЯРА -e enable
Управление экземпляром postmulti -i ИМЯ_ЭКЗЕМПЛЯРА -p КОМАНДА

Безопасность

mynetworks список подсетей с которых разрешена отправка через этот сервер
disable_vrfy_command=yes Клиент, подключившийся к серверу, может командой 
vrfy [email protected] определить, существует ли заданный адрес в системе
show_user_unknown_table_name=no При попытке клиента отправить письмо несуществующему пользователю по умолчанию сервер выдаст 
550(reject) с сообщением 
user unknown inlocal recipient table (или другой таблице). Отключаем, пусть сервер сообщает 
user unknown
smtpd_helo_required=yes Требуем от клиента приветствия (HELO/EHLO). Все, кто подключается, должны представляться
smtpd_helo_restrictions= permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname Ограничения для этапа 
HELOEHLO. Применяются к имени хоста, его IP-адресу и приветствию 
HELOEHLO:Разрешаем доверенные сетиРазрешаем тем, кто прошёл аутентификациюОтбрасываем неправильное (несуществующее) имя хостаОтбрасываем не полностью определённое доменное имя хостаОтбрасываем, если хост по HELO/EHLO не имеет А или МХ записи
smtpd_sender_restrictions= reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unlisted_sender, permit_mynetworks, permit_sasl_authenticated Ограничения для этапа MAIL FROM. Применяется ко всему предыдущему + имя отправителя:Отбрасываем не полностью определённое имя отправителяОтбрасываем отправителя с несуществующего доменаОтбрасываем несуществующих отправителейПроверяем отправителя. Если с нашего домена, то проверим, находится ли он в доверенной сети или прошёл аутентификациюРазрешаем отправлять с доверенных сетейРазрешаем отправлять прошедшим аутентификацию
smtpd_recipient_restrictions= reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unlisted_recipient, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination reject_invalid_hostname Ограничения для этапа RCPT TO. Применяется к предыдущему + имя получателя:reject, если получатель отсутствует в списке нашего домена или списке пересылки. Чтобы сервер не стал открытым 
relay
smtpd_data_restrictions= reject_unauth_pipelining, reject_multi_recipient_bounce Ограничения для этапа DATA:Отвергаем запрос, когда клиент посылает команды SMTP раньше времениreject клиента с пустым именем отправителя, который отправляет сразу нескольким получателям
smtpd_etrn_restrictions= permit_mynetworks, permit_sasl_authenticated, reject Ограничиваем клиентов, которые могут запрашивать очистку очереди сообщений

Настройка почтовых доменов и аккаунтов

На этом этапе нужно иметь настроенные записи DNS для почтовых доменов. Для этого следует создать необходимую запись MX, если её ещё нет, в списках DNS, которая будет указывать на полный домен.

Подключимся к MySQL из консоли, добавить аккаунт в MySQL можно любым другим способом, в том числе и из PHP или Python скрипта, но сейчас мы остановимся на консоли:

Добавим в список доменов наш основной домен и создадим первый почтовый аккаунт, «example.com», «[email protected]» и «password» следует заменить корректными значениями:

Обратите внимание на команду шифрования пароля, добавлять или менять пароль нужно именно так. Теперь попробуем отправить почту вновь созданному аккаунту

Это необходимо для создания структуры директорий на диске, которые появятся после получения первого письма. Для отправки почты непосредственно из консоли мы будем использовать mailx или bsd-mailx, в зависимости от того, что установилось выше:

Теперь попробуем отправить почту вновь созданному аккаунту. Это необходимо для создания структуры директорий на диске, которые появятся после получения первого письма. Для отправки почты непосредственно из консоли мы будем использовать mailx или bsd-mailx, в зависимости от того, что установилось выше:

После ввода команды будет предложено ввести тему сообщения. Вводим, нажимаем Enter, после чего нажимаем Ctrl + D. Поле «CC» можно оставить пустым.

Так как почтовых доменов может быть несколько, следует указывать полный почтовый адрес «[email protected]» для сборщика почты, иначе по имени пользователя «info» нельзя будет определить, к какому домену он принадлежит и почта не будет отправлена или получена.

На этом перейдём к следующему шагу — проверке лог файлов.

Install unbound caching DNS resolver

Install

sudo apt install unbound

Update Root key and reload Unbound service

su -c "unbound-anchor -a /var/lib/unbound/root.key" - unbound
systemctl reload unbound

To use the DNS lookup utility install

sudo apt install dnsutils

Try to use local DSN server:

 dig @127.0.0.1 denic.de +short +dnssec

which should lead to something like

81.91.170.12
A 8 2 3600 20190516090000 20190502090000 26155 denic.de. ZenvfYTndSmVHFrrt2klbfjT5bce3TxXtrdZvUKBHh3nsmCGTim67cbk dtQS/G9V2+XIE26I+xbSGl96e1RkHMB
6KFry5hSr+40eBP9ogUuB7LJV UREmTvb/pd5Pw7KamW0qlK9kGCqETS3sCr/PN3V30cV5I1Xi+cxWW0de XRfcktHmotciedpLtszq3OttlVnzrxD7XGdtMYsSe+9WpUKD3xlUVQqH Bl1j/
bXRyf84sLTqrfcPLtc6z/jz3set

If the dig-command worked,
it’s time to double-check that is set as the primary DNS resolver for your mail system:
The result of

nslookup denic.de | grep Server 

should now be:

Server:     127.0.0.1

By default should be already installed on your system

sudo apt install openresolv

Also, take a look at the configuration file
which should take into account the existence of setup.

sudoedit /etc/resolvconf.conf

Новое на сайте

13 май

почтовый сервер на основе Postfix с пользователями в MySQL и Dovecot как MDA

как установить почтовый сервер Postfix (MTA) для произвольного числа доменов и Dovecot 2.x в качестве MDA, использовать MySQL и PostfixAdmin, задействовать квоты, обеспечить защиту от спама и вирусов используя цифровую подпись DKIM, dspam и ClavaAV

подробнее…

18 апр

До опредленного времени, нежелательные сайты в офисе блокировались «прозрачным» SQUID-ом. Однако SQUID3 не может работать с SSL соединениями в режиме transparent и, соответственно, не может блокировать социалки, доступные по https. iptables нам поможет!

подробнее…

22 сент

настройка прозрачного squid3 с пулами задержки или как навести порядок в офисе

Работа в типичном офисе и социальные сети не совместимы. Любой администратор рано или поздно решает задачу — как запретить развлекательный контент и социальные сети в офисе и ограничить скорость Интернета. В этих начинаниях нам поможет Squid3.

подробнее…

18 мар

конечно можно настроить sftp или даже ftp на худой конец и деплоить каждый чих в своем приложении/сайте прямо из вашей любимой IDE, однако удобнее использовать опцию shared folders, которая идёт с VirtualBox прямо «из коробки».

подробнее…

17 фев

монтируем новый жёсткий диск в Debian или решаем проблемы со свободным местом

Знакомая ситуация  — заканчивается место на жёстком диске на виртуальном сервере разработки Debian (VirualBox). Разберёмся, как подключить новый жесткий диск, создать на нём ext4 раздел и смонтировать его через fstab по UUID.

подробнее…

06 янв

быстрый старт bower + grunt или дань моде

Часто приходится настраивать связку bower+grunt. Bower — незаменимый менеджер пакетов. Grunt — замечательное средство для автоматизации рутинны со статикой проекта. Ах да, для установки всего этого безобразия нам ещё потребуется Node.js

подробнее…

09 сент

настройка почтового сервера как резервного (backup MX) или пересылка почты для домена клиента

Нобходимо настроить наш сервер как резервный Backup MX для отдельных клиентов. Ситуацию усложняет необходимость иметь несколько активных ящиков на нашем сервере, вне зависимости есть они или нету на основном почтовом сервере. Зачем же это было нужно?

подробнее…

22 май

настройка квоты домена в MDA Dovecot используя dict + mysql

Дело вкуса, но жизнь требует возможности настройки квот на уровне домена по той или иной причине. Как же настроить квоты для доменов в Dovecot, если используется mysql и dict соответственно. Ответ прост — никак. Детали — под катом.

подробнее…

16 май

настройка «greylisting» для postfix (postgrey) или борьба со спамом продолжается

Еще один инструмент для борьбы со спамом – грейлистинг. Суть – временно отклонять почту от новых отправителей со словами «зайдите завтра». Добропорядочный сервер обязательно «зайдет». Типичный спаммер – нет. Итак, Postgray для Postfix.

подробнее…

15 май

настройка Fail2Ban для защиты служб сервера от атак извне или как сделать логи аккуратными

Благая цель – избавить сервер от лишней работы (нагрузки) и блокировать попытки перебора паролей и хакерских атак – крайне благородна. Настроим инструмент fail2ban для мониторинга лог-файлов служб на сервере и блокирования вредителей по IP…

подробнее…

E-mail:
Skype: dmitry_rendov
Тел.:
включите javascript чтобы видеть номер

Все обновления в Twitter twitter.com/DmitryRendov

Настройка postfix debian с нуля

В Debian настройка почтового сервера чаще всего предполагает использование связки из Postfix — SMTP сервера, отвечающего за передачу писем и Dovecot, обеспечивающего их хранение.

Альтернативными Postfix вариантами являются Sendmail и Exim, но применяются они значительно реже ввиду меньшего удобства эксплуатации и меньших возможностей (в случае с Sendmail) и большей сложности настройки (в случае с Exim).

В распределенных системах Dovecot работает с сервером баз данных (чаще всего — MySQL) храня данные о ящиках и доменах в базе, письма хранятся на диске.

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

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

Когда ключ и сертификат сгенерированы — начинаем настройку. Используется машина, созданная на основе дистрибутива Debian 8. Аутентификаиця пользователей будет осуществляться посредством SSL + TLS.

Mailman with Postfix

The instructions below are WRONG! You should not postfix-to-mailman.py and alias at the same time. Please read /etc/mailman/postfix-to-mailman.py instead.

Install mailman:

apt-get install mailman

When done type:

newlist mailman

Start mailman

/etc/init.d/mailman start
  • You should be able to see mailman running now. Visit:

    http://www.yourwebsite.com/cgi-bin/mailman/admin or

  • Because postfix is a secondary choice for Debian we need to add:
  • Edit /etc/postfix/main.cf; where you see «relay_domains» add lists.yourdomain.com. You would get something like this:

relay_domains = example.com, lists.example.com

In same file add ,hash:/var/lib/mailman/data/aliases after alias_maps

alias_maps = hash:/etc/aliases,hash:/var/lib/mailman/data/aliases

Now type:

postconf -e "transport_maps = hash:/etc/postfix/transport"
postconf -e "mailman_destination_recipient_limit = 1"

In /etc/postfix/master.cf add:

mailman unix  -       n       n       -       -       pipe
   flags=FR user=list
   argv=/var/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}

Edit or create /etc/postfix/transport. Add this line:

lists.example.com    mailman:

Then postmap it:

postmap /etc/postfix/transport

Now edit /etc/mailman/mm_cfg.py and add:

MTA = 'Postfix'
DEB_LISTMASTER = '[email protected]'
POSTFIX_STYLE_VIRTUAL_DOMAIN = 

Done. Now restart postfix, mailman

/etc/init.d/postfix reload
/etc/init.d/mailman restart

Create a mailing list:

newlist list_name

If you want archives add this to /etc/apache2/apache2.conf

Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /images/mailman/ /usr/share/images/mailman/

Then you need to reload apache:

/etc/init.d/apache2 reload

Done. Go to

http://lists.yourwebsite.com/cgi-bin/mailman/listinfo/list_name/

Пример

Пример для вставки в файл 
main.cf

disable_vrfy_command = yes
show_user_unknown_table_name = no
smtpd_helo_required = yes
 
smtpd_helo_restrictions=
check_helo_access hash:/etc/postfix/helo_restrictions
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_invalid_helo_hostname,
reject_unknown_helo_hostname
 
smtpd_sender_restrictions=
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_unlisted_sender,
permit_mynetworks,
permit_sasl_authenticated
 
smtpd_recipient_restrictions=
check_sender_access hash:/etc/postfix/sender_access
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unlisted_recipient,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
reject_invalid_hostname
 
smtpd_data_restrictions=
reject_unauth_pipelining,
reject_multi_recipient_bounce
 
smtpd_etrn_restrictions=
permit_mynetworks,
permit_sasl_authenticated,
reject
 
message_size_limit = 51200000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

disable_vrfy_command=yes

show_user_unknown_table_name=no

smtpd_helo_required=yes

smtpd_helo_restrictions=

check_helo_access hashetcpostfixhelo_restrictions

permit_mynetworks,

permit_sasl_authenticated,

reject_invalid_hostname,

reject_non_fqdn_hostname,

reject_invalid_helo_hostname,

reject_unknown_helo_hostname
 

smtpd_sender_restrictions=

reject_non_fqdn_sender,

reject_unknown_sender_domain,

reject_unlisted_sender,

permit_mynetworks,

permit_sasl_authenticated
 

smtpd_recipient_restrictions=

check_sender_access hashetcpostfixsender_access

reject_non_fqdn_recipient,

reject_unknown_recipient_domain,

reject_unlisted_recipient,

permit_mynetworks,

permit_sasl_authenticated,

reject_unauth_destination

reject_invalid_hostname
 

smtpd_data_restrictions=

reject_unauth_pipelining,

reject_multi_recipient_bounce
 

smtpd_etrn_restrictions=

permit_mynetworks,

permit_sasl_authenticated,

reject

message_size_limit=51200000

Таблицы:/etc/postfix/helo_restrictions

80.84.114.82 OK
mail.aqmh.ru OK
aqmh.ru OK
aqmhdc.aqmh.com OK
mailpn.ru REJECT
stmails.ru REJECT
5.63.152.144 REJECT

1
2
3
4
5
6
7

80.84.114.82OK

mail.aqmh.ru    OK

aqmh.ru OK

aqmhdc.aqmh.com OK

mailpn.ru       REJECT

stmails.ru      REJECT

5.63.152.144REJECT

/etc/postfix/sender_access

80.84.114.82 OK
mail.aqmh.ru OK
aqmh.ru OK
aqmhdc.aqmh.com OK
mailpn.ru REJECT
stmails.ru REJECT
5.63.152.144 REJECT
@mailpn.ru REJECT

1
2
3
4
5
6
7
8

80.84.114.82OK

mail.aqmh.ru    OK

aqmh.ru OK

aqmhdc.aqmh.com OK

mailpn.ru       REJECT

stmails.ru      REJECT

5.63.152.144REJECT

@mailpn.ru      REJECT

Скрипт для компиляции таблиц:/etc/postfix/!update_db.sh

<em>#!/bin/bash</em>
 
postmap helo_restrictions sender_access transport

1
2
3

<em>#!/bin/bash</em>

postmap helo_restrictions sender_access transport

Вывод

Для настройки виртуальных почтовых ящиков вам нужно создать пользователя, под которым Postfix будет сохранять всю почтовую информацию на диск. Не забудьте выделить для него отдельный каталог и установить на него нужные права. Чтобы Postfix корректно работал с хранилищем, вы должны сообщить ему уникальные идентификаторы пользователя и его основной группы, а также принудительно задать месторасположение хранилища.

Напоминаю, что статья не ставит цель предоставить 100% рабочие конфигурации, а написана прежде всего для освещения принципа работы виртуальных почтовых ящиков в Postfix. Рабочие конфиги будут выложены позднее.

UPD 08.06.2016: а вот и оттестированные конфиги как и обещал:

  • Конфиг Postfix для связки с Dovecot, MySQL, PostfixAdmin
  • Конфиг Dovecot для связки с Postfix, PostfixAdmin, MySQL

Позже будут ещё.

Notes:

  1. Postfix Virtual Domain Hosting Howto

comments powered by HyperComments

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: