Постійний блок IP після n повторних спроб за допомогою fail2ban


38

У мене налаштований fail2ban, як показано нижче:

  • блокуйте ip після 3 невдалих спроб
  • відпустіть IP після таймауту через 300 секунд

Це прекрасно працює, і я хочу зберегти це таким чином, щоб дійсний користувач отримав шанс повторити вхід після закінчення тайм-ауту. Тепер я хочу реалізувати правило, коли, якщо той самий IP-код буде виявлений як атака та заблокований, розблокований 5 разів, назавжди блокує IP-адресу і ніколи не розблоковується знову. Чи можна цього досягти лише за допомогою fail2ban або мені потрібно написати власний сценарій для цього?

Я роблю це в центсах.


2
Це досить дурна ідея - чим більше правил додаєш до iptables, тим повільніше це стає.
symcbean

14
Вдячний за ваш коментар, але мені потрібно відповідь, а не пропозиція. Все одно, дякую.
БТР Найду

5
Іноді правильна відповідь на питання "як зробити X" - це "не робити X".
ceejayoz

Відповіді:


32

До 0.11 для цього не було функції за замовчуванням або налаштування в програмі fail2ban . Але починаючи з майбутнього випуску 0,11, час заборони автоматично обчислюється і збільшується експоненціально з кожним новим правопорушенням, що в перспективі буде означати більш-менш постійний блок.

До цього часу ваш найкращий підхід - це, мабуть, налаштування fail2ban для моніторингу власного файлу журналу . Це двоетапний процес ...

Крок 1

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

Крок 2

Нам потрібно визначити тюрму , подібно до наступних ...

[fail2ban]
увімкнено = вірно
filter = fail2ban
action = iptables-allports [ім'я = fail2ban]
logpath = /path/to/fail2ban.log
# час пошуку: 1 день
findtime = 86400
# тривалість виконання: 1 рік
bantime = 31536000

Технічно це не постійний блок , а лише блоки на рік (що ми також можемо збільшити).

У будь-якому випадку, для вашого запитання (Чи можна цього досягти за допомогою повороту fail2ban або мені потрібно зробити власний сценарій для цього?) ... написання власного сценарію може працювати добре. Я б рекомендував налаштувати сценарій для вилучення часто заборонених IP-адрес, а потім їх введення /etc/hosts.deny.


1
Додаючи до цієї чудової відповіді ... Залежно від способу налаштування журналу та MaxAuthTries sshd_config, це потенційно може блокувати лише 3 невдалі входи для "сеансу" sshd - не передбачено 3 невдалі входи. Наприклад, за замовчуванням зловмисник може спробувати ['pass1', 'pass2', 'pass3'] за один сеанс, перш ніж sshd відключиться. Залежно від способу встановлення журналу sshd, це може відображатися як 1, 2 або 3 спроби виходу з ладу2ban.
Джонатан Ванаско,

5
Зараз для цього є фільтр для відмовки у програмі fail2ban.
Гільєрмо Пранді

Що ви маєте на увазі під майбутньою версією 0.11 ? Останнє здається 10.3.1: github.com/fail2ban/fail2ban/releases
користувач5950

Сподіваюся, ви мали на увазі 0.10.3.1 . Ви можете відстежувати хід "0,11" на веб- сайті github.com/fail2ban/fail2ban/tree/0.11 . В основному, поки не випущено!
Pothi Kalimuthu

29

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


2
Дійсно, встановлення bantimeбудь-якого негативного значення є постійною забороною (станом на Fail2Ban ver. 0.6.1 (2006/03/16))
voretaq7

3
додавання -1 до налаштувань зробило fail2ban невідповідним
Erdem Ece

13

Філ Хаген написав чудову статтю на цю тему. " Постійно забороняйте повторювати правопорушників з 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.

  • встановити loglevel MYLEVEL : встановлює рівень журналу на MYLEVEL. Рівні: КРИТИЧНИЙ, ПОМИЛКА, ПОПЕРЕДЖЕННЯ, ПОВІДОМЛЕННЯ, ІНФОРМАЦІЯ, ДЕБУГ
  • Більше команд на вікі .

За допомогою старої версії fail2ban ви можете отримати цю помилку .


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***
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.