Yangi serverni sozlash — foydalanuvchi, SSH, yangilanishlar
Muammodan boshlaylik
VPS sotib oldingiz. Provayder xat yubordi:
IP: 45.12.34.56
Login: root
Parol: Xk8#mP2qL9
Bu daqiqadan boshlab server internetda — va bir necha daqiqa ichida botlar unga hujum qilishni boshlaydi: root paroliga tanlash, ochiq portlarni skanerlash. Bir kunda auth.log da (18-dars) minglab urinish bo'ladi.
Shuning uchun yangi serverda birinchi 15 daqiqa — ilova o'rnatish emas, xavfsizlik. Bu dars — barcha oldingi bilimlaringiz asosida tekshiruv ro'yxati.
0. Birinchi kirish
ssh root@45.12.34.56
Distributiv va versiyani tekshiring:
cat /etc/os-release
uname -r
1. Tizimni yangilash
apt update && apt upgrade -y
Server image si bir necha oy eski bo'lishi mumkin — ko'plab xavfsizlik yamalari kutilmoqda (29-dars). Yadro yangilangan bo'lsa:
[ -f /var/run/reboot-required ] && reboot
Asosiy vositalar:
apt install -y curl git htop ncdu ufw fail2ban unattended-upgrades
Vaqt mintaqasi va hostname
timedatectl set-timezone Asia/Tashkent
hostnamectl set-hostname dokon-prod
2. Oddiy foydalanuvchi
root sifatida ishlash — xavfli (19-dars). Shaxsiy foydalanuvchi yarating:
adduser otabek
usermod -aG sudo otabek
SSH kalitini ko'chirish
Lokal kompyuterda (yangi terminal oynasida):
ssh-copy-id otabek@45.12.34.56
Kalit hali yo'q bo'lsa — avval ssh-keygen -t ed25519 (34-dars).
Tekshiring — yangi terminalda, eski root sessiyasini yopmasdan:
ssh otabek@45.12.34.56
sudo whoami # root
Ikkalasi ham ishlasa — davom eting.
Lokal ~/.ssh/config ga qo'shing:
Host dokon
HostName 45.12.34.56
User otabek
3. SSH ni himoyalash
sudo nano /etc/ssh/sshd_config.d/99-xavfsiz.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
Alohida faylda — asosiy sshd_config yangilanganda o'zgarishlarimiz yo'qolmaydi (Ubuntu sshd_config.d/ ni avtomatik o'qiydi).
sudo sshd -t # sintaksis tekshiruvi — xato bo'lsa, qayta ishga tushirmang!
sudo systemctl restart ssh
[!WARNING] Hozir mavjud sessiyani yopmang. Yangi terminalda tekshiring:
ssh dokon— kalit bilan kirish ishlaydi ✓ssh root@45.12.34.56—Permission denied✓ssh -o PubkeyAuthentication=no dokon—Permission denied✓ (parol rad etiladi)Faqat shundan keyin eski sessiyani yoping.
[!INFO] SSH portini 22 dan boshqasiga (masalan, 2222) o'zgartirish — loglardagi shovqinni kamaytiradi, lekin haqiqiy himoya emas (skanerlar barcha portlarni topadi). Kalit + parol o'chirilgan + fail2ban — haqiqiy himoya.
4. Firewall
36-darsdagi tartib — SSH birinchi:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Bulut provayderingizda ham firewall bo'lsa — u yerda ham 22, 80, 443.
5. fail2ban
Shubhali IP larni avtomatik bloklaydi:
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| `- Total failed: 127
`- Actions
|- Currently banned: 4
`- Banned IP list: 185.220.101.4 91.213.8.92 ...
6. Avtomatik xavfsizlik yangilanishlari
sudo dpkg-reconfigure -plow unattended-upgrades
"Yes" ni tanlang. Endi xavfsizlik yamalari har kuni avtomatik o'rnatiladi (29-dars).
Tekshirish:
sudo unattended-upgrade --dry-run --debug 2>&1 | tail -5
7. Swap (kichik serverlar uchun)
1–2 GB RAM li VPS da — OOM killer dan himoya (27-dars):
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h
8. Log hajmini cheklash
sudo sed -i 's/^#\?SystemMaxUse=.*/SystemMaxUse=500M/' /etc/systemd/journald.conf
sudo systemctl restart systemd-journald
Disk loglar bilan to'lib qolmasligi uchun (26-dars).
Yakuniy tekshiruv
# Kim kira oladi
sudo grep -E "^(PermitRootLogin|PasswordAuthentication)" -r /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
# Qaysi portlar tashqariga ochiq
sudo ss -tlnp | grep -v "127.0.0.1"
sudo ufw status
# Xizmatlar
systemctl is-active ssh ufw fail2ban unattended-upgrades
# Xotira va disk
free -h && df -h /
Tekshiruv ro'yxati
[ ] Tizim yangilangan (apt upgrade), kerak bo'lsa reboot
[ ] Vaqt mintaqasi va hostname o'rnatilgan
[ ] Oddiy foydalanuvchi + sudo
[ ] SSH kalit bilan kirish ishlaydi
[ ] PermitRootLogin no, PasswordAuthentication no — tekshirilgan
[ ] ufw: faqat 22, 80, 443
[ ] fail2ban ishlayapti
[ ] unattended-upgrades yoqilgan
[ ] Swap (kichik RAM bo'lsa)
[ ] journald hajmi cheklangan
[!TIP] Bu qadamlarni bir marta qo'lda bajarib, keyin skriptga aylantiring (37–39-darslar) yoki cloud-init dan foydalaning: ko'p provayderlar server yaratishda skriptni avtomatik bajaradi. Keyingi bosqich — Ansible: yuzlab serverni bir xil sozlash vositasi.
Nima uchun shunday?
Nima uchun bu qadamlar aynan shu tartibda — masalan, nega firewall birinchi emas?
Har bir qadam oldingisiga tayanadi va sizni qulflanib qolishdan himoya qiladi. Avval yangilash — chunki eski paketlarda ma'lum zaifliklar bor. Keyin oddiy foydalanuvchi va kalit — chunki root va parolni o'chirishdan oldin boshqa kirish yo'li ishlashi kerak. SSH ni himoyalashni yangi terminalda tekshirish — chunki xato sizni butunlay tashqarida qoldiradi. Firewall da SSH birinchi ruxsat etiladi — xuddi shu sababdan. Qoida: har bir o'zgarishdan keyin — tekshir, va orqaga qaytish yo'lini ochiq qoldir. Bu — serverlar bilan ishlashning eng muhim odati.
Xulosa
Eslab qoling:
- Yangi server — birinchi 15 daqiqa xavfsizlik uchun
apt update && apt upgrade, kerak bo'lsa reboot- Oddiy foydalanuvchi +
sudo+ssh-copy-id sshd_config.d/:PermitRootLogin no,PasswordAuthentication no;sshd -t- Eski sessiyani yopmasdan yangi terminalda tekshirish
- ufw: OpenSSH birinchi, keyin 80/443
- fail2ban, unattended-upgrades, swap, journald chegarasi
- Keyin — skript, cloud-init yoki Ansible
Keyingi dars
43-dars: Nginx asoslari — statik sayt, reverse proxy, HTTPS