Безопасность VPS, настройка Nginx, UFW, пользователей и вход по SSH

Безопасность VPS, настройка Nginx, UFW, пользователей и вход по SSH

50

2 мин.

Предварительные требования

Для работы установим nginx, docker и ufw.

sudo apt update && sudo apt install nginx docker.io ufw -y

Первичная настройка пользователя

Работать под пользователем root не безопасно, поэтому нужно создать нового пользователя командой adduser your_name и дать ему права администратора с помощью usermod -aG sudo your_name и groups your_name.

После этого в консоли появится уведомление о добавлении пользователя Adding user "your_name" ..., и поле для ввода пароля.

Настройка входа по ssh-ключам

Это надёжный способ защиты от брутфорса, если ssh-ключ уже есть, просто отправьте его на сервер ssh-copy-id your_name@server_ip, если нет, то создайте ssh-keygen -t ed25519 -C "your_name@vps"

При копировании таким способом, может потребоваться ввести пароль от сервера, при вводе пароля он не будет отображаться из-за безопасности!

Отключение входа по паролю и Root-доступа

Теперь нужно закрыть возможность входа любым другим способом, кроме ssh-ключа, откройте конфиг sudo nano /etc/ssh/sshd_config, потом найдите и измените (или добавьте) строки:

  • PermitRootLogin no - запрещает вход в систему напрямую под пользователем root через ssh;
  • PasswordAuthentication no - отключает возможность входа на сервер с использованием обычного пароля;
  • ChallengeResponseAuthentication no - отключает аутентификацию по принципу "вызов-ответ".

Перезапустите службу sudo systemctl restart ssh, теперь при попытке войти под root будет ошибка root@ip: Permission denied (publickey).

Настройка фаервола

Фаервол блокирует все порты, кроме тех, что разрешены.

ПортПротоколНазначениеПочему это важно?
22TCPSSHОбязателен! Без него потеряется связь с сервером.
80TCPHTTPСтандартный порт для Nginx.
443TCPHTTPSЗащищенный порт для ssl-трафика.

Для большей безопасности нужно поменять порт для ssh на другой, и также добавить его в конфиг ufw!

Настройка UFW

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

Команда status покажет включен ли ufw и какие порты разрешены.

Уязвимость React2Shell в NextJS

React2Shell это критическая уязвимость, позволяющая хакерам исполнять свой код на сервере.

Для проверки нужно смотреть список процессов и файлов, если найдено что-то из этого, то сервер заражён:

  • Файлы ssh.sh, sex.sh, kai.tar.gz или httd;
  • Процесс xmrig (майнер, загружает CPU на 100%):
    • Проверить можно командой top или htop.

Для защиты от вируса нужно обновить NextJS до одной из безопасных версий (см. на сайте NextJS), обновить NodeJS и запускать Docker контейнеры через --read-only из под USER node с доступами через Whitelist

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

Похожие статьи

  • Анатомия React компонента

    Моё видение того, как должен выглядеть React компонент

    100

    7 мин.

  • Bad Practices для сайтов

    Разбор критических ошибок веб-дизайна. Почему слайдеры, автоплей и тяжёлые страницы снижают конверсию и позиции в Google и Yandex

    45

    1 мин.

  • Как использовать Vite при включённом VPN, быстрое решение

    Решение проблемы с работой Vite при включённом VPN, настройка соединения, для избежания перенаправления локального трафика в VPN-туннель

    109

    2 мин.

Свяжитесь со мной