Обновить

Как защитить свой VDS сервер: 53 000 попыток взлома за 5 дней

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели74K
Всего голосов 156: ↑151 и ↓5+158
Комментарии105

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

iptables -P INPUT DROP
iptables -P FORWARD DROP
cowrie:22 > fai2ban

Можно обойтись и без fai2ban если хакер не будет знать на каком порту у вас SSH сидит. Это можно сделать вот так если добавить эти правила, они позволят заблокировать IP адреса хакеров кто сканирует ваш сервер

iptables -N BRUTESCAN  # Создаем список "BRUTESCAN", строгие правила для проверки хакеров, проверяем brute force и сканирование портов
iptables -A BRUTESCAN -m recent                            --update --seconds 600   --hitcount 10 --name ScanPort             -j DROP   # Если на легитимный порт входит хакер который сканировал нас, мы его блочим
iptables -A BRUTESCAN -m conntrack --ctstate NEW -m recent --update --seconds 42000 --hitcount 16 --name BruteForce --rsource -j DROP   # Если за последние ~11 часов с одного адреса было 16 или более новых соединений — блокируем этот адрес
iptables -A BRUTESCAN -m recent    --set                                                          --name BruteForce           -j ACCEPT # В противном случае - разрешаем, и при этом заносим в список IP откуда зашли

iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport $MyPortSSH  -m comment --comment "SSH" -j BRUTESCAN  # Все попытки открыть новое соединение по SSH направляем на проверку

# начало анализа сканирования портов и добавления Хакеров в список↓ это последние строка ниже которой ничего не писать
# echo / > /proc/net/xt_recent/ScanPort  # очистить список, если нужно сбросить счетчики
iptables -A INPUT -m recent       --name ScanPort --seconds 10800 --hitcount 9 --update -m comment --comment "Block Hackers 3 hours" -j DROP # Если за последние 3 часа было 9 или более запросов на нерабочие порты - блокируем
iptables -A INPUT -m recent       --name ScanPort --seconds 60    --hitcount 2 --update -m comment --comment "Block Hackers 60 sec"  -j DROP # Если за последнюю минуту было 2 или более запросов на нерабочие порты - блокируем
iptables -A INPUT -m recent --set --name ScanPort                                       -m comment --comment "Add Hackers to list"   -j DROP # Всех, кто ломится в нерабочие порты - регистрируем

Интересная альтернатива fail2ban. Ещё стоит учитывать, что такой вариант не пишет логи, модуль recent работает на уровне ядра и просто хранит список IP в памяти.
Если нужны записи о блокировках, можно добавить правило с -j LOG или использовать fail2ban.

Пример правил:

iptables -A INPUT -m recent --name ScanPort --seconds 10800 --hitcount 9 --update -m comment --comment "Block Hackers 3 hours" -j LOG --log-prefix "PortScan blocked:"
iptables -A INPUT -m recent --name ScanPort --seconds 10800 --hitcount 9 --update -m comment --comment "Block Hackers 3 hours" -j DROP

Отличное решение! Пишет в /proc/net/xt_recent

Разбор по полям:

  • src=109.205.211.94 — IP-адрес, занесённый в список.

  • ttl: 248 — TTL (Time-To-Live) последнего пакета от этого IP.

  • last_seen: 5690581158 — время последнего пакета с этого IP в ед. счетчика ядра (jiffies).

  • oldest_pkt: 23 — количество старейших пакетов, сохранённых в списке (нумерация или счётчик).

  • После oldest_pkt идут метки времени последних пакетов (в jiffies). Например:
    5690393555, 5690400954, 5690413095, ... 5690581158

    Я у себя протестировал, команды такие.

iptables -I INPUT 3 -i enp4s0 -p tcp -m multiport ! --dport пишем порты которые не хотим отслеживать в формате порт,порт или порт:порт -m recent --set --name ScanPort -m comment --comment "Add Hackers to list"

iptables -I INPUT 4 -i enp4s0 -p udp -m multiport ! --dport пишем порты которые не хотим отслеживать в формате порт,порт или порт:порт -m recent --set --name ScanPort -m comment --comment "Add Hackers to list"

iptables -A INPUT -m recent --name ScanPort --seconds 60 --hitcount 2 --update -m comment --comment "Block Hackers 60 sec" -j LOG --log-prefix "PortScan: "

iptables -A INPUT -m recent --name ScanPort --seconds 60 --hitcount 2 --update -m comment --comment "Block Hackers 60 sec" -j DROP

читал это до того как статью убрали, на прошлой неделе. тогда не успел сохранить себе. рад что статью вернули. спасибо

даже рекламы нет, и телеги. спасибо Вам, серьёзно.

В прошлой версии некорректно отображался код, внесли правки.
Благодарю за комментарий!

Нет планов всё то же самое проверить на IPv6-only?

Т.е., совсем без белого IPv4-адреса.

Я указал разрешение подключения только с российских ip-шников и это сразу снизило количество попыток авторизации с десяток тысяч в неделю, до всего двух-трёх в неделю.

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

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

метод отличный, но учитывая что все сейчас на впн, это не комфортно для работы, к сожалению.

Если VPN нужен для работы, то это должен быть корпоративный или, на худой конец, личный на VDS. И такой VPN можно внести в белый список.

Я указал разрешение подключения только с российских ip-шников и это сразу снизило количество попыток авторизации с десяток тысяч в неделю, до всего двух-трёх в неделю.

А как это сделать?

Спасибо, поменял порт, и на 99% упало число новых попыток взлома в логах!

Рад, что совет из статьи вам помог!

/var/log/auth.log — именно туда Linux записывает все попытки авторизации через SSH

$ ls /var/log/auth.log
ls: невозможно получить доступ к '/var/log/auth.log': Нет такого файла или каталога

Возможно, у вас другой дистрибутив.
Например, на CentOS / Fedora логи находятся в /var/log/secure .

Разные семейства Linux используют разные настройки логирования: Debian-подобные системы пишут в auth.log, а Red Hat в secure.

Также посмотреть логи SSH можно через команду:

sudo journalctl -u ssh
# или на CentOS/Fedora
sudo journalctl -u sshd

Если же нужны неудачные попытки входа, можно отфильтровать вывод, например:

sudo journalctl -u sshd | grep "Failed password"

Из под sudo попробуйте, этот файл обычно недоступен для пользователя

Ошибка в отсутствии файла. Если бы файл существовал, но у вас не было прав на него, ls выдал бы сообщение следующего содержания:

ls: cannot access '/var/log/auth.log': Permission denied

Защита уровня "Новичок"

Не надо. Эффектвность Новичка оказалась посредственной.

А если серьезно, то зря редиски нехорошие люди изжили TARPIT из iptables без какой-либо альтернативы. Означенный модуль делал сканирование/подбор для жуликов существенно дороже. Зато теперь понятно, на чьей стороне создатели дистрибутивов. :)

Точно

Не надо. Эффектвность Новичка оказалась посредственной.

Хорошая шутка)

Да, TARPIT делал брутфорс менее удобным и ресурсоёмким, но при большом количестве "висящих" соединений есть риск исчерпать ресурсы сервера.

Констатирую: вы не имеете представления о работе Tarpit или вы на тёмной стороне - tarpit занимает ресурсы только на сервере атакующего.

Вы не совсем правы) Не зря я написал "при большом количестве "висящих" соединений".

Поясню:
В Linux каждое TCP-соединение - это сокет, который занимает дескриптор файла. По умолчанию у процесса, например, у демонов вроде sshd или httpd, есть лимит на число открытых дескрипторов, обычно от 1024 до 4096. TARPIT же не рвёт соединение, а держит его открытым. Если атакующий, например, ботнет, инициирует тысячи соединений в секунду, что в текущих реалиях легко достижимо, то сервер быстро исчерпает все доступные дескрипторы и перестаёт принимать новые соединения, включая легитимные. Это приведёт к DoS на самом сервере, где TARPIT, предназначенный для защиты, сам станет уязвимостью. Также каждое "залипшее" соединение ест память под TCP-буферы.

TARPIT тратит 64 байта на соединение. Память под буферы не расходует.

На тёмной стороне?

На светлой)

Нет такой давно авторизации, Логин и пароль.

Не совсем понял ваш комментарий. Если вы про аутентификацию по логину и паролю, то большинство пользователей до сих пор используют именно её. Часто это стандартный пароль, сгенерированный автоматически. Хотя вход по SSH-ключам более надёжный вариант.

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

Пароль такого уровня не поддаётся ни запоминанию, ни вводу с первого раза. Последовав вашему совету, пользователь проклянёт вас на третий раз.

Забудьте уже о паролях, 20 лет как актуальны парольные фразы - фраза из 5 слов запоминается легко, подбор потребует сотни лет. Для уверенности можно вместо пробелов вставить цифры и значки (разные сайты часто требуют это).

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

К слову, некоторые сайты (например, mail.ru) считают пароль "Usage-Humble*lower_sound" хуже, чем пароль "5QmF7/EL", тогда как восьмизначный пароль на совсем не топовой видеокарте подбирается за несколько часов... (Оба пароля тут только что сгенерированы и нигде не использованы.)

Требования странные, конечно, но mail.ru вряд ли всё-таки будет несколько часов отвечать на попытки подобрать пароль, даже пользователю с топовой видеокартой.

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

Менеджер паролей. Никаких запоминаний, никакого ручного ввода. Ввод пароля только по "скопировать - вставить". В нормальных менеджерах паролей буфер обмена насильно очищается спустя несколько секунд после копирования.

скопировать

И пароль автоматически отправляется в какой-нибудь забытый свёрнутый VNC-сеанс 🙃

И куда тот сеанс ведет?

Если у вас "забытый свёрнутый VNC-сеанс", это чья проблема?

Это проблема менеджера паролей, который помещает пароль в заведомо небезопасное место, доступное потенциально недоверенным приложениям

Глупости какие. Если вы запускаете менеджер паролей в той же среде, в которой у ВАС в подконтрольной ВАМ среде установлены "потенциально недоверенные приложения", это исключительно ваша проблема

Это проблема vnc клиента, который без спроса у пользователя посылает всем подряд содержимое буфера обмена.

Никаких запоминаний, никакого ручного ввода.

У меня как-то после обновления на VDS пропала сеть, запросил KVM чтобы локально подключиться, работа с квм осуществлялась при помощи java-апплета, буфер не работал. Так вот, свой длинный и сложный пароль я не смог ввести с клавы с нескольких попыток. Пришлось тыкать в экранную клаву долго и мучительно. С тех пор стараюсь учитывать такой вариант, что придется руками вводить

Предлагаю вам самостоятельно попробовать "скопировать - вставить" что бы то ни было в Remote console iLO, DRAC, XCLarity, а также в консоль QEMU (VNC или SPICE).
А ещё интереснее - сделать фотографию пароля и идти с ней в серверную вводить пароль с физической консоли. Когда у вас в пароле неразличимы O и 0 и (или) 1 и l, и у вас пароль - строка с кодом base64 или ещё каким бессмысленным набором символов.

Парольная фраза хороший вариант.

Пароль такого уровня не поддаётся ни запоминанию, ни вводу с первого раза. Последовав вашему совету, пользователь проклянёт вас на третий раз.

Если у вас множество серверов, окружений, вы не будете хранить все пароли в голове. Для это используют специальные программы (password manager'ы), например, KeePass.

Как ваша любимая специальная программа поможет ввести ваш пароль, который не поддаётся вводу с первого раза?
Буфер обмена, во-первых, использовать для ввода паролей небезопасно, и, во-вторых, copy-paste не действует ни в iLO, ни в DRAC, ни в VNC, ни в SPICE.

1. Не используйте "admin", "user", "test", "ubuntu", "guest", "root"

Вы забыли webmaster - частота проб на этот логин близка к root

Проверил логи 4-х серверов: максимальное количество неудачных попыток для webmaster - 18.
Топ пользователей из /var/log/auth.log одного сервера:

  31203 admin
  14824 root
   4281 user
   1172 ubuntu
    882 debian
    771 test
    612 oracle
    492 guest
    384 centos
    369 ftpuser
    363 Config
    357 ubnt
    345 Blank
    330 default
    306 Nobody
    305 postgres
    291 hadoop
    290 supervisor
    286 Ubnt
    286 support
    286 Centos
    282 User
    282 operator
    282 Guest
    282 Admin
    272 Unknown
    270 git
    265 Operator
    265 blank
    254 Support
    252 Test
    249 Debian
    245 Default
    240 es
    237 www
    233 pi
    232 config
    231 steam
    224 dev
    211 mysql
    210 Supervisor
    209 gitlab
    204 deploy
    201 Root
    196 ftp
    195 nginx
    178 app
    174 uftp
    174 esuser
    174 dolphinscheduler
    168 wang
    168 elastic
    159 tom
    158 lighthouse
    157 flask
    156 sonar
    153 tomcat
    147 elasticsearch
    135 oscar
    134 developer
    129 docker
    126 user1
    121 jenkins
    120 test2
    114 apache
    107 gpadmin
    103 demo

и отключить прямой SSH-доступ к root.

Точнее, оставить только вход по ключам.

И пользователю - тоже вход только по ключам. Тогда и на подбор паролей будет наплевать. (Минус - если потерять все ключи для рута, на сервер будет невозможно попасть, но тут уже никто не мешает хранить любое число резервных копий ключей. Можно даже напечатать и в сейф положить.)

Зачем вообще логиниться под рутом? Хоть с паролем, хоть по ключу. Всегда захожу обычным пользователем, потом повышаю привиллегии.

Если на машине просто нет не root пользователя, например.
Для той же VPS с xray-core даже не вижу смысла в этом, просто по ключу захожу и норм.

В бытность моей сертификации по RHEL, работа под рутом считалась обыденностью... даром, что более 15 лет прошло - до сих пор от этой пагубной привычки не избавился - первая команда после логина до сих пор "sudo bash", а на "никому не нужных серверах" я сразу под рутом захожу (да, не по паролю, а по ключу, но соли это не отменяет - если бы заходил под непривилегированным пользователем, для успешного взлома нужен был бы и ключ и пароль).

Немного не понятен следующий момент. ЗАЧЕМ оставлять вход по паролю через SSH?

PasswordAuthentication no

ssh-keygen -t ed25519

по-моему решает вообще все проблемы, нет? Нет необходимости изобретать логины, смены портов, файлбан и прочее?

Как только отключается парольный вход, количво атак равняется 0.

тогда статью не растянешь бесполезную.

если еще учесть что fail2ban петонячий и кушает прилично ресурсов. как и iptables/etc при гиганских списках тоже грузит ос.

Немного не понятен следующий момент. ЗАЧЕМ оставлять вход по паролю через SSH?

В статье я как раз рекомендую использовать SSH-ключи вместо паролей - это описано в пункте 2 (SSH-ключи вместо паролей)

Скрытый текст

Уровень "Стандарт" (рекомендуется):

  • Аутентификация только по SSH-ключам

2. SSH-ключи вместо паролей

Это отключит вход по паролю и включит аутентификацию только по ключам.

по-моему решает вообще все проблемы, нет? Нет необходимости изобретать логины, смены портов, файлбан и прочее?
Как только отключается парольный вход, количво атак равняется 0.

Это не так. Даже при отключённой аутентификации по паролю боты и сканеры всё равно будут продолжать "стучаться" в порт SSH. Каждое такое подключение требует обработки TCP-handshake, key exchange, что расходует CPU и память.
Как пример эффективности, смена порта снизила число атак с 58 000 до 2 700.

Стоит также помнить о уязвимостях в сервисах. Например, уязвимость в том же OpenSSH CVE-2024-6387 (июль 2024), которая позволяла без какой-либо аутентификации (ключей, паролей) исполнять произвольный код с привилегиями root на атакуемом сервере.

Необходим комплексный подход к защите. Поэтому в конце статьи я пишу: "Принцип многоуровневой защиты - не полагайтесь на один метод"

ЗАЧЕМ оставлять вход по паролю через SSH?

Сейчас расскажу зачем так, кроме того что в некоторых компаниях (тупо использовать логин и пароль) так принято))

Допустим у вас есть хост, выступающий в роли бастиона к некоторому защищаемому ресурсу. Оговорю сразу, что в плане безпасности сервер бастиона наворочен, начиная с настроенного аудита системных вызовов, политик SELinux, дополнительных настроек в systemctl и избыточного логирования всего происходящего на сервере. С самого сервера Бастион можно выполнять строго определённые действия (например, подключение к базе данных поверх SSH).
Ничего сложного нет нагенерить ключи и потом открытый ключ класть на сервере бастиона, а приватный отправлять пользователю. Как раз на последнем моменте начинается интересное знакомство с компьютерной грамотностью коллег и человеческим фактором))
Некоторые коллеги прекрасно знают, куда в их ОС нужно положить приватный ключ, как его беречь и для чего он вообще нужен. У других "лапки" и свои особенности расположений ключей в зависимости от ОС (Linux, Windows, MacOS ), и тут может случиться веселье с длительными объяснениями что, куда и зачем. Так же остаётся открытый вопрос защиты доступа к этим ключам. Другими словами, во весь рост всплывает проблема под названием человеческий фактор. Поэтому приходится идти на такие упрощения в доступе, чтобы предоставить доступ и не околеть при этом:
- почтой отправляется методичка по тому, как запустить на рабочей машине SSH в зависимости от ОС, инструкция по настройке подключения в зависимости от приложения (например, для pgAdmin и DBeaver) и логин пользователя;
- в корпоративном мессенжере отправляется пароль.

Согласен, ключи - это хорошо и удобно (особенно на элиптических кривых хороши), пока не встаёт во весь рост куча проблем с их распространением в массовых количествах и обновлением.
Кроме этого при настроенном взаимодействии сервера Бастион с внутрикорпоративной системой поставки авторизации (IdP) упрощается процесс администрирования доступами. Ну и далеко не все IdP поддерживают хранение ключей на своей стороне.

Посмотрел логи на своем. 8763 попытки подбора за 3 дня

Боты не дремлят! Уже применили что-нибудь из статьи?

Ключи ssh уже использую, ufw- всегда, fail2ban поленился. А вот аудитом прошелся, посмотрел, на что ругается и смирился :)

Отлично) SSH-ключи и ufw уже обеспечивают хорошую защиту.
Можно ещё сменить порт SSH на нестандартный. На практике это значительно сокращает количество автоматических атак.

А какая разница сколько ботов попробовали стандартный пароль? Зачем их вообще считать?

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

А вы можете подтвердить это как-то? Повторяемыми тестами или чем-то таким?

Вот мой тезис: Количетсво попыток логина (попытками взлома я это назвать не могу) зависит только от количества ботов сканирующих интернет. Типичное количество таких попыток никак не аффектит производительность даже минимального впс на 1 ядро. Даже если их станет в 10 раз больше они все равно не будут видны на любых графиках нагрузки.

Ну и следствие: Делать ничего не надо. Это наведение хаоса на пустом месте. Держим минимально достаточную систему.

  1. Провайдер не рекомендует менять порт, чтобы иметь возможность использовать его консоль. Поэтому SSH порт не менял.

  2. На другом сервере пошел по шагам, как у Вас написано. И такой конфиг не работает, если логи пишутся не в файл auth.log, а в журнал. Я убрал logpath, и поставил "backend = systemd" и "journalmatch = _SYSTEMD_UNIT=ssh.service". Тогда заработал Fail2ban.

  3. У меня выделенный IP, поставил правило ufw, что все что не с моего IP - в блок. Теперь до ssh в таком конфиге никому вообще не добраться, и fail2ban тоже не имеет смысла получается.

А потом надо будет залогиниться с ноута не из дома и привет. Ограничения ssh по ip это сомнительная штука.

На такие случаи можно сделать VPN туннель до нужного IP, делов-то

Дома обычно серые IP. Особенно есть есть VPS с белым. Дома еще платить за белый смысл совсем теряется.

Просто использовать только ключи. И больше ничего не надо. Пусть подбирают сколько угодно.

И не надо всю эту муть городить.

SSH-ключи надёжны и их нужно использовать, но полностью полагаться только на них - плохая идея. Возможно, вы ещё не сталкивались с крупными атаками: множественные автоматические переборы могут сильно нагружать сервер.
В опыте работы в облачном хостинге я не раз видел, как такие атаки приводили к высокой загрузке CPU и даже "ложили" серверы. Именно поэтому я пишу в конце статьи: "Принцип многоуровневой защиты — не полагайтесь на один метод".

Если мой пет сервер решат положить его положат. Чтобы я не делал. Там железа нет.

Если Когда мои рабочие кластера будут под атакой, то там используются другие способы защиты.

В итоге практического применения от чего-то кроме ключей в такой формулировке нет.

Как сделать систему более уязвимой, нагородить огород. Вместо использовать ключи.

1) Сделал не стандартный порт, фьють 99% к безопасности

2) Сделал юзера - бабушкой, еще 99,99%%

3)Сделал ВПН, но зачем с ним строго, и так все безопасно, а ВПН со слабым паролем и без ключа. Минус 99,99% от безопасности.

Если ВПН нужен со стойким паролем, а лучше ключом. Почему сразу не сделать SSH с ключом?

И не делать остального, потому что не надо. Чем сложнее, тем больше ошибок.

Да в принципе все это бесполезно по большей части. Регулярно обновлять софт, не иметь лишних открытых портов, запоминающуюся парольную фразу на 12+ символов и все, это взломать брутфорсом нереально, ключ/сложный пароль требуют хранения, это дополнительная точка отказа, оно не надо для обычных пользователей. Менять порт? У хостера по умолчанию так было, спустя пол года пришлось порты сканировать и ставить обратно 22, ибо где он хранился я уже забыл. Юзер - да, обязательно, но не для безопасности от бутфорса, а для защиты от случайных ошибок при работе.

Как сделать систему более уязвимой, нагородить огород. Вместо использовать ключи.

Это справедливо для избыточной сложности. Но базовый набор (ключи + смена порта + Fail2Ban + обновления) - это не rocket science, это 30 минут настройки один раз.
Альтернатива "только ключи и всё" работает до первого инцидента.

Мне в качестве "науки" и ума. Какие инциденты возможны в теории?

Или есть real stories?

пс минус не мой, не представляю за что тут можно минусить. вроде не случайные люди

Отличная статья, спасибо вам! Кстати, а есть ещё подобные статьи под Windows? Я понимаю, что иногда люди делают нетипичные и нерациональные решения, но вот, допустим, надо - а винда сама по себе представляет собой дуршлаг, если совсем не озаботиться минимальной безопасностью. Найдется чтиво? Благодарю!

НЛО прилетело и опубликовало эту надпись здесь

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

  • Минимум 20 символов — чем длиннее, тем сложнее взлом.

откуда данные про 20 символов?
Я, конечно, согласен что чем длиннее тем лучше (гусары молчать!), но откуда все же 20 символов?

Если верить Hive Systems, которые уже несколько лет проводят сравнения времени взлома пароля от его длины, то пароль из 8 символов (цифры, заглавные, незаглавные и спец символы) будет взламываться 164 года системой из 12 видео карт 5090.
https://youtu.be/fXLWxcpbfFk?si=_AfEkqPjYMjDjQyj&t=119

И то это если приватный ключ утечет, по SSH никакие видеокарты не помогут, упрется в десятки паролей/с. Эти аутентификации рассчитаны на то, что кто-то оставит пароль уровня admin:admin

Я когда держал свой сервер + базу SQL произошло такое: взломали учётку SQL, снесли все таблицы, якобы их зашифровали и просили выкуп, благо SQL был почти пустой и ничего такого там не было, но меня конечно позабавило, SQL таблицы ломают тоже как не в себя

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

Уважаемый maxithubs. Пытаюсь запустить AIDE по Вашему мануалу. Уперся в ошибку после команды:

sudo aide --config=/etc/aide/aide.conf --check

Ошибка, что группа Full is not defined, несмотря на то, что скурпулезно придерживался Вашей инструкции. Посмотрите пожалуйста, может Вы что-то упустили в своем гайде. Заранее спасибо. Еще ругался на комментарии # в файле system_paths.conf, но тут я хотя бы удалил все #комментарии.

Выполнил шаги из инструкции, указанная ошибка не воспроизводится.
По всей видимости, группа Full не определена в основном конфиге.
Убедитесь, что в файле /etc/aide/aide.conf в самом начале присутствуют следующие строки:

# Определение наборов правил
Normal = R+p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
Full   = R+a+c+m+u+g+s+sha512

# Подключение нашего конфига
@@include /etc/aide/aide.conf.d/system_paths.conf

Можете подсказать, поменял порт в конфиге сервера, перестала работать амнезия впн. Где найти конфиг амнезия впн на сервере? что бы вписать туда новый порт.

странно, AmneziaVPN паботает по своим портам UDP. Может вы фаерволом прикрыли порты?
sudo docker ps поможет увидить используемые контейнерами порты. Да она поднимается на серврах в конейнерах

делаете резавную копию, появляется фалик "AmneziaVPN.backup", открываете его просто блокнотом, в самом низу видите 22й порт, меняете его, восстанавливаете резевную копию

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

Неприятная ситуация будет в любом случае, провайдер может без предупреждения сменить ip. Такое применимо если есть резервный доступ

Не все интернет-провайдеры предоставляют статический IP-адрес, некоторые делают это только как платную дополнительную услугу. Также, если подключаться к серверу с разных устройств или сетей, такой способ будет неудобен.

Для этого отлично подойдёт WireGuard

Не в России.

Не упомянули атаки на название пользователей по различному ПО например ко мне логинились redis rabbitmq и прочее..

А вообще, когда в первый раз я посмотрел логи на VDS то удивился как много атак.. думал что до меня сервер принадлежал кому то не хорошему, менял ИП адреса у сервера - не помогало. То есть либо пулы адресов занесены в списки атак либо их подбирают "вручную" перебором.

redis rabbitmq

Зачем вы вообще открываете доступ к ним из интернета?

речь про свежеустановленный сервер... стучатся по всем возможным возможностям

На свежеустановленном сервере никаких redis и rabbitmq тем более не существует

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

Ну если вы в своём готовом образе сами сознательно добавили дыру, то вы просто очень глупенький, наверное?

Все мы рождаемся "очень глупенькими" и набираем знаний/умений/опыта или из рассказов других, или из собственных шишек. Статья как раз делится правильными подходами, которые могут быть неочевидны для тех, кто с этим не сталкивался.

Вот собственно с того ветка и начинается, что не надо открывать доступ к redis и rabbitmq из интернета (на вопрос «зачем» никто так и не ответил)

на вопрос «зачем» никто так и не ответил

Потому что вопрос надо ставить не "зачем", а "почему".

Мне вот интересно, а каким образом они находят новоиспеченный сервер ?

В интернете всего 4 миллиарда адресов. Перебором.

Попробуйте IPv6.

А зачем? Он проблемный. Я лично видел как коннективити до крупного ресурса по ipv6 просто пропала на несколько дней. Потом просто появилась. Саппорт ожидаемо сказал переключиться на ipv4.

adduser --disabled-password --gecos "" "$USERNAME"
usermod -aG sudo "$USERNAME"

Если пользователю не задан пароль, то sudo он использовать не сможет, увы.

Прочитал про aide и вспомнилась утилитка от DrWeb под MS-DOS, которая делала ровно то же самое (а вроде и называлась вроде как Aida, но это не точно). Запускалась каждый раз при старте системы и сканировала файловую систему на изменения. Очень эффективная защита. Чуть что в системе поменялось на жестком диске в 40Мб, сразу как на ладони. На 286 компе еще использовал ее. Эх были времена

ADInf (Advancet Disk Infoscope) она называлась, если мы про одно и то же... ну и она была не совсем "от DrWeb" - скорее "от ДиалогНаука"...

По Вашей наводке прогуглил тему и был удивлён тем, что данный ревизор всё ещё жив. Из близких по духу утилит пользуюсь, разве что, AVZ, да и то, "очень не каждый год".

# Редактируем конфигурацию SSHsudo nano /etc/ssh/sshd_config

На ubuntu 24.10 Это не работает. Незнаю зачем это сделали но порт можно теперь
поменять только через сокет. sudo nano /etc/ssh/sshd_config.d/10-custom-ssh.conf
sudo systemctl edit ssh.socket и т д.
файлтубан всем хорош. Вот бы еще мог банить по именам сайтов. :)
Нормальный тарпит который я использую на 22 порту: endlessh. Он не жрет
ресурсы ОС так как не устанавливает соединения. Он использует особеность
ssh долго держать бота за ноздрю. Хотя счас боты этому обученны. Сами
отцепляются через 10-40 секунд. Но, на хитрую есть с винтом. Как я заметил
боты нападают сразу на порт 20-30 конектов. Чтобы продержать дольше
висяком помогает такая конструкция: iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 1 -j DROP

Статья интересная, к ней еще было бы неплохо собрать инфу о используемых ботнетом вордлистах.

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

Классная статья, узнала много нового. Для меня как для студента еще отличная мини лаба на виртуальных машинах.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
lansoft.com
Дата регистрации
Дата основания
2024
Численность
1 001–5 000 человек
Местоположение
Россия