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, в защищенной среде.
Дальше если произойдет взлом сервера, он не
затронет другие сервисы. Полезно прочитать документацию
для получения более подробной информации.

 

Оставить мнение