Difference between revisions of "Fail2ban (Русский)"

From ArchWiki
Jump to navigation Jump to search
(sync)
(sync)
 
(13 intermediate revisions by 3 users not shown)
Line 4: Line 4:
 
[[en:Fail2ban]]
 
[[en:Fail2ban]]
 
[[ja:Fail2ban]]
 
[[ja:Fail2ban]]
{{TranslationStatus (Русский)|Fail2ban|6 июня 2019|574713}}
+
{{TranslationStatus (Русский)|Fail2ban|2 февраля 2020|595700}}
  
[https://www.fail2ban.org/wiki/index.php/Main_Page Fail2ban] сканирует лог-файлы (например, {{ic|/var/log/httpd/error_log}}) и блокирует IP-адреса, которые ведут себя слишком подозрительно, к примеру, делая слишком много попыток входа с неверным паролем, пытаясь найти уязвимости и т.д. Обычно Fail2ban используется для обновления правил [[Category:Firewalls (Русский)|межсетевого экрана]] с целью блокировки IP-адресов на определённое время, но также можно настроить и другие действия, например, отправку письма по электронной почте.
+
[https://www.fail2ban.org/wiki/index.php/Main_Page Fail2ban] сканирует лог-файлы (например, {{ic|/var/log/httpd/error_log}}) и блокирует IP-адреса, которые ведут себя подозрительно, к примеру, делая слишком много попыток входа с неверным паролем в попытках найти уязвимости и т.п. Обычно Fail2ban используется для обновления правил [[Category:Firewalls (Русский)|межсетевого экрана]] с целью блокировки IP-адресов на определённое время, но можно настроить и другие действия например, отправку письма по электронной почте.
  
{{Warning (Русский)|Использование блокировки по IP защитит только от тривиальных атак, но для работы потребуется дополнительный демон и правильно настроенное журналирование. К тому же, если злоумышленники знают ваш IP-адрес, они могут послать пакеты с подменёнными заголовками отправителя и лишить вас доступа к серверу. Не забудьте прописать собственные IP-адреса в {{ic|ignoreip}}.}}
+
{{Warning (Русский)|Использование блокировки по IP защитит только от простейших атак, но для работы потребуется дополнительный демон и правильно настроенное журналирование. К тому же злоумышленники, знающие ваш IP-адрес, могут послать пакеты с подменёнными заголовками отправителя и лишить вас доступа к серверу. Не забудьте прописать собственные IP-адреса в {{ic|ignoreip}}.}}
  
 
== Установка ==
 
== Установка ==
Line 20: Line 20:
 
=== fail2ban-client ===
 
=== fail2ban-client ===
  
Утилита fail2ban-client позволяет мониторить "тюрьмы" (jails) (reload, restart, status и т.д.). Введите следующую команду, чтобы увидеть список всех доступных команд:
+
Утилита fail2ban-client позволяет мониторить "клетки" (jails) (reload, restart, status и т.д.). Чтобы увидеть список всех доступных команд, введите:
  
 
  $ fail2ban-client
 
  $ fail2ban-client
  
Просмотр включённых "тюрем" (jails):
+
Просмотр включённых "клеток" (jails):
  
 
  # fail2ban-client status
 
  # fail2ban-client status
  
Проверка статуса "тюрьмы", например для ''sshd'':
+
Проверка статуса "клетки" на примере таковой для ''sshd'':
  
 
{{hc|# fail2ban-client status sshd|<nowiki>
 
{{hc|# fail2ban-client status sshd|<nowiki>
Line 55: Line 55:
 
[[Перезапустите]] службу {{ic|fail2ban.service}} для применения изменений.
 
[[Перезапустите]] службу {{ic|fail2ban.service}} для применения изменений.
  
=== Включение "тюрем" ===
+
=== Включение "клеток" ===
  
По умолчанию все "тюрьмы" (jails) отключены. [[Добавьте]] строку {{ic|1=enabled = true}} к конфигурации той "тюрьмы", которую необходимо включить. Например, включение "тюрьмы" [[OpenSSH (Русский)]] выглядит следующим образом:
+
По умолчанию все "клетки" отключены. [[Добавьте]] строку {{ic|1=enabled = true}} к конфигурации той "клетки", которую необходимо включить. Например, включение "клетки" [[OpenSSH (Русский)]] выглядит следующим образом:
  
 
{{hc|/etc/fail2ban/jail.local|2=
 
{{hc|/etc/fail2ban/jail.local|2=
Line 64: Line 64:
 
}}
 
}}
  
См. [[#Пользовательская "тюрьма" SSH]].
+
См. [[#Пользовательская "клетка" SSH]].
  
=== Получение уведомлений по почте ===
+
=== Почтовые уведомления ===
  
Если вы хотите получать электронные письма при блокировке IP-адресов, необходимо настроить SMTP-клиент (например, [[msmtp]]) и изменить действие по умолчанию, как указано ниже.
+
Для получения электронных писем при блокировке IP-адресов следует настроить SMTP-клиент (например, [[msmtp]]) и изменить действие по умолчанию:
  
 
{{hc|/etc/fail2ban/jail.local|<nowiki>
 
{{hc|/etc/fail2ban/jail.local|<nowiki>
Line 78: Line 78:
 
action = %(action_mw)s
 
action = %(action_mw)s
  
# то же, что и action_mw, но также включает в себя связанные строки из лога
+
# то же, что и action_mw, но включает в себя ещё и связанные строки из лога
 
#action = %(action_mwl)s
 
#action = %(action_mwl)s
 
</nowiki>}}
 
</nowiki>}}
Line 84: Line 84:
 
=== Межсетевой экран и службы ===
 
=== Межсетевой экран и службы ===
  
Большинство [[Category:Firewalls (Русский)|межсетевых экранов]] и служб должны работать по умолчанию. См. содержимое директории {{ic|/etc/fail2ban/action.d/}} для получения примеров, например, [https://github.com/fail2ban/fail2ban/blob/master/config/action.d/ufw.conf ufw.conf].
+
По умолчанию Fail2ban использует [[iptables (Русский)|iptables]]. Однако, настройка большинства [[Category:Firewalls (Русский)|межсетевых экранов]] и служб не представляет трудности. Пример использования [[nftables (Русский)|nftables]]:
 +
 
 +
{{hc|/etc/fail2ban/jail.local|<nowiki>
 +
[DEFAULT]
 +
banaction = nftables
 +
</nowiki>}}
 +
 
 +
См. содержимое директории {{ic|/etc/fail2ban/action.d/}} для получения других примеров, например, [https://github.com/fail2ban/fail2ban/blob/master/config/action.d/ufw.conf ufw.conf].
  
 
== Советы и рекомендации ==
 
== Советы и рекомендации ==
  
=== Пользовательская "тюрьма" SSH ===
+
=== Пользовательская "клетка" SSH ===
  
{{Warning (Русский)|Если злоумышленник знает ваш IP-адрес, он может послать пакеты с подменёнными заголовками отправителя и тем самым лишить вас доступа к серверу. [[Ключи SSH]] предоставляют отличное решение проблемы брутфорса без этих проблем.}}
+
{{Warning (Русский)|Зная ваш IP-адрес, злоумышленник может послать пакеты с подменёнными заголовками отправителя, тем самым лишив вас доступа к серверу. [[Ключи SSH]] предоставляют отличное решение проблемы брутфорса без подобных последствий.}}
  
 
Отредактируйте файл {{ic|/etc/fail2ban/jail.d/sshd.local}}, добавив эту секцию и обновив список доверенных IP-адресов в {{ic|ignoreip}}:
 
Отредактируйте файл {{ic|/etc/fail2ban/jail.d/sshd.local}}, добавив эту секцию и обновив список доверенных IP-адресов в {{ic|ignoreip}}:
Line 112: Line 119:
  
 
{{Tip (Русский)|
 
{{Tip (Русский)|
* При использовании фронтендов [[iptables (Русский)]], например, [[ufw]], можно использовать {{ic|1=banaction = ufw}} вместо iptables.
+
* При использовании фронтендов [[iptables (Русский)|iptables]], например, [[ufw]], можно использовать {{ic|1=banaction = ufw}} вместо iptables.
 
* При использовании [[Shorewall]] можно прописать {{ic|1=banaction = shorewall}} и также задать значение {{ic|ALL}} параметру {{ic|BLACKLIST}} в файле {{ic|/etc/shorewall/shorewall.conf}}. В противном случае, правила, добавленные для блокировки IP-адреса, будут влиять только на новые соединения.
 
* При использовании [[Shorewall]] можно прописать {{ic|1=banaction = shorewall}} и также задать значение {{ic|ALL}} параметру {{ic|BLACKLIST}} в файле {{ic|/etc/shorewall/shorewall.conf}}. В противном случае, правила, добавленные для блокировки IP-адреса, будут влиять только на новые соединения.
 
}}
 
}}
Line 118: Line 125:
 
=== Защита службы ===
 
=== Защита службы ===
  
На данный момент Fail2ban должен запускаться от имени ''суперпользователя'', следовательно, можно дополнительно защитить службу с помощью [[systemd (Русский)]].
+
Поскольку Fail2ban следует запускать от имени ''суперпользователя'', дополнительно защитить службу можно с помощью [[systemd (Русский)]].
  
 
[[Создайте]] конфигурационный [[drop-in файл]] для службы {{ic|fail2ban.service}}:
 
[[Создайте]] конфигурационный [[drop-in файл]] для службы {{ic|fail2ban.service}}:
Line 136: Line 143:
 
}}
 
}}
  
Параметр {{ic|CAP_DAC_READ_SEARCH}} (в строке {{ic|CapabilityBoundingSet}}) позволяет Fail2ban читать любую директорию и файл, а {{ic|CAP_NET_ADMIN}} и {{ic|CAP_NET_RAW}} позволяют задавать правила межсетевого экрана с помощью [[iptables (Русский)]]. См. {{man|7|capabilities}} для получения более подробной информации.
+
Параметр {{ic|CAP_DAC_READ_SEARCH}} (в строке {{ic|CapabilityBoundingSet}}) позволяет Fail2ban читать любые файлы и каталоги, а {{ic|CAP_NET_ADMIN}} и {{ic|CAP_NET_RAW}} позволяют задавать правила межсетевого экрана посредством [[iptables (Русский)|iptables]] или [[nftables (Русский)|nftables]]. Подробнее см. {{man|7|capabilities}}.
  
При использовании параметра {{ic|1=ProtectSystem=strict}} иерархия [[File systems (Русский)|файловой системы]] будет доступна только для чтения, а {{ic|ReadWritePaths}} позволит Fail2ban также и записывать в необходимых директориях.
+
При использовании параметра {{ic|1=ProtectSystem=strict}} иерархия [[File systems (Русский)|файловой системы]] будет доступна только для чтения, а {{ic|ReadWritePaths}} позволит Fail2ban также вести запись в заданные каталоги.
  
Создайте файл {{ic|/etc/fail2ban/fail2ban.local}} с корректным путём {{ic|logtarget}}:
+
От имени суперпользователя создайте каталог {{ic|/var/log/fail2ban}} и пропишите в файл {{ic|/etc/fail2ban/fail2ban.local}} корректный путь {{ic|logtarget}}:
 
{{hc|/etc/fail2ban/fail2ban.local|<nowiki>
 
{{hc|/etc/fail2ban/fail2ban.local|<nowiki>
 
[Definition]
 
[Definition]
Line 146: Line 153:
 
</nowiki>}}
 
</nowiki>}}
  
Также создайте директорию {{ic|/var/log/fail2ban}} от имени суперпользователя.
+
Для применения изменений в файлах юнитов [[Systemd (Русский)#Использование юнитов|перезагрузите демон systemd]] и [[перезапустите]] службу {{ic|fail2ban.service}}.
 
 
После чего [[перезагрузите systemd]], чтобы применить изменения файлов юнитов, и [[перезапустите]] службу {{ic|fail2ban.service}}.
 
  
 
== Смотрите также ==
 
== Смотрите также ==

Latest revision as of 11:43, 2 February 2020

Состояние перевода: На этой странице представлен перевод статьи Fail2ban. Дата последней синхронизации: 2 февраля 2020. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Fail2ban сканирует лог-файлы (например, /var/log/httpd/error_log) и блокирует IP-адреса, которые ведут себя подозрительно, к примеру, делая слишком много попыток входа с неверным паролем в попытках найти уязвимости и т.п. Обычно Fail2ban используется для обновления правил с целью блокировки IP-адресов на определённое время, но можно настроить и другие действия — например, отправку письма по электронной почте.

Важно: Использование блокировки по IP защитит только от простейших атак, но для работы потребуется дополнительный демон и правильно настроенное журналирование. К тому же злоумышленники, знающие ваш IP-адрес, могут послать пакеты с подменёнными заголовками отправителя и лишить вас доступа к серверу. Не забудьте прописать собственные IP-адреса в ignoreip.

Установка

Установите пакет fail2ban.

Использование

Настройте Fail2ban, после чего включите и запустите службу fail2ban.service.

fail2ban-client

Утилита fail2ban-client позволяет мониторить "клетки" (jails) (reload, restart, status и т.д.). Чтобы увидеть список всех доступных команд, введите:

$ fail2ban-client

Просмотр включённых "клеток" (jails):

# fail2ban-client status

Проверка статуса "клетки" на примере таковой для sshd:

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     9
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   0.0.0.0

Настройка

Рекомендуется создать файл /etc/fail2ban/jail.local, так как /etc/fail2ban/jail.conf может быть перезаписан во время обновления системы. К примеру, задать время блокировки в 1 день можно следующим образом:

/etc/fail2ban/jail.local
[DEFAULT]
bantime = 1d

Также можно создавать отдельные файлы name.local в каталоге /etc/fail2ban/jail.d, например, /etc/fail2ban/jail.d/sshd.local.

Перезапустите службу fail2ban.service для применения изменений.

Включение "клеток"

По умолчанию все "клетки" отключены. Добавьте строку enabled = true к конфигурации той "клетки", которую необходимо включить. Например, включение "клетки" OpenSSH (Русский) выглядит следующим образом:

/etc/fail2ban/jail.local
[sshd]
enabled = true

См. #Пользовательская "клетка" SSH.

Почтовые уведомления

Для получения электронных писем при блокировке IP-адресов следует настроить SMTP-клиент (например, msmtp) и изменить действие по умолчанию:

/etc/fail2ban/jail.local
[DEFAULT]
destemail = вашеимя@example.com
sender = вашеимя@example.com

# для блокировки и отправки электронного письма на destemail с whois-отчётом
action = %(action_mw)s

# то же, что и action_mw, но включает в себя ещё и связанные строки из лога
#action = %(action_mwl)s

Межсетевой экран и службы

По умолчанию Fail2ban использует iptables. Однако, настройка большинства и служб не представляет трудности. Пример использования nftables:

/etc/fail2ban/jail.local
[DEFAULT]
banaction = nftables

См. содержимое директории /etc/fail2ban/action.d/ для получения других примеров, например, ufw.conf.

Советы и рекомендации

Пользовательская "клетка" SSH

Важно: Зная ваш IP-адрес, злоумышленник может послать пакеты с подменёнными заголовками отправителя, тем самым лишив вас доступа к серверу. Ключи SSH предоставляют отличное решение проблемы брутфорса без подобных последствий.

Отредактируйте файл /etc/fail2ban/jail.d/sshd.local, добавив эту секцию и обновив список доверенных IP-адресов в ignoreip:

/etc/fail2ban/jail.d/sshd.local
[sshd]
enabled   = true
filter    = sshd
banaction = iptables
backend   = systemd
maxretry  = 5
findtime  = 1d
bantime   = 2w
ignoreip  = 127.0.0.1/8
Примечание:
  • Может понадобиться задать LogLevel VERBOSE в файле /etc/ssh/sshd_config, чтобы разрешить Fail2ban полноценный мониторинг. В противном случае, ошибки ввода пароля могут быть неправильно зарегистрированы.
  • Fail2ban поддерживает IPv6 с версии 0.10. Настройте межсетевой экран соответственно, например, запустите и включите службу ip6tables.service.
Совет:
  • При использовании фронтендов iptables, например, ufw, можно использовать banaction = ufw вместо iptables.
  • При использовании Shorewall можно прописать banaction = shorewall и также задать значение ALL параметру BLACKLIST в файле /etc/shorewall/shorewall.conf. В противном случае, правила, добавленные для блокировки IP-адреса, будут влиять только на новые соединения.

Защита службы

Поскольку Fail2ban следует запускать от имени суперпользователя, дополнительно защитить службу можно с помощью systemd (Русский).

Создайте конфигурационный drop-in файл для службы fail2ban.service:

/etc/systemd/system/fail2ban.service.d/override.conf
[Service]
PrivateDevices=yes
PrivateTmp=yes
ProtectHome=read-only
ProtectSystem=strict
NoNewPrivileges=yes
ReadWritePaths=-/var/run/fail2ban
ReadWritePaths=-/var/lib/fail2ban
ReadWritePaths=-/var/log/fail2ban
ReadWritePaths=-/var/spool/postfix/maildrop
CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW

Параметр CAP_DAC_READ_SEARCH (в строке CapabilityBoundingSet) позволяет Fail2ban читать любые файлы и каталоги, а CAP_NET_ADMIN и CAP_NET_RAW позволяют задавать правила межсетевого экрана посредством iptables или nftables. Подробнее см. capabilities(7).

При использовании параметра ProtectSystem=strict иерархия файловой системы будет доступна только для чтения, а ReadWritePaths позволит Fail2ban также вести запись в заданные каталоги.

От имени суперпользователя создайте каталог /var/log/fail2ban и пропишите в файл /etc/fail2ban/fail2ban.local корректный путь logtarget:

/etc/fail2ban/fail2ban.local
[Definition]
logtarget = /var/log/fail2ban/fail2ban.log

Для применения изменений в файлах юнитов перезагрузите демон systemd и перезапустите службу fail2ban.service.

Смотрите также