Postfix Sasl | Courier-imap, Postfix

Упал почтовый сервер, быстро перетащил все на новый, запустил, но споткнулся об авторизацию SASL.
Первый момент – не показывает AUTH при пробах телнетом. Оказалось все просто, проверяем дает ли postfix авторизоваться без tls (смотрим main.cf):

smtpd_tls_auth_only = yes

Если есть такая строка то подключившись телнетом мы не увидим строки типа:

250 AUTH .....

Теперь предположим что имап и поп3 у нас работает а при отправке сасл не даёт авторизоваться. Самый простой вариант – использовать courier-authdaemond.
Он у нас уже прописан в rc.conf и запущен.

Правим конфиг sasl – /usr/local/lib/sasl2/smtpd.conf пишем в него:

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/run/authdaemond/socket

И права на директорию /var/run/authdaemond даем группе postfix.
Иначе можем поймать ошибку:

SASL authentication failure: cannot connect to Courier authdaemond: Permission denied

Postfix дублирование сообщений на два ящика | FreeBSD, Postfix

Простая фича postfix выручает когда надо продублировать поток сообщений для ящика на нашем сервере и стороннего почтового адреса (например дубль входящих сообщений на рабочий и личный ящик сотрудника).

Называется это BCC (что-то типа скрытых копий). Настраивается в master.cf куда добавляем строки с указанием на карты соответствия адреса получателя и адресата копии.

sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
recipient_bcc_maps = hash:/usr/local/etc/postfix/recipient_bcс

Создаем сами файлы:

touch /usr/local/etc/postfix/sender_bcc
touch /usr/local/etc/postfix/recipient_bcс

В файлы пишем пары адресов – ящик в нашем домене и ящику куда надо выслать копию. Разделитель – Tab.
Сохраняем и пересоздаем базы командами.

postmap /usr/local/etc/postfix/sender_bcc
postmap /usr/local/etc/postfix/recipient_bcс

Перезапускаем postfix или делаем reload.

PS: Все сообщения сервера можно дублировать директивой

always_bcc = backup@domain.com

unsupported dictionary type: mysql, Inappropriate file type or format | FreeBSD, Postfix

После обновления postfix (посредством portupgrade) поймал ошибки:

postfix/trivial-rewrite[87453]: warning: virtual_alias_domains lookup failure
postfix/trivial-rewrite[87453]: warning: mysql:/usr/local/etc/postfix/mysql/mysql_virtual_alias_maps.cf 
is unavailable. unsupported dictionary type: mysql

База пользователей у меня хранится в mysql и ругань возникла поскольку я не отметил поддержку mysql во время обновления – а по дефолту порт предложил собраться только с поддержкой pcre. :)
Продолжить чтение →

reject_unknown_client. Исключения | Postfix

Как настроить ограничение reject_unknown_client я уже писал (см. здесь) но почтовые сервера у которых отсутствует PTR запись в днс зоне не такая редкость. Если нам нужно внести ограничение на действие директивы reject_unknown_client можно создать карту исключений.

Создаем файл с именами, айпи адресами и т.д. Например /usr/local/etc/postfix/client_access

Пишем в него:

@mail.ru   OK
193.33.24.24   OK
mail.ru   OK
info@server.ru   OK

В нашем случае, когда в логе мы видим что отрабатывает правило reject_unknown_client и имя машины у нас unknown[193.33.24.24]:

postfix/smtpd[99471]: NOQUEUE: reject: RCPT from unknown[193.33.24.24]: 450 Client host 
rejected: cannot find your hostname

Важно добавить в карту именно айпишник сервера с которого нам шлют почту:

193.33.24.24 OK

Далее делаем:

#postmap hash:/usr/local/etc/postfix/maps/client_access

Получаем файл client_access.db

Прописываем в набор ограничений в файл main.cf (ставим ссылку на хэш до ограничивающей директивы):

smtpd_recipient_restrictions =
        check_client_access hash:/usr/local/etc/postfix/client_access,
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        reject_unknown_sender_domain,
        reject_unlisted_sender,
        reject_unknown_client,
        reject_rbl_client sbl-xbl.spamhaus.org

Запятые – не обязательно если директивы идут с новой строки. Обращаем внимание последовательность применения наборов у postfix следующая:

1. smtpd_client_restrictions
2. smtpd_helo_restrictions
3. smtpd_sender_restrictions
4. smtpd_recipient_restrictions
5. smtpd_data_restrictions

То есть в принципе мы могли бы добавить наши директивы в первый набор smtpd_client_restrictions.

Не забываем про директиву:

smtpd_delay_reject = yes

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

Для удобства просмотра лога в реальном времени не забываем про tail
Делаем.

#tail -f /var/log/maillog | grep @server.ru

И просим прислать с вражеского сервера письмо.

Roundcube | Courier-imap, Postfix

Есть задача – поставить веб интерфейс к почтовому серваку. Самым популярным наверное будет roundcube (в обзорах на самаге его хвалят, как ставить все рассказывают, к тому же уже стоял у нас roundcube на старом нашем почтовике)…
Итак ставим roundcube.
Первое что необходимо осознать – для работы roundcube необходим настроенный и рабочий IMAP. По сути roundcube – это веб IMAP клиент. Продолжить чтение →

Recipient address rejected: User unknown; | Postfix

Немного нестандартная ситуация с ошибкой почтовика Recipient address rejected: User unknown;

Во время переноса сервера сложилась следующая ситуация – часть доменов со старого почтовика я перенёс на новый (на обоих почтовиках аутентификация через базу mysql).
Используя postfixadmin удалил со старого почтовика домены, но суть в том что из базы записи о доменах в таблицах остались. По этой причине получил ошибку Recipient address rejected: User unknown; Продолжить чтение →

Миграция postfix, postfixadmin | Postfix

Есть старый почтовик на postfix 2.1.0 с управлением пользователями через postfixadmin. Соответсвенно база пользователей в mysql. Задача – прозрачно перейти на новый почтовик, с сохранением базы пользователей (пароли, алиасы и т.д.). Проблема только в том, что новый postfixadmin (2.3) имеет другую структуру таблиц базы и просто сделать дамп базы и залить на новой машине не получится. Продолжить чтение →

reject_unknown_client | Postfix

Существует фильтр постфикса отсекающий почту пришедшую от хоста у которого нет PTR записи:

reject_unknown_client

Обычно спам приходит с обычного хоста пользователя напрямую (зомби машина в ботнете рассылающая спам). Хост имеет айпи но не имеет PTR записи в днс зоне. В заголовке при получении такого письма будет:

from DNQRXMB (unknown [188.158.74.251]) by post.firma.ru (Postfix) with ESMTP id 9A891EBD45; Tue, 8 Jun 2010 13:13:23 +0400 (MSD)

или так

from [195.22.34.45] (unknown [195.22.34.45]) by post.firma.ru (Postfix) with ESMTP id 3B81FEBD03; Tue, 8 Jun 2010 16:52:38 +0400 (MSD)

Добавим проверку reject_unknown_client перезапустим постфикс. Теперь постфикс принимать почту от клиентов чей айпи не имеет PTR записи.

Однако. Если ваша машина сидит с маршрутизируемым адресом и вы пытаетесь просто послать почту через ваш сервак и у вашего маршрутизируемого адреса нет PTR записи в зоне – почту сервер не примет:

4.7.1 Client host rejected. Cannot find your hostname, [195.11.22.44]

Аналогичная ситуация может быть (?) если ваш почтовый клиент будет общаться с почтовиком через шлюз без PTR записи, или если ваш сервер без PTR записи пересылает вам на имейл через ваш почтовик с reject_unknown_client в main.conf почту для root или оповещение от службы типа monit…