Разрешение почты для определенного IP/домена.

Приветствую.

В логах следующее:

Sep 16 01:40:23 cy postfix/submission/smtpd[14713]: warning: hostname * does not resolve to address 176.*.*.*
Sep 16 01:40:23 cy postfix/submission/smtpd[14713]: connect from unknown[176.*.*.*]
Sep 16 01:40:23 cy postfix/submission/smtpd[14713]: Anonymous TLS connection established from unknown[176.*.*.*]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
Sep 16 01:40:23 cy postfix/submission/smtpd[14713]: NOQUEUE: reject: RCPT from unknown[176.*.*.*]: 554 5.7.1 <unknown[176.*.*.*]>: Client host rejected: Access denied; from=<test@email.*.com> to=<someuser@cy.*.com> proto=ESMTP helo=<email>
Sep 16 01:40:23 cy postfix/submission/smtpd[14713]: disconnect from unknown[176.*.*.*]

Политики такие:
smtpd_relay_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_recipient_restrictions = reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_sender, reject_unknown_client_hostname, reject_unknown_sender_domain, reject_rbl_client ...
smtpd_sender_restrictions = check_sender_access regexp:/opt/zimbra/postfix/conf/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, permit_tls_clientcerts, check_sender_access regexp:/opt/zimbra/postfix/conf/tag_as_foreign.re

Насколько я понял, реджект происходит из-за неправильного helo=<email>? Меня интересует, - как настроить Зимбру, чтобы она игнорировала все проверки для определенного IP или домена?

Комментарии

Не вдаваясь в подробности, выяснил, что реджект происходит в виду того что PTR запись ссылается на другой хост. Но сути это не меняет. Интересует возможность разрешения приема писем от таких отправителей.
alexvg75 аватар
Добавьте хост в исключения (белый список).
Не помню что конкретно влияет: client restrictions или sender restrictions (можно добавить и туда, и туда ...)

Извиняюсь, можете показать рабочий пример конкретно для Zimbra (а не для postfix в целом)? Ибо на Зимбре у меня не получилось. Конфиги на ней имеют свойство затираться, да и структура немного не такая.
alexvg75 аватар
К сожалению не смогу (((
У нас стоит почтовый шлюз на постфиксе, поэтому вносили на нем, чтобы он сразу избавлялся от ненужного. Смысла править на зимбре у нас нет.
На зимбре "игрались", получалось, но сходу даже не вспомню. Могу сказать то, что наверное и так Вам известно:
1) на зимбре используется стандартный постфикс
2) НО конфиги на прямую править не удасться поскольку зимбра каждый раз их перезаписывает при рестарте
3) Настройка postfix (zimbra) осуществляется через команду postconf, например:
$ su - zimbra
$ postconf -e 'smtpd_hard_error_limit = 3'
$ postconf -e 'smtpd_soft_error_limit = 2'
Эти строки будут добавлять пару строчек в main.cf:
smtpd_soft_error_limit = 2
smtpd_hard_error_limit = 3
Однако, чтобы изменения сохранялись, нужно прописать нужные правила в конфигурационных файлах, а затем их через POSTCONF прописать в /opt/zimbra/conf/zmconfigd.cf:
POSTCONF smtpd_recipient_restrictions FILE zmconfigd/postfix_recipient_restrictions.cf
POSTCONF smtpd_sender_restrictions FILE zmconfigd/smtpd_sender_restrictions.cf
В этом случае при каждом запуске (перезапуске) mta (postfix) нужные настройки будут записаны в main.cf

Возьмите в качестве "шпаргалки" это http://prof-labs.ru/blog/nix/191


Для Zimbra 8.5

Создаем два списка фильтрации:
1) vim /opt/zimbra/conf/postfix_rbl_override - разрешает/запрещает приход почты с определенного домена/IP
1.2.3.4 OK
4.3.2.1 REJECT
postmap /opt/zimbra/conf/postfix_rbl_override
zmprov mcf +zimbraMtaRestriction 'check_client_access lmdb:/opt/zimbra/conf/postfix_rbl_override'

2) vim /opt/zimbra/conf/postfix_recipient_access - разрешает/запрещает приход почты для определенного пользователя
user1@mydomain.com 550 User Unknown
user2@mydomain.com OK
postmap /opt/zimbra/conf/postfix_recipient_access
zmprov mcf +zimbraMtaRestriction 'check_recipient_access lmdb:/opt/zimbra/conf/postfix_recipient_access'
Спасибо за информацию!
А штатными средствами (из админки) 1ый список никак нельзя задать?
зы: искал в админке - не нашел, может просто пропустил... вещь достаточно востребованная, неужели не вывели в админку ее...?
Были ошибки
Nov 28 09:15:46 zimbra postfix/verify[6918]: warning: btree:/opt/zimbra/data/postfix/data/verify_cache is unavailable. unsupported dictionary type: btree
Nov 28 09:15:46 zimbra postfix/verify[6918]: warning: btree:/opt/zimbra/data/postfix/data/verify_cache: cache lookup for '' failed due to error
Поправил в vi /opt/zimbra/postfix/conf/main.cf.default
address_verify_map = btree:$data_directory/verify_cache на address_verify_map = dbm:$data_directory/verify_cache
Вроде заработало... вопрос что это было :)
На самом деле способ предложенный forge не сработает... по крайней мере для днс проверки не работало у меня, я вообще не понимаю как в 8.5 и в каком порядке вставляются исключения.
Я предлагаю следующее... как можно заметить, у зимбры практически все правила реджектов проверяются на этапе smtpd_recipient_restrictions, на остальных этапах в основном проверяется домен назначения и прочее проверки, которые практически на 100% не требуют списка исключений. А куда вставляются правила при использовании zmprov mcf +zimbraMtaRestriction 'check_client_access lmdb:/opt/zimbra/conf/postfix_rbl_override вообще не понятно.

Делаем следующее, постараюсь поподробнее, у автора топика следующие правила настроенные через веб морду...

smtpd_recipient_restrictions = reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_sender, reject_unknown_client_hostname, reject_unknown_sender_domain, reject_rbl_client .

reject_non_fqdn_recipient - ни разу не встречал нормальных серверов которые бы отправляли не в  fqdn, не требует исключения.
permit_sasl_authenticated, permit_mynetworks - разрешаем доступ для авторизованных пользователей и доверенных сетей, не требует исключения.
reject_unlisted_recipient - если нет пользователя - то и пиьсмо  для него нам не нужно, не требует списка исключений
reject_invalid_helo_hostname, reject_non_fqdn_sender, reject_unknown_client_hostname, reject_unknown_sender_domain, reject_rbl_client  - в этих правилах необходим список исключений, для исключений rbl и просто неправильно настроенных серваков.
Т.е. надо запихнуть проверку исключений после reject_unlisted_recipient, но до reject_invalid_helo_hostname, чтобы проверки fqdn и проверки на несуществующих пользователей остались, а так же чтобы не блокировались доверенные сети и авторизованные пользователи если в списках исключений будут блокировки. При этом если в списке исключений стоит разрешение для ипа или домена, то он не будет проходить все проверки после reject_invalid_helo_hostname(включительно).

Помимо исключений RBL добавим еще пару плюшек... не помешает... Все операции от пользователя zimbra.
1) создаем /opt/zimbra/conf/sender_access - тут мы будем проверять адрес указанный в поле FROM письма, т.е. фильтрация будет применяться к адресу с которого вам пишут.
[collapse]
Формат следующий:
<домен или адрес>  <TAB> <действие REJECT или OK> <TAB> <если запрет - сообщение об ошибке, не обязательно>
Пример:
=============================================
example.ru                          REJECT       Not login in
numbclub.com                    REJECT       Sender blocked by spam-filter
admin@comp.net               REJECT      Sender blocked by spam-filter
company.ru                          OK
=============================================
example.ru - это НАШ  домен, т.е. тот который у вас зимбре после @, запрещено по следующей причине, в зимбре есть неприятная дыра, можно отправлять письма с нашего домена без авторизации и не из доверенных сетей, т.е. подделать адрес директора и написать например на адрес бухгалтера, бухгалтер даже не заметит... при этом permit_sasl_authenticated и permit_mynetworks стоящие выше в smtpd_recipient_restrictions, позволят авторизованным пользователям и пользователям из доверенных сетей без проблем отправлять письма на ваш домен, т.е. Reject тут только для тех, кто не авторизовался и для левых.

numbclub.com - это к примеру домен спаммера (кстати реальный домен спаммера), можно конечно добавлять в блэклист спаммассасина, но во-первых, спаммассасин жрет много ресурсов, лучше не загружать его лишней работой, во-вторых, если в письмах будут вирусы, письмо будет отклонено уже после smtp сессии антивирусом, соответственно в почтовой очереди появится письмо от MAILER DAEMON, которое будет висеть в очереди несколько дней  с  неудачными попытками доставки, т.к. спамеры письма не принимают

admin@comp.net  - это если вы не хотите получать письма от определенного пользователя, а не от домена в целом.

company.ru       OK  - это как раз исключит днс проверки, RBL листов и прочее, т.е. если будет идти письма с этого адреса, никакие другие проверки кроме reject_non_fqdn_recipient и reject_unlisted_recipient произведены не будут. Хотим добавить в исключение адрес, пишем сюда с OK.
[/collapse]
2) создаем /opt/zimbra/conf/recipient_access - тут мы будем проверять кому пишут, т.е. фильтрация будет применяться к адресу на который пишут.
[collapse]
Формат следующий:
<ваш домен или адрес из вашего домена>  <TAB> <REJECT> <TAB> <сообщение об ошибке, не обязательно>
Пример:
=============================================
all@example.ru                   REJECT  Not login in
user@example.ru               REJECT  User is disabled
=============================================
all@example.ru - это к примеру адрес рассылки, т.е. если оправить письмо на all@example.ru, это сообщение придет всем вашим сотрудникам компании, в случае если необходимо использовать данный адрес только для внутренней переписки - напишите его в этот файлик. Знаю что можно запрещать и через интерфейс зимбры, в настройках списка рассылки, но в этом случае сервер письмо примет и вроде даже поместить в очередь для всех получателей (а если их 1000), напишет пару логов, лишняя работа, проще резать прямо тут.
Так же если списки рассылки используются для отправки сообщений клиентам, к примеру коммерсанты шлют новости по всем своим клиентам (внешние адреса), то в поле "кому" ваши клиенты увидят адрес вашего списка рассылки и некоторые из них обязательно что нибудь попытаются отправить на этот адрес. В случае если адрес рассылки указан в файле recipient_access, внешний отправитель получит ошибку Not login in. Если внешний доступ будет ограничен средствами зимбры внешний отправитель не получит ничего, что не очень хорошо, потому что он сможет подумать что письмо дошло - а значит письмо пропадет, если же никак не ограничить внешний доступ для списка рассылки, все клиенты которые присутствуют в списке рассылки получать письмо внешнего отправителя.
Внутренние пользователи смогут отправлять почту на данные адреса, см. permit_sasl_authenticated и permit_mynetworks выше.

user@example.ru - если надо заблокировать какого то внутреннего пользователя только от внешних писем, можно написать его тут, пользователь user@example.ru не будет получать внешнюю почту, но будет получать внутреннюю.

Можно создавать и правило с OK, но что то не могу придумать случаев когда это необходимо.
[/collapse]

3) создаем /opt/zimbra/conf/client_access - тут мы будем проверять IP отправителя, если sender_access по каким то причинам не подошло.
[collapse]
Формат следующий:
<IP отправителя,>  <TAB> <REJECT или OK> <TAB> <если запрет - сообщение об ошибке, не обязательно>
Пример:
=============================================
XXX.XXX.XXX.XXX                 REJECT       Sender blocked by spam-filter
YYY.YYY.YYY.YYY                  OK
=============================================
XXX.XXX.XXX.XXX - допустим в примере с sender_access, спам идет не только с numbclub.com, но и с других доменов, но ип у них одинаковый, вместо того чтобы указывать каждый домен по отдельности в sender_access, можно указать тут их общий ип.
YYY.YYY.YYY.YYY    - это  аналог permit_mynetworks, т.е. добавляя тут ип, вы можно сказать добавляете его в доверенную сеть, другое дело что через интерфейс зимбы добавить 1 ип нельзя, только через консоль, а тут пожайлуйста. Так же можно добавлять списки исключений для RBL, днс проверок. К примеру как случае в sender_access с сервера идут не только адреса с company.ru, но и с других, скажем он большой релей, и чтобы не добавлять все домены в sender_access, можно просто написать тут их общий ип. Я к примеру добавляю судя ип рабочей виртуальной машины, с которой тестирую почтовик через телнет ), чтобы она не проходила днс проверки (доверенная сеть у меня состоит только из 1 ого адреса, адреса самого сервера).
[/collapse]

4) выполняем
postmap /opt/zimbra/conf/sender_access
postmap /opt/zimbra/conf/client_access
postmap /opt/zimbra/conf/recipient_access
Каждый раз когда вы вносите изменения в любой файлик, делайте postmap, для того чтобы изменения применились, перезапускать постфикс или зимбру не надо

5) теперь нам надо впихнуть эти списки фильтрации в postfix, между reject_unlisted_recipient и reject_invalid_helo_hostname. Просто отредактировать /opt/zimbra/postfix/conf/main.cf не вариант, после перезапуска зимбры main.cf откатит все изменения.
Идем сюда /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf именно этот файлик отвечает за генерацию smtpd_recipient_restrictions в main.cf постфикса. Ищем там строку  reject_unlisted_recipient, ведь именно после него нам и нужно вставить свои списки исключений... вставляем следующее с новой строчки (укажем на наши ранее созданные файлки)..
check_client_access lmdb:/opt/zimbra/conf/client_access
check_sender_access lmdb:/opt/zimbra/conf/sender_access
check_recipient_access lmdb:/opt/zimbra/conf/recipient_access

сохраняем, перезапускаем зимбру
zmcontrol restart
После перзапуска открываем /opt/zimbra/postfix/conf/main.cf , наши правила должны появиться между reject_unlisted_recipient и reject_invalid_helo_hostname , если появились - все ок, можно проверять.

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

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

Заключение: Вышло на целую статью, потратил час, орфографические ошибки не проверял, если кто то захочет перепосить - я не против.
Вроде сделал все по инструкции...
Правила не появились... 

дописал "напрямую"  в  /opt/zimbra/postfix/conf/main.cf - рестартовал... правила остались, работают.

Zimbra 8.0.6_1153...

PS: после 5 пункта, необходимо перезагрузить сервер... zmcontrol restart для меня оказалось недостаточно.
Правила подгрузились, все работает. Ура!

 Спасибо за труд. Я как раз не мог разобраться в одном нюансе. Ваш пост помог и сэкономил мне время!!!