База по защите 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 на другой порт переназначить. Но это уже без меня.
⤵️Ставь лайк, если полезно. И не забудь сохранить, пригодится.
В этом посте были ссылки, но мы их удалили по правилам Сетки