Неприступный почтовик Антон Карпов, toxa@cterra.ru Спецвыпуск: Хакер, номер #051, стр. 051-036-1 Поднимаем безопасную и функциональную почтовую систему Чем сложнее система, чем больше в ней компонентов, тем она функциональнее, но в то же время тем сложнее следить за ее безопасностью. Тем не менее, сегодня мы будем строить максимально безопасный почтовый сервер, обслуживающий отдельный домен, и воспользуемся для этого проверенным временем qmail. А так как "просто почта" сегодня уже никому не нужна, будем учить qmail работать вместе с антивирусом ClamAV и лучшим на сегодняшний день убийцей спама SpamAssassin. Ода DJB Стопроцентно безопасных программ не бывает. Но есть те, которые приблизились к этому показателю вплотную. Именно такие программы пишет американский профессор-математик Daniel Bernstein (http://cr.yp.to). Как и любой гений, он стоит в оппозиции по отношению ко многим вещам, и ему многое в этом мире не нравится. Например, ему не нравится то, что самый популярный dns-сервер BIND от Internet Systems Consortium, ставший стандартном де-факто для использования на UNIX-серверах, представляет собой весьма жалкое зрелище с точки зрения безопасности и дизайна. То же самое можно сказать о другом неписаном стандарте - почтовом сервере Sendmail. И хотя уже проходят те времена, когда эти ровесники интернета требовали исключительно права суперпользователя для работы, ожидая по свою душу очередного remote root эксплойта, хотя многое изменилось в лучшую сторону, стопроцентного доверия они так и не заслужили (и не заслужат: груз истории уязвимостей давит). Возможно, именно это побудило djb (так в интернете сокращенно зовут Бернштейна) написать свою реализацию dns-сервера под названием djbdns и smtp/pop3-сервера - qmail. Разумеется, qmail - не единственная безопасная альтернатива sendmail. Postfix - не уступающая по функциональности sendmail альтернатива от известного security-эксперта Wietse Venema. Но вот широко распространенных и безопасных, проверенных временем альтернатив BIND, кроме djbdns, похоже, не существует. Кроме того, программы djb многим не нравятся тем, что они разрушают годами складывавшиеся неписаные стандарты. Для чего? Не всегда "как есть" означает "как правильно". Перед погружением Было бы странно, если бы реформатор djb ограничился написанием сетевых демонов. Он решил начать с самого начала: с того, как и чем эти сервисы управляются. Представь, что ftp-сервер падает от DDoS-атаки. Пока администратор не придет и руками его не поднимет, сервис будет лежать. Чтобы избежать такой ситуации, было решено придумать "суперсервер", который бы осуществлял мониторинг запущенных подконтрольных ему сервисов и перезапускал их при необходимости. Подобной задачей, впрочем, занимается inetd, но он, как и многие продукты, не устраивал djb кривизной дизайна. Например, если падает сам inetd, то он тянет за собой все запущенные им сервисы. Для управления сервисами Бернштейн написал набор утилит под названием daemontools (http://cr.yp.to/daemontools.html). Если не вдаваться в подробности, то основные составные части daemontools - это монитор supervise, обработчик логов multilog и утилиты контроля сервисов svc/svstat. Помимо daemontools, им же был написан многофункциональный набор утилит ucspi-tcp (как раз прямой функциональный аналог inetd) для точного и детального контроля запускаемых демонов. Ключевая утилита из набора - tcpserver, которая запускает необходимый демон, устанавливает рабочее окружение (переменные среды) и контролирует все подключения к этому серверу, позволяя регулировать нагрузку, использование памяти и, если нужно, осуществлять контроль доступа. |