Перші 10 кроків безпеки на новому VPS
На новому VPS спершу слід оновити систему, створити окремого користувача, який входить за ключем замість root, вимкнути вхід за паролем, увімкнути брандмауер і fail2ban, ввімкнути автоматичні оновлення безпеки та перевірити, чи працюють резервні копії. Нижче — 10 кроків у тому порядку, в якому їх варто виконувати. Команди призначені для Ubuntu і Debian.
Кожен сервер в інтернеті — ціль для автоматичного сканування та ботів, що підбирають паролі, і це видно у вашому власному журналі SSH. Порядок має значення: перш ніж виконувати крок 4, переконайтеся, що кроки 2 і 3 працюють, інакше можна заблокувати собі доступ. sudo у командах працює й тоді, коли ви увійшли як root.
Система й облікові записи
1. Оновіть систему
sudo apt update && sudo apt upgrade -y
В Ubuntu файл /var/run/reboot-required з’являється, коли оновленню потрібен перезапуск. Якщо він є, один раз перезапустіть сервер. У Debian цей файл може не створюватися, тому після оновлення ядра перезапускайте в будь-якому разі.
2. Створіть власного користувача
Не користуйтеся root у щоденній роботі. Створіть окремого користувача з правами sudo. Замість deploy підставте будь-яке ім’я:
sudo adduser deploy
sudo usermod -aG sudo deploy
3. Входьте за ключем SSH
Якщо на вашому комп’ютері ще немає пари ключів, створіть її командою ssh-keygen -t ed25519. Потім скопіюйте відкритий ключ новому користувачеві та перевірте вхід:
ssh-copy-id [email protected]
Якщо ви увійшли без запиту пароля, усе готово. У Windows немає ssh-copy-id. У PowerShell те саме робить ця команда:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Захистіть SSH
4. Вимкніть вхід за паролем і вхід під root
Спершу переконайтеся, що можете увійти новим користувачем за ключем. Потім дізнайтеся, у яких файлах задано ці налаштування. Якщо OpenSSH знаходить те саме налаштування в кількох місцях, він бере перше прочитане значення. У Debian і Ubuntu головний файл конфігурації на самому початку підключає теку /etc/ssh/sshd_config.d/. Образи провайдерів можуть залишити в цій теці файл, що вмикає вхід за паролем. Навіть якщо в головному файлі ви напишете no, значення yes із того файлу залишиться чинним:
sudo grep -rniE "^\s*(PasswordAuthentication|PermitRootLogin|KbdInteractiveAuthentication)" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
Задайте no у кожному активному рядку з результату, у тому файлі, де він трапився: PasswordAuthentication no, PermitRootLogin no, KbdInteractiveAuthentication no. Налаштування, яких у результаті немає, додайте в кінець /etc/ssh/sshd_config. Потім перевірте, застосуйте й подивіться значення, які діють насправді:
sudo sshd -t && sudo systemctl reload ssh
sudo sshd -T | grep -E "^(passwordauthentication|permitrootlogin|kbdinteractiveauthentication)"
Усі три рядки мають закінчуватися на no. Не закривайте відкритий сеанс. Відкрийте новий термінал і переконайтеся, що вхід за ключем працює, перш ніж піти. Якщо ви все ж заблокували собі доступ, відкрийте консоль VNC у панелі. Налаштування SSH не впливають на вхід через консоль.
Ці налаштування згодом можуть непомітно повернутися. Дії в панелі провайдера, як-от додавання ключа SSH чи скидання пароля, можуть призвести до того, що під час наступного завантаження знову запуститься скрипт першого запуску провайдера (cloud-init), а він може знову ввімкнути вхід за паролем. Після будь-якої такої дії ще раз виконайте наведену вище команду sshd -T і перевірте значення.
Обмежте доступ ззовні
5. Увімкніть брандмауер
В ufw спершу дозвольте SSH, а потім вмикайте брандмауер. Якщо зробити навпаки, з’єднання розірветься. Якщо SSH працює не на порту 22, використайте замість 22 свій порт:
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose
Якщо запускатимете вебсервер, дозвольте також порти 80 і 443. За замовчуванням ufw відхиляє вхідні з’єднання. У панелі теж є інструмент брандмауера. Якщо ви користуєтеся Docker, будьте обережні: за документацією Docker, опубліковані порти обходять правила ufw. Для служб, до яких має звертатися лише сам сервер, публікуйте порт тільки на адресі loopback, наприклад 127.0.0.1:5432:5432 у файлі Docker Compose.
6. Встановіть fail2ban
fail2ban на деякий час блокує IP-адреси, з яких постійно невдало намагаються увійти:
sudo apt install -y fail2ban python3-systemd
printf '[sshd]\nenabled = true\nbackend = systemd\nmaxretry = 5\nbantime = 1h\n' | sudo tee /etc/fail2ban/jail.local
sudo systemctl enable fail2ban && sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
На серверах Seturack із застосунками в один клік ufw увімкнено, а fail2ban працює. Якщо ви встановили чисту операційну систему, перевірте їхній стан командами sudo ufw status і systemctl is-active fail2ban.
7. Перегляньте відкриті порти
sudo ss -tulpn
Команда виводить усі служби й порти, що слухають з’єднання. Служби, яким не потрібен доступ ззовні, як-от бази даних і кеші, мають слухати лише 127.0.0.1. Вимкніть усе непотрібне: sudo systemctl disable --now service-name
Підтримуйте порядок
8. Автоматизуйте оновлення безпеки
За документацією Ubuntu, пакет unattended-upgrades зазвичай встановлений заздалегідь, а оновлення безпеки ввімкнено. Якщо його немає, встановіть і ввімкніть:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Автоматичний перезапуск за замовчуванням вимкнено, тому після оновлень ядра перезапускайте сервер самостійно. За умовами користування підтримувати систему в актуальному стані після налаштування — ваша відповідальність.
9. Робіть резервні копії й перевіряйте відновлення
У Seturack резервна копія вашого сервера створюється щоночі, і зберігаються останні 7 днів. Це входить у ціну. На вкладці Керування відкрийте Резервні копії, щоб переглянути їх, відновити окремий файл або весь сервер. Щоб перевірити відновлення, відновіть один файл: відновлення всього сервера замінює весь поточний диск. Знімок перед великою зміною — добра звичка, але знімок не є резервною копією. Зберігайте копію важливих даних і поза сервером. Докладніше читайте в статті про щоденні резервні копії.
10. Зміцніть паролі
Ваш обліковий запис у панелі — ключ до сервера. Використовуйте там довгий пароль, який ніде більше не застосовується, і зберігайте його в менеджері паролів. Змініть перший пароль root, скопійований із панелі, командою sudo passwd root. Захистіть закритий ключ SSH парольною фразою. Ніколи не надсилайте паролі чи ключі в повідомленнях до підтримки або в чатах.
Коментарі0
Коментарів поки немає
Поділіться своєю думкою першим.
Будь ласка, увійдіть або зареєструйтеся, щоб залишити коментар.