На сегодняшний день этот метод обмена электронными данными представляет собой наибольшую угрозу из-за возможности раскрытия информации третьим лицам и, соответственно, может сыграть необратимую роль в судьбе организации. Механизму предотвращения подобных ситуаций и посвящена эта небольшая статья.
Каждый уважающий себя администратор (естественно, в меру своих знаний) не обходит стороной такие вещи как SSL(Secure Sockets Layer), IPSec (Internet Protocol Security), etc, поскольку эти понятия являются базовыми для защиты информации. К сожалению, не все организации способны содержать в штате и администратора и специалиста по сетевой защите информации, поэтому многим админам приходится совмещать эти должности. Следовательно, на него ложится двойная ответственность. И чтобы помочь нашему читателю избежать связанного с этой ответственностью небольшого нагоняя от начальства, разберем один из методов на примере настройки корпоративного почтового сервера с поддержкой шифрования данных.
в бой!
Начнем мы с установки и настройки криптомеханизма OpenSSL (www.openssl.org), поскольку этот механизм свободен в использовании, не требует каких-либо дополнительных соглашений (кроме GPL) и ни в чем не уступает своим платным коллегам. Скачиваем исходные коды с последним стабильным дистрибутивом OpenSSL c ресурса www.openssl.org/source (кстати, не забудь вставить в дисковод наш диск – там присутствует весь необходимый для статьи софт). Так же можно позволить себе скачать последнюю LATEST-версию www.openssl.org/source/openssl-0.9.8b.tar.gz. Скачал? Теперь распаковывай дистрибутив в любой подходящий каталог. Например, в /tmp/sandbox:
terminal# tar -zxvf /tmp/sandbox/openssl-0.9.8b.tar.gz
Привычным образом конфигурируем, компилируем и устанавливаем программу:
openssl genrsa -des3 -rand /usr/local/games/doom3-linux-1.3.1302.x86.run -out sendmail.key 1024
Эта команда сгенерирует секретный 1024-битный ключ RSA, где опция
-rand - это входные данные, необходимые для того, что бы получить надежный псевдослучайный набор простых чисел. Также нам необходимо будет ввести ключевое слово - пароль на секретный ключ, который нужно запомнить. Итак, ключ, с помощью которого мы сможем дешифровать данные, создан. Назначим на него права, которые будут беречь его от посторонних глаз:
terminal# chmod 700 sendmail.key
terminal# openssl rsa -in sendmail.key -out pubsendmail.pem -pubout
Для того чтобы зашифровать какое-либо текстовое сообщение при помощи публичного ключа, необходимо выполнить следующую команду:
terminal# openssl rsautl -in file.txt -out file.crypt -inkey pubsendmail.pem -pubin -encrypt
Здесь rsautl - это алгоритм шифрования, in file.txt – файл, нуждающийся в шифровании (его подаем на вход), out file.crypt – шифрованный файл, который будет получаться на выходе, inkey pubsendmail.pem – ключ, с помощью которого мы будем шифровать файл file.txt, а pubin и encrypt – аргументы, которые сообщают программе rsault, что надо совершить шифрование с помощью открытого ключа.
В результате этой команды из файла file.txt будут извлечены чистые данные, которые программа rsault зашифрует и выдаст результат в файл file.crypt. Для того чтобы дешифровать файл file.crypt с помощью OpenSSL нужно совершить следующее:
terminal# openssl rsautl -in file.crypt -out file.decrypt -inkey server.key -decrypt
Файл file.decrypt содержит дешифрованный текст, который был в исходном состоянии в файле file.txt. Итак, мы разобрались с базовым понятием криптографии при помощи шифрования с использованием открытого ключа.
сертификаты
terminal# openssl req -new -key sendmail.key -out sendmail.csr
После ввода нашего секретного пароля на экран выпадет некий диалог, анкета, которую необходимо будет заполнить, после чего в файле sendmail.csr будет записана информация, взятая из заполняемой анкеты и часть приватного ключа в виде открытых данных (публичный ключ).
Затем файл sendmail.csr необходимо направить доверительному центру CA, где его удостоверят подписью СА на основе дайджеста корневого сертификата и произведут кое-какие изменения, после чего и получится наш сертификат. Стоит отметить, что данная процедура не бесплатна: стоит она примерно 300 американских президентов (такова платная сторона бесплатного GPL, подробнее читаем Крис Касперски «Платная сторона бесплатного GPL»). Но не стоит отчаиваться: не все в этом мире строится на деньгах и уважении. Почему бы самому не подписать свой сертификат? Правда это будет не совсем то, но работать будет. Таким образом мы подошли к понятию самоподписанных сертификатов. Такие сертификаты подобны корневым сертификатам CA центров ;).
Как же создать такой сертификат? Для этого нужно файл sendmail.crt подписать дайджестом на основе секретного ключа. Это может сделать программа x509:
terminal# openssl x509 -req -days 3666 -in sendmail.csr -signkey sendmail.key -out sendmail.crt
Вот так мы создадим сертификат в виде файла sendmail.crt, который будет действителен 3666 дней. Теперь для нас важны два файла - sendmail.key и sendmail.crt. На них мы и будем базировать криптоподдержку в службах.
Группы, работающие в сетевой безопасности, различают несколько уровней шифрования данных, передаваемых по сети. Они начинаются на сетевом уровне IP и заканчиваются седьмым уровнем приложений. Мы же рассмотрим шифрование на транспортном уровне, называемое SSL/TLS (TLS – это SSL v3.1), так как данный уровень подходит почти ко всем приложениям и является для них прозрачным. Программа sendmail умеет работать на этом уровне, то есть она способна предоставлять клиентам шифрованную передачу электронных почтовых сообщений посредством SMTP-трафика.
Подразумевается, что некоторый опыт установки sendmail у тебя уже есть (в крайнем случае, документацию всегда можно найти в internet), поэтому некоторые моменты, относящиеся к настройке sendmail мы не будем комментировать.
Итак, закачиваем свежую стабильную версию sendmail в уже известный каталог /tmp/sandbox и распаковываем trball.
terminal# cd sendmail-8.13.7/devtools/Site/
В каталоге создаем файл site.config.m4 на редактирование:
terminal# ee site.config.m4
В файл site.config.m4 вписываем следующие строчки:
Сохраняем файл site.config.m4 и выходим из него. Если планируется прикрутить к sendmail антиспам-фильтр, антивирусный пакет или и то и другое, тогда в тот же файл site.config.m4 необходимо добавить строчку с поддержкой мильтера:
А теперь переходим в каталог ../../libmilter/ и собираем библиотеки с поддержкой мильтера:
Далее заходим в каталог ../cf/cf/ и создаем в нем файл:
В файл sendmail.mc (подразумевается, что у тебя уже есть опыт установки sendmail из исходных кодов) добавляем строчки:
Это и есть наш минимальный рабочий конфигурационный файл sendmail на языке m4:
Итак, создали конфигурационный файл и сохранили его. Далее конфигурационный файл sendmail (на языке m4) необходимо преобразовать в конфигурационный файл, который должна понимать программа sendmail. Делаем это так:
terminal# m4 ../m4/cf.m4 sendmail.mc > sendmail.cf
Далее нужно инсталлировать созданный файл sendmail.cf. Исторически, место назначения - каталог /etc/mail (и далее под понятием каталога sendmail будем подразумевать каталог /etc/mail). Вперед:
Ну что же, приступим непосредственно к самой сборке и установке sendmail. Переходим из каталога cf/cf/ на два уровня выше и выполняем скрипт Build:
Далее выполняем Build install:
terminal# ./Build install
С установкой sendmail покончено. Теперь необходимо выполнить условия, описанные в конфигурационном файле относительно директив
confCACERT_PATH,confCACERT,confSERVER_CERT,confSERVER_KEY, confCLIENT_CERT,confCLIENT_KEY. Создаем каталог /etc/mail/certs, копируем в него файлы sendmail.key и sendmail.crt (которые у нас уже имеются) и заходим в этот каталог:
Теперь нужно избавиться от пароля в секретном файле sendmail.key. Свершим это при помощи программы rsa:
terminal# openssl rsa -in sendmail.key -out sendmail.pem
В результате мы получили секретный файл sendmail.pem. И я думаю, что закономерный вопрос, возникший у читателя относительно файла sendmail.pem в конфигурационном файле sendmail.mc, исчерпан :).
Назначаем права 700 на каталог с сертификатами /etc/mail/certs, а файлы /etc/sandbox/sendmail.key,
/etc/sandbox/sendmail.csr и /etc/sandbox/sendmail.crt нужно удалить:
Перед тем, как запускать sendmail, нам необходимо создать некоторых хешей и просто файлов, необходимых для работы sendmail. Поэтому изволь почитать соответствующее руководство на нашем диске :).
terminal# cd /etc/mail
Если файла aliases нет, создаем его:
terminal# touch aliases
Обязательно делаем newaliases:
terminal# newaliases
Создаем файл с доверительными и недоверительными хостами:
Осталось только запустить sendmail и проверить наличие поддержки шифрования (если запустить sendmail не получается, возможно, где-то допущена ошибка). Смотрим логи:
5 минут – полет нормальный?
Если все прошло нормально, то программа s_client сможет подключиться на порт 465 (защищенный порт SMTP/SSMTP), а нам на экран выпадет сертификат сервера с публичным ключом. SMTP-службу мы защитили, осталось защитить службу POP, иначе теряется весь смысл защиты почтового сервера. В качестве POP-демона мы рекомендуем использовать программу popa3d, написанную русским хакером Solar Designer (Sergey Samoyloff). Программа является официальным дистрибутивом для FreeBSD и находится в портах FreeBSD /usr/ports/mail/popa3d.
После чего приводим строчки в такой вид (cохраняем и выходим из редактора):
Теперь открываем файл Makefile на редактирование. Раскомментируем строчки: CFLAGS += -DHAVE_OPENSSL, LIBS += -lcrypt, LIBS += -lcrypto. Все, теперь можно компилировать и инсталлировать программу.
После того, как мы поставили и запустили popa3d, нужно установить еще один программный продукт, который будет заниматься шифрованием POP3-трафика. Наиболее доступным и достаточно простым в использовании для организации SSL является программа Stunnel. Можно поставить ее непосредственно из исходных кодов, но лучше сделать это из программных портов FreeBSD: /usr/ports/security/stunnel.
Вот мы и установили stunnel без всякого физического напряжения.
Создаем конфигурационный файл /usr/local/etc/stunnel/stunnel.conf и открываем его на редактирование. В файл вписываем следующие строчки:
А теперь - создаем chroot директорию и устанавливаем соответствующие права:
В файл /usr/local/var/stunnel/hosts.allow пишем следующие строчки:
В каталоге /usr/local/etc/stunnel/ создаем пару ключей stunnel.key (stunel.pem) ,stunel.csr, а также сертификат stunel.crt – это мы уже научились делать. Назначаем необходимые права на ключ. Если мы правильно установили popa3d(согласно документации по установке), то файл /etc/inetd.conf должен содержать строчку:
pop3 stream tcp nowait root /usr/local/sbin/popa3d popa3d
Все что нам остается - это перезагрузить демон inetd со следующими параметрами:
-wWa 127.0.0.1, далее запускаем демон Stunnel:
terminal# /usr/local/sbin/stunnel \ usr/local/etc/stunnel/stunnel.conf
Если в системе порт 995 не «забиндился», значит что-то было упущено, и нужно зачитать логи stunnel. Если все заработало, то можно проверять с помощью s_client наличие предоставляемого сертификата сервисом:
terminal# openssl s_client -host localhost -port 995
пишите письма!
Вот мы и подошли к логическому завершению. В результате мы, кажется, разобрались с основными понятиями криптографии с помощью открытого ключа, познакомились с такими понятиями как ЭЦП и сертификат, научились теоретически и практически применять эти знания на практике в виде реальных рабочих систем. Удачи на ниве системного администрирования!