Установка 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 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
Розпаковуємо:
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
Всі. Тепер наш сервер більш захищений від вторгнень.
Виділений сервер своїми руками.
Поради, допомогу, замітки з адміністрування виділених серверів linux.