LINUX.ORG.RU
ФорумAdmin

postfix check_client_access автоматизировать

 , ,


0

2

Всем привет.

Опишу ситуацию. Быть может вы меня направите.

Имеется корпоративная почта, на 150 чел., но с достаточно большим объёмом ящиков (от 1 до 15 гб) - в итоге сотни гигабайт (хоть там и мусора много, и одного и того же, но разбираться с этим никто не будет), а канал у нас не очень широкий. По сему переносить её на «почту для домена», от каких-нибудь ребят вроде Яндекс/мейл/гугл - не очень хочется, да и в случае чего - до них даже не дописаться толком насколько я понимаю... Да и вообще - возьмут и закроют завтра... Да и хочется более тесной интеграции с LDAP и прочими корпоративными сервисами. Всё это добро крутится на zimbra 8.

Однако, возникает вот какая проблема...

К примеру, у меня сотрудник ведёт переписку с некой контрой которая находится зарубежом. Контора не очень большая, и переодически эта контора попадает частью своих ip или всем скопом в RBL, после чего, часть писем, или полностью переписка прекращается... - Что ВЕСЬМА неприятно... Ведь это происходит без предупреждения. Человек ждёт письма, а там - пусто... Он чуя что-то неладное, звонит, а на той стороне говорят - а мы мол попробовали отправить, получили какую-то ошибку (zimbra отсылает по-умолчанию отправителю отчёт о том, что он заблокирован в RBL), и забили болт... - В итоге начинаются танцы с бубном вокруг этой нелепой проблемы.

Хочу воспользоваться: check_client_access опцией. Однако, очевидно, что каждый сотрудник не будет вести эти списки руками (даже если это я сделаю через web интерфейс - зачатки такой возможности в общем то есть в zimbra, надо просто подпилить). Это считай надо будет «на всякий случай» добавить каждого респондента... - Этим явно не будет никто заниматься.

По сему, я думаю, а может можно сделать так, чтобы: брался лог zimbra, из него вытягивались все те email на которые мы пишем, и эти email складывались и маппились в postfix в качестве check_client_access хеша? То есть, человек однажды нам дописался. Получил ответ - и попал в белый список. Таким образом, если он будет в RBL через неделю/месяц - он всё равно к нам пролезет.

Может кто-то подскажет мне по сабжу? Может кто-то решал аналогичные задачи? Может можно как-то по-другому сделать?

★★★★★

Вот нагуглилось такое чудо http://mailfud.org/postpals/ , но, судя по тому, что там всего две версии и обе старые, оно нафиг никому не нужно. Наверное, все предпочитают костылять самостоятельные скрипты.

На счёт алгоритма не уверен:

То есть, человек однажды нам дописался. Получил ответ - и попал в белый список.

«дописался» не нужно, достаточно просто запоминать все домены, на которые пишут ваши сотрудники и заносить в access-list адреса их MX-серверов и данные из spf v1.

mky ★★★★★
()

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

selivan ★★★
()
Ответ на: комментарий от mky

Ну да, что-то подобное я и хочу. Кстати, идея заносить MX адреса, мне кажется более разумной, чем я предлагал. Это будет существено меньше трафика. Ну а прибавить данные из spf - ещё более будет разумно. Спасибо! Теперь подумать как бы это сделать менее всего велосипедно. Есть идеи? :)

DALDON ★★★★★
() автор топика
Ответ на: комментарий от selivan

Это не есть хорошо. Ибо весьма часто в поле FROM, спамеры любят подставлять всё что угодно. Зачастую это: yandex, google и т.д. - вроде как проблему можно решить «обратными звонками», но из коробки zimbra такого вроде не делает.

DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от DALDON

Да, с MX-записями красивее. Или, как вариант, заносить домен в белый список, только если на хотя бы одно письмо из него ответили, и если он не принадлежит распространённым сервисам бесплатной почты.

selivan ★★★
()
Ответ на: комментарий от selivan

Это да, но проблема, в том, что придётся заносить исключение для бесплатных почтовиков, а их много... google, mail, yandex, aol, yahoo. Ну и другие...

У меня вопрос такой: как бы красивее мне реализовать белый список по MX серверов из лога? Или это лучше спросить в ветке программистов? :)

DALDON ★★★★★
() автор топика
Ответ на: комментарий от selivan

А вот ещё идея: проверять поле FROM, каждого письма, и сравнить это поле с логом отправки. Если мы отправляли на этот mail, тогда сразу и без вопросов пропускать, если не писали мы - тогда кидать письмо на проверку в RBL. - Плюс такого решения, что не нужно вести белые списки никакие. Минус, тот, что придётся парсить большие логи... Хотя-бы за пол года.

DALDON ★★★★★
() автор топика
Ответ на: комментарий от selivan

Пока меня смущает, что придётся парсить большое кол-во логов. Как по мне - так быстрее будет прошуршать базу ip адресов, нежели логи...

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

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

DALDON ★★★★★
() автор топика
Ответ на: комментарий от selivan
Jul  1 23:51:19 mail postfix/smtp[739]: 5112D5870F2: to=<xxx@mail.ru>, relay=127.0.0.1[127.0.0.1]:10032, delay=4.8, delays=0.08/0.01/0/4.7, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 0F9545870F4)
Jul  1 23:51:19 mail postfix/smtp[739]: 5112D5870F2: to=<xxx@yandex.ru>, relay=127.0.0.1[127.0.0.1]:10032, delay=4.8, delays=0.08/0.01/0/4.7, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 0F9545870F4)

Нужно из лога доставать строки подобные этим, т.е., чтобы было: to=xxxx и статус sent и поле relay=127.0.0.1 было таким.

Из поля: to брать, часть после собаки.

На часть после собаки делать нечто вроде: host -t mx yandex.ru

Из ответа:

yandex.ru mail is handled by 10 mx.yandex.ru.
yandex.ru mail is handled by 10 mx2.yandex.ru.

Выбрать: mx.yandex.ru. mx2.yandex.ru.

Далее сделать: например через dig или ищё как-то:

 
$ dig mx.yandex.ru. mx2.yandex.ru

; <<>> DiG 9.9.5-3-Ubuntu <<>> mx.yandex.ru.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25994
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 2, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mx.yandex.ru.			IN	A

;; ANSWER SECTION:
mx.yandex.ru.		3477	IN	A	87.250.250.89
mx.yandex.ru.		3477	IN	A	93.158.134.89
mx.yandex.ru.		3477	IN	A	213.180.193.89
mx.yandex.ru.		3477	IN	A	213.180.204.89
mx.yandex.ru.		3477	IN	A	77.88.21.89

Всё, что содержится в записи А, достать ip адреса, и сложить их в файл. В формате:

77.88.21.89 ОК
213.180.193.89 ОК
....

Вот пишу всё это и чувствую что велосипед где-то рядом лежит... Есть идеи? )

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON

Возможно для этого пригодится утилита: logtail или logwatch

DALDON ★★★★★
() автор топика
Ответ на: комментарий от selivan

Ну и жуть у меня вышла... Но вроде удалось выдрать домены:

cat /var/log/zimbra.log|grep -E 'relay=127.0.0.1.*250 2.0.0 from'|cut -d "=" -f 2|cut -d ">" -f 1|cut -d "<" -f 2|cut -d "@" -f 2|grep -v 'mycompany.ru'

Потом, кстати мне можно упростить задачу. Мне наверно можно просто добавить полученные домены, в файл ip адресов да и всё...

DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от DALDON

sed -r 's/.*to=<.*@(.*)>.*relay=127.0.0.1.*status=sent.*/\1/'

Но это для красоты, а так я тоже ленивый, и если надо быстро, пишу кучу tr | cut | egrep

selivan ★★★
()
Ответ на: комментарий от selivan

Ух! Классно! Пока это только первый шаг. Ибо выдрать домена - пол беды... Самое сложное, это выдрать MX этих доменов. Ибо очень часто: МХ домен отправителя ! *.домен отправителя...

DALDON ★★★★★
() автор топика
Ответ на: комментарий от selivan

А ещё возникает проблема дублей... Она тоже конечно решается... Но блин, велосипед жеж...

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON

Спасибо за logtail, я про неё уже забыл, полезно. ИМХО как-то так:

test -f whitelist || touch whitelist
logtail zimbra.log | sed ... | sort > whitelist.append
sort -m whitelist whitelist.append | uniq > whitelist.new
mv whitelist.new whitelist
rm whitelist.append

Так будут сортироваться только новые пункты в whitelist, что сильно уменьшит потребляемую память и время работы. Скрипт сделан так, чтобы при внезапном прекращении работы старый whitelist не проимелся.

selivan ★★★
()
Ответ на: комментарий от selivan

Ковыряюсь вот тут, и понимаю, что не всё так просто... Не всё...

Смотри какая штука:

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

email: user@example.com В ehlo он говорит: mailout-6.mailprovider.de А вот когда, мы ему отправляем, он уже может вполне получить почту на: mailgw-1.mailprovider.de

И чего тут делать?

К примеру, время от времени: mailout-6.mailprovider.de попадает в RBL, тогда как: mailout-[1-5].mailprovider.de - могут и не быть в RBL... - То есть, от user@example.com я могу получить, а могу и не получить письма...

Казалось-бы: было бы очень, очень здорово, сделать вот так: *.mailprovider.de, однако, это приведёт к тому, что рано или поздно, я буду получать тучу спама с провайдера: mailprovider.de

Хорошо, поднимимся, на уровень выше, в: поле mail from... Могу мониторить лог отправки писем, и дёргать оттуда: user@example.com, и добавлять его в исключения. - Да, всё круто, кроме... - Кроме того, что если контора томится в RBL, то никто другой акромя user@example.com мне не сможет дописаться...

Ну хорошо, тогда я могу добавить просто: @example.com , но в таком случае, в последствии, любой спамер, который напишет в поле FROM @example.com, сможет мне дописаться...

В общем пока особо и не знаю даже как сделать наиболее правильно и красиво...

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON

ИМХО наиболее правильно и красиво добавлять @example.com. Фильтруя при этом популярные бесплатные сервисы почты - yandex, google и т. д. Ты пропустишь крайне незначительную часть спама, и не пропустишь ничего важного. А письма с yandex, google и т. д. проверять по DKIM, который они все умеют.

selivan ★★★
()
Ответ на: комментарий от selivan

А умеет-ли zimbra (postfix), проверять DKIM? Сделать при том так: пришло письмо от домена указанного в списке требуемых для проверки DKIM - если не прошло проверку DKIM - выкидываем. Если такое реализовать, то тогда идея с @example.com - будет очень толковая.

DALDON ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.