Налаштування Postfix і Dovecot на Ubuntu

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

Як виконується настройка поштового сервера на базі Ubuntu.

зміст

  • 1 трохи теорії
    • 1.1 Чому Postfix?
  • 2 Створення поштового сервера
    • 2.1 установка
    • 2.2 Налаштування MySQL
    • 2.3 Домени, адреси електронної пошти та псевдоніми
    • 2.4 Налаштування Postfix
    • 2.5 Налаштування файлів MySQL і Postfix
    • 2.6 Налаштування Dovecot

трохи теорії

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

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

Поштові сервери на 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 -u root -p

Потім вводимо пароль. Якщо все зроблено правильно, то буде такий запис в терміналі:

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]');

Закриваємо MySQL:

mysql> exit

Налаштування Postfix

Переходимо, безпосередньо, до параметрів Postfix. Нам потрібно, щоб поштовий клієнт міг відправляти повідомлення від імені введених в базу користувачів і обробляв SMTP-з'єднання. Для початку створимо бекап конфігураційного файлу, щоб в разі чого можна було повернутися до стандартних налаштувань:

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

Тепер відкриваємо файл з конфігураціями:

nano /etc/postfix/main.cf

Замість nano ви можете використовувати будь-який зручний для вас текстовий редактор.

Откомментіруем параметри TLS, а також додамо інші. Тут використані безкоштовні SSL:

# 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: $ {data_directory} / smtpd_scache
#smtp_tls_session_cache_database = btree: $ {data_directory} / 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 і змінити їх на localhost:

#mydestination = primer.ru, namehost.primer.ru, localhost.primer.ru, localhost
mydestination = localhost

Параметр myhostname повинен містити наше доменне ім'я:

myhostname = namehost.primer.ru

Тепер додаємо рядок для відправки повідомлень на всі домени, перераховані в таблиці MySQL:

virtual_transport = lmtp: unix: private / dovecot-lmtp

Додаємо ще три параметра, щоб 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

створюємо файл

mysql-virtual-mailbox-domains.cf

Додаємо в нього ці значення:

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = examplemail
query = SELECT 1 FROM virtual_domains WHERE name = "% s"

Перезапускаємо Postfix:

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

Відкриваємо перший файл:

nano /etc/dovecot/dovecot.conf

Перевірте, відкоментований цей параметр:

! Include conf.d / *. Conf

вводимо:

! Include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

замість:

! Include_try /usr/share/dovecot/protocols.d/*.protocol line

Редагуємо наступний файл:

nano /etc/dovecot/conf.d/10-mail.conf

Знаходимо рядок mail_location, знімаємо коментар, ставимо наступний параметр:

mail_location = maildir: / var / mail / vhosts /% d /% n

Знаходимо mail_privileged_group, ставимо туди:

mail_privileged_group = mail

Перевіряємо доступ. Вводимо команду:

ls -ld / var / mail

Доступ повинен виглядати наступним чином:

drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 / var / mail

Створюємо папку для кожного зареєстрованого домену:

mkdir -p /var/mail/vhosts/primer.ru

Створюємо користувача і групу з ідентифікатором 5000:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d / var / mail

Міняємо власника на користувача VMail:

chown -R vmail: vmail / var / mail

Редагуємо наступний файл:

nano /etc/dovecot/conf.d/10-auth.conf

Раскомментіруем текст аутентифікації і додаємо рядок:

disable_plaintext_auth = yes

Змінюємо наступний параметр:

auth_mechanisms = plain login

Коментуємо цю рядок:

#! Include auth-system.conf.ext

Додаємо авторизацію MySQL, откомментіруем рядок:

! Include auth-sql.conf.ext

Створюємо файл з даними для аутентифікації:

nano /etc/dovecot/conf.d/auth-sql.conf.ext

Вводимо туди наступне:

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid = vmail gid = vmail home = / var / mail / vhosts /% d /% n
}

Редагуємо наступний файл:

nano /etc/dovecot/dovecot-sql.conf.ext

Ставимо параметр MySQL і откомментіруем:

driver = mysql

Раскомментіруем і вводимо:

connect = host = 127.0.0.1 dbname = servermail user = usermail password = mailpassword

Знаходимо рядок default_pass_scheme, раскомментіруем і вводимо параметр:

default_pass_scheme = SHA512-CRYPT

Раскомментіруем і вводимо новий параметр:

password_query = SELECT email as user, password FROM virtual_users WHERE email = "% u";

Міняємо власника:

chown -R vmail: dovecot / etc / dovecot
chmod -R o-rwx / etc / dovecot

Відкриваємо і редагуємо файл:

nano /etc/dovecot/conf.d/10-master.conf

Раскомментіруем і вводимо параметр:

service imap-login {
inet_listener imap {
port = 0
}

вводимо:

service lmtp {
unix_listener / var / spool / postfix / private / dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}

Змінюємо наступну конфігурацію:

service auth {
unix_listener / var / spool / postfix / private / auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}
#unix_listener / var / spool / postfix / private / auth {
# Mode = 0666
#}
user = dovecot
}

Змінюємо останню в цьому файлі конфігурацію:

service auth-worker {
# Auth worker process is run as root by default, so that it can access
# / Etc / shadow. If this is not necessary, the user should be changed to
# $ Default_internal_user.
user = vmail
}

Отже, ми нарешті налаштували поштовий сервер на Ubuntu. І також туди можна додати конфігурацію SSL або використовувати ту, що стоїть за умовчанням. Для захисту від спаму можна налаштувати роботу Spam Assassin спільно з нашим сервером.

Використовуйте стандартний поштовий клієнт, щоб ввести ці дані:

  • Ім'я користувача: [email protected]
  • Пароль: від email1
  • IMAP: primer.ru
  • SMTP: primer.ru