Fail2Ban — сервис блокировки хостов
Установка и запуск
Основные настройки и примеры использования
Параметры конфигурационного файла
Настройка защиты SSH
Блокировка нежелательного трафика
Настройка блокировки для Asterisk
Работа со списком заблокированных адресов
Пример работы fail2ban
Fail2Ban – это сервис для блокировки хостов, вызывающих множественные ошибки при попытках аутентификации.
Fail2Ban работает путем мониторинга файлов журналов (например, /var/log/auth.log, /var/log/apache/access.log и др.) для выбранных записей и запуска сценариев на их основе. Чаще всего это используется для блокировки выбранных IP-адресов, которые могут принадлежать хостам, пытающимся нарушить безопасность системы. Он может запретить любой IP-адрес хоста, который делает слишком много попыток входа в систему или выполняет любые другие нежелательные действия в течение периода времени, определенного администратором. Включает поддержку как IPv4, так и IPv6. Опционально более длительные запреты могут быть настроены специально для нарушителей, которые продолжают возвращаться.
Fail2Ban обычно настраивается на разблокировку заблокированного хоста в течение определенного периода времени, чтобы не «блокировать» любые подлинные соединения, которые могли быть временно неправильно сконфигурированы. Время блокировки нежелательных хостов в несколько минут, обычно является достаточным, чтобы снизить вероятность сетевой атаки или атаки подбора пароля по словарю, например, при подключении по ssh.
Стандартная конфигурация Fail2Ban поставляется с фильтрами для Apache, Lighttpd, sshd, vsftpd, qmail. Фильтры определяются регулярными выражениями Python, которые могут быть удобно настроены администратором, знакомым с регулярными выражениями. С помощью фильтров можно блокировать попытки доступа от вредоносного хоста к определенным сетевым службам.
Fail2Ban можно настроить для мониторинга любой службы, которая записывает попытки аутентификации в файл журнала. Для блокировки IP-адресов нежелательных хостов Fail2Ban использует правила iptables.
Установка и запуск Fail2Ban
Для РЕД ОС 7.2 и младше установка производится командой:
yum install fail2ban -y systemctl start fail2ban systemctl enable fail2ban
Для РЕД ОС 7.3 и старше установка производится командой:
dnf install fail2ban -y systemctl start fail2ban systemctl enable fail2ban
Основные настройки и примеры использования приложения Fail2Ban
Все конфигурационные файлы программы находятся в каталоге /etc/fail2ban. Для установки собственных настроек необходимо создать файл с таким же именем и расширением .local.
Основные параметры конфигурационного файла jail.conf
Конфигурационный файл jail.conf используется для создания ограничивающих правил для различных программ и имеет параметры, которые описаны ниже:
- action — действие, которое будет выполняться, если Fail2ban обнаружит активность, соответствующую критериям поиска;
- ignoreip — задает список IP-адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения, так что выбирайте их аккуратно. Диапазоны и IP-адреса стоит разделить пробелом. Сюда можно добавить локальный IP, а также IP-адрес, с которого вы будете подключаться сами, чтобы у вас не возникло проблем при входе;
- bantime — время в секундах, на которое клиенту будет закрыт доступ к серверу, если он не сможет авторизоваться;
- maxretry — указывает количество попыток перед тем, как доступ будет заблокирован;
- findtime — время в секундах, на протяжении которого рассчитывается maxretry.
Настройка защиты SSH
Сначала копируем содержимое jail.conf в jail.local:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
По умолчанию jail.local работает только для SSH. Примерная настройка файла jail.local для SSH:
[sshd] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/auth. log findtime = 600 maxretry = 3 bantime = 21600
Блокировка нежелательного трафика к определенному URL для NGINX
Откроем файл конфигурации:
nano /etc/fail2ban/jail.local
И добавим в конец:
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10
Настройка блокировки для Asterisk
Добавляем в конец файла jail.local:
[asterisk]
enabled = true
action = iptables-allports[name=asterisk, protocol=all]
logpath = /var/log/asterisk/messages
bantime = 86400
Работа со списком заблокированных адресов
- Получить статистику заблокированных адресов можно следующей командой:
fail2ban-client status <имя_правила>
fail2ban-client set <имя правила> unbanip
- Получить список правил можно командой:
fail2ban-client status
- После необходимо перечитать правила:
firewall-cmd --reload
- После каких либо изменений в конфигурационных файлах перезапустите faile2ban командой:
systemctl restart fail2ban
Пример работы fail2ban
Пример блокировки подключения к ssh-серверу после нескольких неудачных попыток авторизоваться. Для примера было взято правило для ssh. В примере пользователь попытался 3 раза ввести пароль для доступа к ssh-серверу, и после неудачных попыток последующие соединения с IP-адреса клиента были заблокированы.
Попытка пользователя авторизоваться на ssh-сервере:
После неудачных попыток ввода пароля, дальнейшие соединения к ssh-серверу были отказаны.
Дата последнего изменения: 31.05.2023
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
firejail — система изолированного запуска приложений
Запуск приложений без оконного менеждера
Ограничение попыток входа в ssh с помощью fail2ban (средство от ботов подбирающих пароли через ssh) / Хабр
SSH довольно безопасен, особенно если вы примете разумные меры предосторожности, такие как требование аутентификации на основе пары ключей. Тем не менее, в дикой природе по-прежнему существует множество ботов, которые пытаются найти уязвимые хосты, пытаясь войти в систему с распространенными скомпрометированными именами пользователей и паролями, такими как root / root или admin / admin.
Один из способов минимизировать количество попыток входа в систему методом перебора — изменить порт по умолчанию, который прослушивает SSH. Однако это не считается хорошей практикой — во-первых, нужно помнить, что каждый раз, когда они подключаются к серверу, следует устанавливать правильный порт, отличный от порта по умолчанию. Более того, это может создать еще одну уязвимость безопасности, если выбранный порт больше 1024. Обычно только root может связываться с номерами портов ниже 1024. Однако, если для SSH используется больший номер порта, при определенных обстоятельствах пользователи без корневого доступа может заменить демон SSH другой, возможно, вредоносной службой.
Установка 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.
Пакет 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.
Настройка fail2ban
В большинстве случаев конфигурации по умолчанию должно быть достаточно. Тем не менее, полезно понимать, что это за значения по умолчанию и как их можно изменить в соответствии с вашими потребностями.В стандартной конфигурации fail2ban защитит SSH-сервер и заблокирует злоумышленника на 10 минут после 5 неудачных попыток входа в систему в течение 10 минут. Файл конфигурации по умолчанию можно найти в /etc/fail2ban/jail.conf. Файл хорошо документирован и в основном не требует пояснений. Имейте в виду, что вам не следует вносить какие-либо изменения в этот файл, так как он может быть перезаписан во время обновления fail2ban.
После изменения конфигурации не забудьте перезапустить службу:
$ sudo systemctl restart fail2ban
Должен заметить, что в данном случае я изменил параметры конфигурации, понимая стратегию атаки и получил суточный список атакующих хостов и заблокировал его.
Но об этом позже расскажу в отдельной заметке, если эта будет кому то полезна и интересна.
Fail2ban
Из Fail2ban
Перейти к: навигация, поиск
Поскольку спамеры были слишком активны на этой вики, создание учетных записей пользователей было отключено. Пожалуйста, спросите в списках рассылки, если вам требуется новая учетная запись пользователя. Спасибо за понимание и извините за это.
Большинство объявлений и обсуждений происходит в списке рассылки и на GitHub. Пользователи G+ присоединяются к сообществу пользователей Google+ и Google+ Fail2Ban
Fail2ban сканирует файлы журналов (например, /var/log/apache/error_log) и блокирует IP-адреса, которые показывают признаки вредоносного ПО — слишком много неудачных паролей, поиск эксплойтов и т. д. Обычно Fail2Ban затем используется для обновления правил брандмауэра для отклонения IP-адресов в течение определенного периода времени, хотя любое другое действие (например, отправка электронной почты) также может быть настроено. Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, courier, ssh и т.д.). Fail2Ban может снизить частоту неправильных попыток аутентификации, однако он не может устранить риск, который представляет слабая аутентификация. Настройте службы для использования только двухфакторных или общедоступных/частных механизмов аутентификации, если вы действительно хотите защитить службы. Подробнее о Fail2ban Fail2ban ChangeLog (Список изменений) Документация README (официальный файл README) Разработчики Участники (лица, внесшие вклад в проект) | Новости Наиболее актуальный список см. в выпусках GitHub. Записи ниже могут быть устаревшими01.08.2015 0.9.3 — это большое исправление ошибок и новая функциональность. Примечания к выпуску для 0.9.3. 29.04.2015 0.9.2 — это большое исправление ошибок и новая функциональность. Примечания к выпуску для 0.9.2. 28.10.2014 0.9.1 — это большое исправление ошибок и новая функциональность. Примечания к выпуску для 0.9.1. 19.08.2014 0.8.14 — это выпуск с небольшими исправлениями ошибок, предназначенный в первую очередь для исправления совместимости с Python 2.4. Примечания к выпуску для 0.8.14. Другие новости Последние версии
|
Чтобы поэкспериментировать с этой вики, попробуйте Песочницу. Справку по использованию и настройке см. в Руководстве пользователя.
Безопасность Linux: защитите свои системы с помощью fail2ban
Опубликовано: 4 июня 2020 г. | | на Кен Хесс (выпускники Sudoer)
Изображение
Фото Flickr из Pexels
Безопасность для системных администраторов — это постоянная борьба, потому что вы должны защищать свои системы в достаточной степени, чтобы защитить их от нежелательных атак, но не настолько, чтобы это мешало производительности пользователей. Трудно поддерживать баланс. Всегда есть жалобы на «слишком высокую» безопасность, но когда система скомпрометирована, жалобы варьируются от «Недостаточно безопасности» до «Почему вы не использовали более эффективные меры безопасности?» Это настоящая борьба. Существуют элементы управления, которые вы можете внедрить, которые одновременно эффективны против атак злоумышленников и в то же время достаточно незаметны, чтобы пользователи могли работать в целом беспрепятственно. Fail2ban — это решение для защиты сервисов от грубой силы и других автоматизированных атак.
Примечание. Fail2ban можно использовать только для защиты служб, требующих аутентификации по имени пользователя и паролю. Например, вы не можете защитить ping с помощью fail2ban.
В этой статье я демонстрирую, как защитить демон SSH (SSHD) от атаки грубой силы. Вы можете настроить фильтры, как их называет fail2ban
, чтобы защитить почти все службы прослушивания в вашей системе.
Установка и первоначальная настройка
К счастью, есть готовый к установке пакет для fail2ban
, который включает все зависимости, если таковые имеются, для вашей системы.
$ sudo dnf -y install fail2ban
Включить и запустить fail2ban
.
$ sudo systemctl включить fail2ban $ sudo systemctl start fail2ban
Если у вас нет проблем с синтаксисом в вашей конфигурации fail2ban
, вы не увидите никаких стандартных выходных сообщений.
Теперь нужно настроить несколько основных вещей в fail2ban
, чтобы защитить систему, не мешая самой себе. Скопируйте /etc/fail2ban/jail.conf
файл на /etc/fail2ban/jail.local
. Нас интересует файл конфигурации jail.local
.
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Откройте /etc/fail2van/jail.local
в вашем любимом редакторе и внесите следующие изменения или проверьте эти несколько заданы параметры. Ищите настройку ignoreip
и добавляйте в эту строку все IP-адреса, которые должны иметь доступ без возможности блокировки. По умолчанию вы должны добавить петлевой адрес и все IP-адреса, локальные для защищаемой системы.
ignoreip = 127. 0.0.1/8 192.168.1.10 192.168.1.20
Вы также можете добавить целые сети IP-адресов, но это отнимет большую часть защиты, для которой вы хотите использовать fail2ban
. Держите его простым и локальным на данный момент. Сохраните файл jail.local
и перезапустите службу fail2ban
.
$ sudo systemctl restart fail2ban
Вы должны перезапускать fail2ban
каждый раз, когда вы вносите изменения в конфигурацию.
Настройка отфильтрованного сервиса
Новая установка fail2ban
на самом деле мало что вам даст. Вы должны настроить так называемые фильтры для любого сервиса, который хотите защитить. Почти каждая система Linux должна быть доступна по SSH. Есть некоторые обстоятельства, когда вы наверняка остановите и отключите SSHD, чтобы лучше защитить свою систему, но я предполагаю, что каждая система Linux разрешает подключения SSH.
Пароли, как всем известно, не являются хорошим средством защиты. Однако зачастую это стандарт, по которому мы живем. Итак, если пользовательский или административный доступ ограничен SSH, вам следует принять меры для его защиты. Использование fail2ban
«смотреть» SSHD на наличие неудачных попыток доступа с последующим баном — хорошее начало.
Примечание. Перед внедрением любого элемента управления безопасностью, который может препятствовать доступу пользователя к системе, сообщите пользователям, что этот новый элемент управления может заблокировать их доступ к системе на десять минут (или на то время, которое вы решите), если их неудачные попытки входа в систему превысят пороговое значение. параметр.
Для настройки отфильтрованных служб необходимо создать соответствующий файл «тюрьма» под /etc/fail2ban/jail.d
каталог. Для SSHD создайте новый файл с именем sshd.local
и введите в него инструкции по фильтрации сервисов.
[ссд] включено = верно порт = ssh действие = iptables-мультипорт путь к журналу = /var/журнал/безопасный максимальная попытка = 3 bantime = 600
Создайте заголовок [sshd] и введите настройку, которую вы видите выше, в качестве отправной точки. Большинство настроек говорят сами за себя. Для двух, которые могут быть интуитивно неочевидны, настройка «действие» описывает действие, которое вы хотите fail2ban
принять в случае нарушения. Для нас fail2ban
использует iptables
для блокировки IP-адреса системы-нарушителя на «бантайм» 600 секунд (10 минут).
Конечно, вы можете изменить любой из этих параметров в соответствии с вашими потребностями. Десяти минут кажется достаточно, чтобы бот или скрипт «перешли» на менее безопасные хосты. Однако десять минут — это не так много, чтобы оттолкнуть пользователей, которые ошиблись при вводе пароля более трех раз.
Если вы удовлетворены настройками, перезапустите служба fail2ban
.
Как выглядит блокировка
В защищенной системе (192.168.1.83), tail
/var/log/fail2ban.log
для просмотра текущих действий по бану.
2020-05-15 09:12:06,722 fail2ban.filter [25417]: INFO [sshd] Найдено 192. 168.1.69 - 2020-05-15 09:12:06 2020-05-15 09:12:07,018 fail2ban.filter [25417]: INFO [sshd] Found 192.168.1.69 - 2020-05-15 09:12:07 2020-05-15 09:12:07,286 fail2ban.actions [25417]: УВЕДОМЛЕНИЕ [sshd] Бан 192.168.1.69 2020-05-15 09:22:08,931 fail2ban.actions [25417]: NOTICE [sshd] Unban 192.168.1.69
Вы можете видеть, что IP-адрес 192.168.1.69 был заблокирован в 09:12 и разблокирован через десять минут в 09 :22.
В удаленной системе 192.168.1.69 действие запрета выглядит следующим образом:
$ ssh 192.168.1.83 Пароль [email protected]: Разрешение отклонено, попробуйте еще раз. Пароль [email protected]: Разрешение отклонено, попробуйте еще раз. Пароль [email protected]: Разрешение отклонено (публичный ключ, gssapi-keyex, gssapi-with-mic, пароль). $ сш 192.168.1.83 ssh: подключиться к хосту 192.168.1.83, порт 22: в соединении отказано
Как видите, я трижды неправильно ввел пароль, прежде чем меня забанили. Запрещенный пользователь, если он явно не проинформирован, не будет знать, почему он больше не может получить доступ к целевой системе. Фильтр fail2ban
выполняет действие скрытого бана. Он не дает никаких объяснений удаленному пользователю, а также не уведомляет пользователя о снятии запрета.
Разблокировка системы
Неизбежно случится так, что будет забанена система, которую необходимо быстро разбанить. Другими словами, вы не можете или не хотите ждать окончания срока бана. Следующая команда немедленно разбанит систему.
$ sudo fail2ban-client set sshd unbanip 192.168.1.69
После выполнения этой команды вам не нужно перезапускать демон fail2ban.
Подведение итогов
Вот как работает fail2ban
. Вы настраиваете фильтр, и при выполнении условий удаленная система банится. Вы можете запретить на более длительный период времени, и вы можете настроить несколько фильтров для защиты вашей системы. Помните, что fail2ban
является единым решением и не защищает вашу систему от других уязвимостей. Многоуровневый, многогранный подход к безопасности — это стратегия, которой вы хотите следовать.