Я постараюсь подробно описать, как я настраивал mail server, чтобы обеспечить поддержку нескольких доменов, доступ по IMAP и POP3, защищеное соединение, веб-доступ к почте и многое другое. Это будет полезно новичкам в этом деле, да и мне самому, если потребуется повторить процесс…
1. Имя хоста и RDNS
Перед тем, как настраивать почтовый сервер, вам стоит убедиться, что на вашем хостинге правильно настроены названия хоста и RDNS. RDNS позволяет идентифицировать легитимность сервера, и уменьшает шанс того, что ваши письма будут классифицированы, как спам существующими спам-фильтрами.
Для примера, я буду использовать названия доменов domen1.com и domen2.ru. Оба этих домена должны быть зарегистрированы и иметь соответствующие ДНС записи (в частности MX записи, необходимые для корректного функционирования почтового сервера)
Проверим имя хоста:
1.hostname -f
Если оно отличается от доменного имени вашего будущего сервера — требуется его поменять.
Для этого отредактируем два файла:
1.sudo nano /etc/hostname
Замените существующее имя на mail.domen1.com.
И второй файл:
1.sudo nano /etc/hosts
Так же убедитесь, что старое название хоста изменено на новое.
После изменения названия хоста — перегрузите вашу систему.
Теперь снова проверим имя хоста:
1.hostname -f
На экран выводится:
1.mail.domen1.com
Замечательно. Первый шаг выполнен.
Теперь нужно проверить RDNS (reverse DNS). У разных провайдеров это настраивается по разному, в зависимости от особенностей реализации панели управления.
Вы должны прописать соответствие вашего внешнего IP-адреса имени почтового сервера, например mail.domen1.com — 231.123.134.12
Проверить настройки RDNS просто. Установите пакет dnsutils.
1.sudo aptitude install dnsutils
После установки, выполните проверку:
1.dig -x 231.123.134.12
Если вывод имеет такие строки,
1.dig -x 231.123.134.12
2....
3....
4.;; QUESTION SECTION:
5.;231.123.134.12.in-addr.arpa. IN PTR
6.;; ANSWER SECTION:
7.231.123.134.12.in-addr.arpa. 3477 IN PTR mail.domen1.com.
то все нормально. Можем продолжать.
2. Настройка места физического расположения почты на сервере
Самый простой способ настроить место для хранения почты — создать пользователя vmail с соответствующей группой и назначить ему специфичный userID.
Конечно, в будущем мы настроим MySQL для обеспечения работы сервера с многочисленными пользователями и доменами, но почта не будет храниться в базе данных. База будет использоваться только для поиска соответствующих пользователей и определения деталей доставки почты.
Пользователь vmail создается как обычно, но с некоторым отличием: мы указываем, что пользователь не может логиниться в систему.
Для начала создадим группу vmail:
1.sudo groupadd -g 5000 vmail
Это команда создает группу vmail и присваивает ее GID (group ID) 5000.
Затем создаем пользователя vmail:
1.sudo useradd -s /usr/sbin/nologin -g vmail -u 5000 vmail -d /home/vmail -m
Эта команда создает пользователя vmail, чтобы он не мог логиниться в систему, присваивает его группе vmail, а так же создает ему домашнюю директорию /home/vmail
3. Установка сервера Postfix и MySQL
Выполните команду:
1.sudo aptitude install postfix postfix-mysql mysql-server postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet mailx
Эта команда дополнительно к Postfix и MySQL установит пакеты mailx и telnet, которые будут очень удобны в процессе тестирования настроек.
В процессе установки MySQL сервера потребуется установить (и подтвердить) пароль для администратора (пользователь root).
В процессе установки Postfix сервера вначале система выведет на экран окно с информацией, после чего потребуется выбрать пункт ‘Internet Site’.
postfix1
На следующем окне
postfix2
введите имя вашего почтового домена mail.domen1.com.
Можно протестировать установку почтового сервера. Для этого отправим себе с него постовое сообщение.
Выполните команду:
1.mail address@example.com
address@example.com должен быть реальным действующим адресом, который вы можете проверить на предмет новой почты.
После нажатия на клавишу ввода потребуется ввести тему сообщения. После следующего нажатия — текст письма. Тест письма любой, можно сколько угодно пользоваться клавишей ввода. Признаком окончания тела письма является символ точки с начала новой строки, с последующим нажатием на клавишу ввод.
Далее система спросит адрес для копий письма, последний ввод, — и письмо отправлено.
1.mail adress@example.com
2.Subject: test email from domen1.com
3.Это, собственно
4.письмо
5.с уважением,
6.Я
7..
8.Cc:
Удобная штучка для отсылки писем в терминале, да? Рекомендую! Это пакет mailx, который мы установили чуть ранее.
Проверяйте ящик adress@example.com. Пришло письмо? Замечательно! Можем двигаться дальше.
4. Настройка базы данных MySQL
Далее будет много текстового ввода в терминале — не пугаемся. Всегда можно воспользоваться копированием через буфер обмена ;)
Для начала создадим базу данных с оригинальным названием — mail.
1.mysqladmin -u root -p create mail
В процессе выполнения команды система вас попросит ввести пароль администратора MySQL (вы его ввели при инсталляции MySQL).
Далее залогинимся в MySQL и создадим несколько таблиц.
1.mysql -u root -p
Для начала создадим пользователя БД, для наших целей…
1.CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY 'MyPasswordHere';
Замените MyPasswordHere на свой собственный пароль.
Далее, дадим этому пользователю необходимые привелегии: SELECT, INSERT, UPDATE, DELETE.
1.FLUSH PRIVILEGES;
2.GRANT SELECT, INSERT, UPDATE, DELETE ON `mail` . * TO 'mailadmin'@'localhost';
3.FLUSH PRIVILEGES;
Теперь мы можем выбрать нашу БД mail и создать необходимые таблицы.
1.USE mail;
Необходимо создать три таблицы для хранения почтовых доменов, пользователей и деталей доставки сообщений (форвардинг сообщений).
Таблица доменов. В Mysql введите следующие команды:
1.CREATE TABLE domains (
2.domain varchar(50) NOT NULL,
3.PRIMARY KEY (domain)
4.)
5.TYPE=MyISAM;
Не забываем вводить точку с запятой (;) в конце команды SQL, иначе она не будет выполнена.
Таблица пользователей. Как раньше, введите в MySQL:
1.CREATE TABLE users (
2.email varchar(80) NOT NULL,
3.password varchar(20) NOT NULL,
4.PRIMARY KEY (email)
5.)
6.TYPE=MyISAM;
Таблица форвардинга:
1.CREATE TABLE forwards (
2.source varchar(80) NOT NULL,
3.destination TEXT NOT NULL,
4.PRIMARY KEY (source)
5.)
6.TYPE=MyISAM;
Теперь можно выйти из MySQL:
1.quit;
Вы вернулись обратно в командную строку терминала.
Не волнуйтесь, что при создании таблицы пользователей поле пароля определено как текстовое. При создании пароля, мы его зашифруем перед записью в таблицу.
5. Настройка Postfix для использования базы данных MySQL
Для того, чтобы Postfix мог использовать таблицы MySQL, необходимо создать несколько настроечных файлов.
Каждый из этих файлов достаточно прост: он содержит название БД, имя, пароль, SQL-запрос и название хоста. Эти файлы подсказывают Postfix-у, как выбирать данные из созданных нами ранее таблиц.
Домены.
Создадим текстовый файл:
1.sudo nano /etc/postfix/mysql-domains.cf
Введем следующие строки:
1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT domain AS virtual FROM domains WHERE domain='%s'
5.hosts = 127.0.0.1
Помним: MyPasswordHere надо заменить на введенный при создании пользователя БД mailadmin пароль.
Форвардинг.
Создаем файл:
1.sudo nano /etc/postfix/mysql-forwards.cf
Заполняем его:
1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT destination FROM forwards WHERE source='%s'
5.hosts = 127.0.0.1
Почтовые ящики.
Каждый домен имеет множество различных почтовых ящиков. Этот скрипт получает правильные характеристики почтового ящика.
1.sudo nano /etc/postfix/mysql-mailboxes.cf
Содержимое:
1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/'
5.hosts = 127.0.0.1
E-Mail адреса.
И наконец создадим файл адресов.
1.sudo nano /etc/postfix/mysql-email.cf
Содержимое:
1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT email FROM users WHERE email='%s'
5.hosts = 127.0.0.1
с файлами все.
Эти четыре файла позволят Postfix-у получить доступ к информации в базе данных mail и присвоить корректные данные каждому письму.
Полномочия на файлы
Да, чуть не забыл. Необходимо еще установить правильный доступ к этим файлам:
1.sudo chmod o= /etc/postfix/mysql-*
(другие группы не имеют доступа к файлам.
И сменим владельца:
1.sudo chgrp postfix /etc/postfix/mysql-*
Postfix должен иметь к ним доступ.
Настройки Postfix
Отредактируем файл настроек Postfix:
1.sudo nano /etc/postfix/main.cf
Обычно нижняя часть файла выглядит так:
01.myhostname = mail.domen1.com
02.alias_maps = hash:/etc/aliases
03.alias_database = hash:/etc/aliases
04.myorigin = /etc/mailname
05.mydestination =
06.relayhost =
07.mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
08.mailbox_size_limit = 0
09.recipient_delimiter = +
10.inet_interfaces = all
Убедитесь, что mydestination не сделано присвоение.
Добавим ссылки на созданные файлы настроек, чтобы Postfix использовал их в процессе работы. В конец файла добавьте строки:
1.virtual_alias_domains =
2.virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.c
3.virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.c
4.virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.c
5.virtual_mailbox_base = /home/vmail
6.virtual_uid_maps = static:5000
7.virtual_gid_maps = static:5000
8.proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
6. Безопасное соединение — настраиваем Saslauthd
Saslauthd требуется для того, чтобы устанавливать безопасные соединения с вашим почтовым сервером.
Saslauthd
Посмотрим основной файл настроек программы:
1.sudo nano /etc/default/saslauthd
Первым делом надо установить автоматический запуск демона (поменяйте значение на ‘yes’. По умолчанию стоит ‘no’):
1.# Should saslauthd run automatically on startup? (default: no)
2.START=yes
Далее нужно изменить некоторые опции в конце файла. По умолчанию они выглядят так:
1.#
2.# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
3.OPTIONS="-c -m /var/run/saslauthd"
Изменим их следующим образом (мы же запускаем Postfix):
1.#
2.# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
3.OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Кстати…Мы только что указали каталог, который не существует в природе. Непорядок. Устраним это:
1.sudo mkdir -p /var/spool/postfix/var/run/saslauthd
MySQL
Мы же используем MySQL для хранения наших идентификационных данных. Точнее не наших, а пользователей сервера. Значит процесс авторизации должен знать, где брать данные.
Создадим два файла, чтобы процесс мог получить доступ к базе данных и добыть необходимую ему информацию:
1.sudo nano /etc/pam.d/smtp
Добавим в этот файл следующий текст:
1.auth required pam_mysql.so user=mailadmin passwd=MyPasswordHere host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
2.account sufficient pam_mysql.so user=mailadmin passwd=MyPasswordHere host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
Это позволит процессу авторизации иметь доступ к БД для проверки пароля и e-mail-а.
И второй файл:
1.sudo nano /etc/postfix/sasl/smtpd.conf
Его содержимое следующее:
01.pwcheck_method: saslauthd
02.mech_list: plain login
03.allow_plaintext: true
04.auxprop_plugin: mysql
05.sql_hostnames: 127.0.0.1
06.sql_user: mailadmin
07.sql_passwd: MyPasswordHere
08.sql_database: mail
09.sql_select: select password from users where email = '%u'
По моему, тут ничего особо не надо пояснять, текст говорит сам за себя.
Для того, чтобы Postfix мог получить доступ к процессу Saslauthd, добавим пользователя Postfix в группу Saslauthd (Это же Лииинукс!!!) ;) ).
1.sudo adduser postfix sasl
Поменяли кучу настроек. Время перезапустить демоны:
1.sudo /etc/init.d/postfix restart
2.sudo /etc/init.d/saslauthd restart
Создаем SSL-сертификат
Создадим сертификат безопасности. По умолчанию он будет создан в каталоге /etc/ssl/certs.
1.sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/mailcert.pem
В процессе создания, вам зададут несколько вопросов. Ответить можно, например так:
1.Country Name - RU
2.State or Province -
3.Locality name - Moscow
4.Organisation Name - MyGreat Company
5.Organisational Unit Name - Mail
6.Hostname - mail.domen1.com
7.Email address - admin@domen1.com
Важно, чтобы Hostname совпадал с именем mail server-а — hostname. В нашем случае, это mail.domen1.com.
Мы создали самоподписанный сертификат здесь:
1./etc/ssl/certs/mailcert.pem
Настраиваем Postfix
Теперь требуется отредактировать главный файл настроек Postfix:
1.sudo nano /etc/postfix/main.cf
Найдите секцию TLS parameters. Настройки по умолчанию в ней выглядят так:
1.smtpd_tls_cert_file=/etc/ssl/certs/ssl-c
2.smtpd_tls_key_file=/etc/ssl/private/ss
3.smtpd_use_tls=yes
4.smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
5.smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Стираем их полностью. И вставляем вместо них следующие:
1.smtpd_sasl_auth_enable = yes
2.broken_sasl_auth_clients = yes
3.smtpd_sasl_authenticated_header = yes
4.smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
5.smtpd_use_tls = yes
6.smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem
7.smtpd_tls_key_file = $smtpd_tls_cert_file
Тем самым мы активировали безопасные соединения, перечислили, какие соединения будем принимать, и, наконец, указали путь к сертификату.
7. Устанавливаем Courier
Courier позволит нам получить POP3 и IMAP доступ к нашей почте.
Установка Courier
Установка достаточна проста, с использованием aptitude:
1.sudo aptitude install courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl
Во время установки вам будет задан вопрос, нужно ли создать директории. Правильный ответ — НЕТ (это ответ по умолчанию, так что можете просто нажать клавишу ввода)!
Настройка Courier
Для начала отредактируем файл:
1.sudo nano /etc/courier/authdaemonrc
Поменяйте строку
1.authmodulelist="authpam"
на
1.authmodulelist="authmysql"
Понятно для чего, да? Мы же используем MySQL!
Далее редактируем файл с деталями БД:
1.sudo nano /etc/courier/authmysqlrc
Чтобы не заморачиваться — удалите в нем все содержимое, и вставьте следующее:
01.MYSQL_SERVER localhost
02.MYSQL_USERNAME mailadmin
03.MYSQL_PASSWORD MyPasswordHere
04.MYSQL_PORT 0
05.MYSQL_DATABASE mail
06.MYSQL_USER_TABLE users
07.MYSQL_CRYPT_PWFIELD password
08.MYSQL_UID_FIELD 5000
09.MYSQL_GID_FIELD 5000
10.MYSQL_LOGIN_FIELD email
11.MYSQL_HOME_FIELD "/home/vmail"
12.MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/'
Сохраните файл.
После изменения файлов настроек, требуется рестартовать демоны:
1.sudo /etc/init.d/courier-authdaemon restart
2.sudo /etc/init.d/courier-imap restart
3.sudo /etc/init.d/courier-imap-ssl restart
4.sudo /etc/init.d/courier-pop restart
5.sudo /etc/init.d/courier-pop-ssl restart
8. Настраиваем firewall
Не буду здесь описывать настройки файрволла. Они у всех разные… Я например, использую Shorewall, кто-то IPTables… Дело вкуса.
Нужно дать доступ по портам: 25 (SMTP), 110, 995 (POP, POPS), 143, 993 (IMAP, IMAPS).
9. Добавляем домены и пользователей в таблицы БД
Нужно заполнить таблички в MySQL, чтобы все то, что мы настроили ранее заработало.
Логинимся в MySQL:
1.mysql -u root -p
Выбираем базу данных:
1.USE mail;
Заполняем таблицу доменов:
1.INSERT INTO `domains` (`domain`) VALUES ('domen1.com');
Чтобы ввести любой другой домен, выполните аналогичную команду:
1.INSERT INTO `domains` (`domain`) VALUES ('domen2.ru');
Заполняем таблицу пользователей:
1.INSERT INTO `users` (`email`, `password`) VALUES ('admin@domen1.com', ENCRYPT('secretpassword'));
Остальные пользователи вводятся аналогично:
1.INSERT INTO `users` (`email`, `password`) VALUES ('kot@domen2.ru', ENCRYPT('secretpassword'));
Когда все таблицы заполнены — выходим из ведения БД:
1.quit;
Перегружаем postfix:
1.sudo postfix reload
Проверим, работает или нет?
Давайте отправим почтовое сообщение по одному из введенных адресов: admin@domen1.com
1.mail admin@domen1.com
Введите тело и тему письма и отправьте его адресату. Через какое-то время проверьте папку /home/vmail:
1.ls /home/vmail
Увидите новый каталог:
1./home/vmail/domen1.com
А для каждого пользователя домена domen1.com в папке /home/vmail/domen1.com будет создан собственный каталог с письмами.
Почта уже работает.
Спасибо за внимание.
C
0 коммент.:
Отправить комментарий