Настройка fail2ban для защиты ssh-proxy опубликованного в интернет

Настройка fail2ban для защиты ssh-proxy опубликованного в интернет.

Использованные инструменты

  • Fail2ban — это инструмент системного администратора для борьбы с перебором паролей, способный отслеживать логи на предмет неудавшихся попыток авторизации и применять действия для предупреждения повторения этих попыток. Простыми словами мониторит логи, считает попытки ввода пароля с чужого адреса, когда набирается определенное их количество — блокирует запросы с этого адреса в firewall на заданное время. По умолчанию 5 попыток — 10 минут бана.
  • syslog-ng — это расширенный демон журнала, поддерживающий широкий спектр методов ввода и вывода: системный журнал, неструктурированный текст, очереди сообщений, базы данных (как SQL, так и NoSQL) и многое другое. Используется в образах виртуальных машин Infrascope.
  • logrotate — утилита предназначена для упрощения администрирования файлов журналов в системе, которая генерирует множество файлов журналов. Logrotate позволяет автоматически выполнять ротационное сжатие, удаление и отправку файлов журналов. Logrotate можно настроить на обработку файла журнала ежечасно, ежедневно, еженедельно, ежемесячно, по истечении времени в минутах или когда файл журнала достигает определенного размера.
  • Infrascope — наш продукт, в котором присутствует модуль интеграции с SIEM системами. В схеме реализуемой в инструкции мы будем через этот модуль отправлять данные в syslog-ng.
  • pam-ssh — SSH прокси модуль Infrascope
  • pam-auth — модуль авторизации Infrascope
  • iptables — брандмауэр Linux

Схема

Злоумышленник -> iptables -> pam-ssh -> pam-auth -> модуль SIEM -> syslog-ng -> файл журнала -> fail2ban идентифицирует атаку и добавляет блокировку адреса в iptables

Алгоритм действий

  1. Включаем прием логов syslog-ng от SIEM модуля
  2. Настройка logrotate
  3. Настройка SIEM модуля в Infrascope
  4. Настройка fail2ban

1. Включаем прием логов syslog-ng от SIEM модуля

syslog-ng имеет выделенную директорию /etc/syslog-ng/conf.d для пользовательских конфигураций. В ней необходимо создать файл infrascope.conf со следующим содержимым

source s_pam_net {
  udp(ip(127.0.0.1) port(514));
};

destination d_pam_net {
  file("/var/log/pam.log");
};

log {
  source(s_pam_net);
  destination(d_pam_net);
};
  • source — регистрируем источник данных — на адресе 127.0.0.1 слушать 514/udp
  • destination — регистрируем назначение — определенный файл журнала
  • log — связываем источник с файлом журнала

2. Настройка logrotate

Добавить /var/log/pam.log в файл /etc/logrotate.d/syslog-ng. Пример итогового файла:

/var/log/syslog
{
  rotate 7
  daily
  missingok
  notifempty
  delaycompress
  compress
  postrotate
    invoke-rc.d syslog-ng reload > /dev/null
  endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
/var/log/error
/var/log/pam.log
{
  rotate 4
  weekly
  missingok
  notifempty
  compress
  delaycompress
  sharedscripts
  postrotate
    invoke-rc.d syslog-ng reload > /dev/null
  endscript
}

3. Настройка SIEM модуля в Infrascope

В разделе Администрирование -> Конфигурация системы добавляем следующие параметры

  • syslog.connection.protocol=UDP
  • syslog.message.content.format=KEY_VALUE
  • syslog.message.rfcFormat=RFC_5424
  • syslog.server.hostName=localhost
  • syslog.server.port=514

В разделе SIEM -> SIEM конфиг: добавляем и включаем AuthLog.

“Ограничение максимального количества записей” лучше увеличить, т.к. к моменту настройки fail2ban в логах уже могут быть накоплены многие сотни тысяч записей. А работает этот параметр так — раз в минуту отправляет N записей из журнала.

Перезапускаем pam-gui

sudo systemctl restart pam-gui

На этом этапе события авторизации начнут поступать в syslog-ng и записываться в /var/log/pam.log

4. Настройка fail2ban

Сначала необходимо задать фильтр — для чего создадим в папке /etc/fail2ban/filter.d файл infrascope_sshproxy.conf со следующим содержимым:

# Fail2Ban filter for infrascope ssh-proxy
#

[Definition]
# это регулярные выражения для распознавания в логах событий требующих реакции
commonfailure=^.*event=[1-9],.*clientIp='<HOST>', params='User (.*) not found!'.*$
              ^.*event=[1-9],.*clientIp='<HOST>', params='(.*)invalid user credential'.*$

failregex = %(commonfailure)s

Можем проверить работу фильтра

fail2ban-regex -v /var/log/pam.log /etc/fail2ban/filter.d/infrascope_sshproxy.conf

Команда прочитает лог файл используя созданный фильтр, и посчитает события.

Далее необходимо добавить jail fail2ban. В папке /etc/fail2ban/jail.d создадим файл infrascope_sshproxy.conf со следующим содержимым

[infrascope_sshproxy]
enabled = true
# порты можно указать all
port = 2222,3333,443,5444
filter = infrascope_sshproxy
logpath = /var/log/pam.log
maxretry = 5
findtime = 60
bantime = 600

Можем проверить статус активных jail’ов

fail2ban-client status

Осталось перезапустить fail2ban

systemctl restart fail2ban