Главная
Главная Руководства FreeBSD › fail2ban на FreeBSD



Автор:

Статья опубликована: 2016-04-10 12:52:17
Последние правки: 2018-10-24 21:48:04

fail2ban - программа для защиты от подбора паролей для ssh, asterisk и множества других сервисов. Настраиваем работу fail2ban в FreeBSD в связке с ipfw (по умолчанию fail2ban настроен на iptables).

  • Исходные данные
    # uname -sr
    FreeBSD 10.3-RELEASE
    # pkg info | grep fail2ban
    py27-fail2ban-0.9.4            Scans log files and bans IP that makes too many password failures
    

  • ipfw
    Таблица 1 у меня используется для разрешений, таблица 2 - для персонального вечного бана, поэтому для нарушителей, отловленных fail2ban, будем использовать отдельную таблицу с номером 3. Добавляем запрещающее правило в файл с правилами ipfw.
    /sbin/ipfw -q add deny log all from table\(3\) to me
    /sbin/ipfw -q add deny log all from me to table\(3\)
    
    Перезапускаем ipfw
    # /etc/rc.d/ipfw restart
    

  • Установка
    # /usr/ports/security/py-fail2ban
    # make install clean
    

  • Настройка

    /etc/rc.conf
    fail2ban_enable="YES"
    
    /usr/local/etc/rc.d/fail2ban/fail2ban.conf
    в этом файле менять особо нечего, если только dbpurgeage - период, после истечения которого, ip-адрес нарушителя удаляется из базы fail2ban.

    /usr/local/etc/rc.d/fail2ban/jail.conf - файл настроек бана, делаем из на его основе рабочий (иначе при обновлении порта все ваши настройки затрутся):
    # cd /usr/local/etc/rc.d/fail2ban
    # cp jail.conf jail.local
    
    Дальше работаем с /usr/local/etc/rc.d/fail2ban/jail.local:
    [DEFAULT]
    # белый список ip (через пробел)
    ignoreip = 127.0.0.1/8 192.168.1.1
    
    ПО УМОЛЧАНИЮ ВСЕ JAILS ВНУТРИ ЭТОГО ФАЙЛА ОТКЛЮЧЕНЫ, поэтому нужные jails необходимо настроить вручную.
    Для включения jail обязательно добавляем
    enabled  = true
    
    для бана через ipfw меняем action на
    action   = bsd-ipfw[table=3, tablearg=JAILNAME]
    
    Настраиваем блокировку подбора пароля, например для ssh
    [sshd]
    enabled  = true
    port     = ssh
    logpath  = %(sshd_log)s
    backend  = %(sshd_backend)s
    action   = bsd-ipfw[table=3, tablearg=22]
    # ищем в логе три неудачных попытки, после чего баним
    maxretry = 3
    # бан в секундах, 10800 - 3 часа, если не задавать, то
    # используется bantime из [DEFAULT]
    # вместо 10800 можно использовать 180m
    bantime  = 10800
    

  • Запускаем
    # /usr/local/etc/rc.d/fail2ban start
    

  • Проверка
    fail2ban, проверяем, например jail asterisk (настройки [asterisk] сделаны по аналогии с [sshd])
    # fail2ban-client status asterisk
    Status for the jail: asterisk
    |- Filter
    |  |- Currently failed: 0
    |  |- Total failed:     0
    |  `- File list:        /var/log/asterisk/messages
    `- Actions
       |- Currently banned: 1
       |- Total banned:     1
       `- Banned IP list:   142.54.161.10
    
    ipfw
    # ipfw table 3 list
    142.54.161.10/32 0
    

  • Как разбанить ip
    Пожалуй, самая главная команда:
    # fail2ban-client set <JAIL> unbanip <IP>