Защита MySQL от атак типа SQL Injection c помощью GreenSQL (Debian Etch)
GreenSQL greensql-fw служит для того, что бы фильтровать атаки типа SQL иньекции. Работает как reverse-proxy, т.е обрабатывает все входящие на сервер из внешнего мира SQL запросы, проверет и перенаправлет их в MySQL, и получая ответы отправляет их обратно клиенту. В поставку также входит веб-панель greensql-console(PHP) с помощью которой можно управлять GreenSQL через браузер. Я расскажу как установить и настроить GreenSQL Firewall + grrensql-console на системе Debian Etch.
Установка GreenSQL (greensql-fw)
Для Debian Etch уже есть готовый deb пакет, который можно найти и скачать по адресу http://www.greensql.net/download
cd /tmp curl "http://greensql.net/download/fw_0.9.6_i386.deb" > greensql-fw.deb dpkg -i greensql-fw.deb
Дальше вы увидите следующие вопросы,
What is the name of the server used to store GreenSQL configuration db (MySQL server)? <-- localhost What is the database name for the GreenSQL configuration? <-- greendb Would you like to set up the database and tables automatically? <-- Yes What is the username of the MySQL administrator? <-- root Enter the MySQL administrator password <-- your_root_sql_password (пароль вашего mysql root-a) Confirm this password <-- your_root_sql_password(пароль вашего mysql root-a) What is the GreenSQL db username? <-- green What is the GreenSQL user password? <-- greensqlpassword (пароль для green пользователя)
После установки, greensql-fw запустится на 3305 порту. (По умолчанию MySQL на 3306)
Вы можете проверить работоспособность greensql-fw демона исп. например netstat:
netstat -tap | grep greensql
Результат будет примерно следующий:
xhost:~# netstat -tap | grep greensql tcp 0 0 localhost:3305 *:* LISTEN 8637/greensql-fw xhost:~#
Что бы окончательно убедиться в том что greensql-fw полностью функционирует, подключитесь к MySQL через greensql-fw демона:
mysql -h 127.0.0.1 -P 3305 -u root -p
Что бы заставить работать все ваши веб-проекты через greensql вам нужно указать в конфигурационных файлах хост 127.0.0.1 и порт 3305
[...]
$link = mysql_connect('127.0.0.1:3305', 'mysql_user', 'mysql_password');
[...]ВАЖНО: пишите IP-адресс хоста, а не его имя.
Установка greensql-console
Напомню что greensql-console это веб-панель для администратора. Помагает конфигурировать и контролировать работу GreenSQL фаервола.
Берем отсюда: http://www.greensql.net/download#Debian_Etch
curl "http://greensql.net/download/greensql-console-0.4.6.tar.gz" > greensql-console-0.4.6.tar.gz tar -zxvf greensql-console-0.4.6.tar.gz cd greensql-console emacs config.php # убедитесь что все поля заполнены правильно.
Каталог greensql-console закиньте куда-нить к себе на сайт. Что бы он был доступен по http адресу.
На каталог templates_c что находится внутри greensql-console обьязательно нужно установить права для чтения и записи.
chmod 777 templates_c
Откройте браузер, и перейдите по ссылке http://www.ваш_домен/greensql-console

По умолчанию логин: admin, пароль: pwd
После того как ввошли меняем пароль на что-то посложнее
Быстродействие
А вы как думали? Потери в производительности есть, но небольшие. И я думаю оно того стоит.
Скорость обработки запросов падает на 2-12% в зависимости от количества одновременных запросов. Пусть решает каждий за себя, что ему важнее, потеря производительности в sql запросах на ~6% или сохранность данных.
Подробнее о быстродействи читайте по ссылке: GreenSQL Performance
Альтернативы есть, можно бороться с SQL Injection другими способами, например установив mod_security для Apache, или если у вас на фронтенде nginx, можно используя его фильтровать входящий HTTP траффик. Из тяжелой артилерии – Snort.
Пока-что на этом все.
Ссылки
GreenSQL http://www.greensql.net/