Создаю виртуальные приватные сервера минимум 8-12 раз в год для клиентских и личных проектов. Шаги для его создания остаются прежними:
Я думал о переходе на Docker (или Caprover) в течение нескольких месяцев, но все время откладывал любую автоматизацию. Нерегламентированное совместное использование серверов БД, файловых систем, серверов отчетов/аналитики усложняет задачу. Я не трачу больше 4 часов в сумасшедший день, так что это не имеет большого значения.
Не будучи системным администратором, я следую нескольким шагам из «лучшей практики», рекомендованным более умными людьми в Интернете. Вот простой в использовании список для настройки безопасного VPS.
Я предполагаю, что у вас есть —
Войдите на свой сервер.
ssh root@<password_in_email>@<server_ip>
Вы получите такое сообщение —
The authenticity of host ‘11.11.111.111 (11.11.111.111)’ can’t be established.
ECDSA key fingerprint is SHA256:XXBLAH.
Are you sure you want to continue connecting (yes/no)? yes
Нажмите yes, чтобы продолжить.
Вы можете сделать этот шаг более безопасным при создании серверов у некоторых провайдеров, таких как Hetzner. Вы можете ввести открытый ключ SSH во время создания сервера и получить беспрепятственный доступ к серверу после его создания. Мы скоро доберемся до части открытого ключа.
Изменить пароль root.
passwd
Введите новый пароль для root. Рекомендуется хранить это в LastPass или другом инструменте управления паролями.
Добавьте нового пользователя-администратора. Этот идентификатор будет использоваться по умолчанию для входа на ваш сервер.adduser aweadmin
Введите пароль для нового пользователя. Затем разрешите новому пользователю sudo.
usermod -aG sudo aweadmin
Цель состоит в том, чтобы уйти от значений по умолчанию, чтобы сделать его более безопасным. Это само по себе не защитит сервер полностью, но уменьшит риск того, что ваш сервер будет интересен хакерам.
Во-первых, давайте обновим ОС.
apt update
apt dist-upgrade
После завершения обновления перезагрузите сервер.
reboot
Ваш сеанс SSH отключится, и сервер перезагрузится. Повторно войдите с помощью SSH на свой сервер.
Последние версии Ubuntu имеют автоматические обновления по умолчанию. Вы можете проверить или изменить эти обновления —
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Если вы используете более старую версию, вам может потребоваться установить и настроить автоматические обновления.
apt install unattended-upgrades
nano /etc/apt/apt.conf.d/50unattended-upgrades
Закомментируйте все, кроме обновлений безопасности.
Unattended-Upgrade::Allowed-Origins {
// «${distro_id}:${distro_codename}»;
«${distro_id}:${distro_codename}-security»;
// Extended Security Maintenance; doesn’t necessarily exist for
// every release and this system may not have it installed, but if
// available, the policy for updates is such that unattended-upgrades
// should also install from here by default.
«${distro_id}ESM:${distro_codename}»;
// «${distro_id}:${distro_codename}-updates»;
// «${distro_id}:${distro_codename}-proposed»;
// «${distro_id}:${distro_codename}-backports»;
};
Сохранить файл с помощью Ctrl+O> Enter. Выйдите из редактора с помощью Ctrl+X.
Пока вы настроили автоматические обновления. Далее включите автоматические обновления.
nano /etc/apt/apt.conf.d/20auto-upgrades
Скопируйте/вставьте 4 следующие строки —
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Здесь мы сделаем две вещи —
SSH использует порт 22по умолчанию. Но вы можете выбрать любой свободный порт от 1023 до 65535. Узнать, свободен ли порт, можно с помощью следующей команды:
ss -tulpn | grep LISTEN
Откройте файл конфигурации и измените 22порт по умолчанию, используемый SSH.
nano /etc/ssh/sshd_config
Найдите строку, которая начинается с Portи измените ее —
Port 65432
Пока мы на этом, давайте также добавим строку, чтобы заставить SSH всегда использовать Protocol 2. Просто добавьте строку ниже в любом месте файла.
Protocol 2
Ctrl+o> Enter+ Ctrl+xдля сохранения и выхода из редактора.
Перезапустите SSH.
sudo systemctl restart ssh
Откройте другую командную строку. Попробуйте войти на свой сервер с идентификатором пользователя, который был создан ранее.
ssh -p 65432 aweadmin@11.11.111.111
Как только вы войдете, попробуйте запустить sudoкоманду.
sudo ls /root
Если до сих пор все работало хорошо, пришло время отключить вход в систему root с помощью SSH.
Откройте конфигурацию SSH на сервере.
sudo nano /etc/ssh/sshd_config
Измените приведенный ниже параметр на noи вставьте новую строку, чтобы разрешить доступ для нового пользователя-администратора.
PermitRootLogin no
AllowUsers aweadmin
Ctrl+o> Enter+ Ctrl+xдля сохранения и выхода из редактора.
Перезапустите SSH.
sudo systemctl restart ssh
Откройте еще одну командную строку и попробуйте войти в систему как root.
ssh -p 65432 root@11.11.111.111
Это не должно работать, но aweadminвойти в систему будет без проблем.
Если вы когда-нибудь проверите журналы безопасности на своем сервере, вы обнаружите серию попыток доступа к вашему серверу с идентификаторами пользователей по умолчанию, портами и общими паролями. В этом разделе мы полностью отключим доступ по SSH с использованием пароля и разрешим вход только клиентам с доверенными ключами.
Давайте сначала настроим клиент (это наш компьютер = не сервер).
Выполните следующую команду, чтобы сгенерировать открытый/закрытый ключ на вашем компьютере.
ssh-keygen -N "securepassphrase" -t ed25519 -C "mycomputer"
Примите имена файлов по умолчанию для открытых и закрытых ключей (или измените их). У вас должно быть два файла в c:\user\<user_name>\.ssh\папке.
Далее мы обновляем сгенерированный публичный ключ на сервере.
ssh -p 65432 aweadmin@11.11.111.111
Создайте .sshкаталог (если он не существует) и создайте новый файл в нем.
mkdir /home/aweadmin/.ssh
nano /home/aweadmin/.ssh/authorized_keys
Скопируйте/вставьте открытый ключ из id_ed25519.pub.
Ctrl+o> Enter+ Ctrl+xдля сохранения и выхода из редактора.
Измените разрешение по умолчанию для вновь созданного файла —
chmod 0600 /home/aweadmin/.ssh/authorized_keys
Откройте командную строку на клиенте и войдите в систему с помощью ключа.
ssh aweadmin@11.11.11.1111
Вы получите другое приглашение, в котором запрашивается ключевая фраза-пароль. Введите парольную фразу, чтобы получить доступ к серверу — вам не нужно вводить aweadminпароль еще раз.
Далее мы отключим вход по паролю в конфигурационном файле SSH —
sudo nano /etc/ssh/sshd_config
Измените следующий параметр —
PasswordAuthentication no
Ctrl+o> Enter+ Ctrl+xдля сохранения и выхода из редактора.
При каждом входе в систему необходимо вводить парольную фразу. Мы можем обойти это.
Перейдите к Start> Services, чтобы получить список служб Windows (или Start> Run> Enter services.msc). Вы должны найти службу под названием OpenSSH Authentication Agentservice, которая будет находиться в disabledсостоянии по умолчанию. Включите автоматический запуск службы с Windows и запустите службу.
Перейдите к Start> Run> введите notepad c:\<user>\.ssh\config. Введите следующие строки —
Host 11.11.111.111
User aweadmin
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Port 65432
Сохранить файл. Убедитесь, что файл сохранен без txtрасширения по умолчанию.
Теперь вы сможете войти на сервер, не вводя идентификатор пользователя, пароль или кодовую фразу.
ssh 11.11.111.111
Если вы используете несколько компьютеров или хотите предоставить доступ другим пользователям, просто повторите шаги, чтобы сгенерировать отдельные закрытые ключи и обновить открытый ключ на сервере.
Давайте установим и активируем программное обеспечение для защиты сервера.
Я обычно использую, UFWпотому что его довольно просто настроить и понять.
Вы можете установить/обновить ufwс помощью
sudo apt install ufw
Проверьте статус, используя —
sudo ufw status
Настройте ufw, чтобы разрешить сеансы SSH на нашем порту SSH. Это важно, так как ufwпо умолчанию закрывает все порты. Включите брандмауэр.
sudo ufw allow 65432/tcp
sudo ufw enable
Откройте другую командную строку и попробуйте получить доступ к серверу с портом по умолчанию — вы сможете войти в систему.
Проверить правила можно командой —
sudo ufw show added
Мы установим его Fail2Banдля работы вместе с брандмауэром и защитим наш сервер. fail2ban— это система обнаружения и предотвращения вторжений, которая может автоматически временно (или иным образом) блокировать IP-адреса на основании неверных попыток входа в систему.
sudo add-apt-repository universe
sudo apt-update
sudo apt install fail2ban
Скопируйте файл конфигурации по умолчанию jail.localи перезапустите службу.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
service fail2ban restart
После настройки сервера вы можете начать установку приложений. Некоторые из них очень полезны —
sudo apt-get install vim
apt-get install fish
chsh -s /usr/bin/fish
curl -L https://get.oh-my.fish | fish
sudo apt-get install caddy
sudo apt install mysql-server
sudo mysql_secure_installation
Вот и все, друзья, наслаждайтесь своим новым VPS!