Download PDF
Download page Защита серверов RAFT от атаки с перебором пароля.
Защита серверов RAFT от атаки с перебором пароля
В представленном примере описан алгоритм защиты серверов RAFT от атаки с перебором пароля через аутентификацию Apache c Kerberos и SSH с помощью службы FAIL2BAN. FAIL2BAN это служба, отслеживающая по журналам регистрации неверные или проблемные авторизации и блокирующая IP-адреса по заданным параметрам. Для того, чтобы можно было заблокировать злоумышленников, пытающихся заблокировать доменную учетную запись для доступа к одному из серверов RAFT ПК СВ "Брест", ротация журналов syslog-ng и Apache должна быть настроена по схеме каждый с каждым. Данная схема позволяет каждом сервере настроить приемник журналов syslog-ng, собирающий данные журналов Apache с каждого сервера. Таким образом, при некорректной попытке доступа на одном из серверов, злоумышленник будет заблокирован на всех.
Настройка описана для трех серверов:
brest1;brest2;brest3.
Ротация журналов syslog-ng и Apache для данных серверов в примере настроена по следующей схеме:

где
- APACHE ERROR LOG — журналы
Apache; - SYSLOG-NG LOG — журналы
syslog-ng.
Пример настройки серверов RAFT
Для настройки защиты серверов RAFT от атаки с перебором необходимо:
- Скачать и установить службу
FAIL2BAN:sudo apt install ./fail2ban_*_all.deb - Запустить службу
FAIL2BAN:sudo systemctl enable fail2ban
sudo systemctl start fail2ban - Запустить службу UFW:
sudo ufw enable - Дать разрешение соединениям
ssh:sudo ufw allow ssh - Разрешить исходящие запросы по умолчанию:
sudo ufw default allow outgoing - Разрешить входящие запросы по умолчанию:
sudo ufw default allow incoming - Для настройки приемника журналов через
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); };CODEvar/log/apache2/error.log— файл журналаApache;1999— номер портаUDP.
- Для каждого сервера
brest1, brest2, brest3создать конфигурационный файл/etc/syslog-ng/conf.d/apache-send.conf:- для
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.
- <IP-адрес_2> — IP-адрес сервера
- для
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.
- <IP-адрес_1> — IP-адрес сервера
- для
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.
- <IP-адрес_1> — IP-адрес сервера
- для
- На всех серверах
RAFTперезапуститьsyslog-ng:sudo systemctl restart syslog-ng - На каждом сервере
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 - Создать на всех серверах
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 = 600CODEmaxretry— количество действий, которые разрешено совершить до блокировки;findtime— время в секундах, в течение которого учитывается параметрmaxretry;bantime— время, на которое будет блокироваться IP-адрес;action— действие, которое будет выполняться, еслиFAIL2BANобнаружит активность, соответствующую критериям поиска;ignoreip— игнорировать защиту, если запросы приходят с перечисленных адресов.
- Настроить ротацию журналов на созданные файлы
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