Настройка безопасности VPS
После аренды VPS первоочередной задачей является настройка его безопасности.
Введение
Настройка безопасности включает в себя следующие шаги:
- Создание нового пользователя с установкой надежного пароля.
- Отключение возможности подключения под пользователем root.
- Запрет подключения к VPS-серверу по паролю.
- Установка брендмауэра и закрытие неиспользуемых портов.
Настройка
После аренды VPS сервера и получения пароля для подключения к root-пользователю, первым шагом будет создание нового пользователя. Для этого выполните следующую команду:
Создание нового пользователя:
useradd -m -s /bin/bash -G sudo user_name
Небольшие пояснения:
-m
создает домашний каталог, в директории home появится директория user_name-s
устанавливает оболочку пользователя; в данном случае устанавливаем bash-G
позволяет указать группы, в которые будет входить пользователь. В данном случае мы добавляем пользователя в группу sudo, чтобы он имел права root-пользователя
Пароль для пользователя:
passwd user_name
Введите пароль дважды для установки нового пароля.
Подключение по SSH-ключу
Использование подключения по SSH не только обеспечивает повышенный уровень безопасности, но также удобно, особенно при управлении множеством VPS-серверов. Это особенно важно, поскольку избегает необходимости запоминания паролей для каждого сервера. Установка единого пароля для всех серверов, как известно, является не безопасной практикой.
Прежде чем отключить подключение по паролю, рекомендуется убедиться, что подключение по SSH работает под новым пользователем. В случае возникновения проблем, можно будет восстановить доступ только переустановкой системы.
Далее следуют шаги:
- Если вы ранее не создавали SSH-ключ, выполните команду:
ssh-keygen -t rsa
Нажмите Enter и, когда появится запрос:
Enter passphrase (empty for no passphrase):
Решите, будет ли доступ к вашему ключу защищен паролем. Рекомендуется использовать пароль.
Далее думаю все будет интуитивно понятно.
- После создания SSH-ключа разместите его на вашем VPS:
ssh-copy-id user_name@111.111.111.11
Где user_name - ваш логин, 111.111.111.11 - IP-адрес вашего VPS. Вас попросят ввести пароли.
Отключение root-доступа и авторизации по паролю
После успешного подключения к VPS по SSH-ключу, безопасно отключим доступ под пользователем root и авторизацию по паролю. Следуйте следующим шагам:
- Откройте файл конфигурации SSH:
sudo vim /etc/ssh/sshd_config
Если vim не установлен, выполните команду:
sudo apt install vim
- В редакторе vim установите следующие параметры:
PermitRootLogin no
PasswordAuthentication no
Если вы впервые пользуетесь vim, нажмите “i” для режима редактирования. После внесения изменений, нажмите Esc, затем введите :wq
и нажмите Enter, чтобы сохранить и закрыть файл.
- После внесения изменений, перезапустите службу SSH:
sudo service ssh restart
Теперь доступ к вашему VPS-серверу осуществляется только по SSH-ключу и только для вашего пользователя. Root-пользователь и аутентификация по паролю отключены, повышая уровень безопасности вашего сервера.
Настройка брендмауэра (ufw)
Для начала установим брендмауэр ufw:
sudo apt install ufw
Затем разрешим подключение по SSH к вашему VPS:
sudo ufw allow ssh
Далее активируем брандмауэр:
sudo ufw enable
Если у вас есть дополнительные задачи, связанные с открытием портов, например, для HTTPS (порт 443), выполните аналогичную команду:
sudo ufw allow 443
Так вы откроете порт 443.
Если у вас установлен PostgreSQL и вы хотите ограничить доступ к базе данных с определенного IP-адреса, выполните:
sudo ufw allow from 203.0.113.4 to any port 5432
P.S. Важно помнить, что если вы забудете добавить ssh
в правила брендмауэра, вы можете потерять доступ к своему VPS, так как порт 22 (ssh) станет недоступным.
P.P.S. Также есть мнение, что необходимо переназначать порт ssh
c 22 на любой другой. Тут сложно поспорить, но на большинстве VPS по умолчанию установлен fail2ban который банит IP в случае некорректного введения логина/пароля несколько раз.
Если он у вас не установлен, то установите:
sudo apt update
sudo apt install fail2ban
После чего проверьте статус:
systemctl status fail2ban.service
Также его можно настроить, но это за рамками данной статьи.