Когда сервер создается для личных нужд, то чаще всего внимания безопасности почти не уделяется. А ведь это фатальная ошибка…
Представьте: вот арендовали вы сервер, запустили на нем 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 стали:
- 123456
- 123456789
- 1000000
- 12345678
- 12345
- 123123
- 12345zz
- qwerty
- Qwerty123
- 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.
Автор: Молодой добрый Йети