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

Представьте: вот арендовали вы сервер, запустили на нем SAMP или Minecraft, а через время видите, как наступает хаос. Виртуальную машину взломали и с открытым фанатизмом портят сборку плагинов, которую вы так долго делали.

Привет! На связи Йети — самый йетический автор Vscale. Это моя первая статья на Хабре. В ней я расскажу, как защитить сервер от хактевистов и другой нечисти. Подробности под катом! :)

Используйте навигацию, чтобы выбрать интересующий блок:

Защита — non fiction
Шаг 1. Намудрите сложные пароли
Шаг 2. Используйте fail2ban
Шаг 3. Включите подключение по SSH
Шаг 4. Забудьте про root
Шаг 5. Используете безопасные протоколы
Шаг 6. Актуализируйте версии ОС и ПО
Шаг 7. Процедите порты
Шаг 8. Подключите двухфакторку
Шаг 9. Защитите сервер от DDoS
Шаг 10. Логируйте и мониторьте
Выводы

Защита — non fiction


Когда люди создают сервер для личных нужд, например игр или хранения фотографий, то чаще всего не уделяют достаточно внимания безопасности. Аргументируя это доводами а-ля «Да кому мой сервер сдался, я на нем просто в майнкрафт гоняю». А ведь это то еще заблуждение…

Как только у вашего сервера появляется публичный IP-адрес, его уже через 15 минут начинают автоматически сканировать ботнеты на дыры в безопасности. И если они будут найдены, то сервер либо станет частью ботнета, либо попросту будет взломан. Если думаете, что это очередные «байки», прочитайте вот эти статьи:


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

Шаг 1. Намудрите сложные пароли


Источник.

Если вы для входа на сервер используете пароль и по какой-то причине не можете / не хотите перейти на SSH, то его 100% попытаются подобрать. Чаще всего злоумышленники делают это в автоматическом режиме и используют базы самых популярных паролей. К примеру, самыми популярными паролями в ru-домене за 2023 стали:

  1. 123456
  2. 123456789
  3. 1000000
  4. 12345678
  5. 12345
  6. 123123
  7. 12345zz
  8. qwerty
  9. Qwerty123
  10. 1234567890

И это не выдумки, а результаты исследования сервиса разведки утечек данных даркнета DLBI. Еси учесть, что в базах хранятся сотни тысяч записей, то наличие пароля типа Qwerty1234 равносильно его отсутствию.

Идеальный вариант — использовать пароли с заглавными и строчными буквам, цифрами и спец символами. При этом длина последовательности должна быть от 15-20 символов. Например, хорошим паролем будет StZrj32^4!cker%fsWEr, но такой пароль сложно запомнить. А если следовать рекомендациям по смене пароля (пароль надо менять минимум раз в полгода), то вообще невозможно. Кроме того, при вводе такого пароля можно легко допустить ошибку.


Можно использовать парольные фразы, их легко запомнить и сложить в довольно довольно сложный пароль. Однако такие фразы не должны быть связаны с вашей жизнью. Допустим, вы никогда в жизни не играли в майнкрафт. Тогда вполне можно попробовать такую последовательность: Minecraft_eto_moja_jizn’2019!!!1902.

Подобные пароли не должны попадать в словари хактевистов. Кроме того, их легко менять: можно изменять порядок слов в фразах, тем самым составлять новые пароли. Еще один плюс заключается в том, что такие пароли достаточно длинные — их невозможно подобрать простым перебором.

Шаг 2. Используйте fail2ban


Какой бы сложный пароль вы не придумали, все равно есть риск быть взломанным. Но есть способ, как защититься от переборщиков… Можно использовать утилиту fail2ban.

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


Утилита Fail2ban отслеживает лог–файлы запущенных программ и на основании заданных условий блокирует по IP найденных нарушителей. Эта утилита стала известной благодаря своей «способности из коробки» предотвращать брутфорс. Еще она умеет бороться с атаками на все популярные *NIX–сервисы.

Так, как же настроить fail2ban? На самом деле, ничего сложного нет. Достаточно установить утилиту:

apt-get install fail2ban

Команда установки fail2ban для Debian/Ubuntu.

yum install fail2ban

Команда установки fail2ban для CentOS/Fedora/RHEL.

Готово! Базовая защита SSH от перебора паролей уже включена. Если нужны кастомные настройки для более серьезной защиты, рекомендую прочитать статью на сайте PuTTY.


Шаг 3. Включите подключение по SSH


По возможности используйте авторизацию по SSH-ключам. Так ваш пароль подобрать будет невозможно, т. к. вход по нему будет отключен. Однако у такого способа есть недостаток.

Закрытый SSH-ключ (он используется вместо пароля) необходимо где-то хранить — например, на компьютере. Но тогда подключиться к серверу можно только с него. Подробнее про этот метод входа — в статье коллег из Selectel.

Как настроить авторизацию по SSH-ключам

1. Сначала нужно сгенерировать ключ на устройстве, с которого будете подключаться к серверу. После — скопировать и сохранить в безопасном виртуальном пространстве, например менеджере секретов.

$ ssh-keygen -t rsa

$ cat ~/.ssh/id_rsa.pub

2. Далее сгенерированный ключ нужно установить на сервере. Достаточно скопипастить его в каталог /home/<username/.ssh/authorized_keys>.

3. Последним этапом необходимо отключить авторизацию по паролю.

3.1. Авторизуйтесь на сервере с помощью SSH-ключа. Сделать это можно с помощью такой команды:

ssh -i <путь до приватного ключа> username@<ip-сервера>

3.2. Откройте файл с конфигурацией SSH.

sudo nano /etc/ssh/sshd_config

3.3. В файле будет находиться параметр PasswordAuthentification, отмеченный как комментарий. Символ однострочного комментария (#), находящийся перед названием параметра, необходимо удалить. После — отключить действие параметра, подставив ему значение no.


Шаг 4. Забудьте про root



После включения SSH логичный шаг — отключение авторизации под root. Лучше всего заходить под собственным пользователем и локально через sudo повышать привилегии. Поскольку пользователь root имеет максимальные права в системе и система не будет спрашивать лишний раз, хотите ли вы удалить все.

В первую очередь root опасен своими правами. Если злоумышленник сможет авторизоваться под ним, то вернуть свою виртуалку будет невозможно. Отключить авторизацию через root можно с помощью такой команды:

etc/ssh/sshd_config:
        PermitRootLogin no #disabled

Чтобы изменения вступили в силу, необходимо перезагрузить службу.

etc/init.d/sshd restart

Шаг 5. Используете безопасные протоколы


Отлично — с авторизацией разобрались. Но о какой безопасности может идти речь, если мы используем протоколы, которые не шифруют данные?

В случае развертывания простого игрового сервера на это можно не обращать внимание. Но в других случаях хорошо бы разобраться, безопасные ли протоколы вы используете. Например, вместо HTTP лучше отдать предпочтение HTTPS, вместо SMTP — SMTPS, FTP — FTPS, а вместо SNMP первой и второй версий — SNMPv3.

Шаг 6. Актуализируйте версии ОС и ПО


Банально, но факт: регулярно обновляйте приложения и операционную систему. В интернете часто гуляют боты, которые эксплуатируют самые популярные уязвимости. И использование Linux или MacOS вас не убережет от них.

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

Если вы выбрали сложный путь и решили отслеживать новые уязвимости, то сделать это можно на следующих сайтах:

  • Банк данных угроз безопасности информации (ФСТЭК),
  • National Vulnerability Database,
  • Common Vulnerabilities And Exposures,
  • VulnDB – Vulnerability Intelligence.

Шаг 7. Процедите порты


Важно следить за тем, какие порты приложений вы публикуете в открытую сеть. Не стоит открывать все, т. к. это помогает ботам и злоумышленникам понять, какие системы установлены, и эксплуатировать уязвимости. Лучше руководствоваться таким правилом: «Запрещено все, что не нужно для корректной работы приложения».

Если на вашем сервере установлены базы данных и другие системы, то лучше разрешить к ним доступ с loopback IP-адреса (127.0.0.1) и подключаться внутри системы. Не рекомендуем публиковать порты для управления чем-либо. Но если у вас один хост, то все равно через один из портов придется подключаться. Можно, конечно, организовать доступ через VPN, но это неоправданно, если используется только один сервер.

Шаг 8. Подключите двухфакторку



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

Шаг 8. Защитите сервер от DDoS




Если у вас не просто домашний сервер с играми, а какой-то pet-проект, то есть вероятность, хактестивисты подвергнут его DDoS-атаке. Особенно если данным проектом пользуются много человек или проект стал популярным. Защита от DDoS стоит довольно дорого, но у всех клиентов Vscale есть базовую защита.

Шаг 9. Логируйте и мониторьте



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

Следует также настроить мониторинг доступности ресурсов, а еще лучше — сбор метрик о загруженности вашего сервера. Так вы сможете заранее узнать, что заканчивается место или нужен более мощный сервер, а также быть в курсе статусов работы систем.

Выводы


Может показаться, что одиночные серверы для игр или pet-проектов взламывать бессмысленно. Отчасти это правда: никто не будет тратить на это много ресурсов, если не преследует личных целей. Но с базовой безопасностью вопросы должны быть закрыты, чтобы в один момент ваш сервер не стал частью ботнета или лошадкой по добыче криптовалюты.

Знаете другие способы по защите серверов? Поделитесь своими советами в комментариях! А если хотите их обсудить в уютном чатике — присоединяйтесь к Vscale Community.

Комментарии (22)


  1. 321785
    23.04.2024 11:34
    +6

    Про блокировку входа под root - это классический выстрел себе в ногу. Особенно "забавным" это выглядит когда под журналы не выделен отдельный раздел и они забивают весь корень. А для root он выглядит и не как весь.
    Так же не увидел ссылки на репозиторий с конфигурациями.
    Конечно всё ИМХО, но даже если вы настраиваете 1 (один) сервер рекомендую использовать систему конфигурации.


  1. jsirex
    23.04.2024 11:34
    +12

    TLDR: ssh-keys, sudo, реклама, реклама, логи


    1. jsirex
      23.04.2024 11:34
      +4

      ой, забыл баян fail2ban, но сути не меняет


  1. Shaman_RSHU
    23.04.2024 11:34
    +2

    1. vagon333
      23.04.2024 11:34
      +3

      Все линки https://www.linux.com/news/hardening-linux-server... ведут на 404.


      1. cry_san
        23.04.2024 11:34
        +5

        Это защита такая ))


  1. Araki_Satoshi
    23.04.2024 11:34
    +1

    UFW? Смена SSH порта? `AuthenticationMethods publickey`? Где вот это всё? Базовые же вещи.


    1. Annikangl
      23.04.2024 11:34

      Так написали же, что порты нужно закрыть. Вы каким местом читаете?


  1. suprimex
    23.04.2024 11:34
    +1

    Актуальный Debian, ставлю fail2ban и получаю сообщение что fail2ban содержит серьезные баги: Serious bugs of fail2ban (→ 1.0.2-2)

    Hidden text

    serious bugs of fail2ban (→ 1.0.2-2)
    b1 - #1037437 - From fresh bookworm install default sshd jail in fail2ban won’t work without rsyslog installed (Fixed: fail2ban/1.0.2-3)
    b2 - #770171 - sshd jail fails when system solely relies on systemd journal for logging (Fixed: fail2ban/1.0.2-3)
    Summary:
    fail2ban(2 bugs)


    1. Kurochkin
      23.04.2024 11:34
      +1

      Не копал глубоко никогда, но интересно по ресурсоемкости как соотносятся

      "...ресурсы виртуальной машины заняты тем, что проверяют хеши паролей и записывают логи..."

      vs

      "Утилита Fail2ban отслеживает лог–файлы запущенных программ и на основании заданных условий блокирует по IP..."


  1. R0bur
    23.04.2024 11:34
    +2

    А если следовать рекомендациям по смене пароля (пароль надо менять минимум раз в полгода), ...

    А разве эта практика не признана «древней, устаревшей и имеющей низкую ценность»?


    1. anshdo
      23.04.2024 11:34
      +2

      Вот только хотел спросить, если у вас пароль уникальный для каждого ресурса и имеет высокую энтропию, то на кой хрен менять его раз в полгода?


  1. Classic_Fungus
    23.04.2024 11:34
    +1

    жаль, что пост не особо подходит для серверов, которые стоят дома.


    1. AptRoApt
      23.04.2024 11:34
      +1

      А вот для домашних серверов, мне кажется, уже резонно будет поднять впн и разрешить доступ только из под него.


      1. Classic_Fungus
        23.04.2024 11:34

        я имел ввиду тот, к котрому есть физический доступ. у меня вот такой. доступ из вне у него только к предоставляемым услугам. Всё управление через "встал, включил монитор (телевизор), взял клаву и поуправлял". ssh выключен.


  1. Comraddm
    23.04.2024 11:34

    etc/ssh/sshd_config

    etc/init.d/sshd

    Надо бы поставить в начале символ корневого каталога /, а то кто его знает от какого текущего оно отсчитает.

    etc/init.d/sshd restart

    Это старый вариант перезапуска, в современных дистрибутивах это не сработает.

    Надо systemctl restart sshd.


  1. Godless
    23.04.2024 11:34
    +2

    вообще, думаю целевая аудитория у такой статьи имеется, но как-то кисловато для хабра аудитории. Про рекламу молчу.
    По существу, fail2ban хорошо бы конфигурить грамотно с заталкиванием ботов в ipset блок лист по всем портам надолго (неделя+) с удвоением срока при повторном бане (вроде это из коробки так делает в последних версиях). Почти во всех серверах есть веб, про SSL молчу уже, но опять же касательно бана нужно внимательно изучить логи и банить так же надолго. Сканеры часто ломятся по SMB портам - таких часто можно сразу в бан на неделю. и тп.
    К сожалению, если все что описано в статье вызывает вопросы, лучше обратиться к корешу за бутылку апельсинового сока помочь настроить серв с ликбезом...


  1. blanabrother
    23.04.2024 11:34
    +1

    А как же port knocking?


  1. vampire333
    23.04.2024 11:34

    "Еще один плюс заключается в том, что такие пароли достаточно длинные — их невозможно подобрать простым перебором."

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

    Как эти две фразы могут идти одна за другой?!


  1. Stam_emg
    23.04.2024 11:34

    Столько апвоутов у статьи, а по сути - технически низкого качества материал.

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

    Разочарован немного в этом винегрете.


  1. rustik23
    23.04.2024 11:34

    Шаг.0 - настройте бэкапы, снэпшоты, репликацию.


  1. progreccor
    23.04.2024 11:34

    Почему то никого не взволновало что советуют генерировать ключи rsa даже не указав длину…

    Формат этих ключей в новых версиях Alma Linux (и RHEL подобных) либо не принимается для авторизации, либо требует большой длины.

    А проще всего использовать ed25519.