Защита от брутфорс атак
Материал из Bryansk Linux Users Group.
Содержание |
Брутфорс атаки
Брутфорс атаки являются самым простым, но по сей день эффективным способом взлома компьютерных систем. Эффективность брутфорс атаки напрямую зависит от ленивости и безответственности как администраторов, так и пользователей компьютерных систем. Атака брутфорсом заключается в подборе паролей путем перебора по словарю или методом прямого перебора.
Методы борьбы
Чаще всего борьба с брутфорсом заключается в запрещении досутпа атакующего к интересующему его порту. Запрещение устанавливается файрволом. Для этих целей применяются как различные виды скриптов, анализирующих лога аутентификации, так и средства самого файрвола. Рассмотрим оба способа. В качестве скрипта будем рассматривать fail2ban - очень интересный проект, позволяющий защищаться от брутфорсов большого числа сервисов (ssh, apache, vsftpd, proftpd, postfix, sasl). Примеры приведены для OC Debian GNU/Linux 4.0 Etch, но могут быть применены и на других дистрибутивах Linux с небольшими изменениями.
Fail2ban
Устанавливаем:
# apt-get install fail2ban
Конфигурационные файлы программы fail2ban находятся в директории /etc/fail2ban. Здесь Вы можете найти конфигурации демона, правил, действий. Более всего нас интересуют файлы fail2ban.conf (конфигурация демона) и jail.conf, в котором располагаются настройки для защищаемых сервисов.
/etc/fail2ban/fail2ban.conf
Конфиг очень корокий и простой, менять тут вобщем нечего, кроме уровня детализации логов
[Definition] loglevel = 3 # уровень детализации логов (1-4) logtarget = /var/log/fail2ban.log # лог-файл socket = /tmp/fail2ban.sock # сокет демона
/etc/fail2ban/jail.conf
Этот конфигурационный файл придется немного больше изменить
[DEFAULT]
ignoreip = 127.0.0.1 217.65.0.119 # Игнорируемые адреса - эти адреса не будут забанены никогда
bantime = 600 # Время бана в секундах
maxretry = 3 # Число разрешенных попыток по умолчанию
backend = polling # Способ слежения за изменением логов.
# В большинстве случаев нас устроит дефолтное значение polling (допустимы также gamin и auto).
# С методом gamin в Debian существуют некоторые проблемы.
destemail = user@test.ru # e-mail для отчетов о банах
# Действие - забанить и выслать 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 # разрешенное число неудачных попыток
#
# HTTP servers
#
[apache]
enabled = false
port = http
filter = apache-auth
logpath = /var/log/apache*/*access.log
maxretry = 6
[apache-noscript]
enabled = false
port = http
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6
#
# FTP servers
#
[vsftpd]
enabled = false
port = ftp
filter = vsftpd
logpath = /var/log/auth.log
maxretry = 6
[proftpd]
enabled = false
port = ftp
filter = proftpd
logpath = /var/log/proftpd/proftpd.log
maxretry = 6
[wuftpd]
enabled = false
port = ftp
filter = wuftpd
logpath = /var/log/auth.log
maxretry = 6
#
# Mail servers
#
[postfix]
enabled = false
port = smtp
filter = postfix
logpath = /var/log/postfix.log
[couriersmtp]
enabled = false
port = smtp
filter = couriersmtp
logpath = /var/log/mail.log
[sasl]
enabled = false
port = smtp
filter = sasl
logpath = /var/log/mail.log
# Список сервисов можно расширить самому (изучайте регулярные выражения!)
С конфигурацией закончили, теперь запускаем сервис:
invoke-rc.d fail2ban start
Файрвол
Рассмотрим защиту SSH порта от брутфорса методами файрвола iptables. В этом нам поможет расширение recent. Для примера добавим три следующих правила:
# iptables -t filter -A INPUT -p tcp --destination-port 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
В этом правиле мы устанавливаем метку на SSH пакеты
# iptables -t filter -A INPUT -p tcp --destination-port 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_BRUTFORCE: " # iptables -t filter -A INPUT -p tcp --destination-port 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
Этими двумя правилами устанавливаем запись в системный лог попыток брутфорса, а также блокируем брутфорсера. Параметр --seconds устанавливает время в секундах, в течении которых проводится наблюдение за доступом к порту, параметр --hitcount устанавливает число разрешенных попыток.
При применении этих правил будет следующий эффект: нельзя в течении одной минуты подключиться на порт SSH более 4х раз. Защита очень простая и эффективная, хотя и не такая гибкая, как fail2ban.
Выбор за Вами! Также Вы можете комбинировать эти два способа для большей эффективности.
☺ 16:26, 11 июля 2007 (MSD)

