Введение
Для крупных почтовых серверов абсолютно непрактично использовать в 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 на учетную запись из домена, например, master@dmosk.local. Проверяем отправку письма — системы должна запросить пароль и отправить письмо при успешной проверке пользователя.
Можно переходить к настройке почтовых ящиков для пользователей из LDAP.
Команды
Проверка синтаксиса | postfix -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf check |
Состояние очереди | postqueue -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -p |
Обработка очереди немедленно | postqueue -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -f |
Очистка очереди | postsuper -c ПУТЬ_К_ФАЙЛУ_НАСТРОЕК_main.cf -d ALL |
Тест адресации | postmap -q address@domail.ru 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 |
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 user@domain.ru определить, существует ли заданный адрес в системе |
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», «info@example.com» и «password» следует заменить корректными значениями:
Обратите внимание на команду шифрования пароля, добавлять или менять пароль нужно именно так. Теперь попробуем отправить почту вновь созданному аккаунту
Это необходимо для создания структуры директорий на диске, которые появятся после получения первого письма. Для отправки почты непосредственно из консоли мы будем использовать mailx или bsd-mailx, в зависимости от того, что установилось выше:
Теперь попробуем отправить почту вновь созданному аккаунту. Это необходимо для создания структуры директорий на диске, которые появятся после получения первого письма. Для отправки почты непосредственно из консоли мы будем использовать mailx или bsd-mailx, в зависимости от того, что установилось выше:
После ввода команды будет предложено ввести тему сообщения. Вводим, нажимаем Enter, после чего нажимаем Ctrl + D. Поле «CC» можно оставить пустым.
Так как почтовых доменов может быть несколько, следует указывать полный почтовый адрес «info@example.com» для сборщика почты, иначе по имени пользователя «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 = 'postmaster@example.com' 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 |
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 |
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 |
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 |
<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:
- Postfix Virtual Domain Hosting Howto
comments powered by HyperComments