20 Способов усиления безопасности Apache Web сервера
Хочу вас предупредить о том, что некоторые действия могут привести к снижению производительности системы в целом или каким-либо образом повлияют на вашу среду. Подходят ли те или иные действия к вашим требованиям решать только вам. Другими словами, всё делаете на свой страх и риск.
Сначала проверьте, установили ли вы последние обновления безопасностиНет смысла ставить щеколды на форточки, если у вас вечно открыта входная дверь. Если так оно и есть, то не имеет никакого смысла продолжать что-либо делать из нижеприведенного списка.
Скройте информацию о версии Apache и другую чувствительную информациюПо умолчанию многие сборки Apache готовы рассказать всему свету, какой они на самом деле версии, в придачу версию операционной системы, на которой собственно и крутится Apache и даже какие модули Apache установлены на сервере. Злоумышленникам это очень хорошо помогает как в процессе исследования сервера, так и самого взлома. Кроме того, Apache отправляет сообщение, которое многие оставляют по умолчанию.
Две записи, которые необходимо добавить или исправить в файле httpd.conf:
ServerSignature Off
ServerTokens Prod
ServerSignature появляется внизу страниц, сгенерированных apache, таких как 404, списки каталогов и т.д.
Запись ServerTokens используется в заголовках HTTP ответа. Изменив значение на Prod, мы получим следующий заголовок HTTP ответа:
Server: Apache
Если вы совсем параноик, то можете написать что-нибудь другое, кроме "Apache", покопавшись в исходниках или используя mod_security (см. ниже).
apache должен запускаться с отдельным пользовательским акаунтом и группойНекоторые сборки apache запускаются как пользователь nobody. Таким образом, если Apache и почтовый сервер запущены от имени nobody, то удачная атака на Apache приведет к компрометации и почтового сервера, и наоборот.
User apache
Group apache
Убедитесь, что не обслуживаются файлы вне web каталогаНам не нужно, чтобы apache мог изменять какие-либо файлы за пределами своего web каталога. Предположим, что все ваши веб сайты расположены в одной директории (пусть будет /web). Тогда необходимо выполнить следующие изменения:
Order Deny,Allow
Deny from all
Options None
AllowOverride None
Order Allow,Deny
Allow from all
Заметьте, что так как мы установили Options None и AllowOverride None, то все Options и Overrides будут отключены для сервера. Теперь вы должны добавить их для каждой директории, в которой требуется Option или Override.
Выключаем просмотр директорийДелается это при помощи директивы Options внутри тэга Directory. Установим значение для Options в None или -Indexes.
Options -Indexes
Выключаем SSIЭто тоже делается при помощи директивы Options внутри тэга Directory. Установим значение для Options в None или -Includes.
Options -Includes
Выключаем запуск CGIЕсли вы не используете CGI, выключите это в директиве Options внутри тэга Directory. Установите значение для Options в None или -ExecCGI.
Options -ExecCGI
Не позволяйте аpache следовать по символьным ссылкамДелается аналогично предыдущим трем советам:
Options -FollowSymLinks
Отключаем множество OptionsЕсли вы хотите отключить все Options, то просто делайте так:
Options None
Ну а если вы хотите выключить лишь некоторые из них, то пишите через пробелы:
Options -ExecCGI -FollowSymLinks -Indexes
Отключаем поддержку .htaccess файловДелается в тэге Directory, но уже с помощью директивы AllowOverride. Установите значение None.
AllowOverride None
Если вам необходимо чтобы Overrides нельзя было загрузить, и/или изменить, то поменяйте имя на другое, отличное от .htaccess. Например, в .httpdoverride, и поставим запрет на загрузку всех файлов, которые начинаются с .ht:
AccessFileName .httpdoverride
Order allow,deny
Deny from all
Satisfy All
Запускаем mod_securitymod_security очень удачный модуль для Apache, написанный Иваном Ристиком (Ivan Ristic), автором Apache Security от O'Reilly press.
С помощью mod_security вы можете делать следующее:
* Простое фильтрование
* Фильтрование, основанное на регулярных выражениях
* Проверка URL кодировки
* Проверка Unicode кодировки
* Аудит
* Предотвращение атаки «Null byte»
* Ограничение загрузки памяти
* Маскировка сервера
* Встроенная поддержка Chroot
* И др.
Отключите все неиспользуемые модулиОбычно сборка Apache поставляется с несколькими модулями. Просмотрите документацию о модулях apache, чтобы узнать, что именно делает каждый установленный вами модуль. В большинстве случаев вы обнаружите, что тот или иной модуль вам не нужен.
Поищите строки в файле httpd.conf, содержащие LoadModule. Чтобы запретить загрузку модуля, можно просто добавить # в начале строки. Чтобы найти модули, запустите:
grep LoadModule httpd.conf
Вот некоторые модули, которые обычно включены в установку, но чаще всего не нужны: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.
Проверьте, чтобы только администратор (root) имел доступ на чтение конфигурационных и бинарных файлов аpacheсли вы установили apache в директорию /usr/local/apache, то делается это следующим образом:
chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache
Уменьшите значение TimeoutПо умолчанию значение директивы Timeout составляет 300 секунд. Уменьшение этого значения позволяет снизить воздействие потенциальных DoS атак.
Timeout 45
Ограничьте большие запросыВ Apache есть несколько директив, которые позволяют уменьшить размер запроса, что также может быть полезным для предотвращения некоторых видов DoS атак.
Лучше всего начать с директивы LimitRequestBody. По умолчанию ограничение отсутствует. Если вы допускаете загрузку файлов размером не более 1 МБ, установите следующее значение:
LimitRequestBody 1048576
Если вы вообще не разрешаете загрузку файлов, то установите меньшее число.
Некоторые другие директивы, на которые следует обратить внимание это LimitRequestFields, LimitRequestFieldSize и LimitRequestLine. Этим директивам по умолчанию присвоены приемлемые для большинства серверов значения, но более тонкая настройка никогда не помешает. Обратитесь к документации по этим директивам.
Ограничиваем Размер XML BodyЕсли у вас запущен mod_dav, то вы наверняка захотите ограничить максимальный размер тела XML запроса. Директива LimitXMLRequestBody доступна только на Apache 2, и её значение по умолчанию равно 1 миллиону байт. Во многих руководствах предлагают установить это значение в 0, чтобы можно было загружать файлы любого размера, что в принципе необходимо, если вы используете WebDAV для загрузки больших файлов, но если вы их используете только для контроля исходников, то вам наверняка подойдет значение в 10 МБ:
LimitXMLRequestBody 10485760
Ограничиваем число одновременно выполняемых операцийВ Apache есть несколько настроек, которые позволяют изменить число одновременно обрабатываемых запросов. MaxClients - максимальное число дочерних процессов, которые буду созданы для обслуживания запросов. Это значение зависит от объема оперативной памяти вашего сервера.
Другие директивы, такие как MaxSpareServers, MaxRequestsPerChild, а на Apache2 ThreadsPerChild, ServerLimit, and MaxSpareThreads важны и их необходимо настроить в соответствии с вашей операционной системой и аппаратными возможностями.
Ограничиваем Доступ по IPЕсли у вас есть ресурс, который должен быть доступен только определенной сети, или IP адресу, вы можете задать параметры доступа в настройках apache. Например, если вы хотите разрешить доступ вашей внутренней сети 176.16, то пишите следующее:
Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16
Подстраиваем параметры keepaliveЕсли верить документации по Apache, то использование Keep Alive может улучшить производительность для клиента на 50%, но будьте осторожны перед тем, как изменять эти значения, так как вы можете таким образом увеличить возможность успешного осуществления DoS-атаки.
KeepAlive включен по умолчанию, и отключать его не стоит, но можно и даже нужно поменять значение MaxKeepAliveRequests, что по умолчанию составляет 100, и KeepAliveTimeout, что по умолчанию 15. Проанализируйте ваш журнал регистрации Web сервера, чтобы определиться с оптимальными значениями.
О mod_security подробней можно почитать здесь:
http://www.securityla...ics/216322.phpsecuritylab.ru