Yangi serverni sozlash — foydalanuvchi, SSH, yangilanishlar

~20 daq · Linux · Server

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