В этом разделе мы добавим на сервер возможность передачи электронной почты и применим жесткий контроль над системным окружением. Мы покажем, как аутентифицировать добросовестных пользователей в системе электронной почты и предотвратить обманный доступ к ее услугам.
Более 25 лет назад Sendmail заработал как первый в Интернете клиент доставки электронной почты. Многие приложения, написанные для Linux, предполагают работу Sendmail на вашем сервере. Однако, поскольку Sendmail был создан до того, как Интернет стал доступен широкой публике, этот клиент имеет много проблем в области безопасности, перечисленных в списке CVE (Common Vulnerabilities and Exposures) — единого тезауруса уязвимостей, который расположен по адресу http://cve.mitre.org.
К счастью, другие почтовые клиенты появились, чтобы занять место Sendmail. Основной их проблемой является ожидание ядерными приложениями того, что на сервере Linux будет находиться Sendmail. Чтобы обойти это, такие клиенты, как Postfix и Exim, должны быть способны убедить приложения в том, что они — Sendmail (мы называем это ложными заменами) и работать в его режиме.
В качестве замены Sendmail мы предпочитаем Postfix. Этот клиент быстрее, чем Sendmail, более надежен, имеет модульную архитектуру и предлагает много возможностей, требуемых поставщиками больших объемов почты. Postfix не записывает исключенные протоколы, а использует стандартный протокол Интерне
та — Simple Mail Transport Protocol (SMTP). Надо отметить, что в нем наименьшее количество позиций из списка CVE. По этим причинам в качестве нашего почтового клиента мы используем Postfix вместо Sendmail.
Обеспечение надежности электронной почты включает полное недопущение на сервер неавторизованных пользователей (так что они не могут использовать его для пересылки электронных писем большого объема). Это дает уверенность в том, что никто не сможет обмануть законных пользователей, и защищает содержимое каждого электронного письма от прочтения или изменения в процессе пересылки.
Низкая надежность электронной почты упрощает злоумышленникам работу. Для содействия идентификации мы установим Postfix с протоколом TLS (безопасности на транспортном уровне) и протоколом SSL (протоколом безопасных соединений). Это будет препятствовать пересылке паролей с незашифрованным текстом с почтового клиента на сервер. Для завершения мы применим SASL (Simple Authentication and Security Layer) — простую аутентификацию и слой безопасности. Таким образом создается расширение (ESMTP), позволяющее почтовому клиенту выполнить аутентификацию сервера.
Для установки пакетов, необходимых Postfix и другим компонентам почты, введите следующую команду:
libsasl2modules ipopdssl uwimapdssl
Когда Debian устанавливает пакеты, на экран выводится несколько полноэкранных окон (ncursesbased), в которых вам задаются различные вопросы.
Если вы видите окно Configuring ipopd (Конфигурирование ipopd), показанное на рис. 2.1, то выберите рорЗ и pop3s.
Далее вы увидите окно, как на рис. 2.2, где вам следует выбрать
В данном случае работают порты по умолчанию, поскольку мы используем TLS и демон SASL.
Если ранее для отправки и получения почты вы использовали другой сервер (например, популярный портал или ISP), то теперь ваш сервер примет на себя эти повседневные обязанности.
Далее, в окне, показанном на рис. 2.5, выберите пункт NONE. Postfix предложит
вам создать собственный файл под псевдонимом.
На рис. 2.6 и 2.7 конфигуратор Postfix хочет узнать, от кого он будет получать почту и кому ее будет доставлять. Основным доменным именем также является имя почты. Postfix будет использовать это имя для проверки почты, направляемой на сервер. Когда вы увидите окна, показанные на рис. 2.6 и 2.7, в синих полях будуг указаны значения по умолчанию. Вы можете принять окно, изображенное на рис. 2.6, в том виде, в каком оно вам представлено. На рис. 2.7 вы заметите, что за именем localhost.centralsoft.org следуют две запятые. Удалите вторую запятую.
На рис. 2.8 конфигуратор Postfix запрашивает возможность синхронного обновления. Более подробно администрирование почтового сервера будет рассмотрено в главе 5, а пока ответьте
почты. Это означает, что вы создадите записи для файла конфигурации Postfix и сгенерируете сертификаты и ключи кодировки.
Мы предупреждали вас об этом этапе настройки еще в начале главы. Некоторые из этих команд покажутся вам бессмысленными. Не волнуйтесь — вы сможете понять больше, если еще раз просмотрите приведенную выше информацию, где мы излагаем задачи этого раздела.
Команда postconf находится в каталоге /usr/sbin. Вы используете ее, чтобы указать параметры Postfix в главном файле конфигурации этого почтового клиента.
После установки Postfix нужно «рассказать» почтовому клиенту, что следует сделать для надежной аутентификации. Используйте следующие команды:
permi t_sasl_authenti cated,permi tjnynetworks.reject_unauth_desti nati on'
# postconf e 'inet_interfaces = all'Эти команды записывают информацию в файл smtpd. conf:
# echo 'pwcheck method: saslauthd' » /etc/postfix/sasl/smtpd.conf # echo 'mechjist: plain login' » /etc/postfix/sasl/smtpd.confТеперь создайте каталог для ваших сертификатов SSL и сгенерируйте одновременно сертификаты и ключи кодировки:
# mkdir /etc/postfix/ssl # cd /etc/postfix/ssl/ # openssl genrsa des3 rand /etc/hosts out smtpd.key 1024293 semi random bytes loaded
Generating RSA private key. 1024 bit long modulus
e is 65537 (0x10001)
Enter pass phrase for smtpd.key:
Verifying Enter pass phrase for smtpd.key:
Затем используйте следующую команду для вывода изменений аутентификации в файл, содержащий ключ OpenSSL RSA:
Далее сгенерируйте другой ключ и сертификат и замените существующие ключи заново сгенерированными:
# openssl req new key smtpd.key out smtpd.csrYou are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value.
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:
State or Province Name (full name) [SomeState]: Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]: centralsoft.org Organizational Unit Name (eg, section) []: web Common Name (eg. YOUR name) []: Email Address []:
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: cso
Signature ok
subject=/C=US/ST=Texas/L=Dallas/0=centralsoft.org/OU=web/CN=Tom_Adelstein/
emai1Address=tom.adelstei n@centralsoft.org
Getting Private key
Enter pass phrase for smtpd.key:
writing RSA key
# mv f smtpd.key.unencrypted smtpd.key # openssl req new x509 extensions v3_ca keyout cakey.pem out \ cacert.pem days 3650Generating a 1024 bit RSA private key
writing new private key to 'cakey.pem'
Enter РЕМ pass phrase:
Verifying Enter РЕМ pass phrase:
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter 1.', the field will be left blank
Country Name (2 letter code) [AU]:
State or Province Name (full name) [SomeState]:
Locality Name (eg. city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []: Email Address []:
Существуют некоторые споры о том, требуют ли самостоятельно сгенерированные сертификаты информации, запрашиваемой в подсказках. Мы рекомендуем вам вводить соответствующую информацию.
Теперь вам нужно рассказать Postfix о ключах и сертификатах, используя следующие команды postconf:
Файл /etc/postfi x/mai n. cf теперь должен выглядеть примерно так:
# See /usr/share/postfix/main.cf.dist for a commented, more complete # versionsmtpd_banner = Smyhostname ESMTP $mail_name (Debian/GNU) 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 = 4hmyhostname = serverl.example.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mail name
mydestination = serverl.example.com. localhost.example.com,
local host relayhost =
mynetworks = 127.0.0.0/8
mailbox_command = procmail a "$EXTENSI0N"
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_fi1e = /etc/postfix/ssl/smtpd.crt
smtpdjtls_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
Если содержимое вашего файла совпадает с указанным, то можете т эту команду для внесения изменений:
Stopping mail transport agent: Postfix. Starting mail transport agent: Postfix.
Аутентификацию выполнит saslauthd — демон SASL, но вам придется сделать пару изменений для его нормальной работы. Поскольку Postfix работает в режиме chrooted в папке /var/spool /postfix, введите следующие команды:
Теперь вы должны отредактировать /etc/defaul t/sasl authd, чтобы активировать saslauthd. Удалите знак # перед START=yes и добавьте строку PARAMS=" m /var/spool / postfi x/var/run/saslauthd", чтобы файл выглядел следующим образом:
# This needs to be uncommented before saslauthd will be run automatically START=yesPARAMS="m /var/spool/postfix/var/run/saslauthd"
# Vou must specify the authentication mechanisms you wish to use. # This defaults to "pam" for РАМ support, but may also include # "shadow" or "sasldb", like this: # MECHANISMS="pam shadow" MECHANISMS="pam"Наконец отредактируйте файл /etc/init .d/sasl authd. Измените строку dir=~dpkgstatoverride list SPWDIR на
#dir='dpkgstatoverride list $PWDIR~Теперь замените переменные PWDIR и PIDFILE и добавьте переменную di г в начало файла:
PWDIR="/var/spool/postfix/var/run/${NAME}" PIDFILE="${PWDIR}/saslauthd.pid" dir="root sasl 755 ${PWDIR}"
Файл /etc/init. d/sasl authd теперь должен выглядеть так:
NAME=saslauthd
DAEM0N="/usr/sbi n/${NAME}"
DESC="SASL Authentication Daemon"
DEFAULTS=/etc/default/saslauthd
PWDIR="/var/spool/postfix/var/run/${NAME}"
PIDFILE="${PWDIR}/saslauthd.pid"
dir="root sasl 755 ${PWDIR}"
createdirt ) {
[ d "S4" ] || mkdir p "$4" chown c h "$1:$2" "$4" chmod c "$3" "$4"
}
test f "${DAEMON}" || exit 0
. "${DEFAULTS}"
fi
exit 0
fi
echo "You need to configure ${DEFAULTS} with mechanisms to be used" exit 0
fi
START="start quiet pidfile ${PIDFILE} startas ${DAEMON} name ${NAME} ${PARAMS}"
# Consider our options case "${1}" instart)
echo n "Starting ${DESC}: " #dir="dpkgstatoverride list SPWDIR' test z "Sdir" || createdir $dir if startstopdaemon ${START} >/dev/null 2>&1 ; then echo "${NAME}."
else
if startstopdaemon test ${START} >/dev/null 2>&1; then echo "(failed)." exit 1
else
echo "${DAEM0N} already running." exit 0
fi
fi
stop)
echo n "Stopping ${DESC}: "
if startstopdaemon stop quiet pidfile "${PIDFILE}" \ startas ${DAEMON} retry 10 name ${NAME} \ >/dev/null 2>&1 ; then echo "${NAME}."
else
if startstopdaemon test ${START} >/dev/null 2>&1: then echo "(not running)." exit 0
else
echo "(failed)." exit 1
fi
fi
restart|forcereload) $0 stop exec $0 start
esac exit О
echo "Usage: /etc/init.d/${NAME} {start|stop|restart|forcereload}" >&2 exit 1
esac exit 0
Теперь запустите saslauthd:
Starting SASL Authentication Daemon: changed ownership of Vvar/spool/postfix/var/run/saslauthd' to root:sasl saslauthd.
Чтобы увидеть, корректно ли работают SMTPAUTH и TLS, выполните следующую команду:
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is .
220 serverl.centralsoft.org ESMTP Postfix (Debian/GNU)
Так налаживается связь с Postfix. Теперь наберите следующую команду:
Если вы увидите такие строки:
serverl:/etc/postfix# telnet local host 25 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '"]'.
220 serverl.centralsoft.org ESMTP Postfix (Debian/GNU)
ehlo local host
250serverl.central soft.org
250PIPELINING
250SIZE 10240000
250VRFY
250ETRN
250STARTTLS
250AUTH LOGIN PLAIN
250AUTH=LOGIN PLAIN
250 8BITMIME
то это значит, что ваша конфигурация должна работать и вы завершили данный этап настройки почты. Можете ввести quit и перейти к следующему этапу.