fail2ban. Основные настройки

fail2ban. Основные настройки.

Содержание

1 Общая информация

  • Репозиторий: https://github.com/fail2ban/fail2ban
  • Fail2Ban сканирует файлы журналов /var/log/auth.log и блокирует IP-адреса, совершающие слишком много неудачных попыток входа в систему.
  • Это достигается путем обновления правил системного брандмауэра, запрещающих новые подключения с этих IP-адресов в течение настраиваемого периода времени.

2 Настройка

2.1 Общие настройки

2.2 Время блокирования

  • Создайте файл локальной конфигурации:
    touch /etc/fail2ban/jail.d/50-default.conf
    
  • В файле /etc/fail2ban/jail.d/50-default.conf задайте время блокирования хостов:
    [DEFAULT]
    bantime = 360000
    

2.3 Игнорирование избранных ip-адресов

  • Добавим игнорирование избранных ip-адресов в файле /etc/fail2ban/jail.d/50-default.conf:
    # "ignoreself" specifies whether the local resp. own IP addresses should be ignored
    # (default is true). Fail2ban will not ban a host which matches such addresses.
    ignoreself = true
    
    # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
    # will not ban a host which matches an address in this list. Several addresses
    # can be defined using space (and/or comma) separator.
    ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8
    
  • Диапазон 10.0.0.0/8 добавлен для примера.

2.4 Защита ssh

  • Создадим файл для локальной конфигурации ssh:
    touch /etc/fail2ban/jail.d/80-ssh.conf
    
  • В файле /etc/fail2ban/jail.d/80-ssh.conf активируйте защиту ssh:
    [sshd]
    enabled = true
    
    # To use more aggressive sshd modes set filter parameter "mode" in jail.local:
    # normal (default), ddos, extra or aggressive (combines all).
    # See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
    #mode   = normal
    port    = ssh
    logpath = %(sshd_log)s
    backend = %(sshd_backend)s
    
    
    [selinux-ssh]
    
    port     = ssh
    logpath  = %(auditd_log)s
    

3 Настройка для Proxmox

3.1 Время блокирования

  • Создайте файл локальной конфигурации:
    touch /etc/fail2ban/jail.d/50-default.conf
    
  • В файле /etc/fail2ban/jail.d/50-default.conf задайте время блокирования хостов:
    [DEFAULT]
    bantime = 360000
    

3.2 Игнорирование избранных ip-адресов

  • Добавим игнорирование избранных ip-адресов в файле /etc/fail2ban/jail.d/50-default.conf:
    # "ignoreself" specifies whether the local resp. own IP addresses should be ignored
    # (default is true). Fail2ban will not ban a host which matches such addresses.
    ignoreself = true
    
    # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
    # will not ban a host which matches an address in this list. Several addresses
    # can be defined using space (and/or comma) separator.
    ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8
    
  • Диапазон 10.0.0.0/8 добавлен для примера.

3.3 Защита ssh

  • Создадим файл для локальной конфигурации ssh:
    touch /etc/fail2ban/jail.d/80-ssh.conf
    
  • В файле /etc/fail2ban/jail.d/80-ssh.conf активируйте защиту ssh:
    [sshd]
    enabled = true
    backend = systemd
    
  • Удалите файл /etc/fail2ban/jail.d/defaults-debian.conf.

3.4 Защита proxmox web-интерфейс

  • Создадим файл для локальной конфигурации proxmox:
    touch /etc/fail2ban/jail.d/80-proxmox.conf
    
  • В файле /etc/fail2ban/jail.d/80-proxmox.conf активируйте защиту web-интерфейса:
    [proxmox]
    enabled = true
    port = https,http,8006
    filter = proxmox
    backend = systemd
    maxretry = 3
    findtime = 2d
    bantime = 1h
    
  • Создайте файл фильтра:
    touch /etc/fail2ban/filter.d/proxmox.conf
    
  • Настройте фильтр в файле /etc/fail2ban/filter.d/proxmox.conf:
    [Definition]
    failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
    ignoreregex =
    journalmatch = _SYSTEMD_UNIT=pvedaemon.service
    

4 Основные операции

4.1 Удалить все записи из списков блокировки

  • Для удаления всех записей из списков блокировки выполните скрипт:
    #!/bin/bash
    
    for JAIL in $(fail2ban-client status | grep 'Jail list:' | awk 'BEGIN {FS="\t"} {print $2}' | sed 's/, / /g')
    do
      for IP in $(fail2ban-client status ${JAIL} | grep 'Banned IP list:' | awk 'BEGIN {FS="\t"} {print $2}' | sed 's/ /\n/g')
      do
        fail2ban-client set ${JAIL} unbanip ${IP}
      done
    done
    
    unset JAIL IP
    
    exit 0
    

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие