Багато користувачів Убунту використовують систему не тільки для домашніх потреб. Такий підхід цілком виправданий, адже на Linux-системах набагато зручніше займатися програмуванням, створенням серверів і веб-сайтів. Одне з зручностей - створення сервера електронної пошти. Для новачків ця задача здасться жахливо важкою, однак якщо ви розберетеся, як встановити та налаштувати поштовий сервер для Ubuntu, завдання вже не здасться вам такий вже важкою.
Як виконується настройка поштового сервера на базі Ubuntu.
трохи теорії
Перед конкретними інструкціями і бродінням за кодом не обійтися без частки теоретичного матеріалу. Важливо розуміти, що таке сервер електронної пошти і як він працює.
Поштові сервери на Linux істотно відрізняються від оних на Windows і інших системах. На Винда це вже готова закрита програма, якої залишається тільки почати користуватися. Дистрибутиви Лінукса ж припускають самостійне налаштування всіх компонентів. Причому сервер буде в підсумку складатися не з однієї програми, а з декількох. Ми будемо використовувати Postfix в поєднанні з Dovecot і MySQL.
Чому Postfix?
На Убунту існує кілька поштових клієнтів, але все ж ми вибрали саме цей. Налаштування Posfix на Ubuntu набагато легше, ніж того ж SendMail, а це важливо для початківця користувача. У поєднанні з Dovecot Postfix здатний виконувати все те, що зазвичай вимагають від поштових серверів.
Postfix - це безпосередньо сам агент передачі пошти. Йому і належить зіграти головну роль у всьому поданні. Це програма з відкритим вихідним кодом, яку використовують за замовчуванням багато серверів і веб-сайти. Dovecot - це агент доставки пошти. Його головна роль - забезпечення безпеки роботи сервера. MySQL - це ідеальна система управління базами даних (СКБД) для будь-яких сайтів. Вона потрібна, щоб оперувати інформацією, яку ми отримуємо від користувачів нашого сервера.
Отже, з теоретичною частиною закінчено. Тепер варто перейти до практики.
Створення поштового сервера
Що повинно бути налаштоване перед установкою поштового сервера?
- MySQL;
- DNS-зона, у вас повинен бути персональний FDQN. Далі ми будемо використовувати namehost.
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql
Коли з'явиться вікно з конфігурацією Postfix, нам потрібно буде вибрати «Інтернет-сайт».
Нижче нас попросять ввести доменне ім'я, використовуємо «primer.ru».
Налаштування MySQL
Тепер нам необхідно налаштувати три таблиці для даних в MySQL: для доменів, користувачів і для так званих Alias - псевдонімів або додаткових призначених для користувача поштових скриньок. Тут ми не будемо детально розбирати настройку бази даних MySQL.
Назвемо базу даних examplemail. Створюємо базу з таким ім'ям:
mysqladmin -p create servermail
Логіном в MySQL:
Потім вводимо пароль. Якщо все зроблено правильно, то буде такий запис в терміналі:
Створимо нового користувача спеціально для входу в мережу:
mysql> GRANT SELECT ON examplemail. * TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'password';
Тепер перезавантажуємо MySQL, щоб переконатися, що всі зміни застосували успішно.
Використовуємо нашу базу даних, щоб потім створювати на її основі таблиці:
mysql> USE examplemail;
Створюємо таблицю для доменів:
CREATE TABLE `virtual_domains` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR (50) NOT NULL,
PRIMARY KEY ( `id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Створимо таблицю для користувачів:
CREATE TABLE `virtual_users` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Domain_id` INT NOT NULL,
`Password` VARCHAR (106) NOT NULL,
`Email` VARCHAR (120) NOT NULL,
PRIMARY KEY ( `id`),
UNIQUE KEY `email` (` email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains (id) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Тут, як бачите, додані email і пароль. А кожен користувач прив'язаний до домену.
Нарешті, створюємо таблицю під псевдоніми:
CREATE TABLE `virtual_aliases` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Domain_id` INT NOT NULL,
`Source` varchar (100) NOT NULL,
`Destination` varchar (100) NOT NULL,
PRIMARY KEY ( `id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains (id) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Ми успішно налаштували MySQL і створили три необхідні таблиці. Тепер потрібно розібратися з доменами і мейлами.
Додамо наш домен в таблицю з доменами. Туди ж необхідно занести FDQN:
INSERT INTO `examplemail`.`virtual_domains`
( `Id`,` name`)
VALUES
( '1', 'primer.ru'),
( '2', 'namehost.primer.ru');
INSERT INTO `examplemail`.`virtual_users`
( `Id`,` domain_id`, `password`.` Email`)
VALUES
( '1', '1', ENCRYPT ( 'firstpassword', CONCAT ( '$ 6 $', SUBSTRING (SHA (RAND ()), -16))), '[email protected]'),
( '2', '1', ENCRYPT ( 'secondpassword', CONCAT ( '$ 6 $', SUBSTRING (SHA (RAND ()), -16))), '[email protected]');
Тепер додамо інформацію в останню таблицю:
INSERT INTO `examplemail`.`virtual_aliases`
( `Id`,` domain_id`, `source`,` destination`)
VALUES
( '1', '1', '[email protected]', '[email protected]');
Налаштування Postfix
Переходимо, безпосередньо, до параметрів Postfix. Нам потрібно, щоб поштовий клієнт міг відправляти повідомлення від імені введених в базу користувачів і обробляв SMTP-з'єднання. Для початку створимо бекап конфігураційного файлу, щоб в разі чого можна було повернутися до стандартних налаштувань:
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
Тепер відкриваємо файл з конфігураціями:
# TLS parameters
# Smtpd_tls_cert_file = / etc / ssl / certs / ssl-cert-snakeoil.pem
# Smtpd_tls_key_file = / etc / ssl / private / ssl-cert-snakeoil.key
# Smtpd_use_tls = yes
#smtpd_tls_session_cache_database = btree: $ / smtpd_scache
#smtp_tls_session_cache_database = btree: $ / smtp_scache
smtpd_tls_cert_file = / etc / ssl / certs / dovecot.pem
smtpd_tls_key_file = / etc / ssl / private / dovecot.pem
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
Після цього додамо ще ряд параметрів:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private / auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
#mydestination = primer.ru, namehost.primer.ru, localhost.primer.ru, localhost
mydestination = localhost
Параметр myhostname повинен містити наше доменне ім'я:
Тепер додаємо рядок для відправки повідомлень на всі домени, перераховані в таблиці MySQL:
Додаємо ще три параметра, щоб Postfix міг з'єднатися з таблицями MySQL:
virtual_mailbox_domains = mysql: /etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql: /etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql: /etc/postfix/mysql-virtual-alias-maps.cf
Налаштування файлів MySQL і Postfix
Додаємо в нього ці значення:
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = examplemail
query = SELECT 1 FROM virtual_domains WHERE name = '% s'
service postfix restart
Тестуємо домен для Постфікс:
postmap -q primer.ru mysql: /etc/postfix/mysql-virtual-mailbox-domains.cf
Створюємо ще один файл:
nano /etc/postfix/mysql-virtual-mailbox-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = examplemail
query = SELECT 1 FROM virtual_users WHERE email = '% s'
service postfix restart
Потім знову перевіряємо Postfix:
postmap -q [email protected] mysql: /etc/postfix/mysql-virtual-mailbox-maps.cf
Якщо все зроблено правильно, має виводитися
Створюємо останній файл - для псевдонімів:
nano /etc/postfix/mysql-virtual-alias-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = examplemail
query = SELECT destination FROM virtual_aliases WHERE source = '% s'
service postfix restart
Останній раз тестуємо:
postmap -q [email protected] mysql: /etc/postfix/mysql-virtual-alias-maps.cf
Налаштування Dovecot
Робимо резервні копії для семи файлів, які будемо міняти:
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
Це зразок команди. Вводимо ще шість таких же для цих файлів:
/etc/dovecot/conf.d/10-mail.conf
/etc/dovecot/conf.d/10-auth.conf
/etc/dovecot/dovecot-sql.conf.ext
/etc/dovecot/conf.d/10-master.conf
/etc/dovecot/conf.d/10-ssl.conf
Відкриваємо перший файл: