Электронная почта зародилась еще тогда, когда не было Интернета, и сразу же вошла в жизнь людей как неотъемлемый атрибут современности. Сейчас послать письмо по e-mail сможет любой школьник, однако далеко не любой сможет настроить всю сложную систему, которая лежит в основе процесса отправки/получения сообщений. Обычному человеку или начинающему системному администратору может показаться, что электронная почта - это некий нерушимый монолит, одна или две программы принимающие и отправляющие сообщения. В самых простейших случаях так и есть, однако та почта, с которой большинство из нас сталкивается каждый день, является чем-то большим.
Это связка нескольких технологий, в которой каждому приложению назначены свои права и обязанности. В целом вся эта сложная система, занимающаяся авторизацией пользователей, приемом и отправкой почты, ее фильтрацией от спама и вирусов, предоставляющая пользователю удобный доступ к сообщениям требует детальной настройки и большой внимательности со стороны системного администратора.
Ситуация во многом осложняется тем, что практически всегда человек хочет получить все и сразу, однако спустя неделю поиска документации и руководств, десятка проб и ошибок, все приходит к одному: чтению технической документации с сайта разработчика почтового сервера и настройке всех звеньев по-отдельности. Мы хотим несколько облегчить вам задачу, приведя пример настройки почтовой системы на базе операционной системы Debian Etch со следующим набором приложений: Postfix, saslauthd, sasldb2, cyrus-imap, amavisd-new, spamassasin, clamav. Вкратце поясним чем занимается каждое приложение:
- Postfix-SMTP - сервер, открывающий 25 порт и служащий для приема и пересылки почты;
- Saslauthd - сервис, занимающийся авторизацией пользователей;
- Saslbd2 - база данных, в которой хранятся учетные записи пользователей;
- Cyrus-imap - IMAP, POP3, NNTP сервер, который будет получать почту от postfix, раскладывать ее по нужным папкам и предоставлять к ней доступ пользователю;
- Amavisd-new – антивирус-посредник между почтовым сервером и антиспамами или антивирусами;
- Spamassasin - мощный антиспам;
- Clamav - антивирус;
Этого всего достаточно для того, чтобы построить надежный защищенный почтовый сервер. Оговоримся, что для полного понимания дальнейших действий нужен некий опыт работы в операционных системах Linux, и будет вообще замечательно, если этот опыт был основан на изучении Debian/Ubuntu/MEPIS.
Установка
Приступим к установке. Операционная система Debian была выбрана не случайно. За многие годы она показала себя одной из наиболее надежных и стабильных. К тому же версия Etch, которую мы будем устанавливать, содержит все необходимое нам ПО и оно ещё ни морально ни технически не успело устареть.
Предположим, что у вас уже имеется дистрибутив на CD/DVD дисках. В случае установки по сети сама процедура инсталляции может несколько отличаться. Вставили компакт-диск, выставили загрузку с CD.
К слову, в Debian Etch существует графический инсталлятор, который на момент написания статьи находился в стадии RC2, однако для ускорения самого процесса установки мы им пользоваться не будем. Для экстремаллов и "true-сисадминов" подскажем, что вырианты установки находятся в меню по нажатию клавиши F3.
Выбираем язык и нажимаем [Enter].
Выбираем страну.
Выбираем раскладку. Здесь кому как-удобнее. Если планируется печатать русскими символами - ставьте русскую, но мы бы порекомендовали здесь ничего не менять. На следующем экране вам потребуется ввести IP-адрес компьютера. Если у вас настроен DHCP, система получит адрес автоматически.
Дальше вам понадобится ввести имя и домен вашего будущего сервера.
Подготавливаем жесткий диск для установки системы. Параметры разделов-самостоятельное решение каждого.
Мы вручную разбили жесткий на два раздела.
На следующих экранах выберите свой часовой пояс, пароль суперпользователя root, имя обычного пользователя и его пароль.
При выборе необходимых вариантов системы не следует пользоваться принципом "пускай будет". Все необходимое ПО мы установим без помощи мастера.
Инсталлятор задаст ещё несколько вопросов, с ответами на которые вы справитесь без особого труда.
Система установлена. Впереди пару минут ее загрузки и несколько минут работы.
Наружные работы
Прежде всего, для продолжения настройки необходимо настроить окружение, чтобы в нем было уютно работать. Для начала предлагаем установить ssh, чтобы все дальнейшие манипуляции производить не из консоли.
apt-get install ssh |
После этого подключаемся любым ssh-клиентом на 22 порт нашего серера, вводим имя и пароль администратора. Также рекомендуем установить Midnight Commander для упрощения работы с файлами и редактирования конфигурационных файлов.
apt-get install mc |
Добавим остальные установочные диски в список доступных источников пакетов командой.
apt-cdrom |
Выполняем эту команду для каждого диска. При желании можно воспользоваться сетевыми источниками пакетов и security updates с сайта Debian.
Для этого снова открываем и добавляем в него следующие строки
mcedit /etc/apt/sources.list: deb https://security.debian.org/ etch/updates main contrib deb-src https://security.debian.org/ etch/updates main contrib |
Далее обновим список пакетов и саму систему.
apt-get update apt-get upgrade |
На этом все подготовительные мероприятия считаем законченными.
Postfix
Установим нужные для работы почтового сервера пакеты.
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:
mcedit /etc/default/saslauthd: START=yesMECHANISMS="sasldb" |
Запустим сервис командой:
/etc/init.d/saslauthd start |
Сейчас проверим правильно ли он работает, но для начала необходимо добавить хотя бы одного пользователя.
mailserver:~# saslpasswd2 test Password: Again (for verification): mailserver:~# sasldblistusers2 test@mailserver: userPassword mailserver:~# testsaslauthd -u test -p test |
Если в результате этих манипуляций вы получили сообщение "0: OK "Success.", значит все в порядке и можно продолжать. Если же авторизация не прошла - смотрите файл /var/log/auth.log и повторяйте, повторяйте и ещё раз повторяйте все шаги, пока не получится нужный результат.
У почтового сервера postfix есть одна особенность - после запуска он работает в chroot окружении, которое находится в папке /var/spool/postfix/.
mailserver:~# ls -al /var/spool/postfix/ total 76 drwxr-xr-x 19 root root 4096 Feb 12 16:27 . drwxr-xr-x 8 root root 4096 Feb 12 16:26 .. 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.
mcedit /etc/fstab: /var/run/saslauthd /var/spool/postfix/var/run/saslauthd none rw,bind 0 0 |
Не забудьте поставить [Enter] после последней строки. Также нужно не забыть создать папку, куда мы смонтируем сокет демона авторизации.
mkdir -p /var/spool/postfix/var/run/saslauthdmount /var/run/saslauthd |
Сейчас сконфигурируем postfix для использования sasl авторизации.
mcedit /etc/postfix/main.cf: smtpd_sasl_local_domain = smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_authenticated_header = yes smtpd_sasl_application_name = smtpd |
Существует и упрощенный вариант редактирования этого файла командой postconf –e "smtpd_sasl_auth_enable = yes" и т.д.Сейчас мы запретим отсылать почту через наш SMTP шлюз без авторизации. Для этого создадим файл /etc/postfix/sasl/smtpd.conf со следующим содержимым.
pwcheck_method: saslauthd mech_list: PLAIN LOGIN |
Перезапустим наш postfix сервер и внимательно просмотрим следующие файлы на предмет ошибок:
- /var/log/mail.err
- /var/log/mail.info
- /var/log/mail.warn
- /var/log/mail.log.
/etc/init.d/postfix restart tail /var/log/mail.err tail /var/log/mail.info tail /var/log/mail.warn tail /var/log/mail.log |
Если все чисто, сухо и гладко - обратимся к утитиле telnet, для того, чтобы подключиться к нашему серверу.
mailserver:~# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.test.ru ESMTP Postfix (Debian/GNU) EHLO https://xdrv.ru/ 250-mailserver.test.ru 250-PIPELINING 250-SIZE 10240000 250-VRFY250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME250 DSNQUIT Connection closed by foreign host. |
Если у вас нечто похожее - продолжаем, если же подключение не удалось - проверяем где вы вставили лишний пробел или нечаянно удалили символ.
Для того, чтобы "подружить" saslauthd и postfix необходимо выполнить следующее:
adduser postfix sasl |
Оговоримся, что мы не будем вытанцовывать с бубном для настройки шифрования. Если кому-то это будет интересно, то найти необходимую информацию не составит большого труда и экспериментировать на уже работающей базе будет проще. Сейчас же продолжим наше руководство и расскажем как предоставить IMAP4/POP3 доступ к почтовому ящику.
Cyrus-imapd
Cyrus - это мощный набор POP3/NNTP/IMAP и некоторых других демонов для создания полноценных сервисов работы с электронной почтой. Официальный сайт проекта находится здесь: https://cyrusimap.web.cmu.edu/. В нашем случае cyrus будет заниматься получением почты от postfix, раскладыванием ее по папкам и предоставлению к ней доступа пользователям. Отредактируем файл /etc/imapd.conf.
mcedit /etc/imapd.conf : admins: cyrus allowplaintext: yes sasl_mech_list: PLAIN sasl_pwcheck_method: saslauthd auxprop sasl_auxprop_plugin: sasldb |
Обратите внимание, что cyrus так же, как и saslauthd, придется взаимодействовать с postfix, поэтому их нужно сделать доступными друг другу. Воспользуемся уже известным механизмом:
mcedit /etc/fstab : /var/run/cyrus /var/spool/postfix/var/run/cyrus none rw,bind 0 0 |
Не забываем создать папки для cyrus.
mkdir -p /var/spool/postfix/var/run/saslauthd mkdir -p /var/spool/postfix/var/run/cyrus mount /var/spool/postfix/var/run/saslauthd mount /var/spool/postfix/var/run/cyrus |
И выполнить команду:
mount /var/run/cyrus |
Сейчас предоставим возможность cyrus забирать почту у postfix. Отредактируем файл /etc/postfix/main.cf:
mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp |
Добавим почтовый сервер в группу lmtp:
addgroup lmtp adduser postfix lmtp |
И выполним следующее:
dpkg-statoverride --remove /var/run/cyrus/socket dpkg-statoverride --force --update --add cyrus lmtp 750 /var/run/cyrus/socket |
Добавим еще одну опцию:
local_recipient_maps = |
В случае с pam-авторизацией по логинам и паролям системных пользователей все бы работало без проблем. Но когда имена и пароли хранятся в формате, отличном от системного, необходимо указать данную опцию. Она означает "принимать письма для любого адресата". Это, конечно, не лучший выход, однако лучшего пока найти не удалось.Добавим пользователя cyrus в нашу базу учетных записей:
saslpasswd2 -c cyrus |
Введите пароль, когда вас об этом попросят, и перезапустим наши демоны:
/etc/init.d/postfix start /etc/init.d/cyrus2.2 restart /etc/init.d/saslauthd restart |
Если вы без ошибок сделаете все, что было описано выше, то теоретически к этому моменту уже можете принимать и отправлять письма, создавать и удалять папки на IMAP-сервере, устанавливать квоты и права доступа на папки средствами утилиты cyradm.К примеру, можно создать скрипт, который будет создавать пользователю папки Sent, Trash, Drafts, Spam средствами утилиты cyradm.Так как все дальнейшие действия по настройке в целях тестирования потребуют отсылать и принимать почту, приведем краткую инструкцию по созданию почтовых аккаунтов:
saslpasswd2 –c <имя пользователя> cyradm –user cyrus localhost localhost>cm user.<имя пользователя> localhost>cm user.<имя пользователя>.INBOX localhost>cm user.<имя пользователя>.Sent localhost>cm user.<имя пользователя>.Draft localhost>cm user.<имя пользователя>.Trash |
При желании, можно задать квоты на количество места в папках и другие параметры, с которыми можно познакомиться набрав "?" или "help" в утилите cyradm.В настоящий момент мы имеем следующую связку:
Защищайтесь, сударь
Если вы собираетесь использовать почтовый сервер только внутри организации и в Интернет он смотреть не будет, то на этом настройку можно было бы и оставить. Однако, если электронная почта будет приходить из Интернета и планируется активное ее использование, необходимо надежно оградить себя от спама и вирусов. Если вы считаете, что не обязательно, то сильно ошибаетесь. Около 70% почтового трафика является спамовским. Вряд ли вы захотите придя на работу с утра обнаружить у себя несколько тысяч писем с предложениями приобрести столь нужную вам виагру или удлинить/укоротить избранные части тела.
Приступим к установке Amavisd-new, SpamAssassin и ClamAV.
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip unarj bzip2 |
Внесем некоторые изменения в конфигурационные файлы amavisd:
mcedit /etc/amavis/conf.d/50-user $forward_method = 'smtp:127.0.0.1:10025'; # where to forward checked mail $notify_method = $forward_method; # where to submit notifications $virus_quarantine_to = 'undef'; $sa_local_tests_only = 0;@inet_acl = qw( 127.0.0.1 ); |
mcedit /etc/amavis/conf.d/20-debian_defaults $final_virus_destiny = D_REJECT; # (defaults to D_BOUNCE) $viruses_that_fake_sender_re = new_RE( #$QUARANTINEDIR = "$MYHOME/virusmails"; $QUARANTINEDIR = undef; $sa_tag_level_deflt = -999; # add spam info headers if at, or above that level $sa_tag2_level_deflt = 6.3; # add 'spam detected' headers at that level $sa_kill_level_deflt = 999; # triggers spam evasive actions |
Добавим пользователя clamav в группу amavis:
adduser clamav amavis |
Сейчас заставим postfix отдавать почту для проверки антивирусом. Отредактируйте файл /etc/postfix/master.cf:
mcedit /etc/postfix/master.cf : smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 |
Так же добавьте в конец /etc/postfix/main.cf:
content_filter=smtp-amavis:[127.0.0.1]:10024 receive_override_options = no_address_mappings |
Перестартуйте его и посмотрите нет ли ошибок в лог-файле:
/etc/postfix/restart tail /var/log/mail.log |
Установим ещё несколько инструментов и настроим spamassassin:
apt-get install razor pyzor dcc-client |
Отредактируем файл /etc/spamassassin/local.cf:
mcedit /etc/spamassassin/local.cf : # rewrite_header Subject *****SPAM*****# report_safe 1 # trusted_networks 212.17.35. # lock_method flock # dcc use_dcc 1 dcc_path /usr/bin/dccproc dcc_add_header 1 dcc_dccifd_path /usr/sbin/dccifd #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor pyzor_add_header 1 #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf #bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 |
Сейчас нужно разрешить spamassassin запускаться:
mcedit /etc/default/spamassassin : ENABLED=1 |
И перезапустить нужные приложения:
/etc/init.d/postfix restart /etc/init.d/amavis restart /etc/init.d/clamav-daemon restart /etc/init.d/spamassassin restart |
Попробуйте создать пользователей и попробовать обменяться письмами. В том числе и письмами с прикрепленными exe-файлами. Если вы все правильно настроили – фильтр должен задержать такие файлы и прислать вам соответствующие уведомления.
Послесловие
Тему настройки почтового сервера под Linux можно развивать бесконечно. Во многом этому способствует модульность всех входящих в наш комплект приложений. Несколькими несложными действиями можно заставить раскладываться письма по папкам в зависимости от их содержимого, настроить доступ через браузер, настроить шифрованное соединение с почтовым сервером, добавить графическое средство для администрирования нашего сервера и многое другое.