Apache — самый распространенный web-сервер в мире. В этой статье мы рассматриваем 20 способов сделать сервер более безопасным.
Пункт первый в нашем списке вполне традиционен — убедитесь, что все патчи, существующие для системы, установлены.
Скройте версию Apache и другую чувствительную информацию.
По умолчанию многие версии сервера говорят о своей версии, о версии операционной системы и даже выводя список модулей, которые установлены на севрере. В httpd/conf необходимо подправить пару директив:
ServerSignature Off ServerTokens Prod
Первая отвечает за подписи внизу страниц (можно использовать например эту программу), которые генерятся сервером, вторая — за заголовок HTTP ответа, в нашем случае он будет:
Server: Apache
Если паранойя совсем овладела вашим мозгом, то можно изменить исходники или использовать mod_security.
Сделайте так, что бы Apache работал от своего пользователя и группы,
пользователь nobody позволит взломщику, например, получить доступ к почтовому серверу, который так же работает от nobody.
User apache Group apache
Убедитесь, что файлы вне web root директории не обслуживаются сервером
(в нашем примере это директория /web):
<Directory /> Order Deny,Allow Deny from all Options None AllowOverride None </Directory> <Directory /web> Order Allow,Deny Allow from all </Directory>
Примечание: установленные опции Options None и AllowOverride None применимы для всего сервера, так что для остальных директорий необходимо будет устанавливать исключения, если им конечно требуются эти опции.
Выключите просмотр директорий,
в директиве Options раздела Directory:
Options -Indexes
или None
Выключите серверные инклуды:
Options -Includes
или None
Выключите CGI, если вы их не используете:
Options -ExecCGI
или None
Не позволяйте Апачу следовать по символьным ссылкам:
Options -FollowSymLinks
или None
Если вы хотите выключить все Options просто используйте None, если некоторые — используйте последовательность. Например:
Options -ExecCGI -FollowSymLinks -Indexes
Выключите поддержку файлов .htaccess.
Делается это в разделе Directory в директиве AllowOverride:
AllowOverride None
Если опция все же нужна, то убедитесь, что файл не может быть скачан или измените его название на что ни будь, типа .httpdoverride и запретите загрузку любых файлов, которые начинаются с .ht:
AccessFileName .httpdoverride <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>
Установите mod_security, написанный Иваном Ристиком, он очень полезен в работе, так как позволяет делать множество интересных вещей. Подробности можно прочитать на официальном сайте.
Отключите все ненужные модули.
Обычно Апач идет с несколькими модулями, изучите документацию и поймите что же каждый модуль делает. Обычно вы поймете, что большинство из них вам просто не нужны. Просмотрите httpd.conf и найдите строчки LoadModule — это и есть загрузка модулей. Для выключения достаточно поставить в начале строки #. Для поиска:
grep LoadModule httpd.conf
Вот типичный пример найденного:
mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex
Убедитесь, что только рут имеет доступ к конфигам и исполняемым файлам сервера:
chown -R root:root /usr/local/apache chmod -R o-rwx /usr/local/apache
Уменьшите время таймаута со стандартных 300 до 45 секунд, это снизит потенциальный эффект от DoS атак:
Timeout 45
Ограничьте большие запросы, это так же позволит бороться с DoS атаками:
LimitRequestBody 1048576
Полезно так же обозреть LimitRequestFields, LimitRequestFieldSize и LimitRequestLine.
Ограничьте размер XML Body (доступно только в Apache 2).
Многие руководства советуют установить значение LimitXMLRequestBody к 0, что означает загрузку произвольных файлов, однако если вы используете XML запросы для контроля версий то лучше сделать так:
LimitXMLRequestBody 10485760
Ограничьте одновременные запросы.
У Апача есть несколько опций при помощи которых можно управлять конкурентными запросами. Опция MaxClients определяет максимальное количество дочерних процессов, которые будут созданы по необходимости, если мало памяти — установите значение побольше. Так же следует обратить внимание на MaxSpareServers, MaxRequestsPerChild и на Apache2 ThreadsPerChild, ServerLimit и MaxSpareThreads.
Ограничьте по IP
Если доступ есть только у ограниченного круга лиц, то целесообразно прописать адреса. Для сети:
Order Deny,Allow Deny from all Allow from 176.16.0.0/16
Для IP адреса:
Order Deny,Allow Deny from all Allow from 127.0.0.1
Настройте HTTP Keep Alive.
Опция по умолчанию включена и сильно влияет на работу клиентов, так что будьте аккуратнее. Обратите внимание на MaxKeepAliveRequests и KeepAliveTimeout, проанализируйте логи для определения правильных значений.
Запускайте Apache под chroot, в защищенной среде. Дальше если произойдет взлом сервера, он не затронет другие сервисы. Полезно прочитать документацию для получения более подробной информации.
Запуск Apache в изолированной среде (chroot)
chroot позволяет запускать серверные приложения в своей собственной изолированной директории. Это предотвращает от каких-либо небезопасных действий вне рабочей директории Апача.
mod_security — модуль созданный с поддержкой chroot. Это делает процесс установки простым. Необходимо добавить mod_security директивы конфигурации:
SecChrootDir /chroot/apache
Источник: http://www.petefreitag.com/item/505.cfm
В универе посоветовали вас почитать. Интересно оказалось. Добавил в РСС читалку. Посоветую друзьям.