Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Автоматическая фильтрация входящих на сервере  (Прочитано 1384 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Извращенец

  • Автор темы
  • Гость
Наличествует почтовый сервер на базе postfix и знаменитому руководству, переведенному vadimka
Все настроил, все работает, и тут задали мне такую задачу.
Требуется в автоматическом режиме входящую почту раскладывать по папочкам.
Ну, то есть, приходит на мыло aaz@site.ru мыло с содержанием "от" - spam@hz.com и темой "Увеличение члена за 10 минут!".
Требуется серверными (а не клиентскими) усилиями проверить наличие папочки "hz.com", и если таковой нет - то создать, и поместить входящее сообщение именно в эту папочку. И все последующие сообщения раскладывать по правилам, заданным на примерно такой основе.
Поскольку сервер сделан на базе postfix+mysql+squirrelmail, то возникает вопрос - на кого из них переложить эту работу, и существуют ли готовые решения и фильтры для подобной связки?
А то я в программировании дуб, и даже не представляю, с какой стороны к этой кобыле подойти.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Бессмысленно. Больше одного раза от одного отправителя спам приходит редко.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Извращенец

  • Автор темы
  • Гость
Бессмысленно. Больше одного раза от одного отправителя спам приходит редко.
Вы не поняли. Я не про борьбу со спамом. Я про фильтрацию сообщений средствами сервера.
Мне нужно на сервере делать правила, и чтобы кто-то их исполнял.
Вопрос - как это организовать?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Либо альясы, либо man procmail
В зависимости от сложности задачи.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Извращенец

  • Автор темы
  • Гость
Ладно, пусть будет procmail.
Но как тогда конфигурировать его для отдельных пользователей?
Они же не системные, а всего лишь учетки в БД?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
А прокмейлу вообще-то пофиг.
Он не с пользователями, он с почтой работает.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Извращенец

  • Автор темы
  • Гость
А прокмейлу вообще-то пофиг.
Он не с пользователями, он с почтой работает.
Поскольку личка у Вас не работает - не ткнете ли меня на конфигурацию прокмэйла для связки постфикс+мускуль?

Вот, к примеру.
Если я создаю в /etc/procmailrc такое правило:
:0
* ^Subject:.*test
test/
Куда по этому правилу должна класться вся входящая почта с test в сабдже?
И как мне ее положить в папку test во "Входящих"?

(добавлено позже)
Еще раз перечитал инструкцию, и нашел, что юзеры лежал в /home/vmail.
Зашибись! Добавил туда правило, разумеется, ничего не срабатывает.
Попробовал на папку /home/vmail поставить права 000  - начал ругаться процесс postfix/virtual - значит, этот procmail вообще не участвует в приеме почты.
Как это проверить?
« Последнее редактирование: 08 Декабря 2010, 16:30:39 от Извращенец »

Извращенец

  • Автор темы
  • Гость
Как обычно, приходится на собственные вопросы отвечать самому.
Вот и отвечу.
Итак.
В знаменитой Вадимкиной инструкции и связке postfix+MySQL+spamasassin+вся остальная хрень - за раскладывание почты по ящикам юзвреей отвечает virtual - встроенная в постфикс утилита. Которая, по соображениям безопасности, не может управлять входящим потоком сообщений.
В общем, все "для человека".
Сначала я попытался установить вышеозначенный procmail. С нулевым результатом. В системе он был, но ни на что не влиял. Тогда была предпринята попытка ввести в конфиг постфикса директивы
virtual_transport = procmail:
Что тоже не помогло. Почта просто перестала ходить.
Тогда кинул клич, и умные люди, знающие английский, предложили поставить maildrop. После многочисленных экспериментов все упиралось в то, что письма не доходили по причине Invalid user specified. Поиск в гугле упирался в эту же проблему, а те два раза, которые имели решение, сводился к "сбору пути к домашнему директорию юзера", повторить который в моих условиях не удалось.
Спасибо Karl500, его помощь оказалась неоценима.
Итак.
Все-таки - процмэйл.

1.sudo apt-get install procmail
2.В файл /etc/postfix/master.cf  вставляем строки
procmail unix - n n - - pipe  -o flags=RO user=vmail argv=/usr/bin/procmail -t -m USER=${user} EXTENSION=${extension} NEXTHOP=${nexthop} /etc/postfix/procmailrc.common
(это - ОДНА строка!!)
При этом считается, что папка для почты юзеров находится в /home/vmail а исполняемый файл procmail лежит в /usr/bin. Иначе измените пути.

3 В файл /etc/postfix/main.cf вставляем строку
procmail_destination_recipient_limit = 1Хрен его знает, зачем. Сам бы хотел узнать.

4. Находим  в БД для почты таблицу transport, и в поле domain указываем наш домен, или отдельного юзера этого домена. А в поле transport пишем procmail: (именно так, с двоеточием).

Альтернативный вариант: создаем (если нету) файл
/etc/postfix/transport, и  в него вносим
Цитировать
user@domain.ru procmail:

после чего делаем
sudo postmap /etc/postfix/transport
5. Создаем файл /etc/postfix/procmailrc.common следующего содержания

Цитировать
MAILDIR="$HOME/$NEXTHOP/$USER"
DEFAULT="$MAILDIR/"
#VERBOSE=ON
#each user will set his own log file
#LOGFILE="/home/vmail/$NEXTHOP/$USER/procmail.log"
NL="
"
WS="    "
SWITCHRC="$HOME/$NEXTHOP/$USER/.procmail"

6. Создаем в папке пользователя файл .procmail (в нашем случае - /home/vmail/domain.ru/user/.procmail )
В котором и создаем пользовательские фильтры.
Например:
:0
* ^Subject:.*\<testing
.testing/

Это означает:
:0 - начало нового правила.
* (признак условия) ^ (с начала строки) Subject: (в поле "Тема) .(любой символ) *(встречается ноль или более раз) \(отменяет специальное значение символа, зачем тут нужен - хрен его знает) < (сответственно - просто <), testing (учитывая все предыдущее означает "Если в сабдже встречается <testing) - то
.testing/ - записать в папку "testing" в домашней папке юзера.
Если такой папки нет - она создается, но видимость ее остается на усмотрение почтовой программы или веб-интерфейса. В "Белке" надо вручную подписаться на эту папку.

7. Перезапускаем postfix
sudo /etc/init.d/postfix reload

добавлено позже
8. А после всего этого самого окажется, что почта, предназначенная для других юзверей упадет по адресу /home/vmail/new. И разбирать придется вручную.
По этому поводу я получил два совета.
1. Добавить в начало самого первого правила c:, чтобы получилось 0: c:
Добавить в конец скрипта
:0:
${DEFAULT}

2. Удалить нафиг файл /etc/procmailrc   так как он, по слухам, если отсутствуют правила, то кладет всю почту "в дефолтную папку".
Я выполни оба, и в результате - заработало.

Все!
Посылка письма на адрес user@domain.ru с сабджем "Ну, предположим testing" должно положить это письмо в заранее созданную папку Testing.
У меня - кладет.
Еще раз огромное спасибо Karl 500 и Шарки, убившие на это со мной уйму времени и сил.
А так же огромное "спасибо" автором всех почтовых пакетов и дополнений, которые переносили функции из одного пакета в другой, мудрили с конфигами, сборками, мануалами, в частности, утверждая, что procmail с виртуальными пользователями не работает.
В общем, всячески облегчали жизнь таким идиотам, как я.
Спасибо за внимание.
« Последнее редактирование: 13 Декабря 2010, 21:15:37 от Извращенец »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Перечитай это три раза, если больше нечего добавить - помести всё в первый пост и поменяй тему на "HOW-TO".
И, поздравляю с первым достижением :)

(А "procmail_destination_recipient_limit = 1" - видимо, чтобы не спамило при случайных ошибках в правилах.)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2267
    • Просмотр профиля
Это для того, чтобы фильтр реагировал только на один адрес (если посылается нескольким адресам в cc:) - стандартная штука для всех фильтров такого рода (mailman, autoresponder...) - берется имя фильтра, и присобачивается к нему "_destination_recipient_limit = 1"

Пользователь решил продолжить мысль 11 Декабря 2010, 00:07:06:
И еще.
a) "procmail unix - n n - - pipe ... " - совершенно необязательно "одна строка". Продолжать можно на другой строке, отступив хотя бы один пробел слева:

procmail unix - n n - - pipe  
   -o flags=RO user=vmail argv=/usr/bin/procmail -t -m USER=${user} EXTENSION=${extension} NEXTHOP=${nexthop} /etc/postfix/procmailrc.common

б) в файле /etc/postfix/procmailrc.common в переменной

WS="    "

между кавычками - ДВА символа: пробел и табуляция. Это нужно, чтобы проще было писать правила.

в) папка создается, если у пользователя vmail есть права на ее создание.
« Последнее редактирование: 11 Декабря 2010, 00:07:51 от Karl500 »

 

Страница сгенерирована за 0.02 секунд. Запросов: 20.