Очистка и обслуживание почтовой базы postfix

Удалить/Очистить/Сбросить очередь в postfix

Иногда, приходиться удалять письма из очереди, и если не знаете как это сделать ( или может забыли), то данная тема поможет с этим разобраться.

Для начала, проверим что иметься в очереди:

$ postqueue -p

У меня например, образовалось вот такая очередь:

-Queue ID- —Size— —-Arrival Time—- -Sender/Recipient——- CA0664A220C9 438 Wed Apr 5 19:34:35 root@linux-notes.org (connect to example.org[2606:2800:220:1:248:1893:25c8:1946]:25: Connection timed out) user@example.org CC3B64A220C4 430 Wed Apr 5 19:30:46 root@linux-notes.org (connect to example.org[93.184.216.34]:25: Connection timed out) user@example.org 7BCF14A22CCE 3231 Fri Apr 7 14:21:23 MAILER-DAEMON (connect to captain-notes[/var/lib/imap/socket/lmtp]: No such file or directory) www@linux-notes.org — 4 Kbytes in 3 Requests.

Или, имеется другая утилита:

$ mailq

Чтобы сохранить результат в текстовый файл, можно запустить:

$ postqueue -p > mailq_output.txt

или

$ mailq >mailq_output.txt

Просмотр сообщения (Содержимое, заголовок и тело)

Предположим, что сообщение имеет идентификатор XXXXXXX (я выше показывал как )

$ postcat -vq XXXXXXXXXX

Или, сохраняем в файл:

$ postcat -vq XXXXXXXXXX > msg_output.txt

Если есть необходимость удалить конкретное письмо ( нужно знать его ID), выполните команду:

# postsuper -d mail_queue_id

Чтобы очистить очередь в Postfix MTA просто введите следующую команду:

# postfix flush

Или:

# postfix -f

Чтобы удалить всю почту из очереди, введите:

# postsuper -d ALL

Чтобы удалить все письма в отложенной очереди (deferred), введите:

# postsuper -d ALL deferred

Чтобы удалить все письма из почтовой очереди, которые пришли с test_user@linux-notes.org или отправлены на адрес test_user@linux-notes.org (команда одинакова независимо от того, является ли это адресом отправителя или получателя), вы можете использовать следующую команду:

# mailq | tail -n +2 | awk 'BEGIN { RS = «» } /test_user@linux-notes.org$/ { print $1 }' | tr -d '*!' | postsuper -d —

Или

# mailq | tail -n +2 | grep -v '^ *(' | gawk 'BEGIN {RS = «»} /test_user@linux-notes.org/ {print $1}' | tr -d '*!' | sudo postsuper -d —

Ничего сложного в этом нет.

Нашел в интернете, готовый скрипт, который удаляет всю почту из mailq, которая соответствует регулярному выражению (указанному в качестве первого аргумента).

$ vim drop_email_queue.pl

И прописываем в него:

#!/usr/bin/perl $REGEXP = shift || die «no email-adress given (regexp-style, e.g. bl.*@yahoo.com)!»; @data = qx; for (@data) { if (/^(w+)(*|!)?s/) { $queue_id = $1; } if($queue_id) { if (/$REGEXP/i) { $Q{$queue_id} = 1; $queue_id = «»; } } } #open(POSTSUPER,»|cat») || die «couldn't open postsuper» ; open(POSTSUPER,»|postsuper -d -«) || die «couldn't open postsuper» ; foreach (keys %Q) { print POSTSUPER «$_
«; }; close(POSTSUPER);

Например, удалите все поставленные в очередь сообщения (исходящие и входящие) для http://linux-notes.org:

# ./drop_email_queue.pl linux-notes.org

Удалите все сообщения в очереди, содержащие слово «world»:

# ./drop_email_queue.pl world

У меня, по данной статье «Удалить/Очистить/Сбросить очередь в postfix» все.

Источник: http://linux-notes.org/udalit-ochistit-sbrosit-ochered-v-postfix/

Полезные команды Postfix. Работа с очередью Postfix | Записки системного администратора

Проверка синтаксиса конфигурационных файлов Postfix

Просмотр текущих значений параметров Postfix

Просмотр стандартных значений параметров Postfix(значений по умолчанию)

# postconf | grep message_size_limit
message_size_limit = 10240000

Изменение значения параметра message_size_limit без перезагрузки

(работает и после перезагрузки postfix)

# postconf -e 'message_size_limit = 20480000'
# postconf | grep message_size_limit
message_size_limit = 20480000
# /etc/init.d/postfix restart
Shutting down postfix:                                     [ OK ]Starting postfix:                                         [ OK ]
# postconf | grep message_size_limit
message_size_limit = 20480000

То же самое можно достичь прописав в

# message_size_limit = 20480000

Больше

Работа с очередью

Просмотр очереди сообщений

Просмотр кол-ва сообщений в очереди

— 25913 Kbytes in 1809 Requests.

Альтернативный вариант — посчитать файлы в соответствующем каталоге:

# find /var/spool/postfix/deferred -type f | wc -l
# find /var/spool/postfix/active -type f | wc -l
# find /var/spool/postfix/incoming -type f | wc –l

Отправка всех сообщений, находящихся в очереди

Отправка сообщения с конкретным идентификатором

# postqueue -i<\p>
# postsuper -r<\p>

Отправка всех сообщений для конкретного домена

# postqueue -s domain.com

Подсчет кол-ва писем в очереди для/от конкретного адресата

# mailq | grep bob@domain.com | wc –l

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

# mailq|grep ^[A-F0-9] |cut -c 42-80| sort | uniq -c| sort -n
1   MAILER-DAEMON1   user1@yahoo.com33   admin@example.com1770   no-reply@domain.com

Сортировка почты по домену отправителя

# mailq | egrep 'w{2,3}.*d*:d*.*@.*..*' —color|awk '{print $7}'|cut -d@ -f2|sort|uniq –c

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

# postcat -vq BA84A294E693 | less

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

идентификатора сообщения в очереди:

# postcat -q BA84A294E693 | less

Аналогично,но более подробно

# postcat -vq BA84A294E693 | less

Очистка почтовой очереди(удаление всех писем с очереди)

Очистка почтовой очереди типа deferred

Удаление письма с конкретным идентификатором

# postsuper -d ID, где ID – идентификатор письма

Удаление писем из очереди в зависимотси от ошибки

# postqueue -p | grep -B1 'rejected: Domain not found' | grep -vE '(—|reject)' | awk '{print $1}' | postsuper -d —
# postqueue -p | grep -B1 'Host not found' | grep -vE '(—|()' | awk '{print $1}' | postsuper -d —
# postqueue -p | grep -B1 'rejected: User unknown in local recipient table' | grep -vE '(—|()' | awk '{print $1}' | postsuper -d —
# postqueue -p | grep -B1 'Could not complete sender verify callout' | grep -vE '(—|()' | awk '{print $1}' | postsuper -d —

Ключик

в конце скрипта, можно заменить на

, если хотите сделать массовое удержание или ключик

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

Удаление с очереди писем, отправленных с конкретного адреса

# mailq | grep MAILER-DAEMON | awk '{print $1}' | cut -d* -f 1 | xargs -n 1 postsuper  -d
# mailq | grep bob@domain.com | awk '{print $1}' | xargs -n1 postsuper –d
# postqueue -p | grep 'MAILER-DAEMON' | awk '{print $1}' | postsuper -d —

Удаление почты для конкретного получателя/отправителя(получатель-поле 8 или отправитель- поле 7)

# mailq | tail -n +2 | grep -v '^ *(' | awk 'BEGIN { RS = «» } { if ($8 == «user@example.com» && $9 == «») print $1 } ' | tr -d '*!' | postsuper -d —

Постановка письма на «удержание» (перевод в режим hold – postfix не будет пытаться отправить письмо получателю в таком режиме)

# postsuper -h<\p>

– все сообщения перевести в режим hold

– все письма с очереди deferred перевести в режим hold

Снятие письма с режима «удержание»

# postsuper -H<\p>

– все сообщения перевести с режима hold в режим deferred

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

Очередь Active

T 5 10 20 40 80 160 320 640 1280 1280+TOTAL 0 0 0 0 0 0   0   0   0   0     0

Очередь deferred

T 5 10 20 40 80 160 320 640 1280 1280+TOTAL 1803 0 0 0 0 0   0   1   0 307 1495aol.com 343 0 0 0 0 0   0   0   0   50   293ovi.com 144 0 0 0 0 0   0   0   0   26   118

Источник: https://kamaok.org.ua/?p=528

Очистка почтовых ящиков Linux/BSD и ограничение их размера

Удалить/очистить почтовые ящики в Linux/BSD можно с помощь стандартной утилиты mail либо дополнительных утилит выполняемых вручную или автоматически при помощи cron задач.

Все сообщения для каждого пользователя собираются в файл с именем самого пользователя и хранятся каталоге /var/spool/mail: ls -la /var/spool/mail

Для очистки почтового ящика Linux/BSD для текущего пользователя выполним «echo 'd *' | mail -N», удаление почты для какого-то конкретного пользователя «echo 'd *' | mail -N -u root», но перед очисткой почтового ящика рекомендуется почитать почту, которая может содержать важные сведения. Альтернативный способ очистки ящика:

В режиме чтения почты, команда «delete 1 5» удалит сообщения с номером 1 и 5, а команда «delete 1-5» удалит сообщения с 1-го по 5-е. Для перехода (чтения) к последнему сообщению нужно на приглашение «&» ввести символ «$» или же ввести номер сообщения для перехода к нужному номеру сообщения.

Читать почту рекомендуется регулярно, для этого достаточно набрать «mail» или «mail -N» для отображения более подробных сведений. Чтобы выйти из режима чтения почтовых сообщений набираем «q».

Отключаем почтовые сообщения Cron

Почтовый ящик в часто забивается сообщениями о выполнении крон-задач. Чтобы отключить посыл почтовых сообщений при выполнении Cron-команд, нужно в конец строки крон-задачи добавить «>/dev/null 2>&1» или «&> /dev/null»:

0 1 5 10 * /path/to/script.sh >/dev/null 2>&1
# OR
0 1 5 10 * /path/to/script.sh &> /dev/null

Ограничение размера почтового ящика для Postfix

Мы можем ограничить, уменьшить или увеличить, размер почтового ящика, а также размер почтового сообщения. По-умолчанию размер почтового ящика равен 50 МБ, а размер сообщения 10 МБ:

# Проверим лимит на максимальный размер почтового ящика
$ postconf mailbox_size_limit
mailbox_size_limit = 51200000
 
# Проверим лимит на максимальный размер почтового сообщения
$ postconf message_size_limit
message_size_limit = 10240000

Размер указывается в байтах, изменить который можно в файле конфигурации Postfix vi /etc/postfix/main.cf, после чего перезапустим Postfix:

$ service postfix restart
# or
$ /etc/init.d/postfix restart

Ограничение размера почтового ящика для Sendmail

Под Sendmail удалось найти только возможности изменить размер почтового сообщения с помощью M4 переменной confMAX_MESSAGE_SIZE в /etc/mail/sendmail.mc (ака MaxMessageSize в /etc/mail/sendmail.cf). Открываем /etc/mail/sendmail.mc, изменяем значение confMAX_MESSAGE_SIZE, после пересобираем sendmail.cf из sendmail.mc, и перезапускаем sendmail:

$ m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
$ /etc/rc.d/init.d/sendmail restart
# or
$ service sendmail restart

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

Рекомендуемый контент

Источник: https://www.remoteshaman.com/server/mta/mail-box-clear-and-size-limit-config

Настройка почтового шлюза на базе Postfix

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

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

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

В интернете существует большое количество «статей», которые очень упрощают процесс использованием директивы «relayhost = internalsmtp.example.com». В данном случае возникает проблема с тем, что шлюз незнает ничего о внутренний адресах (даже в случае если он настроен на прием почты только для домена @example.com).

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

Большое количество таких сообщений существенно снизят производительность почтового сервера.

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

Настройка

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

/etc/postfix/main.cf

Как должно быть понятно из названия, это основной конфигурационный файл Postfix.

Совет: Команда ниже покажет вам все конфигурационные директивы, значения которых отличаются от дефолтных:

postconf -n

Так как на шлюзе требуется только пересылка почты, отключаем локальную доставку сообщений (Замечание: пустое значение конфигурациооной директивы означает её отключение):

mydestination = local_recipient_maps = local_transport = error:local mail delivery is disabled

Установите директиву myorigin в значение домена, на который пересылается почта:

myorigin = example.com

Директива mynetworks = определите сети, которым разрешено выполнять пересылку через данный сервер. Обычно сюда включают только внутреннюю локальную сеть, или вообще только IP внутреннего почтового сервера:

mynetworks = 127.0.0.0/8, 172.16.42.0/24

Данная секция предотвращает прием сообщений для адресов вида username@subdomain.example.com to match. Мы явно определим домены, для которых необходимо принимать почту в директиве relay_domains ниже.

parent_domain_matches_subdomains = debug_peer_list, smtpd_access_maps

relay_domains = в данной директиве определяем домены, для которых необходимо принимать почту.

relay_domains = example1.com, example2.com, subdomain.example.com

smtpd_recipient_restrictions = контролируем действия сервера после команды RCPT TO.

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

transport_maps = указываем связь между доменами и SMTP серверами, на которые будет пересылаться почта.

transport_maps = hash:/etc/postfix/transport

relay_recipient_maps = указатель на файл, который будет содержать спискок адресов электронной почты, для которых Postfix будет принимать сообщения.

relay_recipient_maps = hash:/etc/postfix/relay_recipients

show_user_unknown_table_name = в установленном значении no возвращает сообщение «User unknown» если адрес электронной почты не найден. Используется в связке с relay_recipient_maps.

show_user_unknown_table_name = no

Хотя локальная доставка почты отлючена, почтовый шлюз должен принимать почты для адресов postmaster и abuse. Для этого определите виртуальные алиасы.

virtual_alias_maps = hash:/etc/postfix/virtual

/etc/postfix/master.cf

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

#local unix — n n — — local

/etc/postfix/virtual

В случае типичной настройки Postfix файл /etc/aliases используется для пересылки почты на другие аккаунты или внешние адреса. Однако, так как локальная доставка отключена, модификация файла etc/aliases не принесет результатат. Поэтому нам нужно использовать файл /etc/postfix/virtual.

postmaster postmaster@example.com abuse abuse@example.com root guru@example.com

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

virtualuser@example.com actualuser@example1.com distribution@example.com user1@example.com,user2@example.com,user3@example.com ex_user@example2.com forwarding_address@dom.ain user@example.com user@example.com,spy@example.com

/etc/postfix/transport

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

example1.com smtp:insidesmtp.example.com example2.com smtp:insidesmtp.example.com subdomain.example.com smtp:insidesmtp.example.com

/etc/postfix/relay_recipients

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

user1@example1.com OK user2@example1.com OK user1@example2.com OK user2@example2.com OK user1@subdomain.example.com OK user2@subdomain.example.com OK

Заполняем файл relay_recipients адресами из Active Directory

Данный скрипт требует установленного perl и модуля Net::LDAP.

  • Скачайте скрипт с http://www-personal.umich.edu/~malth/gaptuning/postfix/getadsmtp.pl
  • Отредактируйте скрипт в соответствии с своими значениями:

$VALID = «/etc/postfix/relay_recipients»; $dc1=»domaincontroller1.example.com»; $dc2=»domaincontroller2.example.com»; $hqbase=»cn=Users,dc=example,dc=com»; $user=»cn=user,cn=Users,dc=example,dc=com»; $passwd=»password»;

Создаем базы

Для завершения нам необходимо сделать хэшированные базы данных из наполненных нами файлов:

postmap hash:/etc/postfix/virtual postmap hash:/etc/postfix/transport postmap hash:/etc/postfix/relay_recipients

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

Перезапуск Postfix

Предпочитаемый способ для того, чтобы Postfix перечитал конфигурационные файлы следующий:

postfix reload

Проверка

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

<strong> telnet emailgateway.example.com smtp</strong> 220 emailgateway.example.com ESMTP Postfix <strong> EHLO localhost</strong> 250-emailgateway.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250 8BITMIME <strong> MAIL FROM: <testadmin@example1.com></strong> 250 Ok <strong> RCPT TO: <unknown@unknowndomain.com></strong> 554 <unknown@unknowndomain.com>: Relay access denied <strong> RCPT TO: <unknown@example1.com></strong> 554 <unknown@example.com>: Relay access denied <strong> RCPT TO: <user1@example1.com></strong> 250 Ok <strong> DATA</strong> 354 End data with <CR><LF>.<CR><LF> <strong> Subject: test</strong> <strong> test 1 2 3</strong> <strong> .</strong> 250 Ok: queued as 5152A39097 <strong> QUIT</strong> 221 Bye

Источник

Источник: https://www.skleroznik.in.ua/2016/08/24/nastrojka-pochtovogo-shlyuza-na-baze-postfix-2/

Удаляем в postfix лишние заголовки

Postfix — отличное типовое решение для корпоративного почтового сервера. Относительно легко ставится, хорошо интегрируется, доступно много всяких фич … что ещё нужно?

Безопасность. Если не конфигурировать явно, то postfix пропускает все заголовки, добавленные до него. Это могут быть:

  1. IP-адрес пользователя во внутренней сети, если он посылает сообщение с помощью клиента. Тогда в полученном письме увидим что-то вроде:

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

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

Вообще, это отдельная тема, что лучше выбрать.

  • Сообщения, раскрывающию внутреннюю стуктуру почтовика, если в связки используются антивирус/антиспам и подобные решения. Тогда появляется localhost:
  • Полезной информации это не несёт, а значит лучше это и не дописывать в каждое сообщение.

  • User-Agent (почтовый клиент) пользователя:

    Эта информация вполне безопасна, однако и её лишний раз лучше не светить — по письмам от разных пользователей одного домена можно узнать, например, какие операционные системы предпочитают в компании. Или здесь может светиться веб-почта

    и сразу открывается ещё одна потенциально опасная точка входа.

  • Разного рода автоматически добавляемые скриптами заголовки, например

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

  • Другие заголовки, которые я здесь не перечислил, но такие точно есть.
  • Как отфильтровать «лишние» заголовки? Документация постфикса подсказывает, что неугодные хедеры можно удалить с помощью header_checks. Заголовки будем указывать в regex-виде, для этого доставим пакет postfix-pcre и создадим файл /etc/postfix/header_checks.pcre с заголовками для удаления:

    /^Received:/ IGNORE /^User-Agent:/ IGNORE /^X-Mailer:/ IGNORE /^X-Originating-IP:/ IGNORE /^X-PHP-Originating-Script/ IGNORE

    Теперь корректно укажем использование файла с регексами. Простым добавлением в основной конфиг main.cf:

    header_checks=pcre:/etc/postfix/header_checks.pcre

    команда действует глобально как на входящую, так и на исходящую почту. При этом будет правиться входящая почта и ломаться проверка DKIM, поэтому нам такой способ явно не подходит.

    Альтернативный вариант — вставить этот фильтр в master.cf после прохождения других демонов почтовика, но до подписи DKIM. Для этого подходит цепочка cleanup, находим её и дописываем:

    cleanup unix n — — — 0 cleanup -o header_checks=pcre:/etc/postfix/header_checks.pcre

    Рестартуем, проверяем и … всё работает как надо!

    PS: После изменений проверяем корректность подписи DKIM на получателе (строчка dkim=pass). Если какой-то из заголовков вырезали после её формирования на отправителе, она может не пройти проверку и почта будет уходить в спам.

    Источник: https://unixmin.com/blog/remove-headers-in-postfix

    FreeBSD: Дополнительные возможности PostfixAdmin

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

    Например, я «прикручивал» PostfixAdmin к почтовой системе среднего офиса на базе Postfix по инструкции Алексея (aka ALex_hha) Настройка почтовой системы Postfix+Courier-IMAP+Cyrus-sasl2 на FreeBSD — Часть I.

    Эта заметка дополняет имеющиеся статьи и рассматривает такие возможности PostfixAdmin, как: автоответчик, сбор почты, создание групповых алиасов, очистка диска от удаленных через GUI почтовых ящиков. На мой взгляд, эти вопросы слишком кратко рассмотрены в русскоязычных документах, поэтому я решил восполнить пробел.

    Исходные данные

    Имеется сервер с FreeBSD, на котором кроме всего прочего развернута почтовая система среднего офиса на базе Postfix. Для управления почтовой системой используется PostfixAdmin, настроенный по статье Настройка почтовой системы на freebsd. Часть I.

    Для включения описанных выше функций PostfixAdmin нам понадобятся Fetchmail (для сбора почты с удаленных серверов) и sudo (для запуска скрипта с привилегиями нужной учетной записи). Все программное обеспечение будет устанавливаться из портов, поэтому я рекомендую Вам обновить их перед выполнением действий, описанных ниже (я использовал FreeBSD 7.0 и последние версии портов для нее).

    Все имена папок соответствуют стандартным значениям, выбираемым по умолчанию при установке программного обеспечения из портов.

    Автоответчик

    Автоответчик предназначен для того, чтобы сотрудник, собирающийся, например, в отпуск, мог задать сообщение, которое будет отправляться в ответ на поступающие в его адрес сообщения, чтобы корреспонденты узнали, когда он вернется, к кому можно обратиться во время его отсутствия и т.п. Ниже показан скриншот окна, в котором можно задать сообщение автоответчика (по понятным причинам почтовые адреса и URL’ы скрыты):

    При выполнении действий, описанных в данном разделе, я руководствовался документом INSTALL.TXT, находящемся в /usr/local/www/postfixadmin/VIRTUAL_VACATION.

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

    pl, а также соответствующим образом изменить владельца папки и права скрипта:

    pw group add vacation -g 65501
    pw user add vacation -g vacation -s /sbin/nologin -u 65501
    mkdir /var/spool/vacation
    cd /var/spool/vacation
    cp /usr/local/www/postfixadmin/VIRTUAL_VACATION/vacation.pl .
    chown -R vacation:vacation .
    chmod 500 vacation.pl

    Затем необходимо подправить скопированный ранее скрипт vacation.pl. В частности, следует изменить строки, определяющие тип используемой базы данных, имя пользователя / пароль / имя базы данных:

    my $db_type = 'mysql';
    my $db_username = 'postfix';
    my $db_password = 'postfix';
    my $db_name = 'postfix';

    После этого необходимо добавить определение транспорта vacation в файл master.cf, находящийся в /usr/local/etc/postfix:

    vacation unix — n n — — pipe flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} — ${recipient}

    Если по соображениям безопасности Ваша файловая система /var имеет атрибут noexec (моя имеет), добавьте в командную строку путь к интерпретатору Perl, иначе скрипт vacation.pl не сможет запускаться:

    vacation unix — n n — — pipe flags=Rq user=vacation argv=/usr/bin/perl -w /var/spool/vacation/vacation.pl -f ${sender} — ${recipient}

    Далее следует добавить строку, определяющую транспорт vacation, в файл transport, находящийся в /usr/local/etc/postfix и являющийся таблицей транспортов. Формат данного файла описан в transport(5). Добавляемая строка имеет вид:

    autoreply.company.com vacation:

    После изменения файла transport необходимо выполнить команду postmap, указав в качестве аргумента имя файла transport. Домен autoreply.company.com является абстрактным, т.е. не нуждается в регистрации соответствующих записей в DNS, достаточно добавить запись об этом домене в файл /etc/hosts:

    127.0.0.1 autoreply.company.com

    Далее необходимо откорректировать значение параметра transport_maps в файле main.cf, находящемся в /usr/local/etc/postfix, добавив созданную (измененную) ранее таблицу транспортов:

    transport_maps = mysql:/usr/local/etc/postfix/mysql/transport_maps.conf, hash:/usr/local/etc/postfix/transport

    Остается подправить файл config.inc.php, находящийся в /usr/local/www/postfixadmin, для включения функций управления автоответчиком в интерфейсе PostfixAdmin. В частности, следует изменить строки, определяющие включение автоответчика; домен, используемый автоответчиком; возможность пользователей задавать сообщения автоответчика; возможность администратора изменять эти сообщения:

    $CONF['vacation'] = 'YES';
    $CONF['vacation_domain'] = 'autoreply.company.com';
    $CONF['vacation_control'] = 'YES';
    $CONF['vacation_control_admin'] = 'YES';

    Теперь можно перезапустить Postfx командой postfix reload и начать пользоваться автоответчиком. При возникновении каких-либо проблем c работой скрипта vacation.pl анализируйте сообщения, которые пишутся в /var/log/messages. В моем случае возникла всего одна несостыковка — отсутствие необходимых модулей Perl, которые были благополучно доустановлены из портов.

    Сбор почты

    Сбор почты — функция, позволяющая организовать доставку почты из почтовых ящиков, находящихся на удаленных почтовых серверах, в заданные локальные почтовые ящики. Ниже показан скриншот окна, в котором можно задать соответствие между почтовым ящиком на удаленном сервере и одним из локальных почтовых ящиков (по понятным причинам часть почтовых адресов и URL’ов скрыта):

    Система сбора почты использует утилиты Fetchmail и sudo. Естественно, их нужно установить из портов, если они не были установлены ранее:

    cd /usr/ports/mail/fetchmail
    make install clean
    cd ../../security/sudo
    make install clean

    Дополнительная настройка Fetchmail и sudo для работы совместно с PostfixAdmin не требуется. После завершения установки необходимо перейти в /usr/local/www/postfixadmin/ADDITIONS и соответствующим образом изменить права скрипта fetchmail.pl:

    cd /usr/local/www/postfixadmin/ADDITIONS
    chmod +x fetchmail.pl

    Затем необходимо подправить скрипт fetchmail.pl. В частности, следует изменить строки, определяющие имя базы данных / имя пользователя / пароль и полное имя исполняемого файла Fetchmail:

    $database=»postfix»;
    $user=»postfixadmin»;
    $password=»postfixadmin»;
    $ret=`/usr/local/bin/fetchmail`;

    Не торопитесь запускать скрипт fetchmail.pl, т.к. он сможет работать корректно только при запуске от имени владельца папки /var/spool/vmail (пользователя vmail). На форуме PostfixAdmin рекомендуется осуществлять такой запуск с помошью sudo.

    Для того, чтобы автоматизировать процесс сбора почты, необходимо добавить команду запуска скрипта fetchmail.pl в /etc/crontab.

    В моем случае опрос удаленных серверов осуществляется каждые 10 минут, и запись в файле /etc/crontab имеет следующий вид:

    */10 * * * * root /usr/local/bin/sudo -H -u vmail /usr/local/www/postfixadmin/ADDITIONS/fetchmail.pl

    Остается подправить файл config.inc.php, находящийся в /usr/local/www/postfixadmin, для включения функций управления сбором почты в интерфейсе PostfixAdmin. В частности, следует изменить строку, определяющую включение сбора почты:

    $CONF['fetchmail'] = 'YES';

    На этом настройка сбора почты заканчивается.

    Алиас everyone

    В некоторых случаях требуется отправить сообщение всем пользователям почтового домена (разослать какое-то распоряжение руководства, предупреждение и т.п.) Естественно, для этого используется специальный алиас (в моем случае — everyone@company.com), которой нуждается в постоянной корректировке.

    PostfixAdmin позволяет автоматизировать поддержание этого алиаса в актуальном состоянии.
    Для включения поддержки актуального состояния алиаса everyone@company.com в первую очередь необходимо перейти в /usr/local/www/postfixadmin/ADDITIONS и соответствующим образом изменить права скрипта mkeveryone.

    pl:

    cd /usr/local/www/postfixadmin/ADDITIONS
    chmod +x mkeveryone.pl

    Затем необходимо подправить скрипт mkeveryone.pl. В частности, следует изменить строки, определяющие имя пользователя / пароль, имя домена, и список адресов, которые не следует включать в состав алиаса (скорее всего, это адреса общих папок и служебных пользователей, таких как, например, postmaster и webmaster):

    my $userid=&amp;quot;postfix&amp;quot;;
    my $passwd=&amp;quot;postfix&amp;quot;;
    my $domain=&amp;quot;company.com&amp;quot;;
    my @ignore=(
    &amp;quot;info@company.com&amp;quot;,

    &amp;quot;webmaster@company.com&amp;quot;
    );

    Следует отметить, что скрипт mkeveryone.pl позволяет задать свою конфигурацию в отдельном файле. Мне не потребовалась такая функциональность, а Вам она может пригодиться.

    Для того, чтобы скрипт mkeveryone.pl запускался автоматически, необходимо добавить соответствующую строку в /etc/crontab.

    В моем случае скрипт запускается один раз в сутки в 0:15, и запись в /etc/crontab имеет следующий вид:

    15 0 * * * root /usr/local/www/postfixadmin/ADDITIONS/mkeveryone.pl

    На этом настройка завершается. Если Вы хотя бы немного знаете Perl и SQL, скрипт mkeveryone.pl может служить Вам отличной заготовкой для реализации автоматического создания любых алиасов.

    Очистка диска

    Как известно, GUI PostfixAdmin осуществляет изменение содержимого базы данных, но не изменяет содержимое жесткого диска. Т.о., при удалении ящика через GUI необходимо вручную удалить соответствующий maildir с жесткого диска.

    PostfixAdmin позволяет организовать автоматическое удаление ящиков с жесткого, диска, если информация о них была предварительно удалена из базы данных через GUI.

    Для включения поддержки автоматической очистки диска от удаленных почтовых ящиков в первую очередь необходимо перейти в /usr/local/www/postfixadmin/ADDITIONS и изменить права скрипта cleanupdirs.pl:

    cd /usr/local/www/postfixadmin/ADDITIONS
    chmod +x cleanupdirs.pl

    Затем необходимо подправить скрипт cleanupdirs.pl. В частности, следует изменить строки, определяющие папку, содержащую почтовые ящики и имя пользователя / пароль для доступа к базе данных:

    my $root_path = &amp;quot;/var/spool/vmail&amp;quot;;
    my $db_username = &amp;quot;postfix&amp;quot;;
    my $db_password = &amp;quot;postfix&amp;quot;;

    Для того, чтобы чтобы скрипт cleanupdirs.pl запускался автоматически, необходимо добавить соответствующую строку в /etc/crontab. В моем случае диск очищается один раз в сутки в 0:30, и запись в файле /etc/crontab имеет следующий вид:

    30 0 * * * root /usr/local/www/postfixadmin/ADDITIONS/cleanupdirs.pl —delete

    На этом настройка завершается. Список удаленных maildir’ов помещается в /var/log/removed_maildirs.log.

    Заключение

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

    Источник: https://SergeySL.ru/freebsd-postfixadmin/

    Почтовый сервер на Postfix и Courier с MySQL

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

    Почему courier, а не dovecot? Так исторически сложилось. Courier намного проще и для внутренней корпоративной почты вполне подходит – по крайней мере до сих пор нареканий не было.

    Ну и всегда можно прикрутить fetchmail, procmail и т.п.

    Устанавливаем необходимые пакеты:

    apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl mailx

    В ходе установки отвечаем на следующие вопросы:

    Create directories for web-based administration? – No General type of mail configuration – Internet Site System mail name — fqdn

    Создадим базу данных в MySQL

    mysqladmin create mail

    В MySQL создадим пользователя mail_admin и предоставим ему права на базу данных mail.

    mysql mail GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'пароль_пользователя'; GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'пароль_пользователя'; FLUSH PRIVILEGES;

    В базе данных создадим таблицы domains, forwardings, users и transport.

    CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ); CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ); CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) ); CREATE TABLE transport (domain varchar(128) NOT NULL default '',transport varchar(128) NOT NULL default '',UNIQUE KEY domain (domain)); quit

    Таблица domains будет хранить наименования виртуальных доменов, для которых Postfix будет получать письма. Таблица forwardings будет содержать псевдонимы почтовых ящиков.

    Таблица users будет содержать всю информацию о виртуальных пользователях. Таблица transport необязательного характера, она для продвинутых пользователей.

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

    Проверим, на каком адресе слушает MySQL. Для этого выполним:

    cat /etc/mysql/my.cnf | grep bind-address

    Ответ должен быть следующим:

    bind-address = 127.0.0.1

    Создадим 4 файла конфигурации для postfix. В каждом из них убеждаемся, что параметр password задан верно.

    Файл /etc/postfix/mysql-virtual_domains.cf —————— user = mail_admin password = пароль_пользователя dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1Файл /etc/postfix/mysql-virtual_forwardings.

    cf —————— user = mail_admin password = пароль_пользователя dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1Файл /etc/postfix/mysql-virtual_mailboxes.

    cf —————— user = mail_admin password = пароль_пользователя dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1Файл /etc/postfix/mysql-virtual_email2email.

    cf —————— user = mail_admin password = пароль_пользователя dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1

    Выставим права и владельца на созданные файлы:

    chmod 660 /etc/postfix/mysql-virtual_*.cf chgrp postfix /etc/postfix/mysql-virtual_*.cf

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

    groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail -m

    Внесем изменения в конфигурацию postfix. Проверьте параметры, относящиеся к вашему почтовому серверу

    postconf -e 'myhostname = fqdn_of_your_mail_server' postconf -e 'mydestination = fqdn_of_your_mail_server, localhost, localhost.localdomain' postconf -e 'mynetworks = 127.0.0.0/8' postconf -e 'message_size_limit = 30720000' postconf -e 'virtual_alias_domains =' postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf,mysql:/etc/postfix/mysql-virtual_email2email.cf' postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf' postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf' postconf -e 'virtual_mailbox_base = /home/vmail' postconf -e 'virtual_uid_maps = static:5000' postconf -e 'virtual_gid_maps = static:5000' postconf -e 'smtpd_sasl_auth_enable = yes' postconf -e 'broken_sasl_auth_clients = yes' postconf -e 'smtpd_sasl_authenticated_header = yes' postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination' postconf -e 'smtpd_use_tls = yes' postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert' postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key' postconf -e 'virtual_create_maildirsize = yes' postconf -e 'virtual_maildir_extended = yes' postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

    Создадим сертификат:

    cd /etc/postfix openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509

    В ходе генерации отвечаем на ряд простых вопросов:

    Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:NN Locality Name (eg, city) []:NN Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany, LLC Organizational Unit Name (eg, section) []:IT Common Name (eg, YOUR name) []:server.yourdomain.local Email Address []:support@yourdomain.local

    Дадим на него права:

    chmod o= /etc/postfix/smtpd.key

    Создадим каталог для saslauthd

    mkdir -p /var/spool/postfix/var/run/saslauthd

    Отредактируем файл /etc/default/saslauthd. Изменим параметры START и OPTIONS на следующие:

    START=yes OPTIONS=»-c -m /var/spool/postfix/var/run/saslauthd -r»

    Создадим файл /etc/pam.d/smtp и вставим в него две строки (измените пароль на свой):

    auth required pam_mysql.so user=mail_admin passwd= пароль_пользователя host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd= пароль_пользователя host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

    Создаем файл /etc/postfix/sasl/smtpd.conf и добавляем в него следующие сотроки:

    pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: sql_passwd: sql_database: sql_select: select password from users where email = '%u@%r'

    Добавляем пользователя postfix в группу sasl и перезапускаем postfix и saslauthd:

    adduser postfix sasl /etc/init.d/postfix restart /etc/init.d/saslauthd restart

    Редактируем /etc/courier/authdaemonrc

    sed —in-place -e 's/authmodulelist=»authpam»/authmodulelist=»authmysql»/g' /etc/courier/authdaemonrc

    Сохраняем файл /etc/courier/authmysqlrc. Вместо него создаем вместо него пустой файл:

    cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig cat /dev/null > /etc/courier/authmysqlrc

    Добавляем в созданный файл следующее:

    MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD пароль_пользователя MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD “/home/vmail” MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')

    Удаляем оригинальные сертификаты, созданные Courier

    rm -f /etc/courier/imapd.pem && rm -f /etc/courier/pop3d.pem

    В файлах /etc/courier/imapd.cnf и /etc/courier/pop3d.cnf заменяем CN=localhost на CN=полное_доменное_имя_почтового_сервера.
    Регенерируем сертификаты и перезапускаем сервисы:

    cd /etc/courier mkimapdcert mkpop3dcert /etc/init.d/courier-authdaemon restart /etc/init.d/courier-imap restart /etc/init.d/courier-imap-ssl restart /etc/init.d/courier-pop restart /etc/init.d/courier-pop-ssl restart

    Редактируем псевдонимы в файле /etc/aliases:

    postmaster: root root: postmaster@yourdomain.com

    Обновляем алиасы и перезапускаем postfix:

    newaliases /etc/init.d/postfix restart

    Проверяем наш smtp сервер:

    telnet localhost 25

    Когда подключимся, выполняем

    ehlo localhost

    Если все правильно настроили, вывод будет примерно таким:

    250-ubuntusrv.zz.local 250-PIPELINING 250-SIZE 30720000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN

    Теперь можно создавать виртуальные домены и пользователей. Для этого заходим в MySQL:

    mysql mail INSERT INTO domains (domain) VALUES ('yourdomain.local'); INSERT INTO users (email, password) VALUES ('ozzy@ yourdomain.local ', ENCRYPT('ozzy')); quit;

    Для создания почтового ящика отправляем письмо на адрес ozzy@yourdomain.local

    mailx ozzy@yourdomain.local

    Сначала вводите тему сообщения, потом тело. Для выхода из редактирования нажимаем Ctrl+D.
    Все. Можно настраивать почтовых клиентов.

    Источник: https://www.oslogic.ru/knowledge/345/pochtovyj-server-na-postfix-i-courier-s-mysql/

    Ссылка на основную публикацию