Я думаю любой системный администратор, а также владелец выделенного сервера, рано или поздно при просмотре логов сервера (а это нужно делать периодически) обнаруживает в логе /var/log/secure примерно такие строки: Jan 20 09:03:33 domain sshd[19713]: Failed password for root from ::ffff:xxx. xxx. xxx. xxx port 45596 ssh2Jan 20 09:03:33 domain sshd[19714]: Failed password for root from ::ffff:xxx. xxx. xxx. xxx port 45597 ssh2Jan 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 Все. Теперь наш сервер более защищен от вторжений.