VPS

Как и любой сервер нуждается в принятии мер по безопасности, что бы минимизировать возможность взлома и последующими печальными последствиями. Обязательно делаем эти стандартные телодвижения!

Зачем нужен VPS

Для каждого будут свои причины для покупки выделенного виртуального сервера. Например уже не достаточно арендованного виртуального хоста, на котором размещены статические страницы какого нибудь лендинга, посадочной страницы, того же блога созданного при помощи Hugo. Хочется чего то большего, что нельзя реализовать на виртуальном хостинге. Для меня прежде всего такая необходимость возникла, что бы был собственный VPN сервер и как побочный профит, что бы не простаивали мощности арендованного VPS на нем разверну свою собственную социальную сеть на базе Mastodon. Поскольку реализовать данную затею уже давно хотелось и собирать еще один сервак или дать нагрузку на уже имеющиеся посчитал не целесообразным.

Выбор хостера VPS

Тут однозначных рекомендаций дать не могу. Могу только посоветовать перед поиском подходящего хостера составить задачи, которые должны решаться и условия, которые должны быть предоставлены хостером VPS. Для реализации VPN важны были следующие:

  • Оплата с Российской карты
  • Сервер должен быть за рубежом или хотя бы предоставить IP адрес с которого можно спокойно обращаться к зарубежным серверам.
  • Доступ root
  • Безлимитный трафик (без всяких оговорок)
  • Приемлемая цена за предоставляемые ресурсы (как же без нее)
  • Операционная система по моему желанию (Debian 12)
  • Выделенный IP адрес (само собой)

По таким критериям очень много хостеров отсеилось, один только пункт оплата в рублях с Российской карты “убил” многих, кто предоставляет услуги VPS. Потом вышли из выбора, кто не прописал сразу подробности про услуги. После регистрации типа все узнаете. Один раз обжогся и хватит, время только потерял, зарегился и в службу поддержки сразу вопрос - “где выбрать страну дата центра?”, на сайте то не написано ничего и выбора нет. Мне в ответ осталась только Москва. Другие скрыто даже не под звездочкой, где то в закромах всяких инструкций прячут, то что трафик лимитирован, не для всех но все же. К другим, после неудачной покупки знакомого, стал относится с опаской, очень дёшево продавали VPS. Поэтому после всех поисков и анализа осталось 2-3 хостера. Стоимость по рынку аренды 4-5 американских рублей это хоть какая то гарантия хорошего сервиса. Все что ниже вызывают сомнения, да они могут быть не плохими, но сомнения возникают. Попадались дешевые с хорошей репутацией, но у них уже было все распродано, что и не мудрено 😀. По итогу из оставшихся выбрал, что чуть-чуть подешевле 😆 и VPS “пожирнее” в том плане, что мощностей предоставляют чуть больше. Все это касается только аренды зарубежных дата центров. Российские стоят намного дешевле, так что можно купить и за 1 евро рубль.

Характеристика выбранного VPS

Итак, что приобрел за 5 американьских рублей:

  • Панель управления VPS довольно продвинутую и со множеством плюшек, которые в принципе не нужны, но приятно. Одно пока не могу сделать, закрыть доступ к серваку из браузерной консоли. На тот случай, если поимеют доступ к моему аккаунту на хостинге. Надо будет поспрошать про это у службы поддержки. Хотя если будет доступ к акку то там и это не поможет 😆, но все таки хоть не вытащат данные с сервера. Поэтому читаем ниже, как повысить безопасность VPS.
  • CPU 2 x 3.3 ГГц
  • RAM 2 ГБ
  • SSD 40 ГБ
  • Интернет 200 Мбит/с
  • IP-адрес Бесплатно
  • Страна Нидерланды
  • ОС Линукс

Вот насчет IP страны тут непонятки IP принадлежит Российской конторе при подключении через VPN показывает, что США, хотя заказывал Нидерланды. Да и ладно, сервисы которые заблочены в России и за рубежом для Российских IP открываются.

Поскольку это была минимальная комплектация, ее за глаза и больше хватает для VPN сервера, поэтому, что бы добро просто так в холостую не работало поднапрягу все это установкой своего собственного аналога твитеру он же Mastodon.

Настройка безопасности VPS

Действия, которые необходимы в обязательном порядке, что бы спать спокойно.

Новый пользователь VPS

После заказа и оплаты выдаются данные для доступа по ssh. Подключиться к серверу от имени root. Создать нового пользователя с ником себя любимого, поскольку доступ для root надо закрыть.

adduser твой-ник

Написать и повторить пароль для доступа нового пользователя. Надеюсь не надо объяснять, что пароль должен быть, как можно сложнее и не банальным. Это будет единственная официальная дверь для входа на сервер. Про остальные дыры, тут все зависит от того программного обеспечения, которое будет установлено, ничего сказать не могу. Далее заполняем или не заполняем предложенные поля, по желанию. Будет создан новый юзверь он же админ всея сервера, но чуть позже, так же каталог /home/твой-ник в котором будут хранится все что касается этого пользователя.

Добавить нового юзверя в группу sudo

usermod -aG sudo твой-ник

Но мне по душе быть всемогущим на сервере, поэтому вношу изменения в файл /etc/sudoers назначив себя рут-пользователем.

nano /etc/sudoers строчку:

root    ALL=(ALL:ALL) ALL

закомментировать # и добавить строку твой-ник ALL=(ALL:ALL) ALL

На предоставленном мне сервере по умолчанию были активированы еще такие строки, которые закомментировал (ибо нех, я тут главнюк 😆 ):

# Members of the admin group may gain root privileges
#%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
#%sudo  ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "@include" directives:

#@includedir /etc/sudoers.d

SSH на сервере VPS

Произвести действия, как написано ранее SSh В зависимости от операционки читаем нужный раздел. Вкратце такие действия:

  • Сгенерировать ключ
  • Добавить публичный ключ на сервер в каталог /home/твой-ник/.ssh
  • Отключить доступ root по SSH
  • (по желанию) Поменять порт доступа к SSh (при этом не забыть указать такие изменения в других службах для их доступа)

Это минимум, если маньячить, то можно ограничить доступ по IP, по имени, включить двухфакторную авторизацию. Варианты для маниакальных настроек предостаточно.

Проверяем доступ к серверу, перезагрузить сервант shutdown -r now. Попробовать подключится под именем root должно показать фигу. Подключаемся под своим ником ssh твой-ник@ip-сервера пароль в этот раз не будет запрошен и произойдет подключение по ключу, если нет то смотрим правильно ли запхали ключ куда надо. При удачном подключении:

Перезагрузить сервер SSH sudo systemctl restart ssh выйти exit и по новой подключиться к серверу, так чисто для проверки.

Fail2ban на сервере VPS

Для блокировки желающих брутить пароль доступа по SSh. Хоть доступ и по ключу, но желающих постучать в дверь будет предостаточно, поверьте. Если не верите можно просмотреть логи неудачных авторизаций на сервере, будете удивлены сколько желающих стучится в только что поднятый сервак.

Для примера лог со свежеиспеченного сервера через пару часов начали ломиться:

sudo grep -a "Failed password" /var/log/auth.log

Mar  1 15:12:21 vps sshd[1781]: Failed password for root from 51.255.119.57 port 47644 ssh2
Mar  1 15:12:25 vps sshd[1785]: Failed password for root from 51.255.119.57 port 47656 ssh2
Mar  1 15:12:29 vps sshd[1787]: Failed password for root from 51.255.119.57 port 58304 ssh2
Mar  1 15:12:31 vps sshd[1789]: Failed password for root from 51.255.119.57 port 58318 ssh2
Mar  1 15:12:33 vps sshd[1791]: Failed password for root from 51.255.119.57 port 58334 ssh2
Mar  1 15:12:36 vps sshd[1793]: Failed password for root from 51.255.119.57 port 58342 ssh2
Mar  1 15:12:40 vps sshd[1795]: Failed password for root from 51.255.119.57 port 55938 ssh2
Mar  1 15:12:42 vps sshd[1797]: Failed password for root from 51.255.119.57 port 55950 ssh2
Mar  1 15:12:45 vps sshd[1799]: Failed password for root from 51.255.119.57 port 55956 ssh2
Mar  1 15:12:48 vps sshd[1801]: Failed password for root from 51.255.119.57 port 54116 ssh2
Mar  1 15:12:52 vps sshd[1803]: Failed password for root from 51.255.119.57 port 54132 ssh2
Mar  1 15:12:54 vps sshd[1805]: Failed password for root from 51.255.119.57 port 54138 ssh2
Mar  1 15:12:56 vps sshd[1807]: Failed password for root from 51.255.119.57 port 58274 ssh2
Mar  1 15:13:01 vps sshd[1809]: Failed password for root from 51.255.119.57 port 58276 ssh2
Mar  1 15:13:04 vps sshd[1811]: Failed password for root from 51.255.119.57 port 58282 ssh2
Mar  1 15:13:06 vps sshd[1813]: Failed password for root from 51.255.119.57 port 40876 ssh2
Mar  1 15:13:08 vps sshd[1815]: Failed password for root from 51.255.119.57 port 40882 ssh2
Mar  1 15:13:12 vps sshd[1817]: Failed password for root from 51.255.119.57 port 40896 ssh2
Mar  1 15:13:15 vps sshd[1819]: Failed password for root from 51.255.119.57 port 40904 ssh2
Mar  1 15:13:18 vps sshd[1823]: Failed password for root from 51.255.119.57 port 34492 ssh2
Mar  1 15:13:22 vps sshd[1825]: Failed password for root from 51.255.119.57 port 34496 ssh2
Mar  1 15:13:25 vps sshd[1882]: Failed password for root from 51.255.119.57 port 34500 ssh2
Mar  1 15:13:28 vps sshd[1884]: Failed password for root from 51.255.119.57 port 41088 ssh2
Mar  1 15:13:32 vps sshd[1886]: Failed password for root from 51.255.119.57 port 41098 ssh2
Mar  1 15:13:36 vps sshd[1888]: Failed password for root from 51.255.119.57 port 41102 ssh2
Mar  1 15:13:38 vps sshd[1890]: Failed password for root from 51.255.119.57 port 59034 ssh2
Mar  1 15:13:42 vps sshd[1892]: Failed password for root from 51.255.119.57 port 59046 ssh2
Mar  1 15:13:45 vps sshd[1894]: Failed password for root from 51.255.119.57 port 59060 ssh2
Mar  1 15:13:47 vps sshd[1896]: Failed password for root from 51.255.119.57 port 46238 ssh2
Mar  1 15:13:50 vps sshd[1898]: Failed password for root from 51.255.119.57 port 46254 ssh2

Про настройку Fail2ban читаем

Единственное, что добавил, так это игнорировать определенные IP адреса с которых я подключаюсь, поскольку у меня еще есть статические белые IP. Что бы не попасть в “тюрьму” sudo nano jail.local в строке ignoreip = 127.0.0.1/8 через пробел прописал айпишники, которые нельзя блочить.

Выключить IPv6

Поскольку хостер не дал адреса IPv6 то их поддержку надо отключить читаем и делаем

Фаервол UFW для VPS

Настроить и запустить фаервол UFW

Создать swap

На арендуемом виртуальном сервере файла подкачки нет, надо создать. Мало памяти, пожертвуем дисковым пространством. Проверка объёма файла подкачки swapon --show ничего не показало. Ну или так free

               total        used        free      shared  buff/cache   available
Mem:         2010884     1454152      105668       40192      451064      319940
Swap:              0           0           0
  • Выключить файл подкачки - sudo swapoff /swap.img

Ну нет его:

swapoff: /swap.img: swapoff failed: No such file or directory

Если есть, перезагрузить сервер и удалить sudo rm /swap.img

  • Создать/изменить файл подкачки sudo fallocate -l 2G /swap.img 2 гига нормально думаю будет
  • Примонтировать файл подкачки sudo mkswap /swap.img
mkswap: /swap.img: insecure permissions 0644, fix with: chmod 0600 /swap.img
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=4976e2a7-2f06-4d02-ad96-a0b7845bb669
  • Просят изменить права на файл подкачки, меняем sudo chmod 0600 /swap.img
  • Включить файл подкачки sudo swapon /swap.img
  • Наслаждаемся проделанной работой free -h
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       1.4Gi        74Mi        39Mi       481Mi       324Mi
Swap:          2.0Gi          0B       2.0Gi

Это все будет работать пока система не перезагрузится, поэтому надо добавить автоматическое создание файла подкачки при старте системы.

sudo nano /etc/fstab

Имя сервера в сети

Если есть доменное имя то его можно привязать к серверу VPS. И тогда обращаться к нему не безликими цифрами, а по имени.

На постоянку изменить имя хоста sudo nano /etc/hosts

127.0.0.1       localhost
IP-sсервера     vps.wildserver.ru      vps-wildserver

В моем случае пришлось еще:

  • В личном кабинете хостера удалить бесплатный домен
  • У своего регистратора создать домен с привязкой по айпи к серверу vps
  • Поменять в настройках обратную зону у хостера vps.

Полезные приложения

В заключении программы, которыми частенько пользуюсь:

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

Что бы узнать дает ли хостер заявленные скорости подключения установить:

curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | bash
sudo apt install speedtest

Запустить тест скорости speedtest

При первом запуске спросят согласие на лицензию, согласиться написав YES

Мониторинг ресурсов VPS

Простая программа для просмотра, кто чем занят и сколько ресурсов отнимает. Установка sudo apt install htop запуск htop

Аналог старого Нортон командер

Очень удобный файловый менеджер. Установка sudo apt install mc запуск mc, если нужен доступ как рут тогда запустить так - sudo mc