Налагодження поштової системи (Exim + Dovecot + Roundcube)
- Основні терміни
- Вступ
- Структура таблиць в базі даних
- Агент доставки пошти Dovecot
- Агент пересилання пошти Exim
- Веб інтерфейс Roundcube
- висновок
- Список літератури
- Коментарі
Основні терміни
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 код:- CREATE TABLE "aliases_tb" (
- "Id" bigserial PRIMARY KEY,
- "Aliasname" character varying (32) NOT NULL,
- "Domain_id" integer NOT NULL,
- "Mailaddr" character varying (256) NOT NULL,
- "Active" boolean DEFAULT true NOT NULL,
- CONSTRAINT "aliases_tb_domain_id_check" CHECK (( "domain_id"> 0))
- );
- CREATE TABLE "domains_tb" (
- "Id" bigserial PRIMARY KEY,
- "Domainname" character varying (128) NOT NULL,
- "Active" boolean DEFAULT true NOT NULL
- );
- CREATE TABLE "users_tb" (
- "Id" bigserial PRIMARY KEY,
- "Username" character varying (32) NOT NULL,
- "Passwd" character varying (32) DEFAULT md5 ((power ((5) :: double precision, (random () * (12345) :: double precision))) :: text) NOT NULL,
- "Domain_id" bigint NOT NULL,
- "Uid" integer DEFAULT 26 NOT NULL,
- "Gid" integer DEFAULT 6 NOT NULL,
- "Homedir" character varying (512) DEFAULT '/ var / mail' :: character varying NOT NULL,
- "Quota" integer DEFAULT 10240,
- "Active" boolean DEFAULT true NOT NULL,
- CONSTRAINT "users_tb_domain_id_check" CHECK (( "domain_id"> 0)),
- CONSTRAINT "users_tb_gid_check" CHECK (( "gid"> 0)),
- CONSTRAINT "users_tb_quota_check" CHECK (( "quota"> 0)),
- CONSTRAINT "users_tb_uid_check" CHECK (( "uid"> 0)),
- CONSTRAINT "users_tb_username_check" CHECK ((char_length (( "username") :: text)> 0))
- );
- CREATE TABLE "whitelist_tb" (
- "Ip" inet,
- "Addrhash" character varying (32),
- "Ctime" integer DEFAULT date_part ( 'epoch' :: text, now ())
- );
- CREATE TABLE "greylist_tb" (
- "Ip" inet,
- "Addrhash" character varying (32),
- "Ctime" integer DEFAULT date_part ( 'epoch' :: text, now ())
- );
- CREATE TABLE "blacklist_tb" (
- "Ip" inet,
- "Ctime" bigint DEFAULT date_part ( 'epoch' :: text, now ())
- );
- CREATE TABLE "badhosts_tb" (
- "Id" bigserial PRIMARY KEY,
- "Ip" cidr,
- "Description" character varying (512)
- );
У таблиці domains_tb міститься список обслуговуваних доменів поштовим сервером. Таблиця aliases_tb містить синоніми для доменів, users_tb містить облікові дані користувачів, а таблиці blacklist_tb, greylist_tb і whitelist_tb використовуються для реалізації технології сірих списків, про яку буде розказано в розділі про налаштування Exim. Таблицю badhosts_tb довелося ввести, оскільки від деяких більш-менш коректно налаштованих хостів буває, приходить спам, і як раз такі хости затишно розташовуються в цій таблиці (обчислюються в процесі роботи поштової системи і вручну додаються / видаляються).
Для розуміння наведу приклад вставляються в таблиці даних:
- INSERT INTO "domains_tb" VALUES (DEFAULT, 'example.net', 'true');
- INSERT INTO "aliases_tb" VALUES (DEFAULT, 'postmaster', 1, 'admin@old_domain.net', 'true');
- INSERT INTO "users_tb" VALUES (DEFAULT, 'admin', md5 ( '+1234'), 1, 26, 26, '/ var / mail', 10240, 'true');
початок | вперед