Apache - самый распространенный web-сервер в
мире. В этой статье мы рассматриваем 20
способов сделать сервер более безопасным.
Пункт первый в нашем списке вполне
традиционен - убедитесь, что все патчи,
существующие для системы, установлены.
Скройте версию Apache и другую
чувствительную информацию. По умолчанию
многие версии сервера говорят о своей
версии, о версии операционной системы и
даже выводя список модулей, которые
установлены на севрере. В httpd/conf необходимо
подправить пару директив:
ServerSignature Off
ServerTokens Prod
Первая отвечает за подписи внизу страниц (можно
использовать например эту
программу), которые генерятся сервером,
вторая - за заголовок HTTP ответа, в нашем
случае он будет:
Server: Apache
Если паранойя совсем овладела вашим
мозгом, то можно изменить исходники или
использовать mod_security.
Сделайте так, что бы Apache работал от своего
пользователя и группы, пользователь nobody
позволит взломщику, например, получить
доступ к почтовому серверу, который так же
работает от nobody.
Убедитесь, что файлы вне 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, в защищенной среде.
Дальше если произойдет взлом сервера, он не
затронет другие сервисы. Полезно прочитать документацию
для получения более подробной информации.