Sentry: программа для защиты от брутфорса

sentry — эта аббревиатура означает «safe and effective protection against bruteforce attacks», т. е. безопасная и эффективная защита от брутфорсинга (ssh, FTP, SMTP и другие).

Описание sentry

Sentry выявляет и предотвращает атаки методом перебора в отношении ssh, FTP, SMTP и других служб, используя при этом минимальные системные ресурсы. Sentry НЕ делает изменения в настройках файервола. Она просто добавляет IP адреса в таблицу/список/цепь (table/list/chain). Она делает это динамически и на усмотрение администратора файервола добавить правило, которое делает то, что вам нужно с IP адресами в таблице sentry. Sentry также имеет гибкие правила для того, что представляют собой «озорные» (naughty) соединения. Для SSH, попытка залогиниться с неверными учётными данными рассматривается как «озорная». Для SMTP отправка вируса или письма со спамом может быть рассмотрено как «озорная» (naughty).

Sentry:

  • Безопасная

Для предотвращения случайных блокировок, Sentry ведёт белый список IP, которые соединились более чем 3 раза и хотя бы один раз успешно. Теперь больше никогда ваш коллега со склерозом за офисным NAT роутером не будет заблокирован из вашей системы. Да и вашего админа, чей кривой скрипт неудачно пытался залогиниться 12 раз в 2 секунды, больше не постигнет такая участь.

Sentry включает поддержку добавления IP в файервол. Включена поддержка для IPFW, PF, ipchains. Поддержка файервола по дефолту отключена. Это от того, что правила файервола могут закрыть существующую сессию(и) для хоста (важно для пользователей IPFW). Добавьте ваш IP в белый список (соединитесь 3 или более раз или используйте whitelist) перед включением опции файервола.

  • Простая

Sentry имеет предельно простую базу данных для отслеживания IP. Благодаря этому, системному администратору очень просто её просматривать и изменять, в том числе с использованием шелл команд и скриптов. Посмотрите раздел Примеры.

Sentry написан на perl, который установлен везде, где есть sshd. Нет никаких зависимостей. Установка и развёртывание максимально просты.

  • Гибкая

Sentry поддерживает блокировку попыток соединения с использованием различных TCP Wrapper и нескольких популярных файерволов. Можно легко улучшить sentry для поддержки дополнительных списков блокировки.

Sentry была написана для защиты демона SSH, но используется и с другими демонами. Как это уже описывалось, главная платформа, используемая для атаки, это сеть из ботов, состоящая из используемых персональных компьютеров с высокоскоростными Интернет-соединениями. Эти боты используются для выполнения SSH атак, а также для рассылки спама. Блокировка ботов предотвращает множество векторов атак.

Стиль программирования в sentry делает простым вставку кода для дополнительной функциональности.

  • Эффективная

Главная цель Sentry — это минимизировать ресурсы, которые атакующий может украсть, это достигается потреблением самой программой минимального количества ресурсов. Большинство приложений для блокировки брутфорса (denyhosts, fail2ban, sshdfilter) нужно запускать в качестве демонов, следящих за хвостом файла лога. Это требует от интерпретатора языка всегда быть запущенным, потребляя минимум 10MB RAM. Единичная железная машина, на которой множество виртуальных серверов, потеряет сотни мегабайт для защиты демонами.

Sentry использует ресурсы только когда сделано соединение.

При худшем сценарии, ресурсы будут тратиться при первом подключении IP, поскольку будет задействован интерпретатор perl. Для большинства соединений, Sentry будет добавлять метки к файлу, стате на наличие другого файла и выходить.

Как только IP добавлен в чёрный список за нарушение, будь-то с tcpd или файерволом, потребляемые ресурсы сведутся практически к нулю.

Sentry не самая эффективная программа для составления отчётов. Концепция «один файл на IP» — великолепный минималистический вариант для ведения логов, чёрных списков, но практически любая база данных покажет лучшую производительность для составления отчётов. Нужно прождать несколько секунд для выполнения команды с ключом —report.

Установка Sentry

bash || sh
export SENTRY_URL=https://raw.githubusercontent.com/msimerson/sentry/master/sentry.pl
curl -O $SENTRY_URL || wget $SENTRY_URL || fetch $SENTRY_URL

Запуск Sentry:

perl sentry.pl

Запуск sentry в первый раз выполнит:

  • создание базы данных sentry
  • установку perl скрипта
  • запросит вас отредактировать /etc/hosts.allow, вставив туда две строчки, которые его включат.

Обновление Sentry

Простой способ

perl /var/db/sentry/sentry.pl --update

Сложные способ

Загрузите как написано выше.

diff sentry.pl /var/db/sentry/sentry.pl

Найдём все имеющиеся различия в настройке

cp sentry.pl /var/db/sentry/sentry.pl
chmod 755 /var/db/sentry/sentry.pl

Конспект по Sentry

sentry --ip=N.N.N.N [ --connect | --blacklist | --whitelist | --delist ]
sentry --report [--verbose --ip=N.N.N.N ]
sentry --help
sentry --update

Аргументы Sentry

Обязательный аргумент — ip. Это адрес IPv4. IP должен поступать из надёжного источника, который трудно подменить. Tcpwrappers — это отличный источник. Соединения UDP — это плохой источник, т. к. их легко спуфить. Файлы журналов TCP демонов могут быть хорошим источником, если они парсятся должным образом, во избежания атак инжекта в логи. Все действия, кроме report и help, требуют IP адрес. IP адрес может быть задан вручную администратором или предпочтительно передан TCP сервером вроде tcpd (tcpwrappers), inetd, или tcpserver (daemontools).

Действия

blacklistdeny — отклонить все будущие соединения

whitelistwhitelist — принять все будущие соединения, удалить IP из чёрных списков и добавить ему иммунитет от последующих тестов при подключении.

delistremove — удалить IP из белых и чёрных списков. Это полезно для тестирования работы sentry.

connectregister — соединения на один IP. Этот метод будет вести список попыток и их время.

update — проверяет на наличие самой последней версии sentry и обновляет, если доступны обновления.

Как всё происходит

Когда приходит подключение, метод подключения сделает запись в журнале о попытке и о её времени. Если IP в белом или в чёрном списках, то программа немедленно завершит свою работу.

Далее sentry проверит, не попадался ли на глаза этот IP более трёх раз. Если это так, то будут проверены логи для выяснения успешности, провальности, «озорства» (naughty) попыток с этого IP. Если есть успешные попытки входа, IP добавляется в белый список и программа завершается.

Если нет успешных попыток входа, и это «озорной» (naughty) IP, то он добавляется в чёрный список. Если нет успешных и «озорных» попыток, но выполнено более 10 попыток соединения, IP заносится в чёрный список.

Исходники и скачивание.

Один комментарий

Добавить комментарий для Роман Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *