centos-5-isp-hardened

Применимость: «Linux, OpenVZ, colobridge.net»

Слова для поиска: защищенный вебсервер


Задача:

Нужен вебсервер с повышенной степенью защиты и простым управлением.

Решение:

Мы предгаем использовать шаблон операционной системы минимальным набором средств защиты и увеличения производительности.

Некоторые использованные средства могут быть несовместимы с вашими вебприложениями. Может потребоваться тонкая настройка или отключение.

Описанные здесь средства уже установлены и предварительно сконфигурированы.

Алгоритм криптования паролей

Рекомендуется использовать алгоритм хэширования паролей более крепкий чем используемый по умолчанию md5. Вы можете это сделать сами на сущесвующей системе.

Проверка типа используемого алгоритма:

authconfig --test | grep hashing

Ответ на команду вероятно будет таким:

password hashing algorithm is md5

Включить алгоритм SHA-512

authconfig --passalgo=sha512 --update 

После это смените пароль. Будет сгенерирован новый хэш.

Этот пример дан для centos. В других дистрибутивах используйте соответствующие средства.

Оптимизация производительности

Кроме установки различных средств защиты мы сочли нужным оптимизировать сервер по производительности.

Это полезно и для компенсации дополнительной нагрузки которую создают средства защиты. Каждая дополнительная проверка данных требует вычислительных ресурсов.

Акселератор PHP

При каждом запросе к серверу на выполнение скрипта PHP, интерпретатор PHP повторно выполняет обработку этого скрипта с выполнением следующих действий:

  • Чтение файла
  • Генерация байткода
  • Выполнение кода
  • Выдача результата

Процесс генерации байткода выполняется каждый раз и отнимает большую часть времени обработки сценария.

Для обхода этого узкого места были разработаны акселераторы PHP — модули, кэширующие скомпилированный байт-код в памяти и/или на диске и в разы увеличивающие производительность PHP.

Установлен и сконфигурирован eAccelerator.

Что такое eAccelerator? eAccelerator это свободно-распространяемый PHP акселератор, оптимайзер и средство для кеширования динамического контента. Он увеличивает производительность PHP скриптов за счет их кеширования в скомпилированном состоянии, тем самым предотвращая их постоянную перекомпиляцию. В результате происходит увеличение скорости их выполнения. eAccelerator обычно уменьшает нагрузку на сервер и увеличивает скорость исполнения PHP кода на величину от 1 до 10 раз.

nginx-proxy

Для ускорения работы вебсервера использован технология обратного прокси на основе nginx.

Подробности:

Оптимизация apache

Мы добавили некоторые параметры для оптимизации производительности вебсервера.

Вы можете их найти в файле /etc/httpd/conf.d/colobridge.optim.conf. Там имеется описание назначения настроек.

Смотрите также:

5 простых способов “ускорения” сайта

Общая защита уязвимостей системы

SSH

Измените стандартный порт на любой в диапазоне 1025-65533, но лучше ближе к верхней границе. Там реже сканируют порты.

Это неудобно сделать в шаблоне, потому я предлагаю самостоятельно запретить логин для пользователя root и настроить выполнение команд требующих особых привилегий через использование sudo.

защита файловой системы от загрузки опасных файлов

Если ваш вебсервер допускает загрузку файлов, необходимо принять меры по недопущению файлов с опасными атрибутами.

Злоумышленник может загрузить файл с атрибутом suid (смена идентификатора владельца) чтобы выполнить команду с правами пользователя root имеющего неограниченные права. Злоумышленник может загрузить файл с атрибутом который позволит ядру системы интерпретировать его как устройство с особыми свойствами и получить неограниченные возможности. Злоумышленник может попытаться выполнить файл с опасными командами из каталога где вообще не должно быть исполняемых файлов.

Для предотвращения этого следует использовать специальные опции монтирования

  • nosuid — игнорировать установленный для файла бит SUID
  • noexec — предотвращать запуск файлов с данного раздела
  • nodev — игнорировать файлы устройств

Однако есть особенность - виртуальный контейнер системы в OpenVZ не может работать непосредственно с файловыми системами. Поэтому используем специфическое монтирование каталога в каталог c опцией bind. Для этого создаем два каталога /home/www и /home/tmp и смонтируем их в каталоги /var/www и /tmp соответственно.

Для того чтобы это делалось автоматически при запуске VPS в файле /etc/fstab добавлено две строки:

/home/tmp 	/tmp		none 	nosuid,noexec,nodev,bind 	0 0
/home/www 	/var/www	none 	nosuid,noexec,nodev,bind 	0 0
У вас не будут работать скрипты CGI. По умолчанию они располагаются где нибудь внутри каталога /var/www. Наши опции запрещают запуск файлов на выполнение.

Для решения этой проблемы вам можно разместить каталог со скриптами за пределами /var/www или убрать опцию noexec из файла /etc/fstab и перезагрузить VPS.

Сказанное не касается скриптов PHP. Для них не требуется право на выполнение.

rkhunter

RkHunter (Rootkit Hunter) является инструментом для сканирования системы на наличие руткитов, бэкдоров и другие возможные аномалии. Это делается путем сравнения SHA-1 хэшей важных файлов с известными в онлайновой базе данных, используется поиск по проблемам с правами доступа, скрытых файлов, подозрительных строк в модулях ядра, а также выполняются специальные тесты для Linux.

В шаблоне этой операционной системы rkhunter предварительно настроен и выполняется автоматически один раз в сутки.

Однако нужно еще кое что добавить:

Rootkit Hunter не исправляет и не лечит систему, только выявляет аномалии и уведомляет администратора.

Укажите адрес куда нужно отправлять отчеты о проверках в файле /etc/rkhunter.conf

MAIL-ON-WARNING=""
Внимательно читайте отчеты которые будет присылать rkhunter.

Пример опасного отчета о проверке:

Checking for passwd file changes [ Warning ] 

или

Checking for group file changes [ Warning ]

Если вы настроили запрет логина для root, то замените в файле /etc/rkhunter.conf параметр

ALLOW_SSH_ROOT_USER=yes

на

ALLOW_SSH_ROOT_USER=no

Запуск для выполнения интерактивной проверки:

rkhunter -c --update --noappend-log --vl

Подробности:

LogWatch

LogWatch - инструмент контроля системных журналов сервера.

Все события системы регистрируются службой syslog и представляют собой массу трудночитаемой информации.

LogWatch ежедневно анализирует эти записи и высылает отчет администратору о значительных событиях и состоянии системы.

Вы не пропустите если кто нибудь без вашего ведома установил программу. Вовремя обнаружите, что заканчивается место на диске. Если кто нибудь станет упорно подбирать пароль к вашей системе, то LogWatch уведомит вас об этом.

Важно не забыть указать ваш адрес почты куда отправлять отчеты.

Это параметр MailTo в файле /etc/logwatch/conf/logwatch.conf

Внимательно просматривайте отчеты

Подробности:

PHP suhosin patch

Suhosin представляет собой систему защиты PHP скриптов. Он был разработан для защиты серверов и пользователей от известных и неизвестных недостатков PHP приложений.

Возможности suhosin patch

  • Защита от переполнения буфера.
  • Защита от нарушения Zend hash table.
  • Защита от format string.
  • Симулирует работу скриптов.
  • Добавляет поддержку sha1 в ядро PHP (php < 4.3.0).
  • Добавляет ключ Blowfish к функции crypt
  • Выключает поддержку функции phpinfo
  • Защищает от SQL-injection
  • Шифрация Cookie
  • Запрещяет подключение загруженных файлов.
  • Запрещяет инклюд удаленных и локальных файлов.
  • Отключает моодификатор /e у preg_replace.
  • Есть возможность отключть eval (eval не единственная опасная функция)
  • Фильтрует разделенные Http запросы.
  • Не позволяет перезаписывать переменные.
  • Фильтрация для функции mail (в PHP была баг с этим.)

Более подробное описание возможностей есть в документации

mod_security

mod_security - модуль Apache, добавляющий возможности обнаружения и предотвращения вторжения на Web сервер. Модуль способен проверять HTTP запросы на наличие признаков злонамеренного воздействия и отбрасывать их с регистрацией в системном журнале.

основные возможности mod_security

  • Анализ запроса. Это основная функция данного модуля, особенно когда вы имеете дело с POST запросами, в которых получение тела запроса может быть затруднено.
  • Выполнение канонизации и функции антиуклонения. Выполнение ряда преобразований, для преобразования входных данных в форму, подходящую для анализа. Этот шаг применяется для борьбы с различными методами уклонения.
  • Выполнение специальных встроенных проверок. В этом месте выполняются более сложные проверки правильности, такие как проверка правильности URL кодирования и проверка правильности Unicode кодирования. Вы можете также контролировать некоторые значения байтов в запросе для борьбы с shellcode.
  • Запуск входных правил. В этом месте запускаются правила, созданные вами. Они позволяют вам анализировать каждый аспект запроса, используя регулярные выражения. Также здесь могут быть объединены несколько правил для более сложного анализа.

Действия mod_security после обработки запроса:

  • Запуск правил вывода. Правила вывода применяются к телу ответа. Они очень полезны для предотвращения утечек информации.
  • Регистрация запроса. Регистрируется окончательный запрос, состоящий из тела запроса и заголовков ввода и вывода. Чтобы предотвращать чрезмерную регистрацию, mod_security может регистрировать запросы по выбору, например запросы, которые получили ответ от mod_security.

Если с вашим вебприложением есть проблемы, попробуйте отключить этот модуль.

В файле /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf замените параметр

SecRuleEngine On

на

SecRuleEngine Off

В любом случае можно добиться совместимости с вашим вебприложением изучив документацию

Рекомендации

  • Регулярно обновляйте версии программ
  • Не используйте ftp, это принципиально плохо защищенный протокол. Постарайтесь обойтись sftp, scp. Если работаете под Windows используйте Winscp для загрузки файлов на сервер.
  • В меню возможности отключите ftp и прочие службы которые не обязательны, например pop3.
  • Если вы не используете почтовый сервер отключите демон clamav, он потребляет много памяти.
  • По возможности используйте протоколы в которых обеспечивается шифрование передаваемых данных - pop3s, smtps, imaps, https вместо pop3, smtp, imap и http. Иначе ваши имена, пароли и прочие данные могут быть перехвачены.
  • Закрывайте и ограничивайте доступ к тем сетевым службам, например mysqld, которые не должны быть видны снаружи.
  • Если вам необходим ftp, запретите подключение к нему отовсюду кроме разрешенных адресов.
  • Если вы используете smtp сервер только для отправки почты с вебсервера, то закройте фаерволом доступ извне на 25-й и 465-й порт.
  • Запретить подключение с именем root и настроить использование sudo. Это более безопасно.
  • Тщательно настроить фаервол. Разрешить только желаемые подключения.
  • Мы не стали усложнять шаблон системы, но рекомендуем вам самостоятельно настроить и использовать систему обнаружения атак, например AIDE.

Заключение

Здесь описана лишь небольшая часть богатого ассортимента средств защиты вебсервера. Это можно считать только базовой защитой или необходимым минимальным набором для защиты профессионального вебсервера. Для высококачественной защиты необходимо постоянное внимание опытного специалиста по защите и регулярные проверки.

Ссылки: