Данный материал описывает построение комплексной почтовой системы на базе операционной системы Ubuntu 10.04 LTS. К КПС предъявляются такие требования: передача почты с аутентификацией и шифрованием, фильтрация почты на наличие вирусов и спама, предоставление пользователям доступ к почте через Web-интерфейс, хранения пользователей в СУБД, а так же добавление пользователей через web-интерфейс.
Комплексная почтовая система состоит из большего числа компонентов и связующих звеньев. Выполнение этой работы происходит в несколько этапов. По окончанию каждого этапа имеются контрольные точки которые позволяют проверить насколько корректно выполнен этап. Если контрольная точка не пройдена, нельзя переходить к следующему этару.
Комплексная почтовая система состоит из следующих элементов:
postfix — транспортный агент электронной почты;
sasl — технология безопасной аутентификации при отправке и принятии электронной почты;
tls — технология которая используется для шифрования почтовых сообщений при передачи;
Spamassassin — фильтр спама;
ClamAV — антивирус;
amavisd-new — используется для связи postfix + Spamassassin + ClamAV;
dovecot — используестя для доступа пользователей к почтовым сообщениям через протоколы POP и IMAP;
squirrelmail — используется для получения доступа к электронной почте через Web-интерфейс;
Apache+PHP+MySQL — используется для хранения пользователей и доменов, а также как интерфейс добавления пользователей и доменов.
1й ЭТАП
На 1м этапе необходимо установить postfix, sasl, tls. Связать их вместе. Конечным итогом этого этапа должен быть такой: Сервер должен принимать почту для конкретного домена, складывать ее в почтовый ящик пользователя, выполнять шифрование и проводить аутентификацию пользователей при отправке электронной почты.
Устанавливаем postfix
sudo apt-get install postfix
Во время установки будут появляться вопросов. Выбирайте то что предлагают по умолчанию, поскольку в последствии все параметры будут меняться. Настройка транспортного агента (MTA) postfix происходит с помощью редактирования конфигурационного файла /etc/postfix/main.cf
Либо с помощью команды postconf -e 'параметр=значение' которая добавляет в конец конфигурационного файла параметр с заданным значением.
2) Выбор способа хранения почтовых сообщений.
На сегодняшний день существует 2 метода хранения писем пользователей: mailbox (старый) и maildir (новый). Давайте рассмотрим их особенности чтоб определиться с выбором. Mailbox — это традиционный способ хранения почты в Unix-подобных операционных системах. Он заключается в том что для каждого пользователя в каталоге /var/mail создается обычный текстовый файл, название которого соответствует логину пользователя. Вся получаемая почта сохраняется в этом файле. При этом перед началом работы с файлом (помещение нового письма, просмотр всех доступных писем, удаления письма) его необходимо заблокировать, а после окончания разблокировать. Такой формат хранения имеет несколько преимуществ: универсальность формата, а так же высокая скорость работы. К недостаткам можно отнести: проблемы при хранении на сетевых файловых системах. Maildir — новый формат хранения писем который предназначен для решения проблем Mailbox-формата, а так же добавления новых функций. Главное отличие заключается в методе хранения почты. Все сообшение хранятся в домашних каталогах пользователей в папке Maildir. В этом каталоге есть 3 подкаталога: tmp, new, cur. New — для новых писем; cur — для писем которые пользователь прочитал, но не удалил; tmp — используется для временного хранения писем при отправке. Каждое сообщение хранится в отдельном файле. Преимуществами такого метода хранения являются: более высокая скорость работы с почтовыми сообщениями, возможность использования сетевых файловых систем для хранения почты и более высока надежность. На сегодняшний день рекомендуется использовать метод хранения Maildir.
Включение формата хранение сообщений Maildir:
sudo postconf -e 'home_mailbox = Maildir/'# Формат почтового ящика
sudo postconf -e 'mailbox_command ='# Дополнительные действия которые могут быть выполнены при доставке почты
3) Включаем аутентификацию и шифрование при отправке писем.
SASL — пакет содержит простую аутентификацию и слой безопасности (Simple Authentication and Security Layer) — метод для добавления поддержки аутентификации в протоколы соeдинения.
Устанавливаем необходимы пакеты:
sudo apt-get install libsasl2-2 sasl2-bin
Включаем аутентификацию SASL
sudo postconf -e 'smtpd_sasl_local_domain ='# Название локального домена SMPT сервера. По умолчание оставляется пустым
sudo postconf -e 'smtpd_sasl_auth_enable = yes'# Включить sasl аутентификацию
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'# Запрещает использовать методы аутентификации которые предлагает пользователь;
sudo postconf -e 'broken_sasl_auth_clients = yes'# Позволяет использовать устаревший метод аутентификацией (MicroSoft Outlook Express v4 и MicroSoft Exchange v5.0);
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'# Указывает от кого модно принимать почту: те кто прошли аутентификацию, те кто находится в доверенной сети, запретить для тех кто не прошел аутентификацию;
sudo postconf -e 'inet_interfaces = all'# Интерфейсы с которых можно принимать почту;
Теперь нужно создать конфигурационный файл /etc/postfix/sasl/smtpd.conf и добавить в него 2 строки:
pwcheck_method: saslauthd# Название демона аутентификации
mech_list: plain login# Метод аутентификации.
4) TLS — криптографический протокол, обеспечивающий защищённую передачу данных между узлами в сети. Он хорошо подходит и для передачи электронной почты. Для шифрования контента могут использоваться такие алгоритмы симметричного шифрования: RC2, RC4, IDEA, DES, TripleDES, AES. Однако перед этим необходимо обменяться секретными ключами. Для этого может использоваться алгоритм асимметричного шифрования RSA. Для него необходимо сгенерировать пару ключей (секретный и публичный), а так же подтвердить их подлинность в центре сертификации (можно сделать самому). Для работы с ключами используется программный комплекс OpenSSL. OpenSSL - это система защиты и сертификации данных, название SSL переводится, как система безопасных сокетов (secure socket layer). Создаем необходимые ключи и сертификаты:
touch smtpd.key# Создаем файл в который поместим секретный ключ;
chmod 600 smtpd.key# Устанавливаем права для этого файла;
openssl genrsa 1024 > smtpd.key# Генерируем секретный RSA ключ длиной 1024 бита и помещаем его в файл;
openssl req -new -key smtpd.key -x509 -days 365 -out smtpd.crt#Создаем запрос на сертификацию нашего секретного ключа в центре сертификации. В качестве запроса выступает сертификат smtpd.crt. Теперь это файл нужно отправить центр сертификации. Либо подписать самому.
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650# Создание сертификата cacert.pem для использования в качестве сертификата сервера или сертификата CA. Сертификат создаётся с использованием секретного ключа cakey.pem.
sudo mv smtpd.key /etc/ssl/private/#Перемещаем секретный ключ в рабочий каталог;
sudo mv smtpd.crt /etc/ssl/certs/#Перемещаем сертификат запроса в рабочий каталог;
sudo mv cakey.pem /etc/ssl/private/#Перемещаем секретный ключ сертификата в рабочий каталог;
sudo mv cacert.pem /etc/ssl/certs/#Перемещаем сертификат в рабочий каталог;
5) Для того чтоб postfix осуществлял шифрование входящей и исходящей почты с помощью TLS и созданных ключей в конфигурационный файл необходимо добавить следующие параметры:
sudo postconf -e 'smtp_tls_security_level = may'#Использовать TLS если его поддерживает удаленный узел;
sudo postconf -e 'smtpd_tls_security_level = may'#Не требовать от клиентов обязательной поддержки TLS;
sudo postconf -e 'smtpd_tls_auth_only = no'# Для аутентификации может использоваться не только TLS;
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'#Добавлять в журнал адреса SMTP-серверов которые при подключении к нашему серверу используют TLS;
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/smtpd.key'#Указываем наш секретный ключ;
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt'#Указываем наш сертификат;
sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'# Указываем наш подтверждающий сертификат;
sudo postconf -e 'smtpd_tls_loglevel = 1'#Включаем базовое ведение журнала для TLS;
sudo postconf -e 'smtpd_tls_received_header = yes'#Получение полной информации о ключах и сертификат удаленного SMTP-сервера;
sudo postconf -e 'smtpd_tls_session_cache_timeout = 3600s'#Время истечения TLS-сессии;
sudo postconf -e 'tls_random_source = dev:/dev/urandom'#Путь к генератору случайных чисел;
sudo postconf -e 'myhostname = server1.example.com'#FQDN нашего SMTP-сервера;
Таким образом конфигурационный файл должен выглядеть так:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
myhostname = server1.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = server1.example.com, example.com, localhost.example.com, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_tls_auth_only = no
#Use these on Postfix 2.2.x only
#smtp_use_tls = yes
#smtpd_use_tls = yes
#For Postfix 2.3 or above use:
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/private/smtpd.key
smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
Перезапускаем postfix
sudo /etc/init.d/postfix restart
6) Настройка аутентификации
Начнем с редактирования конфигурационного файла /etc/default/saslauthd, он должен выглядеть так:
# This needs to be uncommented before saslauthd will be run automatically
START=yes
Запускаем saslauthd
sudo /etc/init.d/saslauthd start
Настройка закончена.
Теперь самый главный момент. Нужно проверить правильность настройки первого этапа. Для этого подключаемся к локальному 25 порту.
telnet localhost 25
И передаем команду ehlo. С помощью этой команды сервер объявляет о наборе поддерживаемых расширений:
ehlo localhost
Если среди перечисленных пунктов есть:
250-STARTTLS
250-AUTH
Значит первый этап выполнен успешно...
Комментариев нет:
Отправить комментарий