Как сделать домашний почтовый сервер
Как запустить почтовый сервер за 30 минут
В Community уже рассказывали о том, что такое почтовый сервер: как он работает, какие у него преимущества и кому он нужен. Мне бы хотелось дополнить, что сегодня очень важна надежность и высокая производительность почты. Она должна быть защищена от вирусов и спама, уметь авторизовывать пользователей, шифровать трафик и иметь в своем арсенале множество удобных функций.
В этой статье мы рассмотрим установку почтового сервера iRedMail. Для этого нам потребуется VDS или выделенный сервер с ОС Linux. Подключаемся к своему серверу по SSH и приступаем к установке.
Первым делом обновляем репозитории и пакеты:
Для работы iRedMail необходим веб-сервер, поэтому следующим шагом устанавливаем его (в нашем случае это будет nginx):
Далее получаем архив стабильной версии iRedMail (посмотрел на сайте разработчика):
Переходим в директорию и запускаем скрипт:
Откроется установка непосредственно iRedMail:
Выбираем поочередно:
Затем в блоке “LDAP suffix (root dn)” указываем домен. Причем сделать это нужно, записав каждую часть до точки, с префиксом “dc=”:
Я использовал тестовый домен mailtest.tmweb.ru (на этом шаге и далее вы вводите свой домен и пароли).
Задаем пароль для MySQL:
Указываем почтовый домен:
Задаем пароль администратора:
Выбираем дополнительные компоненты:
Затем отобразятся несколько вопросов, соглашаемся:
И перезапускаем сервер:
Готово! Почтовый сервер работает и доступен по ссылкам:
Получить доступ в эти панели можно с помощью данных администратора, которые были заданы при установке сервера. В нашем случае:
В дальнейшем, при необходимости, вы можете изменить пароль администратора через базу данных.
Существует большое количество программного обеспечения, позволяющего настроить работу почты по заявленным в начале требованиям: iRedMail, IndiMail, Rumble, Axigen, CommuniGate Pro и так далее. В зависимости от опыта на запуск уйдет от силы полчаса.
Для компании среднего размера подойдут iRedMail, Axigen и Rumble. Если же у вас несколько удаленных офисов, стоит рассмотреть Axigen, IndiMail и CommuniGate Pro. В последний, к слову, включена функция VoIP, которая позволяет настроить IP-телефонию.
Сказочка про домашний почтовый сервер
Жил да был бедный веб-программист и решил он как-то поставить у себя дома сервер. Да не простой, а чтобы там всё было как у людей: и веб-сервер, и почтовый сервер. К великому счастью этого программиста, вышла новая прошивка с готовым почтовым сервером для уже имеющегося дома железа QNAP 109 Pro II.
Сказано — сделано: постоянный IP адрес от Авангарда имеется, доменное имя *.spb.ru давно зарегистрировано, соответствующие записи на DNS сервере от FirstVDS прописаны, почтовый сервер установлен и настроен. Радости программиста не было предела: почта валится прямо домой, отправляется из дома моментально.
Но на этом радостная часть сказочки и закончилась.
Через несколько дней выяснилось, что на некоторые бесплатные почтовые системы не принимают почту с домашнего почтового сервера. Техподдержка из Рамблера объяснила, что домашний сервер представляется как 192.168.XXX.XXX, а с такими плохими серверами они дела не имеют. В стандартных настройках веб-интерфейса сервера XMail ничего подходящего для приветственного значения не было. Наш программист покопался в Internet и нашёл, как сменить значение для команды HALO для сервера XMail, оказывается надо добавить в конфигурацию сервера новую переменную HeloDomain.
Теперь почтовый сервер стал представляться, как положено, выдавая имя домена из зоны *.spb.ru, но почта всё также отклонялась системами Рамблера и Майл.ру. Вежливая техподдержка из Рамблера опять объяснила незадачливому программисту, что их почтовый сервер проверяет PTR запись сервера, пытающегося отправить почту и, если это значение не совпадает с доменным именем сервера, почта не принимается. В нашем случае PTR запись указывала на pppXXX-XXX-XXX-XXX.pppoe.avangarddsl.ru, что не только не соответствовало значению приветствия сервера, но и предполагало использование динамического IP адреса.
Наш программист добавил в DNS записи домена корректную PTR запись и стал ждать. Шли дни, но ничего не менялось, PTR запись всё также выглядела по-старому. После общения с техподдержкой VDS хостинга и экспериментов с панелью управления ISPmanager Light, выяснилось, что PTR запись на хостинге можно сменить только для IP адресов, выдаваемых этим хостингом.
Что же делать, может быть поискать какой-нибудь другой DNS хостинг? Наш бедняга программист так и сделал. Он зарегистрировался и потестировал: бесплатные Xname и Everydns и даже оплатил 1 год в webnames.ru. Но всё зря – доступа к PTR записям нигде не было. Наконец, только в Relcom, где программист регистрировал доменное имя *.spb.ru, ему доходчиво объяснили, что PTR запись может сменить только владелец IP, т.е. его интернет провайдер.
В техподдержке авангарда сказали, что услугу по смене PTR они не оказывают. Электронное письмо для dnsmaster@ из SOA записи домена pppXXX-XXX-XXX-XXX.pppoe.avangarddsl.ru вернулось назад.
Уважаемое хабрасообщество, может у кого-то есть опыт размещения полноценного почтового сервера в домашних условиях, поделитесь опытом? И что Вы можете посоветовать герою сказки, чтобы сказка оказалась со счастливым концом? Может можно куда-то пожаловаться на несоблюдение п. 2.1 RFC 1912 и должен ли Intenet провайдер вносить изменения в PTR запись по просьбе клиента или нет? Или остаётся только поискать другого провайдера? Из техподдержки Веб плюс и GenaralNet ответили, что могут сменить PTR запись, но ещё неизвестно какое качество Internet у этих провайдеров?
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
Почтовый сервер для начинающих. Настраиваем DNS зону
Для правильной работы почтового сервера важно иметь правильно настроенную DNS зону. В прошлой статье мы уже касались некоторых аспектов, связанных с системой DNS, сегодня мы остановимся на этом вопросе более подробно. Настройка DNS зоны относится к подготовительным операциям перед развертыванием почтового сервера и от нее непосредственно зависит работоспособность системы электронной почты.
Неправильные настройки способны привести к тому, что почту будет невозможно доставить вашему почтовому серверу или сервера получателей будут отклонять вашу почту. Действительно, если записи вашей зоны не содержат сведений о почтовом сервере, куда должна отправляться почта? На деревню дедушке? Можно, конечно, попросить настроить DNS зону вашего провайдера, но лучше сделать это самим.
Что нам понадобиться? Выделенный IP адрес (допустим 11.22.33.44), который вы должны получить у своего провайдера. Доменное имя (например example.com), его можно зарегистрировать у любого регистратора или их партнера. При регистрации у партнера уточняйте, предоставляет ли он доступ к управлению DNS зоной, иначе придется потратить дополнительное время, нервы и деньги на перенос домена к регистратору.
Если у вас уже есть домен и, скорее всего, на нем функционирует сайт, уточните, возможно ли управление DNS зоной из панели хостинг провайдера, в противном случае лучше перенести домен к регистратору, для этого обратитесь в поддержку провайдера.
Первой записью, которую необходимо добавить будет A запись или запись имени. Она должна указывать на IP-адрес вашего сервера, если вы решите обслуживать все запросы к домену у себя или на IP адрес хостинг провайдера, если решите разместить свой сайт на хостинге. При размещении сайта у хостера домен обычно делегируется на его DNS сервера (прописываются соответствующие NS записи) и A запись будет сделана автоматически при парковке домена.
Чаще всего встречается этот вариант, но при необходимости вы всегда сможете создать A запись сами. Данная запись имеет вид
В нашем примере 22.11.33.44 адрес нашего хостинг провайдера, у которого расположен сайт. Обратите внимание на точку в конце имени, это указывает что имя абсолютное, при отсутствии точки имя считается относительным и к нему добавляется доменное имя из SOA. Проверить запись можно командой nslookup.
Для работы почтового сервера нужно создать MX запись, которая должна указывать на наш почтовый сервер. Для этого создадим запись:
Также можно написать просто:
К такому имени (без точки на конце) example.com будет добавлено автоматически. Цифра 10 определяет приоритет сервера, чем она меньше, тем выше приоритет. Кстати, DNS зона уже может содержать MX запись вида:
Oбычно эта запись автоматически создается хостинг провайдером при размещении сайта, ее нужно удалить.
Теперь создадим A запись для mail.example.com
Теперь вся почта для домена example.com будет направляться хосту mail имеющему адрес 11.22.33.44, т.е. вашему почтовому серверу, в то-же время сайт example.com продолжит работать на сервере провайдера по адресу 22.11.33.44.
Может возникнуть вопрос, а почему нельзя сразу указать в MX записи IP адрес почтового сервера? В принципе можно, некоторые так и делают, но это не соответствует спецификациям DNS.
Также можно сделать алиасы для почтового сервера типа pop.example.ru и smtp.example.ru. Зачем это надо? Это позволит клиенту не зависеть от особенностей вашей инфраструктуры, один раз прописав настройки. Допустим, что ваша компания разрослась и выделила для обслуживания внешних клиентов отдельный почтовый сервер mail1, все что вам понадобиться, это изменить две DNS записи, клиенты и не заметят того, что работают с новым сервером. Для создания алиасов используются записи типа CNAME:
Немного странный вид, не правда ли? Разберем структуру PTR записи более подробно. Для обратного преобразования имен используется специальный домен верхнего уровня in-addr.arpa. Это сделано для того, чтобы использовать для прямого и обратного преобразования имен одни и те же программные механизмы. Дело в том, что мнемонические имена пишутся слева направо, а IP адреса справа налево. Так mail.example.com. означает что хост mail находится в домене example, который находится в домене верхнего уровня com., 11.22.33.44 означает что хост 44 находится в подсети 33, которая входит в подсеть 22, принадлежащую сети 11. Для сохранения единого порядка PTR записи содержат IP адрес «задом наперед» дополненный доменом верхнего уровня in-addr.arpa.
Проверить MX и PTR записи также можно командой nslookup используя дополнительный параметр -type=MX или -type=PTR
Ну и конечно не стоит забывать, что любый изменения в DNS зонах происходят не мгновенно, а в течении нескольких часов или даже суток, необходимых для распространения изменений в мировой системе DNS. Это означает, что несмотря на то, что почтовый сервер у вас начнет работать через 2 часа после внесения изменений, у вашего партнера почта может не отправляться к вам в течении более длительного времени.
Почтовый сервер своими руками
Это связка нескольких технологий, в которой каждому приложению назначены свои права и обязанности. В целом вся эта сложная система, занимающаяся авторизацией пользователей, приемом и отправкой почты, ее фильтрацией от спама и вирусов, предоставляющая пользователю удобный доступ к сообщениям требует детальной настройки и большой внимательности со стороны системного администратора.
Ситуация во многом осложняется тем, что практически всегда человек хочет получить все и сразу, однако спустя неделю поиска документации и руководств, десятка проб и ошибок, все приходит к одному: чтению технической документации с сайта разработчика почтового сервера и настройке всех звеньев по-отдельности. Мы хотим несколько облегчить вам задачу, приведя пример настройки почтовой системы на базе операционной системы Debian Etch со следующим набором приложений: Postfix, saslauthd, sasldb2, cyrus-imap, amavisd-new, spamassasin, clamav. Вкратце поясним чем занимается каждое приложение:
Этого всего достаточно для того, чтобы построить надежный защищенный почтовый сервер. Оговоримся, что для полного понимания дальнейших действий нужен некий опыт работы в операционных системах Linux, и будет вообще замечательно, если этот опыт был основан на изучении Debian/Ubuntu/MEPIS.
Приступим к установке. Операционная система Debian была выбрана не случайно. За многие годы она показала себя одной из наиболее надежных и стабильных. К тому же версия Etch, которую мы будем устанавливать, содержит все необходимое нам ПО и оно ещё ни морально ни технически не успело устареть.
Предположим, что у вас уже имеется дистрибутив на CD/DVD дисках. В случае установки по сети сама процедура инсталляции может несколько отличаться. Вставили компакт-диск, выставили загрузку с CD.
К слову, в Debian Etch существует графический инсталлятор, который на момент написания статьи находился в стадии RC2, однако для ускорения самого процесса установки мы им пользоваться не будем. Для экстремаллов и «true-сисадминов» подскажем, что вырианты установки находятся в меню по нажатию клавиши F3.
Выбираем язык и нажимаем [Enter].
Дальше вам понадобится ввести имя и домен вашего будущего сервера.
Подготавливаем жесткий диск для установки системы. Параметры разделов-самостоятельное решение каждого.
Мы вручную разбили жесткий на два раздела.
На следующих экранах выберите свой часовой пояс, пароль суперпользователя root, имя обычного пользователя и его пароль.
При выборе необходимых вариантов системы не следует пользоваться принципом «пускай будет». Все необходимое ПО мы установим без помощи мастера.
Инсталлятор задаст ещё несколько вопросов, с ответами на которые вы справитесь без особого труда.
Система установлена. Впереди пару минут ее загрузки и несколько минут работы.
Прежде всего, для продолжения настройки необходимо настроить окружение, чтобы в нем было уютно работать. Для начала предлагаем установить ssh, чтобы все дальнейшие манипуляции производить не из консоли.
apt-get install ssh
После этого подключаемся любым ssh-клиентом на 22 порт нашего серера, вводим имя и пароль администратора. Также рекомендуем установить Midnight Commander для упрощения работы с файлами и редактирования конфигурационных файлов.
Добавим остальные установочные диски в список доступных источников пакетов командой.
Выполняем эту команду для каждого диска. При желании можно воспользоваться сетевыми источниками пакетов и security updates с сайта Debian.
Для этого снова открываем и добавляем в него следующие строки
deb https://security.debian.org/ etch/updates main contrib
deb-src https://security.debian.org/ etch/updates main contrib
Далее обновим список пакетов и саму систему.
На этом все подготовительные мероприятия считаем законченными.
Установим нужные для работы почтового сервера пакеты.
apt-get install postfix libsasl2 libsasl2-modules sasl2-bin cyrus-imapd-2.2 cyrus-pop3d-2.2 cyrus-admin-2.2 |
Во время первоначальной настройки postfix укажите конфигурацию для Интернет-сайта (Internet Site). На вопрос об имени почтового сервера-оставьте вариант по-умолчанию или укажите свой. В нашем случае это было mailserver.test.ru
Настроим сервер авторизации saslauthd на использование базы данных паролей sasldb2. Для этого отредактируем файл /etc/default/saslauthd:
START=yes
MECHANISMS=»sasldb»
Запустим сервис командой:
/etc/init.d/saslauthd start |
Сейчас проверим правильно ли он работает, но для начала необходимо добавить хотя бы одного пользователя.
Again (for verification):
drwx—— 2 postfix root 4096 Feb 12 16:27 active
drwx—— 2 postfix root 4096 Feb 12 16:27 bounce
drwx—— 2 postfix root s 4096 Feb 12 16:27 corrupt
drwx—— 2 postfix root 4096 Feb 12 16:27 defer
drwx—— 2 postfix root 4096 Feb 12 16:27 deferred
drwxr-xr-x 2 root root 4096 Feb 12 16:27 etc
drwx—— 2 postfix root 4096 Feb 12 16:27 flush
drwx—— 2 postfix root 4096 Feb 12 16:27 hold
drwx—— 2 postfix root 4096 Feb 12 16:27 incoming
drwxr-xr-x 2 root root 4096 Feb 12 16:27 lib
drwx-wx—T 2 postfix postdrop 4096 Feb 12 16:27 maildrop
drwxr-xr-x 2 postfix root 4096 Feb 12 16:27 pid
drwx—— 2 postfix root 4096 Feb 12 16:27 private
drwx—s— 2 postfix postdrop 4096 Feb 12 16:27 public
drwx—— 2 postfix root 4096 Feb 12 16:27 saved
drwx—— 2 postfix root 4096 Feb 12 16:27 trace
drwxr-xr-x 3 root root 4096 Feb 12 16:25 usr
Это сделано из соображений безопасности, однако несколько усложняет сам процесс настройки. Так как postfix общается с остальными приложениями в большинстве случаев посредством socket’ов, и выше своего chroot окружения выбраться не может, то эти сокеты приходится переносить в доступную postfix-папку.
Учитывая то, что для авторизации пользователей postfix будет использоваться демон saslauthd, нам нужно перенести его socket в рабочую директорию нашего сервера /var/spool/postfix/. Самый простой способ сделать это заключается в монтировании в нужную папку директории с уже созданным сокетом демона saslauthd.
Делается это редактированием файла /etc/fstab.
/var/run/saslauthd /var/spool/postfix/var/run/saslauthd none rw,bind 0 0
Не забудьте поставить [Enter] после последней строки. Также нужно не забыть создать папку, куда мы смонтируем сокет демона авторизации.
Сейчас сконфигурируем postfix для использования sasl авторизации.
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
Существует и упрощенный вариант редактирования этого файла командой postconf –e «smtpd_sasl_auth_enable = yes» и т.д.Сейчас мы запретим отсылать почту через наш SMTP шлюз без авторизации. Для этого создадим файл /etc/postfix/sasl/smtpd.conf со следующим содержимым.
pwcheck_method: saslauthd mech_list: PLAIN LOGIN |
Перезапустим наш postfix сервер и внимательно просмотрим следующие файлы на предмет ошибок:
# telnet localhost 25
Connected to localhost.
Escape character is ‘^]’.
220 mailserver.test.ru ESMTP Postfix (Debian/GNU)
250-AUTH LOGIN PLAIN
Connection closed by foreign host.
Для того, чтобы «подружить» saslauthd и postfix необходимо выполнить следующее:
adduser postfix sasl |
Оговоримся, что мы не будем вытанцовывать с бубном для настройки шифрования. Если кому-то это будет интересно, то найти необходимую информацию не составит большого труда и экспериментировать на уже работающей базе будет проще. Сейчас же продолжим наше руководство и расскажем как предоставить IMAP4/POP3 доступ к почтовому ящику.
sasl_pwcheck_method: saslauthd auxprop
Обратите внимание, что cyrus так же, как и saslauthd, придется взаимодействовать с postfix, поэтому их нужно сделать доступными друг другу. Воспользуемся уже известным механизмом:
/var/run/cyrus /var/spool/postfix/var/run/cyrus none rw,bind 0 0
Не забываем создать папки для cyrus.
И выполнить команду:
Сейчас предоставим возможность cyrus забирать почту у postfix. Отредактируем файл /etc/postfix/main.cf:
mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp |
Добавим почтовый сервер в группу lmtp:
addgroup lmtp adduser postfix lmtp |
И выполним следующее:
Добавим еще одну опцию:
local_recipient_maps = |
В случае с pam-авторизацией по логинам и паролям системных пользователей все бы работало без проблем. Но когда имена и пароли хранятся в формате, отличном от системного, необходимо указать данную опцию. Она означает «принимать письма для любого адресата». Это, конечно, не лучший выход, однако лучшего пока найти не удалось.Добавим пользователя cyrus в нашу базу учетных записей:
Введите пароль, когда вас об этом попросят, и перезапустим наши демоны:
Если вы без ошибок сделаете все, что было описано выше, то теоретически к этому моменту уже можете принимать и отправлять письма, создавать и удалять папки на IMAP-сервере, устанавливать квоты и права доступа на папки средствами утилиты cyradm.К примеру, можно создать скрипт, который будет создавать пользователю папки Sent, Trash, Drafts, Spam средствами утилиты cyradm.Так как все дальнейшие действия по настройке в целях тестирования потребуют отсылать и принимать почту, приведем краткую инструкцию по созданию почтовых аккаунтов:
cyradm –user cyrus localhost
При желании, можно задать квоты на количество места в папках и другие параметры, с которыми можно познакомиться набрав «?» или «help» в утилите cyradm.В настоящий момент мы имеем следующую связку:
Если вы собираетесь использовать почтовый сервер только внутри организации и в Интернет он смотреть не будет, то на этом настройку можно было бы и оставить. Однако, если электронная почта будет приходить из Интернета и планируется активное ее использование, необходимо надежно оградить себя от спама и вирусов. Если вы считаете, что не обязательно, то сильно ошибаетесь. Около 70% почтового трафика является спамовским. Вряд ли вы захотите придя на работу с утра обнаружить у себя несколько тысяч писем с предложениями приобрести столь нужную вам виагру или удлинить/укоротить избранные части тела.
Приступим к установке Amavisd-new, SpamAssassin и ClamAV.
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip unarj bzip2
Внесем некоторые изменения в конфигурационные файлы amavisd:
$forward_method = ‘smtp:127.0.0.1:10025’; # where to forward checked mail
$sa_local_tests_only = 0;@inet_acl = qw( 127.0.0.1 );
$final_virus_destiny = D_REJECT; # (defaults to D_BOUNCE)
$final_banned_destiny = D_REJECT; # (defaults to D_BOUNCE)
$final_spam_destiny = D_PASS; # (defaults to D_REJECT)
$final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested
$viruses_that_fake_sender_re = new_RE(
qr’nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar’i,
qr’tanatos|lentin|bridex|mimail|trojan.dropper|dumaru|parite|spaces’i,
qr’dloader|galil|gibe|swen|netwatch|bics|sbrowse|sober|rox|val(hal)?la’i,
qr’frethem|sircam|be?agle|tanx|mydoom|novarg|shimg|netsky|somefool|moodown’i,
qr’@mm|@MM’, # mass mailing viruses as labeled by f-prot and uvscan
qr’Worm’i, # worms as labeled by ClamAV, Kaspersky, etc
[qr’^(EICAR|Joke.|Junk.)’i => 0],
[qr’^(WM97|OF97|W95/CIH-|JS/Fort)’i => 0],
[qr/.*/ => 1], # true by default (remove or comment-out if undesired)
);
$sa_tag2_level_deflt = 6.3; # add ‘spam detected’ headers at that level
$sa_kill_level_deflt = 999; # triggers spam evasive actions
Добавим пользователя clamav в группу amavis: