Почтовый сервер
Как всегда бескрайние просторы интернета преподносят дары. Вот совсем недавно нашел статейку о поднятии своего почтового сервера (практически с нуля). Много мануалов данной тематики можно найти на бескрайних просторах сети, однако этот меня порадовал своей подробностью и доходчивостью. Спешу им с Вами поделиться. За сочинение монументального труда спасибо latev.
1. Имя хоста и RDNS
Перед тем, как настраивать почтовый сервер, вам стоит убедиться, что на вашем хостинге правильно настроены названия хоста и RDNS. RDNS позволяет идентифицировать легитимность сервера, и уменьшает шанс того, что ваши письма будут классифицированы, как спам существующими спам-фильтрами.
Для примера, я буду использовать названия доменов domen1.com и domen2.ru. Оба этих домена должны быть зарегистрированы и иметь соответствующие ДНС записи (в частности MX записи, необходимые для корректного функционирования почтового сервера)
Проверим имя хоста:
Если оно отличается от доменного имени вашего будущего сервера — требуется его поменять.
Для этого отредактируем два файла:
Замените существующее имя на mail.domen1.com.
И второй файл:
Так же убедитесь, что старое название хоста изменено на новое.
После изменения названия хоста — перегрузите вашу систему.
Теперь снова проверим имя хоста:
На экран выводится:
Замечательно. Первый шаг выполнен.
Теперь нужно проверить RDNS (reverse DNS). У разных провайдеров это настраивается по разному, в зависимости от особенностей реализации панели управления.
Вы должны прописать соответствие вашего внешнего IP-адреса имени почтового сервера, например mail.domen1.com — 231.123.134.12
Проверить настройки RDNS просто. Установите пакет dnsutils.
После установки, выполните проверку:
Если вывод имеет такие строки,
....
....
;; QUESTION SECTION:
;231.123.134.12.in-addr.arpa. IN PTR
;; ANSWER SECTION:
231.123.134.12.in-addr.arpa. 3477 IN PTR mail.domen1.com.
то все нормально. Можем продолжать.
2. Настройка места физического расположения почты на сервере
Самый простой способ настроить место для хранения почты — создать пользователя vmail с соответствующей группой и назначить ему специфичный userID.
Конечно, в будущем мы настроим MySQL для обеспечения работы сервера с многочисленными пользователями и доменами, но почта не будет храниться в базе данных. База будет использоваться только для поиска соответствующих пользователей и определения деталей доставки почты.
Пользователь vmail создается как обычно, но с некоторым отличием: мы указываем, что пользователь не может логиниться в систему.
Для начала создадим группу vmail:
Это команда создает группу vmail и присваивает ее GID (group ID) 5000.
Затем создаем пользователя vmail:
Эта команда создает пользователя vmail, чтобы он не мог логиниться в систему, присваивает его группе vmail, а так же создает ему домашнюю директорию /home/vmail
3. Установка сервера Postfix и MySQL
Выполните команду:
Эта команда дополнительно к Postfix и MySQL установит пакеты mailx и telnet, которые будут очень удобны в процессе тестирования настроек.
В процессе установки MySQL сервера потребуется установить (и подтвердить) пароль для администратора (пользователь root).
В процессе установки Postfix сервера вначале система выведет на экран окно с информацией, после чего потребуется выбрать пункт ‘Internet Site’.
На следующем окне
введите имя вашего почтового домена mail.domen1.com.
Можно протестировать установку почтового сервера. Для этого отправим себе с него постовое сообщение.
Выполните команду:
address@example.com должен быть реальным действующим адресом, который вы можете проверить на предмет новой почты.
После нажатия на клавишу ввода потребуется ввести тему сообщения. После следующего нажатия — текст письма. Тест письма любой, можно сколько угодно пользоваться клавишей ввода. Признаком окончания тела письма является символ точки с начала новой строки, с последующим нажатием на клавишу ввод.
Далее система спросит адрес для копий письма, последний ввод, — и письмо отправлено.
1 2 3 4 5 6 7 8 | mail adress@example.com Subject: test email from domen1.com Это, собственно письмо с уважением, Я .. Cc: |
Удобная штучка для отсылки писем в терминале, да? Рекомендую! Это пакет mailx, который мы установили чуть ранее.
Проверяйте ящик adress@example.com. Пришло письмо? Замечательно! Можем двигаться дальше.
4. Настройка базы данных MySQL
Далее будет много текстового ввода в терминале — не пугаемся. Всегда можно воспользоваться копированием через буфер обмена ![]()
Для начала создадим базу данных с оригинальным названием — mail.
В процессе выполнения команды система вас попросит ввести пароль администратора MySQL (вы его ввели при инсталляции MySQL).
Далее залогинимся в MySQL и создадим несколько таблиц.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #Для начала создадим пользователя БД, для наших целей... CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY 'MyPasswordHere'; #Замените MyPasswordHere на свой собственный пароль. #Далее, дадим этому пользователю необходимые привелегии: SELECT, INSERT, UPDATE, DELETE. FLUSH PRIVILEGES; GRANT SELECT, INSERT, UPDATE, DELETE ON `mail` . * TO 'mailadmin'@'localhost'; FLUSH PRIVILEGES; #Теперь мы можем выбрать нашу БД mail и создать необходимые таблицы. USE mail; #Необходимо создать три таблицы для хранения почтовых доменов, пользователей и деталей доставки сообщений (форвардинг сообщений). #Таблица доменов. В Mysql введите следующие команды: CREATE TABLE domains ( domain varchar(50) <code class="color1">NOT </code><code class="color1">NULL, PRIMARY KEY (domain) ) TYPE=MyISAM; #Не забываем вводить точку с запятой (;) в конце команды SQL, иначе она не будет выполнена. #Таблица пользователей. Как раньше, введите в MySQL: CREATE TABLE users ( email varchar(80) </code><code class="color1">NOT </code><code class="color1">NULL, password varchar(20) </code><code class="color1">NOT </code><code class="color1">NULL, PRIMARY KEY (email) ) TYPE=MyISAM; #Таблица форвардинга: CREATE TABLE forwards ( source varchar(80) </code><code class="color1">NOT </code><code class="color1">NULL, destination TEXT </code><code class="color1">NOT </code><code class="color1">NULL, PRIMARY KEY (source) ) TYPE=MyISAM; #Теперь можно выйти из MySQL: quit; |
Вы вернулись обратно в командную строку терминала.
Не волнуйтесь, что при создании таблицы пользователей поле пароля определено как текстовое. При создании пароля, мы его зашифруем перед записью в таблицу.
5. Настройка Postfix для использования базы данных MySQL
Для того, чтобы Postfix мог использовать таблицы MySQL, необходимо создать несколько настроечных файлов.
Каждый из этих файлов достаточно прост: он содержит название БД, имя, пароль, SQL-запрос и название хоста. Эти файлы подсказывают Postfix-у, как выбирать данные из созданных нами ранее таблиц.
Домены.
Создадим текстовый файл:
Введем следующие строки:
1 2 3 4 5 | user = mailadmin password = MyPasswordHere dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |
Помним: MyPasswordHere надо заменить на введенный при создании пользователя БД mailadmin пароль.
Форвардинг.
Создаем файл:
Заполняем его:
1 2 3 4 5 | user = mailadmin password = MyPasswordHere dbname = mail query = SELECT destination FROM forwards WHERE source='%s' hosts = 127.0.0.1 |
Почтовые ящики.
Каждый домен имеет множество различных почтовых ящиков. Этот скрипт получает правильные характеристики почтового ящика.
Содержимое:
1 2 3 4 5 | user = mailadmin password = MyPasswordHere dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |
E-Mail адреса.
И наконец создадим файл адресов.
Содержимое:
1 2 3 4 5 | user = mailadmin password = MyPasswordHere dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |
с файлами все.
Эти четыре файла позволят Postfix-у получить доступ к информации в базе данных mail и присвоить корректные данные каждому письму.
Полномочия на файлы
Да, чуть не забыл. Необходимо еще установить правильный доступ к этим файлам:
(другие группы не имеют доступа к файлам.
И сменим владельца:
Postfix должен иметь к ним доступ.
Настройки Postfix
Отредактируем файл настроек Postfix:
Обычно нижняя часть файла выглядит так:
1 2 3 4 5 6 7 8 9 10 | myhostname = mail.domen1.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all |
Убедитесь, что mydestination не сделано присвоение.
Добавим ссылки на созданные файлы настроек, чтобы Postfix использовал их в процессе работы. В конец файла добавьте строки:
1 2 3 4 5 6 7 8 | virtual_alias_domains = virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf virtual_mailbox_base = /home/vmail virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 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
Посмотрим основной файл настроек программы:
Первым делом надо установить автоматический запуск демона (поменяйте значение на 'yes'. По умолчанию стоит 'no'):
1 2 | # Should saslauthd run automatically on startup? (default: no) START=yes |
Далее нужно изменить некоторые опции в конце файла. По умолчанию они выглядят так:
1 2 3 | # # Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd" OPTIONS="-c -m /var/run/saslauthd" |
Изменим их следующим образом (мы же запускаем Postfix):
1 2 3 | # # Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |
Кстати...Мы только что указали каталог, который не существует в природе. Непорядок. Устраним это:
MySQL
Мы же используем MySQL для хранения наших идентификационных данных. Точнее не наших, а пользователей сервера. Значит процесс авторизации должен знать, где брать данные.
Создадим два файла, чтобы процесс мог получить доступ к базе данных и добыть необходимую ему информацию:
Добавим в этот файл следующий текст:
1 2 | auth required pam_mysql.so user=mailadmin passwd=MyPasswordHere host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 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 2 3 4 5 6 7 8 9 | pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: mysql sql_hostnames: 127.0.0.1 sql_user: mailadmin sql_passwd: MyPasswordHere sql_database: mail sql_select: select password from users where email = '%u' |
По моему, тут ничего особо не надо пояснять, текст говорит сам за себя.
Для того, чтобы Postfix мог получить доступ к процессу Saslauthd, добавим пользователя Postfix в группу Saslauthd.
Поменяли кучу настроек. Время перезапустить демоны:
1 2 | sudo /etc/init.d/postfix restart sudo /etc/init.d/saslauthd restart |
Создаем SSL-сертификат
Создадим сертификат безопасности. По умолчанию он будет создан в каталоге /etc/ssl/certs.
В процессе создания, вам зададут несколько вопросов. Ответить можно, например так:
1 2 3 4 5 6 7 | Country Name - RU State or Province - Locality name - Moscow Organisation Name - MyGreat Company Organisational Unit Name - Mail Hostname - mail.domen1.com 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 2 3 4 5 | 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 |
Стираем их полностью. И вставляем вместо них следующие:
1 2 3 4 5 6 7 | smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_sasl_authenticated_header = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_use_tls = yes smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem smtpd_tls_key_file = $smtpd_tls_cert_file |
Тем самым мы активировали безопасные соединения, перечислили, какие соединения будем принимать, и, наконец, указали путь к сертификату.
7. Устанавливаем Courier
Courier позволит нам получить POP3 и IMAP доступ к нашей почте.
Установка Courier
Установка достаточна проста, с использованием aptitude:
Во время установки вам будет задан вопрос, нужно ли создать директории. Правильный ответ — НЕТ (это ответ по умолчанию, так что можете просто нажать клавишу ввода)!
Настройка Courier
Для начала отредактируем файл:
Поменяйте строку
на
Далее редактируем файл с деталями БД:
1 | sudo nano /etc/courier/authmysqlrc |
Чтобы не заморачиваться — удалите в нем все содержимое, и вставьте следующее:
1 2 3 4 5 6 7 8 9 10 11 12 | MYSQL_SERVER localhost MYSQL_USERNAME mailadmin MYSQL_PASSWORD MyPasswordHere MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') |
Сохраните файл.
После изменения файлов настроек, требуется рестартовать демоны:
1 2 3 4 5 | sudo /etc/init.d/courier-authdaemon restart sudo /etc/init.d/courier-imap restart sudo /etc/init.d/courier-imap-ssl restart sudo /etc/init.d/courier-pop restart 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 2 3 4 5 6 7 8 9 10 11 | USE mail; #Заполняем таблицу доменов: INSERT INTO `domains` (`domain`) VALUES ('domen1.com'); #Чтобы ввести любой другой домен, выполните аналогичную команду: INSERT INTO `domains` (`domain`) VALUES ('domen2.ru'); #Заполняем таблицу пользователей: INSERT INTO `users` (`email`, `password`) VALUES ('admin@domen1.com', ENCRYPT('secretpassword')); #Остальные пользователи вводятся аналогично: INSERT INTO `users` (`email`, `password`) VALUES ('kot@domen2.ru', ENCRYPT('secretpassword')); #Когда все таблицы заполнены — выходим из ведения БД: quit; |
Перегружаем postfix:
Проверим, работает или нет?
Давайте отправим почтовое сообщение по одному из введенных адресов: admin@domen1.com
Введите тело и тему письма и отправьте его адресату. Через какое-то время проверьте папку /home/vmail:
Увидите новый каталог:
А для каждого пользователя домена domen1.com в папке /home/vmail/domen1.com будет создан собственный каталог с письмами.
10. Web-client для работы с почтовым сервером
Наиболее известным бесплатным и свободно распространяемым продуктом для этого является Squirrelmail. Этот Web-клиент разработан на PHP, имеет удобный интерфейс настроек, переведен на многие языки, для него существует много плагинов. В общем — сплошные плюсы.
Установка
Как я уже неоднократно упоминал, установка приложений в Ubuntu с помощью Aptitude — очень простое занятие.
Вот какие пакеты нам понадобятся для Squirrelmail:
Настройки
Скорее всего сразу после инсталляции ваш веб-клиент будет доступен по адресу: www.domencom/squirrelmail (www.domencom — ваш домен)
Если это не так, то нужно проделать следующее:
sudo a2ensite squirrelmail
Тем самым мы копируем файл конфигурации по умолчанию в папку доступных сайтов Apache, после чего активируем его.
Теперь он точно будет доступен по адресу www.domencom/squirrelmail. Но это не совсем удобно.
Поэтому проделаем следующее:
Закомментируем следующие строки в файле настроек:
Уберем символы комментария в начале строк со следующего блока:
1 2 3 | # users will prefer a simple URL like http://webmail.example.com DocumentRoot /usr/share/squirrelmail ServerName webmail.domencom |
Если для вашего сервера apache активирован SSL, то можно убрать комментарии с секции mod_rewrite для того, чтобы обеспечить наилучшую безопасность системы.
Сохраните файл. Потом проверьте настройки apache:
Если все нормально — перегрузите apache:
Теперь мы можете заходить как domaincom/squirrelmail/ или webmail.domaincom если предпочитаете виртуальный хост.
Кстати, в этом файле еще можно добавить блок типа:

Это заставит сервер автоматически переходить на защищеное https соединение. Активируйте в том случае, если у вам работает mod_rewrite и mod_ssl
Теперь пришло время настроить собственно squirrelmail, чтобы вы могли не только увидеть его стартовую страничку, но и проверить свою почту.
Откроется интерфейс конфигурации веб-клиента.
Нажмите 2 (+Enter) чтобы войти в секцию настроек сервера. Нажмите A, чтобы редактировать настройки IMAP.
Нажмите 8 чтобы изменить программу авторизации. введите courier.
Теперь нажмем 7, чтобы изменить настройки безопасности secure IMAP. Введите Y для активации.
Введите 5 для редактирования порта IMAP. Введите значение 99
Нажмите S для сохранения настроек. И «Enter».
Нажмите Q, чтобы выйти из программы настроек.
Сейчас вы можете зайти на страницу domaincom/squirrelmail/ или webmail.domaincom и попробовать проверить свою почту, залогинившись.
Кстати, видите — у меня на скриншоте все на русском языке
В программе настроек squirrelmail был пункт '10 — language', который позволял изменить кодировку.
У себя я там изобразил что-то похожее на:
Default Language : ru_RU
Default Charset : cp1251
Enable lossy encoding : false
Пробуйте.
11. Проряем свой сервер на возможность несанкционированной рассылки спама.
Способ проверки через браузер
В Интернет есть множество сайтов, которые предлагают сервис проверки почтового сервера на предмет открытого relay. Один из них находится по этому адресу:
http://www.abuse.net/relay.html
Просто введите ваш почтовый домен в поле «Address to test:» — mail.domen1.com. После чего нажмите внизу экранную кнопку «Test for relay».
1 2 3 4 5 6 7 8 9 10 11 12 | Mail relay testing Connecting to mail.domen1.com for anonymous test ... 220 domen1.com ESMTP Postfix (Ubuntu) HELO www.abuse.net 250 domen1.com Relay test 1 RSET 250 2.0.0 Ok MAIL FROM:>spamtest@abuse.net< 250 2.1.0 Ok RCPT TO:>securitytest@abuse.net< 554 5.7.1 >securitytest@abuse.net<: Relay access denied |
Сервис проделает множество тестов (в моем случаае 17) и выведет финальное сообщение:
All tests performed, no relays accepted.
Главное, чтобы во всех тестах был статус: Relay access denied.
Значит, сервер защищен от несанкционированной рассылки почты.
Способ проверки с использованием командной строки
Здесь тоже существуют сервисы для проверки вашего сервиса. Один из них следующий:
Зайдите в терминал ваашего почтового сервера и наберите в командной строке:
Через несколько секунд сервис начнет тестирование:
1 2 3 4 5 6 7 8 9 10 | MAIL FROM:<code class="string">"relaytestsend@rt.njabl.org"@mail.domen1.com 250 2.1.0 Ok RCPT TO:relaytest@rr.njabl.org 554 5.7.1 relaytest@rr.njabl.org: Relay access denied RSET 250 2.0.0 Ok MAIL FROM:relaytestsend 250 2.1.0 Ok RCPT TO:relaytest@rr.njabl.org 554 5.7.1 relaytest@rr.njabl.org: Relay access denied |
Так же тщательно проверите вывод, чтобы везде статус был: Relay access denied
Вот и все.
Так просто можно проверить ваш почтовый сервер на предмет открытости для осуществления несанкционированных спамерских рассылок.
Статья подготовлена с использование материалов slicehost.com
Тэги: Courier, E-Mail, IMAP, mysql, POP3, Postfix, RDNS, Saslauthd, Squirrelmail
GNU/Linux Ubuntu Funs 

