I run a home file, media and backup server at home on Ubuntu Server 12.04 LTS. I have various cron jobs set-up for various task such as backing up external MySQL databases, web site data and other tasks.
However sometimes you want to know if particular tasks have run successfully and to only have to check a single (external) mail account is much more reasonable, so I’m going to show you how to create a mail alias so emails get sent directly to your external email account.
First of all you need to make sure that you have a mail server installed on your server, I have a default install of Postfix installed, I’ve not done any special configuration to it at all, it will simple be used to end emails externally. – My home server is not set-up to receive any external emails etc.
Now run this command:-
Now restart Postfix:-
service postfix restart
Hope this will help some people looking to do the same 🙂
sudo chown postfix /etc/postfix
Thank you for reading this post, don’t forget to subscribe!

При помощи RouneCube и ManageSiev
Предполагается, что почта уже работает, установлен Dovecot, Roundcube и , в моем случае Postfix (но это пофик).
Пересобрать Dovecot с поддержкой ManageSiev:
Включить протокол managesieve и задать дополнительные настройки в /usr/local/etc/dovecot.conf
Включить в Roundcube плагин managesieve (по идее он уже должен быть в каталоге roundcube/plugin). Замениа в файле /usr/local/www/roundcube/config/main.inc.php следующий параметр:
Теперь в меню настройки/фильтры в Roundcube можно настраивать фильтрацию писем.

Средствами самого Postfix’а
В файл main.cf добавить строку:
В файле postfix/recipient_bcc указываем с какого на какой ящик перенаправляем почту:
После чего применить изменения командой:
Как вывод можно сказать что проще и быстрее будет делать средствами самого Postfix‘а, но правильнее и удобнее для пользователя — при помощи RouneCube и ManageSiev.
Как мне вырезать все вложения при отправке писем во внешний мир?
Реализовать данную задачу можно с помощью программы altermime.
В данном примере использовалась следующая версия altermime
Для начала пишем небольшой скрипт.
Сохраняем его например под таким именем /etc/postfix/filter/remove_attachments.sh
И выставляем права на запуск
Теперь нам необходимо описать сам транспорт для фильтрации в файле /etc/postfix/master.cf
Теперь описываем политики фильтрации в файле /etc/postfix/main.cf
Создаем соответствующие карты просмотра
Отправляем внутри домена письмо с вложением
Теперь попробуем отправить письмо с вложением в мир
Как видно из log-файла письмо было передано фильтру altermime, который удалил вложения и далее отправлено адресату
Как избавиться от сообщений вида — warning
Как правило сообщение появляется если вы явно не задали значение параметра alias_maps и у вас на сервере не настроена (Network Information Service)
Как видно из вывода значение по умолчанию содержит ссылку на карту типа nis. Чтобы решить данную проблему достаточно указать следующее значение
И дать команду postfix перечитать конфигурационный файл
Как мне отвергать соединения, в которых представляются именем моего сервера?
Для этого необходимо сделать соответствующую проверку в smtpd_helo_restrictions
В данный список вносим имя нашего сервера
Создаем карту hello_access.db и даем команду postfix перечитать конфигурационный файл
А теперь тестируем наше ограничение
Как мне сделать квотирование почтовых ящиков?
Вообще то это не функция , по этому по умолчанию postfix не поддерживает данный функционал. Если вам необходимы квоты, то вы можете использовать vda (virtual delivery agent) с патчем. Либо использовать альтернативные агенты доставки, например maildrop/dovecot delivery agent
Что такое классы адресов в postfix и для чего они нужны?
Классы адресов это способ группировки адресов получателей по способу доставки их писем. Всего существует 5 встроенных классов адресов:
Каждый из предопределенных классов адресов определяет следующие три вещи:
У меня в системе 3 ящика, пользователи системные. Как мне принимать почту только для этих ящиков?
Для решения данной задачи достаточно пречислить необходимых пользователей в файле и указать ссылку на него в параметре local_recipient_maps
Теперь отправим письмо системному пользователю alexander, но который не указан в /etc/postfix/local_mailbox
Как мы видим postfix еще на этапе сессии сообщил о том, что такого пользователя нет.
Как бороться с ошибкой warning: do not list domain domain.ua in mydestination and virtual_mailbox_domains?
Итак у нас postfix со следующей конфигурацией
Настройки минимальные, только чтобы описать суть проблемы. Как видно из вывода наш домен — vmware.local указан в $mydestination с помощью параметра $mydomain, а также он указан в $virtual_mailbox_domains. Т.е. мы указали один и тот же домен сразу в двух классах адресов — локальных и виртуальных. Чего не стоит никогда делать.
Теперь смотрим log-файл
Как видим мы получили соответствующее предупреждение о том, что наш домен указан сразу в двух классах адресов. И как видно из сообщений почту была доставлена локальному пользователю alex, а не как мы хотели виртуальному.
Самое просто решение данной проблемы — это исколючить домен vmware.local из $mydestination
Еще раз отправляем сообщение и смотрим log-файл
Как видно из сообщения письмо доставлено виртуальному пользователю alex, о чем свидетельствует строка relay=virtual, а также формат ящика — delivered to maildir
Некторые полезные команды
Вывод значения по умолчанию определенного параметра
Вывод текущего значения параметра
Вывод версии postfix
Просмотр текущей очереди сообщений
Удаление всех писем из очереди
Повторная отправка сообщений, которые находятся в очереди
Как мне реализовать «умный» грейлистинг?
Под словом «умный» я подразумеваю избирательный метод по определенным критериям. Например, дальше в примере, мы будем «награждать» грейлистингом хосты у которых отсутствует запись в обратной зоне или они используют т.н. литеральную форму, т.е. в helo подставляют ip адрес заключенный в квадратные скобки.
В данном примере в качестве грейлистинга я использовал — gld, который слушает входящие соединения на порту 2525. Вы можете использовать любой грейлистинг на ваш выбор.
В данном файле мы описываем отправителей, которых мы хотим исключить из грейлистинга
В данном файле мы описываем хосты, которые мы хотим исключить из грейлистинга
В данном файле мы описываем собственно саму политику — при отсутствии записи в обратной зоне, клиент будет награжден грейлистингом. greylisting — это пользоватлеьский класс, который определяется в файле main.cf.
В данном файле мы описываем политику — при использовании литеральной формы, клиент будет награжден грейлистингом.
Как мне отклонять соединения от клиентов, когда mx отправителя резолвится в адрес из частной сети?
Тогда при попытке отправить отправить вам письмо в лог-файле будет следующее
А теперь давайте посмотрим что же не понравилось postfix в этом клиенте
Теперь думаю все стало понятно, врядли стоит принимать почту от клиентов у которых запись указывает на 127.0.0.1
Как мне запретить прием почты от определенного домена/пользователя?
Как мне запретить прием писем с определенными вложениями?
Тогда при попытке отправить письмо с вложением exe/bat/cmd/mp3 в лог-файле будет следующее
Как избежать дублирования писем при использовании алиасов?
Например у нас есть следующий алиас
Как мне получать всю почту для не существующих ящиков?
Для этого достаточно задать следующие параметры в main.cf
При такой настройке вся почта для не существующих пользователей будет перенаправляться пользователю info
Особенности работы данной функции:
Чтобы узнать значение по умолчанию, необходимо выполнить следующую команду
Как заставить postfix уведомлять отправителя о том, что письмо не доставлено получателю и находится в очереди?
Для включения данной возможности необходимо задать параметр delay_warning_time
При такой настройке, уведомление будет отправляться через 3 часа
У меня в системе несколько интерфейсов, как мне указать postfix слушать только определенные?
Существует два способа решения этой задачи: внесения изменений в main.cf или master.cf
Как указать postfix слушать порт отличный от 25го?
Для этого достаточно заменить строку в master.cf
И перезапустить postfix. После этого можно проверить изменения
Как узнать поддерживает ли postfix аутентификацию, и если поддерживает, то какие методы?
Строка говорит о том, что данный сервер поддерживает два метода аутентификации — и .
Также из данного вывода мы можем получить следующую интересную информацию:
Для этого достаточно выполнить следующую команду
Как видно из вывода данная сборка postfix не поддерживает MySQL. Так же можно проверить с какими внешними библиотеками собран сам postfix
У меня на сервере 2 интерфейса и нужно, чтобы при соединении на 1й интерфейс выдавался один банер, а при соединении на 2й интерфейс второй. Как это можно реализовать?
Где xxx.xxx.xxx.xxx и yyy.yyy.yyy.yyy ip адрес первого и второго интерфейса соотвественно. Переменные banner_if1 и banner_if2 мы определяли в файле main.cf специально, так как в файле master.cf не допускаются пробелы в значениях параметров
Как мне сохранить копии всех исходящих писем?
Как мне сохранить копии всех входящих писем?
Как мне сохранить копии всех писем?
Необходимо организовать доступ следующим образом:
с одного ip адреса, можно отправлять сообщение только одному почтовому ящику (связь один к одному)
создаём следующие файлы:
total 44
-rw-r—r— 1 root root 18 Jan 25 13:53 access_ip
-rw-r—r— 1 root root 18 Jan 25 14:21 access_ip2
-rw-r—r— 1 root root 47 Jan 25 14:35 mail_list
со следующим содержимым:
как только файлы созданы выполняем следующую команду:
postmap /etc/postfix/access_mail/access_ip
postmap /etc/postfix/access_mail/access_ip2
postmap /etc/postfix/access_mail/mail_list
при любом добавлении информации в данные файлы, необходимо повторять данную команду.
далее необходимо внести корректировки в конфигурационный файл:
/etc/postfix/main.cf
добавляем следующую запись:
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access_mail/mail_list, reject
smtpd_restriction_classes = class_domain1,class_domain2
class_domain1 = check_client_access hash:/etc/postfix/access_mail/access_ip, reject
class_domain2 = check_client_access hash:/etc/postfix/access_mail/access_ip2, reject
после чего перезапускаем postfix
systemctl restart postfix
Проверить работу можно следующим образом:
yum –y install mailx
здесь 10.10.10.50 нашего релея
—————————————————————————————
Дополнительная информация
В демоне smtpd есть 4 ограничения(restrictions) для почты
Ограничение Когда проверяется Что проверяется
Проверка происходит в указанном порядке. Если какое-либо из ограничений даёт негативный ответ — дальнейшая проверка прекращается и клиент посылается куда подальше. И есть одна директива, которая управляет временем вычисления значений и применения ограничений. Это smtpd_delay_reject. Если она равна yes, Postfix дождётся момента, когда будет доступна полная информация о клиенте(ip и helo) и письме(от кого и кому), и только после этого вступят в действие ограничения. Иначе ограничения вычисляются и
применяются соответственно таблице. По умолчанию директива включена. Как пишут в мане, это есть хорошо — в логе видно, кому и чья почта «не дошла». Также это даёт определённые плюсы — возможность оперировать всеми величинами во всех ограничениях.
Если необходимо чтобы с разных ip адресов почтовый ящик мог отправлять сообщения, то приводим конфиги к следующему виду:
cat /etc/postfix/access_mail/access_ip4
10.10.10.1
10.10.10.2
и выполняем:
postmap /etc/postfix/access_mail/access_ip4
postmap /etc/postfix/access_mail/mail_list
=================================================================================
Если необходимо произвести настройку многие ко многим, т.е. имеется список почтовых ящиков и список ip адресов, и с каждого из этих серверов можно отправлять сообщения с почтовых ящиков указанных в списке.
в main.cnf добавляем
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access_mail/mail_list,check_sender_access hash:/etc/postfix/access_mail/ip_list,reject
cat /etc/postfix/access_mail/ip_list
10.10.10.1
10.10.10.2
после чего выполняем
postmap /etc/postfix/access_mail/mail_list
postmap /etc/postfix/access_mail/ip_list
и перезапускаем postfix
systemctl restart postfix
Ограничить доступ на релее — запрет на отправку с определённых email
Имеется корпоративный релей, через который идёт отправка сообщений со всех ip адресов добавленных в переменную mynetworks (айпишники или подсети)
Далее поступила задача ограничить отправку с определённых почтовых ящиков (они нужны были для внутренней рассылки и мы так обезопасили себя если они ломануться на внешку)
Мы создали файл:
/etc/postfix/sender_access
Со следующим содержимым:
Создавали далее хэш
postmap /etc/postfix/sender_access
( smtpd_sender_restrictions отвечает за — ограничения будут применяться во время выполнения клиентской команды )
Наша конфигурация имеет следующий вид:
smtpd_client_restrictions = permit_mynetworks
smtpd_restriction_classes = has_our_domain_as_sender
has_our_domain_as_sender = check_sender_access hash:/etc/postfix/has_our_domain_as_sender reject
smtpd_sender_restrictions =
check_sender_access hash:/etc/postfix/sender_access,
permit_mynetworks,
reject_unauth_destination,
reject_invalid_hostname,
reject_unknown_helo_hostname,
reject_non_fqdn_hostname,
reject
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
permit_mynetworks,
check_client_access hash:/etc/postfix/company_networks,
reject_unauth_destination,
reject
Рассмотрим подробнее:
smtpd_client_restrictions — настройки ограничения клиентских соединений. В данном примере разрешить только авторизованных permit_mynetworks, который соответствует mynetworks со списком ip адресов и подсетей
smtpd_restriction_classes — тут описываем класс с именем has_our_domain_as_sender. Содержимое которого соответствует нашим доменам от которых происходит отправка.
cat /etc/postfix/has_our_domain_as_sender
test.kg
test.local
test.info
cat /etc/postfix/company_networks
10.230 has_our_domain_as_sender
10.244 has_our_domain_as_sender
127.0.0 has_our_domain_as_sender
———— ———————— ———————- —————————-
Теперь поступила задача ограничивать =email
smtpd_client_restrictions = permit_mynetworks
smtpd_restriction_classes = has_our_domain_as_sender,class_domain1,class_domain2
has_our_domain_as_sender = check_sender_access hash:/etc/postfix/has_our_domain_as_sender reject
class_domain1 = check_sender_access hash:/etc/postfix/access_mail/access_mail1, reject
class_domain2 = check_sender_access hash:/etc/postfix/access_mail/access_mail2, reject
smtpd_sender_restrictions =
warn_if_reject
check_client_access hash:/etc/postfix/sender_access,
check_sender_access hash:/etc/postfix/sender_access,
permit_mynetworks,
reject_unauth_destination,
reject_invalid_hostname,
reject_unknown_helo_hostname,
reject_non_fqdn_hostname,
reject
smtpd_relay_restrictions = check_client_access hash:/etc/postfix/sender_access, permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
Рассмотрим что тут творится:
smtpd_client_restrictions — настройки ограничения клиентских соединений. В данном примере разрешить только тех что добавлены в mynetworks
smtpd_restriction_classes — тут описываем наши классы: has_our_domain_as_sender,class_domain1,class_domain2
smtpd_recipient_restrictions контролирует ответ Postfix на стадии SMTP-команды . Здесь мы разрешаем только соединения от узлов, перечисленных в mynetworks но мы ещё добавляем
check_client_access hash:/etc/postfix/company_networks в котором наши ip адреса не указанные в mynetworks .
cat /etc/postfix/company_networks
10.230 has_our_domain_as_sender
10.244 has_our_domain_as_sender
127.0.0 has_our_domain_as_sender
10.71.200.29 has_our_domain_as_sender
10.71.200.28 has_our_domain_as_sender
10.71.200.40 has_our_domain_as_sender
smtpd_relay_restrictions — ограничения пересылки почты в контексте клиентской команды .
Тут мы проверяем
check_client_access hash:/etc/postfix/sender_access
Чтобы настроить ограничение ip=mail делаем следующие шаги:
cat /etc/postfix/sender_access
10.71.200.40 class_domain2
cat /etc/postfix/company_networks
10.71.200.40 has_our_domain_as_sender
cat /etc/postfix/main.cf
smtpd_restriction_classes = has_our_domain_as_sender,class_domain1,class_domain2
class_domain2 = check_sender_access hash:/etc/postfix/access_mail/access_mail2, reject
postfix check — и если всё ок то можно
systemctl restart postfix
Задался вопросом а как отслеживать события на подконтрольных серверах, вроде отвалившегося раздела из RAID-массива. По умолчанию система отправляет системные сообщения на почту root, т.е. в файл /var/mail/root. Нам же нужно, чтобы почту уходила не внешний ящик, информацию на котором мы сразу увидим.
Решить вопрос можно двумя (как минимум) путями:
Postfix
Задача разбивается на 2 части:
Первое уже решено ранее, нужно разобраться со 2-й задачкой. Поискал инфу, попробовал, получил резальтат, решил в вики оформить, благо писать не много.
Вот и все, почта для root будет падать на наш внешний почтовый ящик. Проверил на ВМ, имитацией отказа одного из разделов в RAID1.
Ssmtp
Также, вместо postfix, можно воспользоваться утилитой ssmtp.
Установка
sudo apt-get install ssmtp
Настройка
Редактируем файл /etc/ssmtp/ssmtp.conf
Настраиваем отправителей писем:
Редактируем файл /etc/ssmtp/revaliases
Проверим настройки, отправив тестовое письмо
Теперь вы можете отправлять почту из консоли и скриптов.
Однако, таким способом системная почта для root и пользователей отправляться не будет.
Чтобы заставить ssmtp работать и с системной почтой, выполним следующие действия:
sudo rm /usr/sbin/sendmail
sudo nano /usr/sbin/sendmail
Даём права на исполнение
sudo chmod +x /usr/sbin/sendmail
Обратите внимание, теперь почта будет отправляться только на адрес, который указали в /usr/sbin/sendmail,
независимо от того, какие электронные адреса указаны в консоли и скриптах.

Тема: Postfix пересылка всей входящей почты на другой ящик (Прочитано 19851 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Доброго времени. Имею настроенный postfix для рассылки. Есть необходимость пересылать всю входящую почту на ящик на другом почтовом сервере.
Гугл предложил несколько вариантов, я подытожил и получил вот такой
В файл main.cf recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
В файл recipient_bcc
поле чего postmap /etc/postfix/recipient_bcc postfix reload
Уточните пожалуйста правильность решения. Так как сервер боевой, а я не совсем уверен в правильности решения, не очень хочу экспериментировать.
Это не пересылка. Так Вы сделаете копирование всех входящих писем на заданный адрес. Если нужна именно пересылка, то настройте транспорт.
Собственно, мне и копирование подойдет. Лишь бы работало. Правильно все написано?
p.s. Поделитесь ссылкой про настройку транспорта для настройки пересылки
Вроде правильно, только звездочку уберите. А с транспортом все просто — в файл transport_maps пишете правило типа
Про транспорты не понял 🙂 у меня никакие не используются. А по поводу копирования, без звездочки так?
Да. Про транспорт — как и любая другая карта, транспорт может быть реализован по-разному. Например, так же, как у Вас карта recipient_bcc.
Это письмо отправлено почтовым сервером yandex.ru.
К сожалению, мы вынуждены сообщить Вам о том, что Ваше письмо не можетбыть отправлено одному или нескольким адресатам. Причины указаны ниже.
Пожалуйста, не отвечайте на это сообщение.
This is the mail system at host yandex.ru.
I’m sorry to have to inform you that your message could notbe delivered to one or more recipients. It’s attached below.
Please, do not reply to this message.
Подскажите пожалуйста как сделать пересылку всей входящей почты на ящик на яндексе
Покажите, что у Вас в строке mynetworks в main.cf?
mynetworks_style = subnetmynetworks = 127.0.0.0/8, 94.19.*.*/32, 5.61.*.*/32, 89.31.*.*/32
А при этом IP Вашего сервера — 88.198.18.245 (судя по приведенному выше ответу от Яндекса)? Вставьте этот адрес в mynetworks.
If you specify the mynetworks list by hand, Postfix ignores the mynetworks_style setting.
« Последнее редактирование: 27 Ноября 2013, 10:58:21 от Karl500 »
Гхм. Дурацкий вопрос можно? А Вы перезапускаете postfix после изменений в конфигурации?
Покажите под спойлер Ваш main.cf целиком.
« Последнее редактирование: 28 Ноября 2013, 09:44:28 от Karl500 »
Karl500, лучше смотреть postconf, он заодно должен проверять синтаксис.
ArcFi,Можно и postconf -n , да.
mail_owner = postfixmyhostname = mx.moidomen.rumydomain = moidomen.rumyorigin = $myhostname
inet_interfaces = allinet_protocols = ipv4mydestination = localhost.$mydomain, localhost, $myhostnameunknown_local_recipient_reject_code = 550mynetworks_style = subnetmynetworks = 127.0.0.0/8, 94.19.*.*/32, 5.61.*.*/32, 89.31.*.*/32, 88.198.18.245/32alias_maps = hash:/etc/aliasesalias_database = hash:/etc/aliasesdebug_peer_level = 2html_directory = nosmtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender reject_unknown_sender_domain
recipient_bcc_maps = hash:/etc/postfix/recipient_bccqueue_run_delay = 300maximal_queue_lifetime = 1dbounce_queue_lifetime = 3h
smtpd_client_event_limit_exceptions = $mynetworkssmtpd_client_connection_count_limit = 100relay_destination_concurrency_limit = 50smtpd_authorized_verp_clients = $mynetworks
milter_default_action = acceptmilter_protocol = 2smtpd_milters = inet:localhost:26000non_smtpd_milters = inet:localhost:26000






