fail2ban - защита сервера от DDoS и брутфорса

Начало
 
Защита одиночного хоста или локальной сети, подключённых к Интернет, от внешних опасностей и угроз обычно не ограничивается каким-то одним программным и/или аппаратным средством. Для обеспечения надёжной защиты применяются комплексы, состоящие из отдельных программных средств. Такой способ является более гибким и позволяет варьировать степень и уровень защищёности.
 
Защита одиночного хоста или локальной сети, подключённых к Интернет, от внешних опасностей и угроз обычно не ограничивается каким-то одним программным и/или аппаратным средством. Для обеспечения надёжной защиты применяются комплексы, состоящие из отдельных программных средств. Такой способ является более гибким и позволяет варьировать степень и уровень защищёности.
 
Одним из программных средств, которое может быть включено в упомянутый выше защитный комплекс, является Fail2ban - программный пакет, предназначенный для обнаружения и предотвращения попыток вторжения в систему, подключённую к сети. Для работы Fail2ban необходим установленный и активизированный сетевой экран - firewall (в Linux-системах - это iptables) или, по крайней мере, подсистема отслеживания и управления сетевыми пакетами (в Linux-системах, например, TCP Wrapper).
 
Для чего нужен Fail2ban ?
 
Основной задачей Fail2ban является обнаружение и блокирование отдельных IP-адресов, с которых производятся попытки несанкционированного проникновения в защищаемую систему. Такие "враждебные" IP-адреса определяются по результатам наблюдения за файлами журналов - log-файлами (например, /var/log/secure, /var/log/faillog и т.д.). Если с какого-либо IP-адреса выполняется слишком много попыток зарегистрироваться в защищаемой системе или производятся какие-либо другие подозрительные действия, то хост с этим IP-адресом блокируется на некоторый интервал времени, определённый системным администратором, т.е. ни один пакет, посланный с такого заблокированного хоста, не будет принят. Такая блокировка выполняется посредством изменения правил (rules) сетевого экрана (iptables).
 
Одним из программных средств, которое может быть включено в упомянутый выше защитный комплекс, является Fail2ban - программный пакет, предназначенный для обнаружения и предотвращения попыток вторжения в систему, подключённую к сети. Для работы Fail2ban необходим установленный и активизированный сетевой экран - firewall (в Linux-системах - это iptables) или, по крайней мере, подсистема отслеживания и управления сетевыми пакетами (в Linux-системах, например, TCP Wrapper).
 
Описанная выше функциональная схема позволяет защищаться от так называемых "brute force" атак, т.е. от многочисленных попыток войти в систему с различными вариантами паролей. Атаки такого рода достаточно часто практикуются сетевыми взломщиками.
 
Загрузка Fail2ban
 
Существуют готовые к установке бинарные пакеты для наиболее широко распространённых дистрибутивов, таких как Debian, Ubuntu, SuSE, Fedora, Gentoo, Arch, поэтому можно воспользоваться соответствующим менеджером пакетов для установки Fail2ban.
 
Дополнительную информацию об установочных пакетах можно получить на авторском сайте http://www.fail2ban.org.
 
Fail2ban написан на языке программирования Python, поэтому для работы требует установленной подсистемы интерпретации и поддержки этого языка.
 
Рекомендуется, но не является обязательным требованием, наличие в системе следующего программного обеспечения: сетевой экран (поддерживается iptables или shorewall), tcp-wrappers, команда обмена сообщениями электронной почты mail, система отслеживания изменений в файлах на основе inotify (поддерживается монитор Gamin).
 
 
fail2ban.conf 
 
[Definition] 
 
loglevel = 3 # уровень детализации логов (1-4) 
logtarget = /var/log/fail2ban.log # лог-файл
socket = /var/run/fail2ban/fail2ban.sock # сокет демона
 
jail.conf 
 
[DEFAULT] 
 
ignoreip = 127.0.0.1 212.26.248.138 # Игнорируемые адреса - эти адреса не будут забанены никогда
bantime = 600 # Время бана в секундах
maxretry = 3 # Число разрешенных попыток по умолчанию
 
backend = polling # Способ слежения за изменением логов. 
 # В большинстве случаев нас устроит дефолтное значение polling (допустимы также gamin и auto). 
 # С методом gamin в Debian существуют некоторые проблемы. 
 
destemail = user@test.ru # e-mail для отчетов о банах
banaction = iptables-multiport # С помощю чего блокируем
protocol = tcp # Протокол
 
# Действие - забанить и выслать whois информацию о брутфорсере на указанный выше e-mail 
action = iptables[name=%(__name__)s, port=%(port)s] 
 mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s] 
 
# Далее идут настройки для каждого из сервисов
 
[ssh] 
 
enabled = true # разрешен
port = ssh # можно указывать числовое значение (в данном случае - 22) 
filter = sshd # название фильтра (см. директорию /etc/fail2ban/filter.d) 
logpath = /var/log/auth.log # к какому лог-файлу применить фильтр
maxretry = 5 # разрешенное число неудачных попыток
 
по умалчанию включен фильтр для сшела все остальное отключео.... вкючается именением значения  true