Створення поштової системи на базі exim, dbmail, amavisd-new та postgresql

Створення поштової системи на базі exim, dbmail, amavisd-new та postgresql.

Зміст

Можливості DBMail.

Встановлення та налаштування DBMail.

Створюємо поштову базу даних:

createuser -U postgres dbmail createdb -E koi8-r -U postgres dbmail psql -U postgres dbmail ALTER USER dbmail WITH PASSWORD 'secret'; psql -U dbmail dbmail

Компілюємо та встановлюємо DBMail:

groupadd dbmail useradd -g dbmail dbmail

потім відкоригуємо всі необхідні шляхи та виконаємо

Програми, що входять до DBMail.

Приклад додавання користувача:

dbmail-adduser add [email protected] password 0 0 [email protected]

Приклад додавання перенаправлення пошти (у своїй системі я цю можливість вимкнув):

dbmail-adduser f [email protected] postmaster

dbmail-adduser c [email protected] +a [email protected]

Також аліаси підтримують редирект повідомлення у зовнішні програми:

dbmail-adduser f [email protected] "/usr/bin/procmail" - аліас перенаправляє повідомлення користувача [email protected] програмі procmail. dbmail-adduser f [email protected] "/usr/bin/spamassassin dbmail-smtp -d [email protected]" - один із варіантів фільтрації пошти.

Приклад витримки шматка procmail, що використовує папку IMAP:

# Spam goes to spam box :0 H: spamlock * ^X-Spam-Status: Yes /usr/sbin/dbmail-smtp -m "spam" -u [email protected]

Особливості DBMail.

Amavisd-new - A MAil VIrus Scaner.

Можливості Amavisd-new

Встановлення та налаштування amavisd-new.

Установка amavisd-new у gentoo linux не забере багато часу. Достатньо дати команду emerge amavisd-new, тапакет встановлений. Після встановлення у каталозі etc з'явиться файл amavisd.conf, у якому нам необхідно буде відредагувати 8 секцій:

  • Essential daemon and MTA settings - налаштування, відповідальні за взаємодію демона amavisd-new і MTA (у разі exim'a).
  • MTA specific - налаштування параметрів, що визначають особливості взаємодії amavisd-new та поштового сервера.
  • Logging – налаштування параметрів збереження логів.
  • Notifications/DSN, BOUNCE/REJECT/DROP/PASS destiny, quarantine - налаштування повідомлень, DSN(Delivery Status Notifications), результатів фільтрації (BOUNCE/REJECT/DROP/PASS), карантину.
  • Per-recipient і per-sender handling, whitelisting, etc. - Налаштування індивідуальних параметрів для окремих користувачів, налаштування білих/чорних списків тощо.
  • Resource limits – налаштування обмежень на використання ресурсів.
  • External programs, virus scanners, SpamAssassin - налаштування взаємодії amavisd-new і зовнішніх програм.
  • Debugging – налагодження.
/ЗИ найдоступніша документація в amavisd-new, це вихідники, списки розсилки та конфігураційний файл, тому що там вказані всі необхідні параметри та їх опис. Я довго прикидав, як би детальніше описати налаштування amavisd-new, і в результаті вирішив не мучитися, а просто дати опис змінних amavisd-new у тому порядку, в якому вони йдуть у конфігурації.

Якщо нам необхідно подивитися вміст змінної f, що містить n рівнів масивів/хешів (наприклад, вміст $per_recip_blacklist_sender_lookup_tables), то, на мій погляд, найпростіше це зробити, використовуючи модуль Data::Dumper: use Data::Dumper; $Data::Dumper::Maxdepth = n; print Data::Dumper->Dump([$f] , [qw(f)]); /

Налаштування параметрів,відповідальних за взаємодію демона amavisd-new та MTA.
Налаштування параметрів, що визначають особливості взаємодії amavisd-new та поштового сервера.
Налаштування параметрів збереження логів.
Налаштування повідомлень, DSN (Delivery Status Notifications), результатів фільтрації (BOUNCE/REJECT/DROP/PASS), карантину.

$virus_admin = '[email protected]' => '[email protected]', '.sub1.example.com' => '[email protected]', '.sub2.example.com' => '', # don't send admin notifications 'a.sub3.example.com' => '[email protected]', '.sub3.example.com' => '[email protected]', '.example.com' => '[email protected]', '.' => '[email protected]', >;

Налаштування індивідуальних параметрів для окремих користувачів, налаштування білих/чорних списків тощо.

Декілька прикладів використання *_lovers і bypass_* змінних:

@virus_lovers_acl = qw( [email protected] !lab.xxx.com .xxx.com yyy.org ); $bypass_virus_checks = 1; @bypass_virus_checks_acl = qw( some.ddd !butnot.example.com .example.com ); @virus_lovers_acl = qw ([email protected]); $virus_lovers_re = new_RE(qr'^(helpdeskpostmaster)@example\.com$'i); $ spam_lovers = 1; $spam_lovers = 1; $spam_lovers = 1; @spam_lovers_acl = qw(!.example.com); $spam_lovers_re = new_RE(qr'^user@example\.com$'i); не перевіряти спам для одержувачів наступних доменів:

@bypass_spam_checks_acl = qw( d1.com .d2.com a.d3.com ); або інший приклад (не виконувати перевірку для всіх, крім.):

@bypass_spam_checks_acl = qw(!d1.com!.d2.com!a.d3.com.); не перевіряти вихідну пошту(якщо ми обслуговуємо тільки $mydomain):

@bypass_spam_checks_acl = ("!.$mydomain", "."); недоліком останнього прикладу може бути те, що spamassassin зможе аналізувати вихідну ham (no-spam) пошту й заносити результати в bayes БД.

Працюючи зі списками-хешами зручно використовувати функцію map, що видає результати обчислення виразу (обчислюваного у списку):

Настроювання обмежень на використання ресурсів.

Наступні змінні дозволяють встановити обмеження сумарних розмірів розпакованих частин поштового повідомлення. Враховуються лише вихідні розміри поштового повідомлення - тобто якщо в процесі розпакування раптом якась із частин була видалена/поменшала, то на вихідний розмір поштового повідомлення це не впливає. Алгоритм розрахунку обмеження для займаного простору:

Налагодження взаємодії amavisd-new та зовнішніх програм.
Налагодження amavisd-new.

Особливості налаштування SpamAssassin.

Інтеграція з Pyzor.

Інтеграція з Razor.

Опис транспорту.
Опис конфігурації повторного надсилання повідомлень.
Опис механізмів автентифікації.

Встановлення та налаштування поштової системи

Нижче наведено дії, які потрібно виконати для встановлення цієї поштової системи. Встановлюємо всі необхідні пакети emerge. У gentoo ми можемо так встановити exim, amavisd-new і postgresql. Установка spamassassin повинна запуститися автоматично при установці amavisd-new. Завантажуємо та розпаковуємо dbmail. Відразу виправляємо шляхи на початку файлу build.sh. /ЗИ якось не красиво у відповідях на питання набивати шляхи руками./ Також шукаємо у файлі build.sh рядок 'install-dbmail.sh $bindir' і додаємо на початок './', інакше при інсталяції система полізе шукати install -dbmail.sh у каталогах, прописаних у змінній оточенні PATH, та файлу не знайде. Запускаємо build.sh і пам'ятаємо, що на всі питання, де потрібно відповісти "так"/"ні" ми, у разі позитивної відповіді повинні ввести 'y' у нижньому регістрі, решта символів, включаючи 'Y', вважаються негативною відповіддю. Копіюємо dbmail.conf у каталог etc. Після того як ми інсталювали всі пакети, керуємо конфігурації і створюємо БД. За основу беремо рідну базу dbmail:

createdb -E koi8-r -U postgres mail psql -U postgres mail ALTER USER dbmail WITH PASSWORD 'secret'; psql -U dbmail mail