Postfix это почтовый сервер (MTA) который является основным для ubuntu. Он в основном репозитории ubuntu, и это значит, что для него будут выпускаться обновления безопасности. Этио руководство объясняет как установить и настроить postfix и настроить его в качестве SMPT сервера используя безопасное соединение.
Установка
Для того чтобы установить Postfix с SMTP-AUTH и TLS (англ. Transport Layer Security — криптографический протокол, обеспечивающий защищённую передачу данных между узлами в сети Интернет) выполните следующие шаги: используя ваш любимый пакетный менеджер установите postfix из основного (main) репозитория.
Пропустите этап настройки, когда будет задан сответствующий вопрос, конфигурация будет выполнена более детальна на следующем этапе.
Конфигурация
Наберите из терминала:
dpkg-reconfigure postfix
Вставьте следующие значения (замените server1.example.com вашим доменным именем если оно у вас есть)
* Internet Site
* NONE
* server1.example.com
* server1.example.com, localhost.example.com, localhost
* No
* 127.0.0.0/8
* Yes
* 0
* +
* all
Сейчас самое время решить какой фармат mailbox вы хотите использовать. По умолчанию Postfix использует mbox для формата mailbox. Лучше вместо редактирования файла конфигурации напрямую, вы можете использовать комманду postconf для конфигурации всех postfix параметров. Параметрры конфигурации будут находиться в файде /etc/postfix/main.cf. Позже если вы захотите перенастроить особый параметр, вы можете либо выполнить комманду, либо изменить его вручную в файле.
Конфигурация Maildir в формате mailbox:
sudo postconf -e 'home_mailbox = Maildir/'
Обратите внимание: Это место для новой почты будет в /home/username/Maildir так что вы должны настроить в почтовом клиенте такой же путь.
Конфигурируем Postfix SMTP AUTH используя SASL (saslauthd):
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
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 и добавьте следующе строки:
pwcheck_method: saslauthd
mech_list: plain login
Создадим сертификты которые будут использованы для TSL шифрования и/или certificate Authentication (доверительные отношения благодаря полученному сертификату):
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
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/
Настроим в Postfix TLS шифрование для входящей и исходящей почты:
sudo postconf -e 'smtpd_tls_auth_only = no'
sudo postconf -e 'smtp_use_tls = yes'
sudo postconf -e 'smtpd_use_tls = yes'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
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'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
sudo postconf -e 'tls_random_source = dev:/dev/urandom'
sudo postconf -e 'myhostname = server1.example.com'
Файл /etc/postfix/main.cf должен выглядеть примерно так:
# 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, 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
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/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 reload
Authentication
Следующий шаг астройки postfix использование SASL для SMTP AUTH.
Сперва вы должны установить libsasl2-2 и sasl2-bin из main репозитория.
Обратите внимание: Если вы используете Ubuntu 6.06 (Dapper Drake) то название пакета libsasl2.
Мы изменим некоторые вещи чтобы все работало так как надо. Из-за того что Postfix запускается в chroot директории (директории с измененным корнем) /var/spool/postfix мы изменим пару путей для работы в chroot директории (например /var/run/saslauthd становиться /var/spool/postfix/var/run/saslauthd )
Обратите внимание: изменяя путь saslauthd другие приложения которые используюь saslauthd могут пострадать.
Для начала мы отредактируем /etc/default/saslauthd в соответствии с включенным saslauthd. Удалите # в начале START=yes и добавьте PWDIR, PARAMS, and PIDFILE
# This needs to be uncommented before saslauthd will be run automatically
START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.pid"
# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"
MECHANISMS="pam"
# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Note: See /usr/share/doc/sasl2-bin/README.Debian
#OPTIONS="-c"
#make sure you set the options here otherwise it ignores params above and will not work
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Обратите внимание: Если вы желаете, вы можете использовать "shadow" вместо "pam". Это заставит использовать MD5 хэшированые пароли и что является прекрасной защитой. Имя пользователя и пароль необходимые для аутентификации будут такими же как у пользователей вашего сервера.
Далее мы изменим с помощью dpkg /var/spool/portfix/var/run/saslauthd. Saslauthd - это init скрипт использует эти настройки для создания недостающей директории с необходимыми правами:
dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd
Возможно будут получены ошибки примерно такого содержания:
"/var/spool/postfix/var/run/saslauthd" directory does not exist.
Вы можете смело их игнорировать, потому что когда вы запустите saslauthd в следующий раз соответствующие директории будут созданны.
Наконец, запустите saslauthd:
/etc/init.d/saslauthd start
Тестирование
Что бы убедиться что SMTP-AUTH и TLS работаются правильно введите следующие комманды:
telnet localhost 25 (вместо telnet можно использовать nc localhost 25)
После того как вы установите соединение со своим почтовым сервером postfix введите:
ehlo localhost
Если вы увидите строки
250-STARTTLS
250-AUTH
значит все работает
Введите quit для возвращения в коммандную оболочку
Проблемы и решения
Удаление Postfix из chroot
Если вы столкнулись с проблемами во время запуска Postfix вы вероятно захотите удалить Postfix из chroot директории для наилучшей диагностики пробемы. Для этого вы должны будете изменить следующие строки:
smtp inet n - - - - smtpd
и изменить на следующие
smtp inet n - n - - smtpd
Затем перезапустите postfix:
sudo /etc/init.d/postfix restart
Изменение saslauthd
Если вы не хотите запускать Postfix в chroot директории, или вам нравиться не использовать chroot, вы возможно захотите вернуть saslauthd назад к изначальной конфигурации.
Сперва отредактируйте /etc/default/saslauthd и закоментируйте следующие строки:
#PWDIR="/var/spool/postfix/var/run/saslauthd"
#PARAMS="-m ${PWDIR}"
#PIDFILE="${PWDIR}/saslauthd.pid"
Затем "верните" saslauthd dpkg в свое изначальное месторасположение:
dpkg-statoverride --force --update --add root sasl 755 /var/run/saslauthd
И перезапустите saslauthd:
sudo /etc/init.d/saslauthd restart
Использование 587 порта для безопасной отправки
Если вы хотите использовать 587 порт для отправки SMTP вместо 25 (Многоие провайдеры блокируют 25 порт), вам нужно отредактировать /etc/postfix/master.cf соответствующую строку для 587 порта