Постоянная блокировка IP после n попыток с использованием fail2ban

38

У меня fail2ban настроен как показано ниже:

  • заблокировать IP после 3 неудачных попыток
  • освободить IP через 300 секунд

Это работает отлично, и я хочу сохранить его таким образом, чтобы действительный пользователь мог повторить попытку входа после истечения времени ожидания. Теперь я хочу реализовать правило, согласно которому если один и тот же IP-адрес обнаруживается как атака и блокируется, разблокируется 5 раз, навсегда блокирует IP-адрес и никогда больше не разблокируется. Может ли это быть достигнуто с помощью fail2ban или мне нужно написать собственный скрипт для этого?

Я делаю это в санто.

БТР Найду
источник
2
Это довольно глупая идея - чем больше правил вы добавляете в iptables, тем медленнее он становится.
symcbean
14
Ценю ваш комментарий, но мне нужен ответ, а не предложение. Спасибо, в любом случае.
БТР Найду
5
Иногда правильный ответ на вопрос «как сделать Х» - «не делай Х».
ceejayoz

Ответы:

32

До 0.11 в fail2ban не было ни функции, ни настройки по умолчанию . Но, начиная с предстоящего релиза 0.11, время бана рассчитывается автоматически и экспоненциально увеличивается с каждым новым нарушением, что в долгосрочной перспективе будет означать более или менее постоянный блок.

До тех пор ваш лучший подход, вероятно, заключается в настройке fail2ban для мониторинга собственного файла журнала . Это двухэтапный процесс ...

Шаг 1

Нам может понадобиться создать фильтр для проверки BAN в файле журнала (файл журнала fail2ban)

Шаг 2

Нам нужно определить тюрьму , похожую на следующую ...

[Fail2ban]
включен = правда
filter = fail2ban
action = iptables-allports [name = fail2ban]
logpath = /path/to/fail2ban.log
# время поиска: 1 день
findtime = 86400
# Bantime: 1 год
bantime = 31536000

Технически, это не постоянный блок , а только блоки на год (что мы тоже можем увеличить).

В любом случае, на ваш вопрос (может ли это быть достигнуто только с помощью fail2ban или мне нужно написать собственный скрипт для этого?) ... написание собственного скрипта может работать хорошо. Настройка скрипта для извлечения часто запрещенных IP-адресов и последующего их размещения /etc/hosts.deny- вот что я бы порекомендовал.

Поти Калимуту
источник
1
Добавление к этому превосходному ответу ... В зависимости от того, для чего настроены ведение журнала и MaxAuthTries sshd_config, это может потенциально блокировать только 3 неудачных входа в систему для sshd-сеанса - не предусмотрено 3 неудачных входа в систему. Например, по умолчанию злоумышленник может попробовать ['pass1', 'pass2', 'pass3'] за один сеанс, прежде чем sshd отключится. В зависимости от того, как sshd настроен на запись в журнал, это может выглядеть как 1, 2 или 3 попытки сбоя 2банка.
Джонатан Ванаско
5
Для этого есть фильтр рецидивов fail2ban.
Гильермо Пранди
Что вы подразумеваете под предстоящим выпуском 0.11 ? Наиболее свежая
версия
Я надеюсь, что вы имели в виду 0.10.3.1 . Вы можете отслеживать прогресс "0.11" на github.com/fail2ban/fail2ban/tree/0.11 . В основном, это еще не выпущено!
Поти Калимуту
30

Я полагаю, если вы поместите bantime = -1в этот раздел конфигурации, это постоянный блок.

Дж. Чин
источник
2
Действительно, установка bantimeлюбого отрицательного значения - это постоянный бан (по состоянию на Fail2Ban ver. 0.6.1 (2006/03/16))
voretaq7
3
добавление -1 к настройкам делает fail2ban не отвечающим
Erdem Ece
13

Фил Хаген написал отличную статью на эту тему. « Постоянно Ban рецидивистов С fail2ban ».

Его предложение такое же, как у Поти, но содержит пошаговое руководство.

Это включало:

  • отдельный список банов по тюрьме (ip.blocklist.ssh, ip.blocklist.xxx)
  • бан списки автоматически загружаются при перезапуске службы (главное преимущество этого метода imho)
  • уведомление по электронной почте, если ретранслятор включен.
хаа
источник
6

Чтобы расширить ответ Чина, это довольно просто. Просто измените 2 настройки в /etc/fail2ban/jail.localсоответствии с вашими предпочтениями.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5
Кейси Уотсон
источник
4

У fail2ban уже есть тюрьма, чтобы забанить рецидив. Если вы посмотрите /etc/fail2ban/jail.conf, вы найдете:

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

Как добавить в jail.local?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

Для проверки вы LOGLEVEL вы можете сделать: fail2ban-client get loglevel.

  • set loglevel MYLEVEL : устанавливает уровень ведения журнала на MYLEVEL. Уровни: КРИТИЧЕСКИЙ, ОШИБКА, ВНИМАНИЕ, УВЕДОМЛЕНИЕ, ИНФОРМАЦИЯ, ОТЛАДКА
  • Больше команд на вики .

В старой версии fail2ban вы можете получить эту ошибку .

A-312
источник
0

Зайдите в vim, откройте /etc/fail2ban/jail.conf

и просто изменить после fail2ban service restart:

# "bantime" is the number of seconds that a host is banned.
bantime  = ***1296000***

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***
Танвир Ахмад
источник