Blog

  • Защита от брутфорса ssh, ftp, http: fail2ban

    fail2ban анализирует логи, и если встречает последовательности, определяемые регулярными выражениям, применяет правила iptables

    Ставим
    apt-get install fail2ban

    Конфигурируем
    nano /etc/fail2ban/jail.conf

    Указываем свой почтовый ящик для алертов
    destemail = root@yourdomain.tld

    Если есть необходимость, то можно в включить логирование пакетов, попавших в бан
    banaction = iptables-multiport-log

    По умолчанию, проверяется и банится только ssh
    В секциях, которые нам необходимы ставим
    enabled = true

    Например:
    [proftpd]

    enabled = true
    port = ftp,ftp-data,ftps,ftps-data
    filter = proftpd
    logpath = /var/log/proftpd/proftpd.log
    maxretry = 6

    Для VPS openvz:
    на ноде делаем следующее:

    cp /etc/fail2ban/action.d/iptables-allports.conf /etc/fail2ban/action.d/iptables-allports-vps.conf

    Копируем строки содержащие INPUT, и в скопированном INPUT меняем на FORWARD
    и меняем на vps
    также, в actionstart добавим проверку на существование записей в цепочках, чтобы начальные правила не дублировались.

    nano /etc/fail2ban/action.d/iptables-allports-vps.conf

    [Definition]
    actionstart = iptables -N fail2ban-vps
    iptables -n -L fail2ban-vps | grep RETURN || iptables -A fail2ban-vps -j RETURN
    iptables -n -L INPUT | grep fail2ban-vps || iptables -I INPUT -p <protocol> -j fail2ban-vps
    iptables -n -L FORWARD | grep fail2ban-vps || iptables -I FORWARD -p <protocol> -j fail2ban-vps

    actionstop = iptables -D INPUT -p <protocol> -j fail2ban-vps
    iptables -D FORWARD -p <protocol> -j fail2ban-vps
    iptables -F fail2ban-vps
    iptables -X fail2ban-vps

    actioncheck = iptables -n -L INPUT | grep -q fail2ban-vps
    iptables -n -L FORWARD | grep -q fail2ban-vps

    actionban = iptables -I fail2ban-vps 1 -s <ip> -j DROP
    actionunban = iptables -D fail2ban-vps -s <ip> -j DROP

    [Init]
    name = default
    protocol = tcp
    port = anyport

    nano /etc/fail2ban/jail.conf

    bantime = 3600
    maxretry = 10
    banaction = iptables-allports-vps
    port = anyport

    [ssh-local]

    enabled = true
    port = ssh
    filter = sshd
    logpath = /var/log/auth.log

    [1001-ssh]
    enabled = true
    filter = sshd
    logpath = /vz/private/1001/var/log/auth.log

    [1001-proftpd]
    enabled = true
    filter = proftpd
    logpath = /vz/private/1001/var/log/proftpd/proftpd.log

    [1002-ssh]
    enabled = true
    filter = sshd
    logpath = /vz/private/1002/var/log/auth.log

    [1002-proftpd]
    enabled = true
    filter = proftpd
    logpath = /vz/private/1002/var/log/proftpd/proftpd.log

    [1003-ssh]
    enabled = true
    filter = sshd
    logpath = /vz/private/1003/var/log/auth.log

    Теперь, при попытке перебора паролей на SSH или FTP, кулхацкеру будет закрыт TCP на все VPSы и ноду. Можно еще и UDP добавить, но в моем случае, в этом не было необходимости.

    для проверки, реагиреут ли fail2ban на записи в логах можно воспользоваться утитлтой fail2ban-regex:

    fail2ban-regex \”line\” \”failregex\”
    fail2ban-regex /var/log/auth.log \”Failed [-/\\w]+ for .* from \”
    fail2ban-regex /vz/private/1002/var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

    Проверить конфигурацию
    fail2ban-client -d

    http://adminletters.blogspot.com/2009/07/ssh-ftp-http-fail2ban.html