Пост

Базовая защита от перебора паролей на виртуальном сервере

Очередную виртуалку атакуют переборщики паролей десятками и сотнями итераций. Достаточно оставить публичную машину всего на ночь, и логи пополнятся большим списком попыток авторизации под разными стандартными и не только именами пользователей на разные порты.

Убедиться в этом можно, например, полистав логи

1
less /var/log/auth.log

🔨 Сразу настраиваю на любой Linux VPS минимальный набор ограничений, чтобы отправить таких в бан или просто проигнорировать.

📌 Идем в файл /etc/ssh/sshd_config. Меняем порт SSH, отключаем вход по паролю (ключи же есть!). Можно и root вход заблокировать.

1
2
3
4
Port 2202
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin no

📌 Настраиваем firewall с помощью ufw.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# установка
apt update
apt install ufw -y

# базовые правила
ufw default deny incoming
ufw default allow outgoing

# открываем только нужные порты
ufw allow 2202/tcp # новый ssh порт
ufw allow http     # 80
ufw allow https    # 443

# отключаем ipv6
vi /etc/default/ufw
# IPV6=no

# перезапускаем
ufw disable && ufw enable

# проверяем
ufw status

📌 Настраиваем fail2ban для автоматической блокировки ip адресов после множественных неудачных попыток авторизации. Для этого создадим jail и пропишем параметры.

1
2
3
4
5
# устанавливаем утилиту
apt install python3-systemd fail2ban -y

# добавляем конфигурацию для мониторинга логов авторизации
vi /etc/fail2ban/jail.local

Указываем количество попыток, после которых наступает бан, промежуток времени, в пределах которого считаются попытки, и длительность бана.

1
2
3
4
5
6
7
8
9
10
11
12
[DEFAULT]
banaction = ufw

[sshd]
backend=systemd
enabled = true

maxretry = 4
findtime = 1h
bantime = 1d
ignoreip = 127.0.0.1
logpath  = /var/log/auth.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# перезапускаем сервис
systemctl restart fail2ban

# проверяем результаты работы
fail2ban-client status sshd

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     887
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     131
   `- Banned IP list:
Больше полезной информации в Telegram-канале