В представленном примере описан алгоритм защиты серверов RAFT от атаки с перебором пароля через аутентификацию Apache c Kerberos и SSH с помощью службы FAIL2BAN.

Настройка описана для трех серверов:

  • brest1;
  • brest2 ;
  • brest3.

Для того, чтобы можно было заблокировать злоумышленников, пытающихся заблокировать доменную учетную запись для доступа к одному из серверов RAFT ПК СВ "Брест", журналы syslog-ng  и Apache должны быть настроены по следующей схеме:

FAIL2BAN это служба, отслеживающая по журналам регистрации неверные или проблемные авторизации и блокирующая IP-адреса по заданным параметрам.

Для настройки защиты серверов RAFT от атаки с перебором необходимо:

  1. Скачать и установить службу FAIL2BAN:
    sudo apt install ./fail2ban_*_all.deb
  2. Запустить службу FAIL2BAN:
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban
  3.  Запустить службу UFW:
    sudo ufw enable
  4. Дать разрешение соединениям ssh:
    sudo ufw allow ssh
  5. Разрешить исходящие запросы по умолчанию:
    sudo ufw default allow outgoing
  6. Разрешить входящие запросы по умолчанию:
    sudo ufw default allow incoming
  7. Для настройки приемника журналов через syslog-ng из основного журнала ошибок аутентификации Apache и сети UDP, необходимо добавить конфигурационный файл /etc/syslog-ng/conf.d/apache-error.conf на серверы brest1, brest2, brest3:
    source apache_log {
        file("/var/log/apache2/error.log");
        udp(
               ip(0.0.0.0)
               port(1999)
           );
    
      };
    destination apache_mirror_log {
        file("/var/log/apache_err.log");
    file("/var/log/apache_error1.log");
      };
    log {
        source(apache_log);
        destination(apache_mirror_log);
      };
    CODE
    где:
    • var/log/apache2/error.log — файл журнала Apache;
    • 1999 — номер порта UDP.
  8. Для каждого сервера brest1, brest2, brest3 создать конфигурационный файл /etc/syslog-ng/conf.d/apache-send.conf:
    1. для brest1:
      source apache_log1 {
          file("/var/log/apache-error1.log");
        };
      
      filter fil { not host("<IP-адрес_3>") and not host("<IP-адрес_2>"); };  
      destination apache_mirror_log1 {
          udp("<IP-адрес_3>"
                 port(1999)
                 );
          udp("<IP-адрес_2>"
                 port(1999)
                 );
      };
      log {
          source(apache_log1);
      
           filter(fil);  
          destination(apache_mirror_log1);
        };
      CODE
      где
      • <IP-адрес_2> — IP-адрес сервера brest2;
      • <IP-адрес_3> — IP-адрес сервера brest3.
    2. для brest2:
      source apache_log1 {
          file("/var/log/apache-error1.log");
        };
      
      filter fil { not host("<IP-адрес_1>") and not host("<IP-адрес_3>"); };  
      destination apache_mirror_log1 {
          udp("<IP-адрес_1>"
                 port(1999)
                 );
          udp("<IP-адрес_3>"
                 port(1999)
                 );
      };
      log {
          source(apache_log1);
      
           filter(fil);  
          destination(apache_mirror_log1);
        };
      CODE
      где
      • <IP-адрес_1> — IP-адрес сервера brest1;
      • <IP-адрес_3> — IP-адрес сервера brest3.
    3. для brest3
      source apache_log1 {
          file("/var/log/apache-error1.log");
        };
      
      filter fil { not host("<IP-адрес_1>") and not host("<IP-адрес_2>"); };  
      destination apache_mirror_log1 {
          udp("<IP-адрес_1>"
                 port(1999)
                 );
          udp("<IP-адрес_2>"
                 port(1999)
                 );
      };
      log {
          source(apache_log1);
      
           filter(fil);  
          destination(apache_mirror_log1);
        };
      CODE
      где
      • <IP-адрес_1> — IP-адрес сервера brest1;
      • <IP-адрес_2> — IP-адрес сервера brest2.
  9. На всех серверах RAFT перезапустить syslog-ng:
    sudo systemctl restart syslog-ng
  10. На каждом сервере brest1, brest2, brest3 создать конфигурационный файл etc/fail2ban/filter.d/apache-auth1.conf:
    [Definition]
    failregex = \[.*\] \[auth_kerb\:error\] \[pid [0-9]{1,}\] \[client <HOST>:[0-9]{2,}\] krb5_get_init_creds_password\(\) failed: Preauthentication failed\
    CODE
  11. Создать на всех серверах brest1, brest2, brest3 конфигурационный файл /etc/fail2ban/jail.d/default.conf с настройками блокирования IP-адресов, совершающих три неверные попытки аутентификации в Apache через Kerberos или SSH:
    [DEFAULT]
    maxretry = 5
    findtime = 480
    bantime = 720
    action = ufw
    ignoreip = 127.0.0.1/8
    [apache]
    enabled = true
    port = http,https
    filter = apache-auth1
    logpath = /var/log/apache_err.log
    maxretry = 3
    bantime = 3600
    findtime = 600
    action = ufw
    [ssh]
    enabled = true
    port = ssh
    filter = sshd
    action = ufw
    logpath = /var/log/auth.log
    maxretry = 2
    findtime = 600
    CODE
    где:
    • maxretry — количество действий, которые разрешено совершить до блокировки;
    • findtime — время в секундах, в течение которого учитывается параметр maxretry;
    • bantime — время, на которое будет блокироваться IP-адрес;
    • action — действие, которое будет выполняться, если FAIL2BAN обнаружит активность, соответствующую критериям поиска;
    • ignoreip — игнорировать защиту, если запросы приходят с перечисленных адресов.
  12. Настроить ротацию журналов на созданные файлы syslog-ng на всех серверах в конфигурационных файлах /etc/logrotate.d/apache1:
/var/log/apache_err {
daily
rotate 3
size 10M
compress
delaycompress
}
cat /etc/logrotate.d/apache2
/var/log/apache_error1 {
daily
rotate 3
size 10M
compress
delaycompress
}
CODE