Skip to content

10. Xavfsizlik — 20 ta masala

Faqat laboratoriya mashinasida

Firewall, SELinux va tizim parametrlarini noto'g'ri o'zgartirish serverga kirish imkonini yo'qotishi mumkin. Mashqlarni virtual mashinada, snapshot bilan bajaring.

1. Serverda tashqaridan ochiq bo'lgan barcha TCP portlarni toping va ularning har biri nima uchun kerakligini baholang.
Misol: 0.0.0.0:22, 0.0.0.0:80.

Yechim

sudo ss -ltnp
0.0.0.0 yoki [::] ga bog'langan har bir port tashqaridan ko'rinadi. Kerak bo'lmagan xizmatni to'xtating (systemctl disable --now), kerakli bo'lsa firewall bilan cheklang. Ochiq portlar soni — hujum yuzasi.

2. Hamma yoza oladigan fayllarni /etc va /usr da toping.
Misol: odatda hech narsa chiqmaydi.

Yechim

sudo find /etc /usr -xdev -type f -perm -0002 2>/dev/null
Tizim fayllarining har kim yoza olishi — imtiyozni oshirish uchun eshik. Chiqsa, ruxsatni chmod o-w bilan olib tashlang.

3. Egasi yo'q fayllarni toping (o'chirilgan foydalanuvchidan qolgan).
Misol: find / -xdev -nouser.

Yechim

sudo find / -xdev \( -nouser -o -nogroup \) 2>/dev/null
Yangi foydalanuvchi shu UID ni olsa, eski fayllarga avtomatik egalik qiladi: bu kutilmagan ruxsat sizib o'tishiga olib keladi.

4. SSH orqali muvaffaqiyatsiz kirish urinishlarini jurnaldan toping.
Misol: Failed password for root from 203.0.113.9.

Yechim

sudo journalctl -u ssh --since today | grep 'Failed password'
sudo grep 'Failed password' /var/log/auth.log | tail
RHEL oilasida: /var/log/secure, xizmat sshd.

5. Eng ko'p muvaffaqiyatsiz urinish qilgan 5 ta IP manzilni toping.
Misol: 42 203.0.113.9.

Yechim
sudo grep 'Failed password' /var/log/auth.log \
  | grep -oE 'from [0-9.]+' | awk '{print $2}' \
  | sort | uniq -c | sort -rn | head -n 5

6. Oxirgi muvaffaqiyatli va muvaffaqiyatsiz kirishlar ro'yxatini ko'ring.
Misol: last — muvaffaqiyatli, lastb — muvaffaqiyatsiz.

Yechim
last -n 10
sudo lastb -n 10

7. fail2ban da sshd himoyasi yoqilganini tekshiring va bloklangan IP ni qo'lda oching.
Misol: Currently banned: 2.

Yechim

sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 203.0.113.9
fail2ban log'larni kuzatib, ko'p xato qilgan IP ni vaqtincha firewall orqali bloklaydi. O'zingizni bloklab qo'ymaslik uchun ignoreip ga ishonchli manzillarni yozing.

8. Tizimda hozir qanday firewall qoidalari faol ekanini ko'ring.
Misol: Chain INPUT (policy DROP).

Yechim

sudo ufw status verbose
sudo iptables -L -n -v
sudo nft list ruleset
policy DROP — qoidaga mos kelmagan paket tashlanadi (xavfsiz standart). policy ACCEPT va qoidalar yo'q — firewall amalda ishlamayapti.

9. iptables bilan 22-portga faqat 10.0.0.0/24 tarmog'idan kirishga ruxsat bering, qolganini taqiqlang.
Misol: SSH faqat shu tarmoqdan ishlaydi.

Yechim

sudo iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables -L INPUT -n --line-numbers
Qoidalar yuqoridan pastga tekshiriladi, birinchi mos kelgani ishlaydi: ACCEPT ni DROP dan oldin qo'ying. iptables qoidalari qayta ishga tushirishda yo'qoladi; saqlash iptables-persistent yoki nftables konfiguratsiyasi orqali.

10. net.ipv4.ip_forward qiymatini ko'ring, vaqtincha yoqing va doimiy qilish usulini ayting.
Misol: net.ipv4.ip_forward = 0.

Yechim

sysctl net.ipv4.ip_forward
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-forward.conf
sudo sysctl --system
sysctl -w faqat reboot'gacha amal qiladi. Router/NAT va konteyner xostlarida kerak; oddiy serverda yoqilgan bo'lsa, xavfsizlik nuqtai nazaridan sabab bo'lishi kerak.

11. SELinux qaysi rejimda ekanini ko'ring, vaqtincha permissive ga o'tkazing va qaytaring.
Misol: Enforcing → Permissive.

Yechim

getenforce
sudo setenforce 0
sudo setenforce 1
Permissive rejimda SELinux hech narsani bloklamaydi, faqat yozib boradi. Muammoni diagnostika qilish uchun vaqtincha ishlatiladi; doimiy ravishda Disabled qilish o'rniga qoida yoki kontekstni tuzating.

12. Veb-server fayllari SELinux kontekstini ko'rsating va noto'g'ri bo'lsa tiklang.
Misol: system_u:object_r:httpd_sys_content_t:s0.

Yechim

ls -Z /var/www/html
sudo restorecon -Rv /var/www/html
Faylni boshqa joydan mv qilsangiz, eski konteksti qoladi va Permission denied chiqadi (oddiy ruxsatlar to'g'ri bo'lsa ham). restorecon kontekstni siyosatdagi to'g'ri qiymatga qaytaradi.

13. Ubuntu'da AppArmor holatini va profillarni ko'ring.
Misol: apparmor module is loaded.

Yechim

sudo aa-status
Profil enforce rejimida cheklaydi, complain rejimida faqat yozib boradi.

14. /etc/passwd ga har qanday yozish va o'zgartirishlarni kuzatuvchi auditd qoidasini qo'shing va natijani toping.
Misol: ausearch -k passwd_changes.

Yechim

sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo useradd probe-user
sudo ausearch -k passwd_changes -i | tail
sudo userdel probe-user
-w — kuzatiladigan yo'l, -p wa — yozish va atribut o'zgarishi, -k — qidiruv uchun kalit so'z. auditctl bilan qo'shilgan qoida reboot'da yo'qoladi; doimiy qilish uchun /etc/audit/rules.d/ ga yozing.

15. Foydalanuvchi parollari uchun minimal uzunlikni oshiring va nima uchun uzunlik murakkablikdan muhimroq ekanini ayting.
Misol: minlen = 12.

Yechim

sudo apt install -y libpam-pwquality
sudo sed -i 's/^# *minlen.*/minlen = 12/' /etc/security/pwquality.conf
grep minlen /etc/security/pwquality.conf
Uzun parol (parol-ibora) taxminlash uchun murakkab-lekin-qisqa paroldan ko'ra ko'proq variant beradi. PAM modul tartibini noto'g'ri tahrirlash tizimga kirishni buzishi mumkin: /etc/pam.d/* ni o'zgartirishda ochiq root sessiyasini saqlab qo'ying.

16. Root bilan SSH orqali kirish ruxsat etilganini tekshiring.
Misol: permitrootlogin prohibit-password yoki no.

Yechim

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication'
sshd -T — fayldagi emas, amalda qo'llanayotgan sozlamani ko'rsatadi (Include fayllar ham hisobga olinadi).

17. Avtomatik xavfsizlik yangilanishlarini yoqing.
Misol: Unattended-Upgrade::Allowed-Origins ichida -security.

Yechim

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
sudo unattended-upgrade --dry-run -d | tail
Xavfsizlik yangilanishlarini avtomatlashtirish va qolgan paketlarni qo'lda, sinovdan keyin yangilash — keng tarqalgan muvozanat.

18. Kim va qachon sudo ishlatganini jurnaldan toping.
Misol: sudo: ali : TTY=pts/0 ; PWD=/home/ali ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx.

Yechim

sudo grep 'sudo:' /var/log/auth.log | tail
sudo journalctl _COMM=sudo --since today
Har bir sudo chaqiruvi foydalanuvchi, buyruq va natijasi bilan yoziladi: hodisani tekshirishda asosiy dalil.

19. Barcha SUID fayllar ro'yxatini bir marta saqlab qo'ying va keyin o'zgarishni aniqlang.
Misol: yangi SUID fayl diff da ko'rinadi.

Yechim

sudo find / -xdev -perm -4000 -type f 2>/dev/null | sort > ~/suid-base.txt
# keyinroq:
sudo find / -xdev -perm -4000 -type f 2>/dev/null | sort | diff ~/suid-base.txt -
Tizimda kutilmagan yangi SUID fayl paydo bo'lishi buzilish yoki imtiyozni oshirish urinishining odatiy belgisi.

20. Yangi serverni qotirish (hardening) uchun qisqa tekshiruv ro'yxatini bajaring va har bir bandni tasdiqlovchi buyruqni yozing.
Misol: 5 band.

Yechim

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication'   # SSH: root va parol yopiq
sudo ufw status verbose                                           # firewall faol, default deny
sudo ss -ltnp                                                     # faqat kerakli portlar
systemctl is-active fail2ban unattended-upgrades                  # himoya va yangilanish
sudo find / -xdev -perm -0002 -type f 2>/dev/null | head          # hamma yoza oladigan fayl yo'q
Tamoyil: eng kam imtiyoz, eng kam ochiq xizmat, hamma narsa jurnalga yozilishi va tekshirib turilishi.