6-bo‘lim
Tarmoq xavfsizligi
Firewall, tarmoq segmentatsiyasi, VPN, portlar, DNS xavfsizligi va tarmoq monitoringi.
Ushbu bo‘lim mundarijasi
Tarmoq - tizimingizga kiradigan asosiy yo'l. Uni to'g'ri himoyalash hujum yuzasini sezilarli kamaytiradi.
Tarmoq modeli #
Firewall #
# UFW - Ubuntu uchun sodda firewall
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'
# Faqat ma'lum IP dan SSH
sudo ufw delete allow 22/tcp
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
sudo ufw enable
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
80/tcp ALLOW IN Anywhere # HTTP
443/tcp ALLOW IN Anywhere # HTTPS
22/tcp ALLOW IN 203.0.113.0/24
sudo ufw default deny incoming
Bu eng muhim qoida: aniq ruxsat berilmagan hamma narsa bloklanadi.
Teskarisi (standart ruxsat) xavfli: yangi xizmat ishga tushsa, u avtomatik internetga ochiladi.
| Firewall turi | Nima qiladi |
|---|---|
| Paket filtri | IP va portga qarab bloklaydi |
| Holatli | Ulanish holatini kuzatadi |
| Ilova darajasi | Protokol mazmunini tahlil qiladi |
| WAF | Veb hujumlarini bloklaydi |
| Keyingi avlod | Hammasi + tahdid razvedkasi |
# nftables - zamonaviy Linux firewall
sudo nft add table inet filter
sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'
# O'rnatilgan ulanishlarga ruxsat
sudo nft add rule inet filter input ct state established,related accept
# Loopback
sudo nft add rule inet filter input iif lo accept
# SSH faqat ma'lum tarmoqdan
sudo nft add rule inet filter input ip saddr 10.0.0.0/8 tcp dport 22 accept
# Veb
sudo nft add rule inet filter input tcp dport '{ 80, 443 }' accept
# Chegaralash bilan ICMP
sudo nft add rule inet filter input icmp type echo-request limit rate 5/second accept
Portlar #
# Qaysi portlar ochiq?
sudo ss -tulpn
Netid State Local Address:Port Process
tcp LISTEN 0.0.0.0:22 sshd
tcp LISTEN 0.0.0.0:80 nginx
tcp LISTEN 0.0.0.0:443 nginx
tcp LISTEN 127.0.0.1:3306 mysqld
tcp LISTEN 127.0.0.1:6379 redis-server
tcp LISTEN 0.0.0.0:9000 php-fpm ← MUAMMO
0.0.0.0 - barcha interfeyslarda tinglash degani, ya'ni
internetdan ham.
127.0.0.1 - faqat shu server ichida.
; MySQL
bind-address = 127.0.0.1
; Redis
bind 127.0.0.1
; PHP-FPM
listen = /run/php/php8.3-fpm.sock
Unix soket TCP dan tezroq va xavfsizroq - u tarmoqqa umuman chiqmaydi.
| Port | Xizmat | Internetga ochiq bo'lsinmi |
|---|---|---|
| 22 | SSH | Faqat ma'lum IP dan |
| 80, 443 | HTTP/HTTPS | Ha |
| 3306 | MySQL | Hech qachon |
| 5432 | PostgreSQL | Hech qachon |
| 6379 | Redis | Hech qachon |
| 27017 | MongoDB | Hech qachon |
| 9200 | Elasticsearch | Hech qachon |
Internetda o'n minglab parolsiz Redis, MongoDB va Elasticsearch serverlari topiladi.
Sabab: bu xizmatlar tarixan standart holatda autentifikatsiyasiz
ishlagan va 0.0.0.0 da tinglagan.
Yangi server o'rnatganingizda birinchi navbatda portlarni tekshiring.
Tarmoq segmentatsiyasi #
# Ilova serveri faqat baza serveriga chiqa oladi
sudo ufw allow out to 10.0.2.10 port 3306 proto tcp
sudo ufw deny out to 10.0.2.0/24
# Baza serveri faqat ilova serverlaridan kirishga ruxsat beradi
sudo ufw allow from 10.0.1.0/24 to any port 3306 proto tcp
sudo ufw deny 3306
Ko'pchilik faqat kiruvchi trafikni cheklaydi.
Lekin server buzilgan bo'lsa, hujumchi undan:
- Ma'lumotni tashqariga yuboradi
- Boshqa serverlarni skanerlaydi
- Kripto qazish dasturini yuklab oladi
- Buyruq serveriga ulanadi
Chiquvchi cheklov bu harakatlarni to'sadi.
SSH xavfsizligi #
# /etc/ssh/sshd_config
Port 22
Protocol 2
# Parol bilan kirishni butunlay o'chirish
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
# root sifatida kirishni taqiqlash
PermitRootLogin no
# Faqat ma'lum foydalanuvchilar
AllowUsers husanboy jasur
# Bo'sh parolni taqiqlash
PermitEmptyPasswords no
# Urinishlar soni
MaxAuthTries 3
MaxSessions 5
# Bo'sh sessiyani yopish
ClientAliveInterval 300
ClientAliveCountMax 2
# Zamonaviy algoritmlar
KexAlgorithms [email protected],diffie-hellman-group16-sha512
Ciphers [email protected],[email protected]
MACs hmac-sha2-512[email protected],hmac-sha2-256[email protected]
sudo sshd -t # sozlamani tekshirish
sudo systemctl reload sshd
Internetga ochiq SSH portiga kuniga minglab parol sinash urinishi keladi.
Kalit bilan kirish:
- Parol umuman ishlatilmaydi
- Kuch bilan hujum imkonsiz
- Qulayroq (parol yozish shart emas)
ssh-keygen -t ed25519 -C "husanboy@ish-noutbuk"
ssh-copy-id [email protected]
Keyin PasswordAuthentication no ni yoqing.
# fail2ban - avtomatik bloklash
sudo apt install fail2ban
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
backend = systemd
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 86400
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 1847
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 14
|- Total banned: 312
VPN #
# WireGuard - zamonaviy va sodda VPN
# /etc/wireguard/wg0.conf
[Interface]
Address = 10.100.0.1/24
ListenPort = 51820
PrivateKey = <server_maxfiy_kaliti>
PostUp = ufw route allow in on wg0 out on eth0
PostDown = ufw route delete allow in on wg0 out on eth0
[Peer]
# Husanboy
PublicKey = <mijoz_ochiq_kaliti>
AllowedIPs = 10.100.0.2/32
[Peer]
# Jasur
PublicKey = <mijoz2_ochiq_kaliti>
AllowedIPs = 10.100.0.3/32
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
sudo wg show
| OpenVPN | WireGuard | |
|---|---|---|
| Kod hajmi | ~600 000 satr | ~4 000 satr |
| Tezlik | O'rtacha | Yuqori |
| Sozlash | Murakkab | Sodda |
| Audit | Qiyin | Oson |
| Zamonaviy kriptografiya | Sozlanadi | O'rnatilgan |
Kam kod - kam zaiflik. WireGuard yadro darajasida ishlaydi va juda tez.
DNS xavfsizligi #
# DNS so'rovni tekshirish
dig dokon.uz +short
dig dokon.uz MX +short
dig dokon.uz TXT +short
| Yozuv | Vazifasi |
|---|---|
| SPF | Kim sizning nomingizdan xat yubora oladi |
| DKIM | Xat imzosi |
| DMARC | SPF/DKIM buzilganda nima qilish |
| CAA | Kim sertifikat chiqara oladi |
; SPF - faqat shu serverlar xat yubora oladi
dokon.uz. TXT "v=spf1 ip4:203.0.113.10 include:_spf.google.com -all"
; DMARC - buzilgan xatlarni rad etish
_dmarc.dokon.uz. TXT "v=DMARC1; p=reject; rua=mailto:[email protected]; pct=100"
; CAA - faqat Let's Encrypt sertifikat chiqarsin
dokon.uz. CAA 0 issue "letsencrypt.org"
dokon.uz. CAA 0 iodef "mailto:[email protected]"
Hujumchi [email protected] nomidan buxgalteriyaga xat yuborib,
pul o'tkazishni so'rashi mumkin.
SPF va DMARC bo'lsa, bunday xat qabul qiluvchi serverda rad etiladi.
Boshlang: p=none (faqat kuzatish) → p=quarantine → p=reject.
# DNSSEC tekshiruvi
dig dokon.uz +dnssec +short
Hujumchi DNS javobini soxtalashtirib, foydalanuvchini o'z serveriga yo'naltirishi mumkin.
Himoya:
- DNSSEC - DNS javoblarini imzolash
- DoH/DoT - DNS so'rovlarini shifrlash
- HSTS - brauzer faqat HTTPS ishlatadi
- Sertifikat tekshiruvi - soxta server sertifikatga ega bo'lmaydi
Tarmoq monitoringi #
# Faol ulanishlar
sudo ss -tunp | head -20
# Odatiy bo'lmagan chiquvchi ulanishlar
sudo ss -tunp state established | grep -v -E ':(80|443|53) '
# Real vaqtda trafik
sudo iftop -i eth0
# Paketlarni tahlil qilish
sudo tcpdump -i eth0 -nn 'port 3306'
# Serverdan chiqayotgan katta hajmdagi ma'lumot
sudo iftop -i eth0 -P -N
| Belgi | Nima anglatishi mumkin |
|---|---|
| Kutilmagan chiquvchi ulanish | Buyruq serveriga ulanish |
| Katta hajmdagi chiquvchi trafik | Ma'lumot o'g'irlash |
| Ichki tarmoqni skanerlash | Lateral harakat |
| Odatiy bo'lmagan portlar | Backdoor |
| Tungi vaqtdagi faollik | Avtomatlashtirilgan hujum |
| DNS so'rovlarining ko'payishi | DNS tunnellash |
# Suricata - hujumlarni aniqlash tizimi
sudo apt install suricata
sudo suricata-update
sudo systemctl enable --now suricata
# Ogohlantirishlarni ko'rish
sudo tail -f /var/log/suricata/fast.log
Wi-Fi xavfsizligi #
| Protokol | Holati |
|---|---|
| WEP | Butunlay buzilgan |
| WPA | Buzilgan |
| WPA2-PSK | Zaif parolda ochiladi |
| WPA2-Enterprise | Yaxshi |
| WPA3 | Eng yaxshi |
Ochiq tarmoqda barcha shifrlanmagan trafik ko'rinadi.
Bundan tashqari, hujumchi mashhur tarmoq nomi bilan (Free_WiFi,
Airport_WiFi) soxta kirish nuqtasi yaratishi mumkin.
Himoya:
- Faqat HTTPS saytlar
- VPN ishlating
- Avtomatik ulanishni o'chiring
- Muhim ishlarni ochiq tarmoqda qilmang
# Mehmon tarmog'ini ajratish
# Ichki tarmoqqa kirishni bloklash
iptables -A FORWARD -i wlan1 -o eth0 -d 10.0.0.0/8 -j DROP
iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT
Bulut tarmog'i #
# Terraform: xavfsizlik guruhlari
resource "aws_security_group" "veb" {
name = "veb-serverlar"
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
security_groups = [aws_security_group.bastion.id]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_security_group" "baza" {
name = "baza-serverlar"
# Faqat veb serverlardan
ingress {
from_port = 3306
to_port = 3306
protocol = "tcp"
security_groups = [aws_security_group.veb.id]
}
# Chiquvchi trafik yo'q
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = []
}
}
SSH uchun bitta kirish nuqtasi:
Internet → Bastion (SSH) → Ichki serverlar
Afzalliklari:
- Faqat bitta server internetga ochiq
- Barcha kirishlar bir joyda jurnalga yoziladi
- Qo'shimcha autentifikatsiya qo'yish oson
ssh -J [email protected] husanboy@10.0.1.15
Tarmoq xavfsizligi tekshiruv ro'yxati #
| Talab | Bajarildi |
|---|---|
| Firewall yoqilgan, standart - rad etish | |
| Faqat kerakli portlar ochiq | |
Baza va kesh 127.0.0.1 da tinglaydi | |
| SSH parol bilan kirish o'chirilgan | |
SSH root uchun taqiqlangan | |
| fail2ban o'rnatilgan | |
| Chiquvchi trafik cheklangan | |
| Tarmoq segmentlarga bo'lingan | |
| SPF, DKIM, DMARC sozlangan | |
| CAA yozuvi qo'shilgan | |
| TLS 1.2+ majburiy | |
| Monitoring va ogohlantirish ishlaydi |
#!/bin/bash
# tarmoq-tekshiruvi.sh
echo "=== Ochiq portlar ==="
sudo ss -tulpn | grep LISTEN
echo -e "\n=== 0.0.0.0 da tinglayotgan xizmatlar ==="
sudo ss -tulpn | grep '0.0.0.0' | grep -v -E ':(80|443|22) '
echo -e "\n=== Firewall holati ==="
sudo ufw status verbose
echo -e "\n=== fail2ban ==="
sudo fail2ban-client status 2>/dev/null || echo "O'rnatilmagan"
echo -e "\n=== SSH sozlamalari ==="
sudo sshd -T | grep -E '^(passwordauthentication|permitrootlogin|maxauthtries)'
echo -e "\n=== Oxirgi muvaffaqiyatsiz kirishlar ==="
sudo grep "Failed password" /var/log/auth.log | tail -5
- Virtual mashinada UFW o'rnating va sozlang.
- Standart siyosatni "rad etish" ga o'zgartiring.
ss -tulpnbilan ochiq portlarni ko'ring.0.0.0.0da tinglayotgan xizmatni127.0.0.1ga o'tkazing.- SSH kalit yarating va parol bilan kirishni o'chiring.
- fail2ban o'rnating va holatini tekshiring.
- WireGuard VPN sozlang (ikki mashina orasida).
- Domeningiz uchun SPF va DMARC yozuvlarini qo'shing.
digbilan DNS yozuvlarini tekshiring.- Yuqoridagi tekshiruv skriptini ishga tushiring.
Xulosa #
- Firewall standarti - rad etish, aniq ruxsat berilganigina o'tsin.
- Baza, kesh va ichki xizmatlar
127.0.0.1da tinglasin. - Ochiq baza portlari - eng ko'p uchraydigan xato.
- Chiquvchi trafikni ham cheklang - ma'lumot o'g'irlashni to'sadi.
- Tarmoqni segmentlarga bo'ling: DMZ, ilova, ma'lumot.
- SSH da parol bilan kirishni o'chiring, faqat kalit.
- fail2ban avtomatik bloklash uchun.
- WireGuard - sodda, tez va zamonaviy VPN.
- VPN - transport himoyasi, kirish nazorati emas.
- SPF, DKIM, DMARC domeningizdan soxta xat yuborishni to'sadi.
- Kutilmagan chiquvchi ulanishlar - buzilish belgisi.
- Bulutda xavfsizlik guruhlari bilan segmentatsiya qiling.
Keyingi bo'limda operatsion tizim xavfsizligini ko'ramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.