Tropic Host

VPS xavfsizligini noldan sozlash: SSH kalitlari, firewall va Fail2ban

6 daqiqa o‘qish
Tropic
VPS xavfsizligini noldan sozlash: SSH kalitlari, firewall va Fail2ban

Language: uz

VPS xavfsizligini noldan sozlash: SSH kalitlari, firewall va Fail2ban

Yangi VPS Ubuntu o‘rnatilgandan keyin darhol xavfsiz deb hisoblanmasligi kerak. Kirish sozlanishidan oldin ham server skanerlar uchun ko‘rinadi: ular SSH parollarini sinaydi, ochiq boshqaruv panellarini qidiradi va keng tarqalgan zaifliklarni tekshiradi. Ushbu qo‘llanmada VPSni noldan himoyalashning asosiy bosqichlarini ko‘rib chiqamiz: alohida foydalanuvchi yaratish, SSH kalitlari orqali autentifikatsiyani sozlash, UFW yordamida tarmoq portlarini cheklash va Fail2ban qo‘shish. Barcha qadamlar sudo huquqiga ega foydalanuvchi tomonidan bajarilsa, Ubuntu 22.04 va 24.04 da ishlaydi.

Boshlashdan oldin: portlar ro‘yxatini tuzing

Portlarni “kerak bo‘lib qolishi mumkin” deb ochmang. Oddiy veb-serverga odatda quyidagilar kerak:

  • 22/tcp — SSH; uni IP bo‘yicha cheklash yoki boshqa portga ko‘chirish faqat qo‘shimcha chora sifatida ma’qul;
  • 80/tcp — HTTP; odatda HTTPSga yo‘naltirish va sertifikatni tekshirish uchun kerak;
  • 443/tcp — HTTPS.

3000, 8080 yoki 9000 kabi ilova portlari oldida Nginx yoki Caddy ishlayotgan bo‘lsa, internetdan ochiq bo‘lmasligi kerak. Ilovani 127.0.0.1 ga bog‘lang yoki uning portiga faqat ichki tarmoqdan ruxsat bering. Avval serverda nimalar tinglayotganini aniqlang:

sudo ss -tulpn

Docker o‘rnatilgandan keyin uning iptables qoidalarini alohida tekshiring: -p 3000:3000 bilan port e’lon qilish kutilgan sozlamadan tashqarida portni ochib qo‘yishi mumkin. Ochiq servis uchun HTTPS proksisidan foydalanish va ichki portni yashirish xavfsizroq.

1-qadam. Tizimni yangilang va administrator yarating

Sizga berilgan ma’lumotlar yordamida VPSga ulanib, yangilanishlarni o‘rnating:

sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgrades

Shaxsiy foydalanuvchi yarating. alex o‘rniga o‘z ismingizni yozing:

sudo adduser alex
sudo usermod -aG sudo alex

Yangi akkauntni alohida terminal oynasida sinamaguningizcha dastlabki kirishni o‘chirmang. Bu muhim qoida: joriy sessiya hali ochiq turganda SSH xatosini tuzatish osonroq.

2-qadam. SSH kalitini yarating va serverga o‘rnating

Linux, macOS yoki Windows PowerShell kompyuteringizda quyidagini bajaring:

ssh-keygen -t ed25519 -C "alex@my-computer"

Kalitni standart faylga saqlash uchun Enter tugmasini bosing va keyin passphrase belgilang. Shaxsiy kalitni hech qachon chatga yubormang, repozitoriyga joylamang yoki VPSga ko‘chirmang. Serverga faqat .pub kengaytmali fayl o‘tkazilishi kerak:

ssh-copy-id alex@SERVER_IP

Agar ssh-copy-id mavjud bo‘lmasa, PowerShell’da Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub orqali ochiq kalitni ko‘rsating va keyin uni serverga qo‘shing:

sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keys

Kalitni bitta qatorda joylashtiring va parollarni o‘chirishdan oldin kirishni sinang:

ssh alex@SERVER_IP
sudo whoami

Oxirgi buyruq natijasi root bo‘lishi kerak. SSH mijozi kalitni topa olmasa, uni aniq ko‘rsating: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.

3-qadam. Root orqali kirish va parol autentifikatsiyasini o‘chiring

SSH konfiguratsiyasining zaxira nusxasini yarating:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

Faylda quyidagi parametrlar borligiga ishonch hosil qiling:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3

Ubuntu’da sozlamalar /etc/ssh/sshd_config.d/*.conf ichida bo‘lishi mumkin, shuning uchun amaldagi konfiguratsiyani tekshiring:

sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'

Agar sshd -t xato haqida xabar bersa, sintaksisni tuzatmaguningizcha servisni qayta ishga tushirmang. Tekshiruv muvaffaqiyatli o‘tgach, sozlamalarni qo‘llang:

sudo systemctl reload ssh

Eski SSH ulanishini ochiq qoldiring va yangi oynada kalit orqali kirishni sinang. Tekshirilgan kalitsiz parollarni o‘chirish serverga kirishni yo‘qotishning eng ko‘p uchraydigan sababidir.

4-qadam. SSHni bloklamagan holda UFWni sozlang

UFW Linux tarmoq qoidalari ustidagi qulay qobiqdir. Avval xavfsiz standartlarni o‘rnating, keyin SSH va veb-portlarga ruxsat bering:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable

SSH qoidasi qo‘shilgandan keyingina faollashtirishni tasdiqlang. Natijani ko‘rib chiqing:

sudo ufw status verbose
sudo ufw status numbered

Doimiy ofis IP manzili uchun SSHni shu manzil bilan cheklashingiz mumkin:

sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'

Bu variantdan faqat doimiy IP va provayder konsoliga kirish mavjud bo‘lsa foydalaning: manzil o‘zgarsa, o‘zingizni serverdan uzib qo‘yishingiz mumkin.

Ilova portini vaqtincha qanday ochish mumkin

Servisni to‘g‘ridan-to‘g‘ri tekshirish kerak bo‘lsa, manbasi cheklangan qoida yarating:

sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcp

Tekshiruvdan so‘ng ufw status numbered ko‘rsatgan raqam orqali uni o‘chiring:

sudo ufw delete RULE_NUMBER

sudo ufw allow 1:65535/tcp buyrug‘idan foydalanmang: bunday qoida firewallni shunchaki rasmiyatchilikka aylantiradi.

5-qadam. SSH uchun Fail2banni yoqing

Fail2ban loglarni tahlil qiladi va bir nechta muvaffaqiyatsiz kirish urinishidan so‘ng vaqtinchalik bloklash qoidasini qo‘shadi. U SSH kalitlari yoki firewall o‘rnini bosmaydi, ammo avtomatlashtirilgan brute-force urinishlaridan keladigan shovqinni kamaytiradi.

Paket yangilanishlari sozlamalaringizni ustiga yozmasligi uchun lokal konfiguratsiya yarating:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

[DEFAULT] bo‘limida oqilona qiymatlarni belgilang:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw

[sshd]
enabled = true
port = 22

Servisni ishga tushiring va jailni tekshiring:

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

sshd natijasida muvaffaqiyatsiz urinishlar va bloklangan manzillar sonini tekshiring. O‘z IP manzilingizni ban ro‘yxatiga qo‘shmang. Doimiy istisno uchun [DEFAULT] bo‘limida ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP dan foydalaning.

6-qadam. Avtomatik yangilanishlarni yoqing

Avtomatik yangilanishlar xavfsizlik paketlari uchun foydali, ammo kernelni qayta ishga tushirishni baribir boshqarish kerak:

sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgrades

Haftada bir marta qayta ishga tushirish zarurligini tekshiring:

test -f /var/run/reboot-required && echo 'Требуется перезапуск'

Qo‘lda qayta ishga tushirishdan oldin ishlaydigan kalit va VPS konsoliga kirish borligiga ishonch hosil qiling. Qayta ishga tushirgandan so‘ng ilova servislarini, Nginxni, UFWni va Fail2banni tekshiring.

7-qadam. Natijani tashqaridan tekshiring

Himoyani faqat konfiguratsiyani o‘qib emas, boshqa kompyuterdan tekshiring:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IP

Buyruq rad etish xabari bilan tugashi kerak. Ishlaydigan kalitli kirishni alohida sinang:

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IP

VPSda tinglayotgan manzillar va qoidalarni tekshiring:

sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshd

To‘g‘ridan-to‘g‘ri kirish uchun mo‘ljallanmagan ilova porti 127.0.0.1 da tinglashi kerak. Tashqi hostdan nmap SERVER_IP dan foydalanishingiz mumkin, ammo faqat o‘z serveringizni skanerlang: birovning infratuzilmasini ruxsatsiz tekshirish qonun va provayder qoidalarini buzishi mumkin.

Zaxira nusxalari va tiklash

SSH himoyasi o‘chirilgan ma’lumotlar, administrator xatosi yoki buzilgan ilovadan himoya qilmaydi. Ma’lumotlar bazasi, konfiguratsiya va foydalanuvchi fayllarining nusxalarini VPSdan alohida saqlang. Minimal variant — kunlik zaxira, oldingi kunlardan bir nechta versiya va vaqti-vaqti bilan tiklash sinovlari.

Parol yoki tokenlarni oddiy matnli skriptlarga yozmang. Sir oshkor bo‘lsa, uni darhol bekor qiling va yangisini yarating.

Xavfsiz loyiha uchun VPSni qanday tanlash kerak

Xavfsizlik infratuzilma ustidan nazoratdan boshlanadi. VPSda operatsion tizim, firewall qoidalari, kirish usuli, zaxira nusxalari va servislarni joylashtirishni o‘zingiz tanlaysiz. Kichik veb-sayt yoki API uchun ortiqcha virtual yadrolardan ko‘ra barqaror tarmoq, SSD xotira va tiklash konsoli muhimroq.

Loyihani tropic.host VPSida ishga tushirganda, uning ochiq kirish nuqtalarini oldindan belgilang: aksariyat hollarda SSH, HTTP va HTTPS yetarli. Ma’lumotlar bazasi va boshqaruv panellarini ichki tarmoqda saqlang. Loyiha o‘sgani sayin ilova, ma’lumotlar bazasi va monitoring uchun alohida VPS nusxalari nosozlik domenlarini ajratishga yordam beradi.

Keng tarqalgan xatolar

  • Kalit orqali kirishni sinamasdan parollarni o‘chirish. Joriy sessiyani ochiq qoldiring va yangi kirishni alohida tekshiring.
  • Ishonchli manzillardan ruxsat berish mumkin bo‘lsa ham, 22/tcp ni butun dunyo uchun ochiq qoldirish.
  • Docker portlarini to‘g‘ridan-to‘g‘ri e’lon qilish. Avval Docker va UFW qoidalarini tekshiring.
  • Fail2ban o‘rnatib, keyin loglarni hech qachon tekshirmaslik. O‘zgarishlardan so‘ng journalctl -u ssh va jail holatini ko‘rib chiqing.

Xulosa

Asosiy VPS himoyasi qadamlar to‘g‘ri tartibda bajarilganda ko‘p vaqt olmaydi: alohida foydalanuvchi yarating, SSH kalitini o‘rnating, kirishni tekshiring, root orqali kirish va parollarni o‘chiring, UFWni yoqing, Fail2banni sozlang va avtomatik yangilanishlarni ishga tushiring. Keyin zaxira nusxalari, loglar va tashqi monitoringni qo‘shing.

Bu qadamlar serverni daxlsiz qilmaydi, ammo dastlabki sozlamalardagi eng ko‘p uchraydigan xatolarni bartaraf etadi. Keyingi bosqich — xavfsizlik profilini aniq ilovaga moslash: bog‘liqliklarni yangilash, servis ruxsatlarini cheklash, admin panellarini himoyalash va ochiq portlarni muntazam tekshirish.

FAQ

Standart SSH portini o‘zgartirishim kerakmi?

Shart emas. Portni ko‘chirish avtomatik shovqinni kamaytiradi, ammo kalitlar, o‘chirilgan parollar, UFW yoki Fail2ban o‘rnini bosmaydi. Portni o‘zgartirsangiz, firewall qoidasini va Fail2ban jailidagi port parametrini ham yangilang.

UFWni sozlaganimdan keyin kirish yo‘qolsa, nima qilaman?

Provayderning veb yoki rescue konsolidan foydalaning, so‘ng SSH qoidasi va sshd konfiguratsiyasini tekshiring. Yangi kirish tasdiqlanmaguncha eski ishlayotgan sessiyani yopmang.

Fail2ban SSHni himoyalash uchun yetarlimi?

Yo‘q. Fail2ban allaqachon sodir bo‘lgan kirish xatolariga javob beradi. Asos SSH kalitlari, parol autentifikatsiyasini o‘chirish, foydalanuvchi ruxsatlarini minimallashtirish va cheklangan firewall bo‘lishi kerak.

SSHga faqat bitta IP manzilidan ruxsat bera olamanmi?

Ha, manzil doimiy bo‘lsa, shu IP uchun UFW allow from qoidasini qo‘shing. Provayder konsoliga kirish yoki boshqa zaxira yo‘lini oldindan tayyorlang, chunki IP o‘zgargach ulanish bloklanadi.

VPS xavfsizligini qanchalik tez-tez tekshirish kerak?

SSH, firewall yoki Docker portlarini e’lon qilishdagi har bir o‘zgarishdan so‘ng portni tekshiring va kirishni sinang. Muntazam xizmat sifatida yangilanishlar va loglarni kamida haftasiga bir marta ko‘rib chiqing, zaxiradan tiklashni esa doimiy ravishda sinang.