Защита сайта с помощью WAF Shadow Daemon
Shadow Daemon — это маленькое приложение, для обеспечения безопасности веб-сайтов, путем перехвата запросов, отфильтровки вредоносных параметров и протокoлированию всех событий.
Установка Shadow Daemon
Существуют установочные пакеты для ОС Debian/Ubuntu и Red Hat / CentOS. Для Ubuntu установка доступна через репозиторий. Также существует образ Docker, в этом случае получаем сразу полностью настроeнную и готовую к работе систему.
1 2 3 |
$ sudo add-apt-repository ppa:zit-hb/shadowd $ sudo apt-get update $ sudo apt-get install shadowd |
Далее настраиваем БД. В сейчас пoддерживается PostgreSQL или MySQL. В /usr/share/shadowd лежат шаблоны, нужно только выбрать и импортировать подxодящий. Используем шаблон для MySQL:
1 2 3 4 5 6 |
$ mysql -uroot -p > CREATE DATABASE shadowd; > USE shadowd; > GRANT ALL PRIVILEGES ON shadowd.* to 'shadowd'@'localhost' IDENTIFIED BY 'password'; > FLUSH PRIVILEGES; > source /usr/share/shadowd/mysql_layout.sql; |
Все настройки shadowd прописаны в конфигурационном файле /etc/shadowd/shadowd.ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ sudo nano /etc/shadowd/shadowd.ini # Server #port=9115 # Потоки нужно подстроить под свою нагрузку #threads=15 # Daemon log=/var/log/shadowd.log # Database db-driver= mysql db-host=127.0.0.1 db-port=3306 db-name=shadowd db-user=shadowd db-password=password |
Перезагружаем:
1 |
$ sudo service shadowd restart |
Проверяем:
1 2 |
$ sudo netstat -tpln | grep shadowd tcp 0 0 127.0.0.1:9115 0.0.0.0:* LISTEN 3094/shadowd |
Ставим для PHP коннектор
1 |
$ git clone https://github.com/zecure/shadowd_php.git |
Настраиваем коннектор для PHP, чтобы Shadow Daemon начал защищать сиcтему.
1 2 |
$ sudo mkdir /usr/share/shadowd/php $ sudo cp -Rv shadowd_php/src/* /usr/share/shadowd/php |
Тепeрь следует сообщить PHP о новом скрипте. Если защита нужна для всех сайтов, то прописываем в php.ini:
1 |
auto_prepend_file /usr/share/shadowd/Connector.php |
Если защищать будем отдельный хост, то пишем в настройках виртуального хоста Apache или .htaccess:
1 |
php_value auto_prepend_file "/usr/share/shadowd/php/Connector.php" |
Для nginx настройка в виртуальном хосте чуть другая:
1 |
fastcgi_param PHP_ADMIN_VALUE "auto_prepend_file=/usr/share/shadowd/php/Connector.php"; |
Копируем конфигурационный файл для коннектора.
1 |
$ sudo cp -v shadowd_php/misc/examples/connectors.ini /etc/shadowd/connectors.ini |
Файл хорошо прокомментирован, и некоторые установки говорят сами за себя, более подробное описание есть в документации. Параметры, помеченные как Required, следует отредактировать обязательно. Файл должен быть доступен для чтения пользователем веб-сервера, иначе сайт перестанет работать. Также возможно использование нескольких файлов с разными настройками для защиты специфических приложений. Нужный файл можно указать в переменной SHADOWD_CONNECTOR_CONFIG.
УСТАНОВКА ВЕБ-ИНТЕРФЕЙСА
Веб-интерфейс доступен только в Git, для его работы понадобится веб-сервер, поддерживающий PHP. Для Apache, nginx и lighttpd на сайте проекта доступны правила rewrite.
1 2 |
$ cd /var/www $ sudo git clone https://github.com/zecure/shadowd_ui.git |
Настраиваем виртуальный хост на корневой каталог /var/www/shadowd_ui/web. Настройки стандартные, приводить их не буду. Для Apache там уже есть подготовленный .htaccess, нужно просто его разрешить.
Веб-интерфейс написан с использованием PHP-фреймворка Symfony 2, разработчики приготовили пакет, позволяющий скачать все нужное при помощи менеджера зависимостей Composer.
1 2 3 |
$ cd /var/www/shadowd_ui $ curl -s https://getcomposer.org/installer | php $ php composer.phar install |
Программа запросит, какие будем использовать драйверы базы данных. Значение по умолчанию pdo_pgsql для PostgreSQL; так как мы используем MySQL, пишем pdo_Mysql. И устанавливаем остальные параметры для подключения к базе данных. Для того чтобы проверить настройки, можно набрать в браузере http://localhost/config.php.
Добавляем нового администратора:
1 |
$ php app/console swd:register --env=prod --admin --name=admin --email=null@example.org |
Email необязателен и используется пока только для отправки отчетов. Регистрируемся в веб-админке. Первым делом нужно создать профиль. Переходим в Management –> Profiles, нажимаем Add и заполняем параметры. Значения по умолчанию вполне подходят для большинства случаев. Необходимо указать IP коннектора, добавить имя профиля, в качестве шаблона можно использовать звездочку. И вводим ключ для авторизации запросов. Включаем черный список и при необходимости белый и проверку целостности. В тестовый период, пока нет уверенности, что система работает правильно, можно установить пассивный режим в поле Mode. В Global threshold прописываем порог срабатывания. Оптимальное значение находится в пределах между 5 и 10.
Лучше начать с наименьшего значения, поэтому ставим 5. В остальных вкладках можно просмотреть правила и оценить запросы и параметры. Фильтры и поиск позволяют быстро отобрать нужные.
ВЫВОД
Конечно, Shadow Daemon, повышая безопасность, для анализа данных потребует некоторого количества ресурсов. Нагрузочное тестирование показало, что примерно на 5–10% увеличивается время запроса. Для небольших VDS это может быть уже проблемой. Поэтому, если решено внедрять Shadow Daemon, нужно однозначно иметь запас мощности.
Если Вам необходима настройка безопасности сайта и сервера, пишите [email protected] или раздел Контакты