База по защите VPS

Я раньше вообще не парился с VPSкой — как провайдер отдал, так и пользовался. Подключался по ssh с паролем и было ок. Потом чуть более удобно стало, когда научился добавлять ssh-ключ чтобы логиниться без пароля. Но как только на сервере появилась ценность, я решил, что надо разобраться как его защитить. И вот что нарыл.

Самое простое — это скормить пост вашему агенту, он всё сделает за 5 минут. Главное не забудьте сделать snapshot диска, прежде чем его запустить.

Не стоит использовать root для логина к VPS. Боты постоянно сканируют интернет и ломятся по все щели. root — стандартное имя, и естественно его проверяют первым. Лучше придумать какой-то свой хитрый логин. admin тоже не супер, но лучше чем root.

1. Создай отдельного пользователя для входа

adduser admin usermod -aG sudo admin

Из под него все опасные команды можно будет делать только с sudo, да еще и придется подтверждать паролем. Если не нравится вводить пароль, то можно выключить. Но так ты уберешь один уровень защиты.

echo 'admin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin

2. Добавь SSH-ключ

mkdir -p /home/admin/.ssh nano /home/admin/.ssh/authorized_keys chown -R admin:admin /home/admin/.ssh chmod 700 /home/admin/.ssh chmod 600 /home/admin/.ssh/authorized_keys

и обязательно залогинься в новой сессии терминала:

ssh admin@SERVER_IP

ВАЖНО! Не закрывай старую SSH-сессию, пока новый вход не проверен, а то можно так потерять доступ к VPS навсегда. Шучу, при потере доступа придется лезть в консоль в личном кабинете провайдера. Это обычно ужасный опыт, тебе это не надо.

3. Отключи вход root и парольный SSH

Создай файл настроек:

sudo nano /etc/ssh/sshd_config.d/99-hardening.conf

Напиши туда:

PermitRootLogin no PasswordAuthentication no KbdInteractiveAuthentication no

Проверь валидность и перезагрузи SSH:

sudo sshd -t sudo systemctl reload ssh

Всё, теперь на сервак с паролем не попасть, только с твоим ssh-ключем и хитрым логином.

Это уже снизило на 99% шанс потерять доступ к VPS. Но мы идем еще дальше.

4. Установи fail2ban

Fail2ban, очевидно, блокирует неудачников, кто долбится на сервак не зная пароля или с левым ключом. Не будь в их числе.

sudo apt install -y fail2ban sudo nano /etc/fail2ban/jail.d/sshd.local

Внутри напиши такое:

[sshd] enabled = true port = ssh filter = sshd logpath = %(sshd_log)s backend = auto maxretry = 5 findtime = 10m bantime = 1h

Перезапусти и проверь:

sudo systemctl enable --now fail2ban sudo fail2ban-client status sshd

5. Закрой порты

Чекнуть открытые можно вот так:

sudo ss -tulpn

Для веб-сервисов достаточно 22, 80 и 443

База данных, докер и прочее не должно торчать в интернет. Поэтому надо закрыть лишнее фаерволлом

6. Firewall

Ставим «огненную стену» и разрешаем подключения только по SSH, HTTP и HTTPS.

sudo apt update sudo apt install -y ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status verbose

P.S. Для большей конспирации можное еще и SSH на другой порт переназначить. Но это уже без меня.

⤵️Ставь лайк, если полезно. И не забудь сохранить, пригодится.


В этом посте были ссылки, но мы их удалили по правилам Сетки