Фев 9 2009

Блокировка брутфорс атак c помощью iptables

Начиная примерно с 2005-го года увеличилось количество брутфорс атак на SSH сервис. Даже если ваш сервер хорошо зищищен, например установлены последнии версии всех пакетов это не значит что подобрать пароль к ftp,ssh,pop и другим сервисам не является возможным. Любой хакер может сорвать джекпот, подобрав пароль к одному из сервисов установленных на вашем сервере, но только в том случае если ваш фаервол бездействует.
Хватит всего 2-х iptables правил, что бы остановить брутфорс атаку на SSH.

Логи

Вот вам пример из файла auth.log. Как видите боты генерируют разные комбинации логин:пароль и пытаются авторизироваться на разных сервисах.

Jul 12 22:42:46 hostname sshd[10955]: Illegal user office from 211.191.73.xxx
Jul 12 22:42:46 hostname sshd[10855]: Failed password for illegal user office from 213.191.73.xxx port 53033 ssh2
Jul 12 22:42:46 hostname sshd[10957]: Illegal user samba from 213.191.74.xxx
Jul 12 22:42:46 hostname sshd[10957]: Failed password for illegal user samba from 213.191.74.xxx port 53712 ssh2
Jul 12 22:42:46 hostname sshd[10959]: Illegal user tomcat from 213.191.74.xxx
Jul 12 22:42:46 hostname sshd[10959]: Failed password for illegal user tomcat from 213.191.74.xxx port 54393 ssh2
Jul 12 22:42:46 hostname sshd[10961]: Illegal user webadmin from 213.191.74.xxx
Jul 12 22:42:46 hostname sshd[10961]: Failed password for illegal user webadmin from 213.191.74.xxx port 55099 ssh2
Feb  7 06:52:33 sitename24 sshd[31992]: Failed password for root from 87.244.yy.xx port 36490 ssh2
Feb  7 06:52:35 sitename24 sshd[32017]: Failed password for invalid user oracle from 87.244.24.38 port 36917 ssh2
Feb  7 06:52:38 sitename24 sshd[32040]: Failed password for invalid user test from 87.244.yy.xx port 37254 ssh2

Кратко о iptables.

Iptables – это стандартный фаервол в Linux, который я использую у себя на Debian машинах, по умолчанию он установлен и готов к работе. Изначально количество правил равно – 0.

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

Обезопасим себя

Пока вы тестируете новые правила для iptables, лучше позаботиться о своей безопасности, что бы не случилось так, что вы сами себя заблокируете, после чего не сможете удаленно подключиться к своему серверу по SSH протоколу.
Для этого пропишем в crontab-e следующее:

*/10 * * * * /sbin/iptables -F

Теперь если вдруг окажется, что вы заблокировали себя, crontab очистит таблицу с правилами через 10 минут, и вы сможете снова подключиться

Два правила

sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

-i eth0 это сетевой интерфейс на котором висит SSH. Обычно по умолчанию у многих это eth0, но если у вас другой, уважите его. Посмотореть каие у вас в системе интерфейсы можно используя утилиту ifconfig.

Готово! Теперь все входящие подключения на ваш SSH сервис – лимитированы, максимальное количество попыток подключиться – 8 в минуту. Нормальные пользователи без проблем смогут пользоваться дальше SSH сервисом, а почти все брут-форс атаки на SSH будут блокироваться нашим фаерволом iptables.

Вывести список правил в iptables

iptables -L

Удалить все правила

iptables -F

Это один из тысячь примеров как можно использовать iptables, есть еще много интересных правил которые можно использовать для борьбы легкими dos, ddos, flood атаками, http post брутфорсами, и так далее.

Ссылки

Краткое описание и список команд можно посмотреть на wikipedia
Руководство iptables


Янв 20 2009

Защита 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
GreenSQL
По умолчанию логин: admin, пароль: pwd
После того как ввошли меняем пароль на что-то посложнее :)

Быстродействие
А вы как думали? Потери в производительности есть, но небольшие. И я думаю оно того стоит.
Скорость обработки запросов падает на 2-12% в зависимости от количества одновременных запросов. Пусть решает каждий за себя, что ему важнее, потеря производительности в sql запросах на ~6% или сохранность данных.
Подробнее о быстродействи читайте по ссылке: GreenSQL Performance

Альтернативы есть, можно бороться с SQL Injection другими способами, например установив mod_security для Apache, или если у вас на фронтенде nginx, можно используя его фильтровать входящий HTTP траффик. Из тяжелой артилерии – Snort.

Пока-что на этом все.

Ссылки
GreenSQL http://www.greensql.net/