# Начальная настройка сервера ## Первое подключение Подключаемся к серверу к `root` по паролю, который должен выдаваться вместе с VDS. ```sh ssh root@ ``` Уже в терминале сервера выполняем. ```sh { .code-wrap } # Создаём пользователя и наделяем правом использовать `sudo`. adduser adduser sudo # Переключаемся на нового пользователя su - # Все файлы, созданные пользователем, по умолчанию будут иметь права 600, а директории - 700. echo 'umask 0077' >> .bashrc source ~/.bashrc # Добавляем свой публичный SSH ключ (cat ~/.ssh/id_rsa.pub), чтобы подключаться к пользователю по SSH напрямую. mkdir .ssh echo "" >> .ssh/authorized_keys # Актуально, только если настройку umask не добавлять в .bashrc # chmod 700 ~/.ssh # chmod 600 ~/.ssh/authorized_keys ``` Теперь можно попробовать подключиться к серверу по SSH-ключу. ```sh ssh @ ``` Желательно обновить все пакеты и перезагрузить сервер. ```sh sudo apt update sudo apt upgrade sudo reboot ``` Можно придумать серверу имя, оно будет отображаться в терминале после `@`. ```sh sudo nano /etc/hostname sudo nano /etc/hosts sudo systemctl restart systemd-hostnamed ``` ## Настройка конфига SSH Открываем конфиг SSH. ```sh sudo nano /etc/ssh/sshd_config ``` - `Port ` - можно поменять со стандартного 22 на какой-нибудь другой. Лучше больше 10000, чтобы уменьшить вероятность конфликтов с другим ПО. - `PermitRootLogin no` - запрещаем авторизацию по SSH под `root`. - `PasswordAuthentication no` - запрещаем авторизацию по SSH по паролю. После внесения изменений в конфиг, необходимо перезагрузить `sshd`. ```sh sudo systemctl reload sshd ``` ??? question "А что будет, если потерять SSH-ключ?" Хостинг предоставляет доступ к `VNC` или другие методы подключения к серверу, которые не требуют подключения по SSH. Однако в таком случае будет необходим доступ к личному кабинету хостинга. На своей машине добавляем сервер в конфиг SSH. ```sh # На Windows надо будет нажать на Tab, чтобы раскрыть `~`. # code - VS Code code ~/.ssh/config ``` ``` Host HostName User Port ``` Можно проверить, что подключение проходит без ошибок ```sh ssh ``` ## Настройка фаерволла c UFW ```sh # Установка UFW sudo apt update sudo apt install ufw # Открываем порт, используемый для SSH (по умолчанию 22) sudo ufw allow /tcp # Закрываем все входные sudo ufw default deny incoming sudo ufw default allow outgoing # Включаем фаерволл sudo ufw enable # Показать состояние ufw и активные правила sudo ufw status verbose ``` ??? tip "Дополнительные команды `ufw`" ```sh # Отключить фаерволл sudo ufw disable # Удалить правило (будут применены настройки по умолчанию) sudo ufw delete allow / # удалить разрешение sudo ufw delete deny / # удалить запрет # Сброс всех правил sudo ufw reset # Вывести логи ufw sudo tail -f -n 100 /var/log/ufw.log # Изменить уровень логирования sudo ufw logging # Разрешить доступ ко всем портам с определённого IP-адреса sudo ufw allow from # Разрешить доступ к порту с определённого IP-адреса sudo ufw allow from to any port ``` Некоторые приложения, например `OpenSSH` или `Nginx`, добавляют пресеты с правилами для `ufw`, которые точно так же можно разрешать и запрещать. ```sh # Вывести список пресетов sudo ufw app list # Открыть все соединения, которые нужны Nginx sudo ufw allow "Nginx Full" # Удалить правило для пресета sudo ufw delete allow "Nginx Full" ``` ## Полезные ссылки - [Initial Server Setup with Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-20-04) - [UFW Essentials: Common Firewall Rules and Commands](https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands) - [VPS cheatsheet](https://habr.com/ru/articles/756804/)