Перейти к основному содержимому

Безопасность чееек: Как защитить сервер от хакеров и другой нечисти

· 6 мин. чтения
Андрей Салита

Защита — 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? На самом деле, ничего сложного нет. Достаточно установить утилиту:

sudo apt-get install fail2ban

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

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

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

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

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

  1. Сначала нужно сгенерировать ключ на устройстве, с которого будете подключаться к серверу. После — скопировать и сохранить в безопасном виртуальном пространстве, например менеджере секретов.
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
  1. Далее сгенерированный ключ нужно установить на сервере. Достаточно скопипастить его в каталог /home/<username>/.ssh/authorized_keys>.

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

  • Авторизоваться на сервере при помощи ssh ключа (сделать это можно при помощи команды ssh -i <путь до приватного ключа> username@server IP)

  • Открыть файл с конфигурацией SSH (это можно сделать при помощи команды sudo nano /etc/ssh/sshd_config)

  • В файле будет находиться параметр PasswordAuthentication, отмеченный как комментарий. Символ однострочного комментария (#), находящийся перед названием параметра, необходимо удалить. После -- отключить действие параметра, поставив ему значение 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. Подключите двухфакторку

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

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

Если у вас не просто домашний сервер с играми, а какой-то пет-проект. То существует вероятность, что вас начнут DDOSить, особенно если данным проектом пользуется большее количество человек или проект (в том числе крупный игровой сервер) стал популярным. Защита от DDOS стоит довольно дорого, но все клиенты Vscale имеют базовую защиту от DDOS, поэтому вам не нужно тратить средства на нее.

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

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

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

Выводы

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