Linux serverda SSH’ni qanday himoyalash kerak
Amaliyot3 daqInnovialabs tahririyati
Qisqacha
Xavfsiz SSH — sudo huquqli alohida foydalanuvchi ostida faqat kalit orqali kirish, root va parol bilan kirishni taqiqlash, parol tanlashga qarshi fail2ban, kirishni cheklaydigan firewall va loglarni muntazam ko‘rib chiqish. Muhim serverlar uchun ikkinchi omil, masalan apparat kalit qo‘shing.
Avvalo nima qilish kerak
22-port ochiq bo‘lgan har qanday serverga botlar doimiy ravishda kirishga urinadi. Himoyaning minimal to‘plami:
- Faqat SSH-kalitlar orqali kirish.
- root uchun va parol bilan kirishni taqiqlash.
sudohuquqli alohida foydalanuvchi.- Parol tanlashga qarshi fail2ban yoki uning analogi.
- Imkon bo‘lsa, SSH’ni faqat kerakli manzillarga ochadigan firewall.
Sozlashdagi asosiy qoida: yangi terminal oynasida kirishni tekshirmaguningizcha joriy sessiyani yopmang. Aks holda serverga kirish huquqini osongina yo‘qotib qo‘yasiz.
1-bosqich. Alohida foydalanuvchi va kalitlar
Serverda foydalanuvchi yarating va unga sudo huquqini bering (buyruq distributivga bog‘liq — masalan, Debian/Ubuntu’da sudo guruhi yoki RHEL’ga o‘xshash tizimlarda wheel).
O‘z kompyuteringizda kalit yarating va ochiq qismini serverga nusxalang:
ssh-keygen -t ed25519 -C "laptop-work"
ssh-copy-id deploy@your-server
Maxfiy kalitni parol iborasi bilan himoyalang — shunda o‘g‘irlangan kalit fayli o‘zi foydasiz bo‘ladi. Har bir qurilma uchun alohida kalit yaratgan ma’qul: noutbuk yo‘qolsa, authorized_keys faylidan bitta qator o‘chiriladi.
2-bosqich. sshd’ni sozlash
/etc/ssh/sshd_config faylini oching (yoki distributiv uni ulasa, /etc/ssh/sshd_config.d/ ichida fayl yarating) va quyidagilarni belgilang:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers deploy
MaxAuthTries 3
Sintaksisni tekshiring va konfiguratsiyani qayta yuklang:
sudo sshd -t && sudo systemctl reload ssh
Ba’zi distributivlarda xizmat sshd deb ataladi. Qayta yuklagandan keyin yangi oyna oching va kalit bilan kira olishingizga ishonch hosil qiling.
Portni 22 dan boshqasiga o‘zgartirish loglardagi shovqinni kamaytiradi, lekin himoya emas: skanerlar SSH’ni istalgan portda topadi. Xohlasangiz qiling, lekin boshqa qadamlar o‘rniga emas.
3-bosqich. fail2ban
fail2ban loglarni o‘qiydi va bir necha muvaffaqiyatsiz urinishdan keyin IP’ni vaqtincha bloklaydi. /etc/fail2ban/jail.local faylidagi minimal sozlama:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
Holat va bloklangan manzillar:
sudo fail2ban-client status sshd
Faqat kalit orqali kirishda parol tanlash allaqachon befoyda, lekin fail2ban yuklama va loglardagi shovqinni kamaytiradi.
4-bosqich. Firewall
Keraksiz hamma narsani yoping va imkon bo‘lsa, SSH’ni ishonchli manzillar bilan cheklang. ufw uchun misol:
sudo ufw default deny incoming
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
Doimiy IP bo‘lmasa, VPN yoki bastion-server (jump host) ishlating: SSH faqat unga ochiq, u esa alohida puxta himoyalangan. Ko‘plab bulutli provayderlar tarmoq filtrlari (security groups) ham beradi — bu server oldidagi qo‘shimcha qatlam.
5-bosqich. Ikkinchi omil
Muhim serverlar uchun 2FA qo‘shing. Ikki keng tarqalgan variant:
| Variant | Qanday ishlaydi | Xususiyatlari |
|---|---|---|
| Apparat kalit (FIDO2) | ed25519-sk turidagi kalit, jismoniy token kerak | Sozlash oson, kalit fayli o‘g‘irlanishidan himoya |
| PAM orqali TOTP | Kalit va autentifikator ilovasidagi kod | PAM va AuthenticationMethods sozlanishi kerak |
Apparat kalit quyidagicha yaratiladi:
ssh-keygen -t ed25519-sk
TOTP varianti uchun distributivingiz yo‘riqnomasiga amal qiling va sinov paytida ishlaydigan sessiyani albatta ochiq qoldiring.
6-bosqich. Kirishlar auditi
Kim va qayerdan kirayotganini muntazam ko‘rib turing:
sudo journalctl -u ssh --since "24 hours ago"
last -n 20
sudo lastb -n 20
Nimani tekshirish kerak:
- notanish IP’lardan muvaffaqiyatli kirishlar;
- foydalanuvchilarning
~/.ssh/authorized_keysfaylidagi yangi qatorlar; - sudo huquqli yangi foydalanuvchilar paydo bo‘lishi.
Bir nechta server bo‘lsa, loglarni markazlashgan tizimga yuborish va ogohlantirishlarni sozlash qulayroq.