Pull to refresh

Ограничение попыток входа в ssh с помощью fail2ban (средство от ботов подбирающих пароли через ssh)

Reading time4 min
Views27K
image

SSH довольно безопасен, особенно если вы примете разумные меры предосторожности, такие как требование аутентификации на основе пары ключей. Тем не менее, в дикой природе по-прежнему существует множество ботов, которые пытаются найти уязвимые хосты, пытаясь войти в систему с распространенными скомпрометированными именами пользователей и паролями, такими как root / root или admin / admin. Хотя маловероятно, что они добьются успеха, они все равно будут использовать вашу пропускную способность и генерировать огромное количество журналов.

Один из способов минимизировать количество попыток входа в систему методом перебора — изменить порт по умолчанию, который прослушивает SSH. Однако это не считается хорошей практикой — во-первых, нужно помнить, что каждый раз, когда они подключаются к серверу, следует устанавливать правильный порт, отличный от порта по умолчанию. Более того, это может создать еще одну уязвимость безопасности, если выбранный порт больше 1024. Обычно только root может связываться с номерами портов ниже 1024. Однако, если для SSH используется больший номер порта, при определенных обстоятельствах пользователи без корневого доступа может заменить демон SSH другой, возможно, вредоносной службой.
Лучший способ решить возникшую проблему — использовать инструмент, который заблокирует злоумышленнику доступ к SSH-серверу. Одним из таких широко используемых инструментов является fail2ban ( www.fail2ban.org ). Анализируя журналы, fail2ban обнаруживает повторяющиеся неудачные попытки аутентификации и автоматически устанавливает правила брандмауэра для отбрасывания трафика, исходящего с IP-адреса злоумышленника.

Установка fail2ban на Ubuntu


Ручная установка

Установить fail2ban в Ubuntu (и других дистрибутивах на основе Debian) очень просто:

$ sudo apt install fail2ban

Проверяем как это работает

Вы можете проверить, запущена ли служба, с помощью следующей команды:

$ sudo systemctl status fail2ban

Вывод должен быть похож на следующий — статус службы должен быть активным:

● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-05-18 12:36:36 ***; ** min ago
       Docs: man:fail2ban(1)
    Process: 723*** ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 723*** (f2b/server)
      Tasks: 5 (limit: 38293)
     Memory: 18.0M
     CGroup: /system.slice/fail2ban.service
             └─723488 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Посмотрим, как fail2ban изменил правила iptables:

$ sudo iptables -L -n -v

Вы также должны увидеть, что в конфигурации iptables есть новая цепочка f2b-sshd, на которую ссылается правило цепочки INPUT:

Chain INPUT (policy ACCEPT 73411 packets, 6622K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1019 65297 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22


Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    8   480 REJECT     all  --  *      *       94.191.93.46         0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       77.50.75.162         0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       51.254.143.190       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       46.101.97.5          0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       43.129.28.88         0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       41.221.168.167       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       35.247.219.12        0.0.0.0/0            reject-with icmp-port-unreachable
   12   720 REJECT     all  --  *      *       220.180.119.192      0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       218.75.121.75        0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       213.87.101.176       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       192.139.15.34        0.0.0.0/0            reject-with icmp-port-unreachable
   21  1260 REJECT     all  --  *      *       187.104.145.210      0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       177.191.189.13       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.89.82.134        0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.75.140.97        0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       157.92.13.105        0.0.0.0/0            reject-with icmp-port-unreachable
   11   660 REJECT     all  --  *      *       117.80.225.245       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       106.53.121.179       0.0.0.0/0            reject-with icmp-port-unreachable
  865 56057 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0


Пакет fail2ban содержит инструмент под названием fail2ban-client. Он позволяет вам проверять статус службы и взаимодействовать с ней (например, позволяет вручную блокировать и разблокировать IP-адреса, включать и отключать тюрьмы и т. д.)

Посмотрим, какие jails активны:

$ sudo fail2ban-client status

Status
|- Number of jail:	1
`- Jail list:	sshd


Есть только один jail — sshd — которsq отвечает за мониторинг журналов SSH-сервера на предмет неудачного входа в систему и настройку правил брандмауэра для блокировки дальнейших попыток.

Теперь мы можем проверить статистику по sshd jail:

$ sudo fail2ban-client status sshd

Status for the jail: sshd
|- Filter
|  |- Currently failed:	8
|  |- Total failed:	26
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	22
   |- Total banned:	25
   `- Banned IP list:	106.53.121.179 117.80.225.245 157.92.13.105 159.75.140.97 159.89.82.134 177.191.189.13 187.104.145.210 213.87.101.176 218.75.121.75 220.180.119.192 35.247.219.12 41.221.168.167 43.129.28.88 46.101.97.5 51.254.143.190 77.50.75.162 94.191.93.46 1.55.165.141 120.53.245.68 104.131.178.145 106.56.102.83 152.32.146.21

Настройка fail2ban


В большинстве случаев конфигурации по умолчанию должно быть достаточно. Тем не менее, полезно понимать, что это за значения по умолчанию и как их можно изменить в соответствии с вашими потребностями.

В стандартной конфигурации fail2ban защитит SSH-сервер и заблокирует злоумышленника на 10 минут после 5 неудачных попыток входа в систему в течение 10 минут. Файл конфигурации по умолчанию можно найти в /etc/fail2ban/jail.conf. Файл хорошо документирован и в основном не требует пояснений. Имейте в виду, что вам не следует вносить какие-либо изменения в этот файл, так как он может быть перезаписан во время обновления fail2ban.

После изменения конфигурации не забудьте перезапустить службу:

$ sudo systemctl restart fail2ban

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

Но об этом позже расскажу в отдельной заметке, если эта будет кому то полезна и интересна.
Tags:
Hubs:
Total votes 12: ↑4 and ↓8-4
Comments40

Articles