Как стать автором
Обновить

Комментарии 40

Всегда удивлялся умению написать целую статью из ничего.

TL;DR: $ sudo apt install fail2ban

Автору стоило бы хотя-бы написать, как fail2ban на nftables переключить, т.к. iptables - deprecated давно:

[DEFAULT]                                                                                                                                                                                                        
banaction = nftables-multiport                                                                                                                                                                                   
banaction_allports = nftables-allports                                                                                                                                                                           
chain     = input
спасибо за отзыв. допишу в следующей заметке. я вот не нашел на хабре про fail2ban. вчера пришлось собирать себе, вот и решил выложить. полезные вещи должны быть простым языком изложены и доступны новичку.
Да, это тяжело в начале, но потом, когда приходит осознание, что все гайды уже давно есть на английском языке — такой простор для статей-лайфхаков в стиле яндекс-дзена открывается, да?
ну и кто мешает вам полезное перевести и проверить что работает, особенно если это пригодилось в хозяйстве?
НЛО прилетело и опубликовало эту надпись здесь
я писал простой tutorial чтобы продвинутый пользователь или джун-админ мог им воспользоваться за 10 минут. думаю, что ту статью сложно применить для данного уровня. продвинутые вполне читают на английском и смогут найти hack.
Однако это не считается хорошей практикой

Кем не считается? Наоборот, это довольно частая рекомендация и криминала никакого в этом нет.
Да и трудностей не возникнет с запоминанием портов, если добавить в .ssh/config

У меня вполне не 22й, и не спасает. Отсканировать все порты ботам не сложно. Дальше начинается перебор логинов и паролей.
Можно сделать, чтобы было сложно, модули из xtables-addons в помощь (-j TARPIT --honeypot например).

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

Угу, а то что есть файл jail.local и то что надо бы включить mode = aggressive и bantime.increment = true не стоило разве написать ?

много чего можно написать, цель заметки была рассказать о простом инструменте от ботов подбора по ssh.
Заход только по ключам. Первым делом отключаю вход по паролю на серверах, стоящих интерфейсом в публичную сеть, пущай долбятся — мне не жалко. Лучше бы написали, как использовали Fail2ban для других кейсов, например перебор пароля на каком-нибудь веб сервисе.
у меня все через ssh пробрасывается, остальны службы никуда не смотрят. на моем домашнем серваке живет много что, но мешало то что каждую минуту лезли боты. сейчас их почти нет и они не мешают.

Поддерживаю.

Плюс от авторизации по ключам ещё в том, что не нужно пользователям особо монструозные пароли создавать.

Особенно когда внутри системы ограниченный круг пользователей работает.

А я бы сразу рекомендовал использовать ipset и banaction = iptables-ipset-proto6-allports, дабы не учить начинающих как быстро загадить правила iptables…
может напишете свою статью? думаю будет интересным и полезным.
А я бы не советовал блокировать IPv6. На моем роутере ни одной атаки по IPv6 не было за много лет, а по IPv4 часто что-то да приплывает. Миф про опасность IPv6 раздут просто на ровном месте людьми не понимающими принцип его работы. Начнем с того, что IETF(инженерный совет интернета) рекомендует провайдерам выделять для физических лиц префиксы размерностью не менее /56, для юрлиц /48, мой провайдер не дает столько, но дает /64. А теперь посчитайте сколько это адресов, и как долго вы их будете сканировать. Если не можете посчитать сами, найдите калькулятор в интернете. IPv6 разрабатывался с учетом безопасности и учитывает все проблемы IPv4. В IPv6 к примеру кроме основного IPv6 адреса, есть временный IPv6, который меняется с определенной периодичностью(благо /56 нам позволить это делать всю жизнь и даже останется), так вот все исходящие соединения только по этому временному IPv6 и сервера видят только его, определить по нему основной нереально. Ну и файервол и белый список IP никто не отменял… Зато IPv6 имеет более низкие накладные расходы, лучше скорости, задержки и не нужен NAT. Мой домашний Linux компьютер все качает в основном по IPv6, все обновления системы с IPv6 зеркал.

мои провайдеры к сожалению не осилили раздавать ipv6, поэтому я принял себе 6in4 от Hurricane Electric. И всё бы ничего но через раз scp одного и того же файла может как занять 5 минут так и пол часа если система решит что в ipv6 меньше хопов и поедет через него несмотря на то что скорость сильно ниже. пока не придумал как с этим бороться но как пойду в отпуск сяду над этим думать точно

Все решается проще, создается просто белый список IP для SSH, и правило по умолчанию DENY (BLOCK, DROP) для всего, при желании можно логировать тех кто попал в DENY(BLOCK, DROP). fail2ban тут совсем не нужен, у меня на серверах всегда правило по умолчанию DENY(BLOCK, DROP).
А для параноиков был давно придуман port knocking
другая задача, да и если я бы сейчас прикручивал это, то использовал бы телеграм-бот для открытия порта.
Какой же вы батенька извращенец, нормальные люди, компании уже давно перешли к авторизации по сертификату. Просто запрещаете авторизацию по SSH руту и по паролю. Cоздаете обычного пользователя и делаете авторизацию по сертификату.
Дальше в конфиге SSH сервера:
PasswordAuthentication no
PermitRootLogin no
вы не поверите, но боту абсолютно по барабану, он стучиться и ddos-ит таким образом сервис. у меня конечно же по сертификату.
Как все запущено. Белый список IP и правило по умолчанию блокировать все — решает все проблемы. Если вас захотят ддосить, то найдут кучу способов, и смена порта не поможет. Второй вопрос уверены ли в боте, и что будет если он упадет… Не надо придумывать себе проблемы на ровном месте. Все давно уже решено за вас.
Или, как вариант, single packet authorization:

  • Известное решение — fwknop.
  • Более простой вариант — pyknock.
спасибо, тоже интересное. попробую на r4 собрать и посмотреть. мне github.com/mrash/fwknop понравилось. потом отпишусь что получилось.
Ещё для поанноить переборщиков, можно поставить на дефолтный порт endlessh
IMHO Не запаривайтесь с fail2ban для ssh:
Воображаемый пират потратит тысячелетия (посчитайте сами) пытаясь подобрать ваш нормальный 8-символьный пароль пусть даже со скоростью 1000 попыток в секунду (со стандартным SSH вы такой скорости не получите). А вот огрести блок от своего-же fail2ban'а не так уж сложно.
ну тут сложно спорить, особенно если талантливый творец залезет в конфиг
исключительно надежный способ делается 3-мя простейшими правилами в iptables, вообще без всяких там fail2ban:
iptables -A INPUT! -i lo -m recent --name BLOCK-BOTNET --update --seconds $TIME2BAN --reap -j REJECT
iptables -A INPUT -p tcp -m multiport --dports 110,143,25,465,587,993,995,585,80,443,$SSH_PORT -j ACCEPT
iptables -A INPUT! -i lo -p tcp --syn -m recent --name BLOCK-BOTNET --set -j REJECT


главное повесить SSH на какой-то совсем рандомный TCP-порт типа 41936
а дальше явно разрешаем открытые публично порты, а любого кто стукнется на любой другой порт (в том числе и на 22) — в бан минимум на недельку.
Таким образом любой, кто попытается посканировать ваши открытые TCP-порты отправится в глухой бан на недельку после первой же попытки.
Только надо обязательно добавить в /etc/modprobe.d/xt_recent.conf строчку наподобие этой:
options xt_recent ip_list_tot=102400 ip_pkt_list_tot=4 ip_list_hash_size=0
и либо перезагрузить модуль xt_recent, либо целиком перезагрузить систему.
вот предложил бы Вам это изложить как tutorial. Много кому было бы это интересным и полезным. И мне тут написали еще что "
начнем с того что уже давно все nftables ;)"
они все равно будут использовать вашу пропускную способность и генерировать огромное количество журналов.

Вот от этого никакие баны не помогают — один IP редко ломится чаще чем два-три раза подряд (ровно столько сколько нужно для бана), а за сутки там сотни (временами и тысячи) разных IP накапливаются — ботнеты нынче умные пошли, распределяют нагрузку во избежание банов.


Так что либо белый список, либо port knocking, либо что-то подобное — единственный способ избавиться от мусора в журнале.

ну пока я вижу по логам и после некоторого тюнинга конфигурации, что более 5 новых ip в час не появляется. port knocking в моем случае сильно неудобная история.
конечно если начнется ddos я придумаю что то еще. пока что ограничиваюсь подбором параметров. пока накапливаю статистику.

Лучше посмотреть в сторону sshguard. Быстрее и легче, чем fail2ban.

да. интересный инструмент. на другом серваке потом потестирую и отпишусь.

К fail2ban дополнительно использую denyhosts.net (с небольшим патчем). Но denyhosts больше не для защиты, а для распространения IP, которые пытаются подобрать пароль на других пользователей этого сервиса.

Да, похоже хороша штука для не очень мощных устройств. У меня пока что по статистике где то до 600 ip накопилось, которые используются для подбора. Наверно имеет смысл как то это полезно использовать и отдавать их обществу. Но наверно потом попробую проанализировать откуда они берутся. 600 как то мало для анализа. fail2ban я пока что доволен.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории