Установка BFD (Brute Force Detection) от R-fx Networks | Выделенный сервер своими руками

Установка BFD (Brute Force Detection) от R-fx Networks

Я думаю любой системный администратор, а также владелец выделенного сервера, рано или поздно при просмотре логов сервера (а это нужно делать периодически) обнаруживает в логе /var/log/secure примерно такие строки:

Jan 20 09:03:33 domain sshd[19713]: Failed password for root from ::ffff:xxx.xxx.xxx.xxx port 45596 ssh2
Jan 20 09:03:33 domain sshd[19714]: Failed password for root from ::ffff:xxx.xxx.xxx.xxx port 45597 ssh2
Jan 20 09:03:35 domain sshd[19698]: Failed password for root from ::ffff:xxx.xxx.xxx.xxx port 45577 ssh2

Что это значит?
А значит это не много не мало а попытку подбора пароля пользователя root с ip адреса xxx.xxx.xxx.xxx методом прямого перебора паролей. Такой тип попытки взлома называется Brute Force. Существует множество методик защиты от такой атаки, да и понятно, что обычно пароль root содержит ну очень много символов в себе (по крайней мере так должно быть), но тем не менее всетаки желательно забанить ip адрес нашего настойчивого хакера :-)

Сначала кратко остановлюсь на нескольких простых методиках защиты от атак типа Brute Force. Ведь, как известно, лучше имень несколько менее сильных линий защиты от хакеров, чем одну супер навороченную.

На первое место думаю можно поставить смену порта по умолчанию для сервиса. Так дефолтный порт у сервиса ssh имеет номер 22, соответственно в основном к нему и пытаются подключиться наши "хакеры". таким образом если сменить номер порта на какой-нибудь 5118, то вероятность того что кто-то заинтересуется нашим сервером значительно снизится.

На втором месте можно поставить оганичение количества подключений к сервису в секунду. Например 1 раз в секунду. Таким образом скорость автоматического перебора паролей снижается на порядки.
На третьем месте месте можно поставить ограничение подключения по ip адресам. Для таких сервисов как ssh.
Все вышеперечисленные изменения производятся в в конфигах соответствующих сервисов.
Ну вот, краткий обзор закончен, перейдем к описанию Brute Force Detection. Мы будем устанавливать утилиту BFD от R-fx Networks, потому как для ее работы нам необходим также установленный APF. Что делает BFD? Он запускается по cron раз в десять минут и выполняет проверку файлов логов /var/log/secure и /var/log/messages на предмет нахождения в них строк, однозначно указывающих на попытку перебора паролей. После этого он заносит ip адрес атакующего хоста, в файл /etc/apf/deny_hosts.rules таким образом блокируя этот ip адрес с помощью фаервола APF. Также BFD может отправлять собщения о попытках перебора паролей по электроной почте.
Итак приступим к установке BFD.
идем на сайт R-fx Networks и качаем последнюю версию BFD:
cd /usr/local/src
wget http://www.r-fx.ca/downloads/bfd-current.tar.gz

Распаковываем:
tar zxvf bfd-current.tar.gz
Переходим в каталог bfd-0.9 и запускаем инсталляцию пакета:
cd bfd-0.9
./install.sh

После чего устанавливается пакет. При успешной установке он выдает сообщение:
BFD installed.
Устанавливается пакет в папку /usr/local/bfd/
Перейдем к настройке. Открываем конфигурационный файл bfd в любимом редакторе и правим:
vi /usr/local/bfd/conf.bfd
Ищем строку ALERT_USR="0" эта переменная отвечает за отправку сообщения об обнаружении атаки по e-mail
Меняем ее на ALERT_USR="1"
Ищем EMAIL_USR="root" и вводим свой e-mail адрес.
Например EMAIL_USR="имя_ящика@gmail.com"
Сохраняемся и выходим.
Открываем файл /usr/local/bfd/ignore.hosts на редактирование:
vi /usr/local/bfd/ignore.hosts
В него вбиваем все ip адреса нашего сервера, а также ip адреса машин с которых мы подключаемся к серверу. делаем мы это для того, чтобы случайно не заблокировать самих себя.
Формат файла простой: в каждой строке - один ip адрес.
Сохраняемся и выходим.
Также полезно будет прописать ip адреса машин с которых мы подключаемся к серверу в файл /etc/apf/allow_hosts.rules
Чтобы уж гарантированно не попасть в бан собственного скрипта.

Ну в общем-то и все. Тепрь наш сервер стал более защищен от атак вида Brute Force.
Добавлю только что по умолчанию скрипт bfd запускается один раз в десять минут. На мой взгляд это слишком большой промежуток времени. Думаю что его можно сократить до одной минуты.
vi /etc/cron.d/bfd
Меняем:
MAILTO=
SHELL=/bin/sh
*/10 * * * * root /usr/local/sbin/bfd -q
на
MAILTO=
SHELL=/bin/sh
* * * * * root /usr/local/sbin/bfd -q
Сохраняемся. Выходим. и даем команду сервису crond перечитать свои конфиги
service crond reload

Вот теперь точно все по этой теме. Как всегда жду Ваших замечаний и предложений в комментах.

Пользуюсь только ключами.

Пользуюсь только ключами. Были инциденты...

Полностью с Вами согласен про

Полностью с Вами согласен про отключение парольной авторизации. Но иногда, к сожалению - это невозможно чисто из организационных соображений.

А на нулевом месте - вообще

А на нулевом месте - вообще полное отключение парольной авторизации и использование только ключей.

man sshd_config, секция

man sshd_config, секция MaxStartups
Оставить только второй ротокол
bfd больше не нужен