Налагодження поштової системи (Exim + Dovecot + Roundcube)

  1. Основні терміни
  2. 2. Структура таблиць в базі даних
  1. Основні терміни
  2. Вступ
  3. Структура таблиць в базі даних
  4. Агент доставки пошти Dovecot
  5. Агент пересилання пошти Exim
  6. Веб інтерфейс Roundcube
  7. висновок
  8. Список літератури
  9. Коментарі

Основні терміни

SMTP (Simple Mail Transfer Protocol) - простий протокол передачі пошти.
POP3 (Post Office Protocol Version 3) - протокол поштового відділення, версія 3.
IMAP (Internet Message Access Protocol) - протокол доступу до електронної пошти в Інтернеті.
MTA (Mail Transfer Agent) - агент пересилки пошти.
MDA (Mail Delivery Agent) - агент доставки пошти.
LDA (Local Delivery Agent) - локальний агент доставки пошти;
MUA (Mail user agent) - поштовий агент користувача (поштовий клієнт);
Sieve - мова опису правил фільтрації для поштових повідомлень.

1. Введення

У сучасному світі електронна пошта є далеко не останнім засобом комунікації, тільки уявіть собі, скільки людей сьогодні має власну поштову адресу, а скільки електронних повідомлень пересилається в світі тільки за одну годину. Дана технологія використовується практично всюди, починаючи від персонального використання, закінчуючи використанням на корпоративному і державному рівнях.

У даній статті описаний процес налаштування поштової системи на базі операційної системи FreeBSD і програмного забезпечення Exim, Dovecot, Roundcube. Тут я не буду розповідати про основи роботи електронної пошти, оскільки передбачається, що читач вже знайомий з основними термінами та поняттями, а також знає які служби відповідають за роботу тієї чи іншої частини електронної пошти (мається на увазі MTA, MDA, MUA). Дуже корисним і навіть необхідним буде прочитання документів, що описують протоколи SMTP, POP3, IMAP (це той базис, який будь-який поважаючий себе адмін поштових систем повинен знати). Переклад даних документів буде не складно знайти на просторах Інтернету.

У майбутньої конфігурації поштового сервера передбачається, що Exim займається тільки передачею електронних повідомлень, а Dovecot працює безпосередньо з поштовими скриньками користувачів. Взаємодія Exim і Dovecot організовано через програму LDA, що входить до складу пакету Dovecot. Захист від спаму буде реалізована засобами Exim, про методику захисту буде детально розказано у відповідному розділі. До Dovecot буде підключений плагін Sieve, який дозволить користувачам створювати власні фільтри. Доступ до поштових скриньок і управління ними, а також управління призначеними для користувача фільтрами буде організовано за допомогою веб інтерфейсу Roundcube. Завдання зберігання всієї службової інформації буде покладено на систему управління базами даних PostgreSQL.

2. Структура таблиць в базі даних

На даному етапі, необхідно визначитися, в якому вигляді у вас будуть зберігатися дані поштової системи (інформація про користувачів, доменах і т.п.). Гнучкість використовуваних програмних засобів дозволяє реалізувати абсолютно будь-яку структуру бази даних, наприклад, для управління поштовою системою, можливо використовувати postfixadmin і взяти за основу, що поставляється з даними пакетом структуру бази даних. У моєму випадку для доступу до пошти буде використовуватися веб інтерфейс Roundcube, який дозволяє користувачеві керувати всіма необхідними налаштуваннями свого облікового запису (зміна своїх облікових даних, пароля і т.п.), тому я зробив зручну для мене структуру бази даних, а для внесення і зміни даних мені досить функціоналу phpPgAdmin.

На наведеному нижче малюнку представлена ​​схема бази даних. З наведеної схеми видно, що поля "domain_id" з таблиць aliases_tb і users_tb пов'язані з полем "id" з таблиці domains_tb. Даний зв'язок забезпечує прив'язку облікових записів (users_tb) і синонімів (aliases_tb) до конкретного домену (domains_tb). Зв'язок полів в таблицях забезпечена на рівні запитів мови SQL.

SQL код:
  1. CREATE TABLE "aliases_tb" (
  2. "Id" bigserial PRIMARY KEY,
  3. "Aliasname" character varying (32) NOT NULL,
  4. "Domain_id" integer NOT NULL,
  5. "Mailaddr" character varying (256) NOT NULL,
  6. "Active" boolean DEFAULT true NOT NULL,
  7. CONSTRAINT "aliases_tb_domain_id_check" CHECK (( "domain_id"> 0))
  8. );
  9. CREATE TABLE "domains_tb" (
  10. "Id" bigserial PRIMARY KEY,
  11. "Domainname" character varying (128) NOT NULL,
  12. "Active" boolean DEFAULT true NOT NULL
  13. );
  14. CREATE TABLE "users_tb" (
  15. "Id" bigserial PRIMARY KEY,
  16. "Username" character varying (32) NOT NULL,
  17. "Passwd" character varying (32) DEFAULT md5 ((power ((5) :: double precision, (random () * (12345) :: double precision))) :: text) NOT NULL,
  18. "Domain_id" bigint NOT NULL,
  19. "Uid" integer DEFAULT 26 NOT NULL,
  20. "Gid" integer DEFAULT 6 NOT NULL,
  21. "Homedir" character varying (512) DEFAULT '/ var / mail' :: character varying NOT NULL,
  22. "Quota" integer DEFAULT 10240,
  23. "Active" boolean DEFAULT true NOT NULL,
  24. CONSTRAINT "users_tb_domain_id_check" CHECK (( "domain_id"> 0)),
  25. CONSTRAINT "users_tb_gid_check" CHECK (( "gid"> 0)),
  26. CONSTRAINT "users_tb_quota_check" CHECK (( "quota"> 0)),
  27. CONSTRAINT "users_tb_uid_check" CHECK (( "uid"> 0)),
  28. CONSTRAINT "users_tb_username_check" CHECK ((char_length (( "username") :: text)> 0))
  29. );
  30. CREATE TABLE "whitelist_tb" (
  31. "Ip" inet,
  32. "Addrhash" character varying (32),
  33. "Ctime" integer DEFAULT date_part ( 'epoch' :: text, now ())
  34. );
  35. CREATE TABLE "greylist_tb" (
  36. "Ip" inet,
  37. "Addrhash" character varying (32),
  38. "Ctime" integer DEFAULT date_part ( 'epoch' :: text, now ())
  39. );
  40. CREATE TABLE "blacklist_tb" (
  41. "Ip" inet,
  42. "Ctime" bigint DEFAULT date_part ( 'epoch' :: text, now ())
  43. );
  44. CREATE TABLE "badhosts_tb" (
  45. "Id" bigserial PRIMARY KEY,
  46. "Ip" cidr,
  47. "Description" character varying (512)
  48. );

У таблиці domains_tb міститься список обслуговуваних доменів поштовим сервером. Таблиця aliases_tb містить синоніми для доменів, users_tb містить облікові дані користувачів, а таблиці blacklist_tb, greylist_tb і whitelist_tb використовуються для реалізації технології сірих списків, про яку буде розказано в розділі про налаштування Exim. Таблицю badhosts_tb довелося ввести, оскільки від деяких більш-менш коректно налаштованих хостів буває, приходить спам, і як раз такі хости затишно розташовуються в цій таблиці (обчислюються в процесі роботи поштової системи і вручну додаються / видаляються).


Для розуміння наведу приклад вставляються в таблиці даних:
  1. INSERT INTO "domains_tb" VALUES (DEFAULT, 'example.net', 'true');
Таким чином додається домен, який буде обслуговувати поштовий сервер. Далі необхідно подивитися який ідентифікатор (поле "id" таблиці "domains_tb") був привласнений нового запису. Він буде використовуватися при додаванні синонімів і облікових записів користувачів. В даному випадку нехай він буде рівним одиниці.
  1. INSERT INTO "aliases_tb" VALUES (DEFAULT, 'postmaster', 1, 'admin@old_domain.net', 'true');
  2. INSERT INTO "users_tb" VALUES (DEFAULT, 'admin', md5 ( '+1234'), 1, 26, 26, '/ var / mail', 10240, 'true');
Перший запит додає синонім виду
[email protected] -> admin@old_domain.net, а другий новий обліковий запис з поштовою адресою [email protected], паролем 1234, Директорією для зберігання пошти - / var / mail і квотою розміром в 10 Мб. Поля uid і gid (в даному випадку вони рівні 26) вказують під яким користувачем здійснювати доставку в директорію для зберігання пошти.
початок | вперед