Linux xavfsizligi bo'yicha bosqichma-bosqich qo'llanma
Linux serverlarining xavfsizligini ta'minlash system administratorlari va IT mutaxassislari uchun muhim vazifadir. Kibertahdidlar tobora murakkablashib borayotganligi sababli, maxfiy ma'lumotlarni himoya qilish va server muhitlarining yaxlitligini saqlash uchun mustahkam xavfsizlik choralarini ko'rish zarur. Ushbu qo'llanma Linux serverlarini himoya qilish bo'yicha eng yaxshi amaliyotlar va muhim texnikalar haqida to'liq ma'lumot berishga qaratilgan.
Linux keng qo'llaniladigan va open-source operatsion tizim bo'lib, xavfsizlikni kuchaytirish uchun ishlatilishi mumkin bo'lgan ko'plab toollar va konfiguratsiyalarni taklif etadi. Biroq, Linuxni mashhur tanlovga aylantiradigan moslashuvchanlik va quvvat ham xavfsiz tizimni saqlashda qiyinchiliklar tug'diradi. Ushbu qo'llanma server xavfsizligining asosiy sohalarini, jumladan SSH xavfsizligi, tarmoq konfiguratsiyasi, vaqtni sinxronlashtirish, kernel hardening, root foydalanuvchisini boshqarish va boshqalar o'z ichiga oladi.
Diqqat!
- Ushbu qo'llanman asosan Debian based serverlar uchun, lekin ushbu qo'lanmadagi tavsiyalarni barcha linux distribituvlarida qo'lashingiz mumkin.
Barcha paketlarning latest(so'ngi) versiyasini o'rnating.
Serveringiz barcha o'rnatilgan paketlarning latest versiyalari bilan ishlayotganini ta'minlash tizimingizni himoya qilishning birinchi muhim qadamidir. Dasturiy ta'minot yangilanishlari ko'pincha tajovuzkorlar tomonidan ishlatilishi mumkin bo'lgan zaifliklar uchun patchlarni o'z ichiga oladi. Eskirgan dasturiy ta'minotni ishga tushirish ushbu zaifliklardan foydalanish xavfini oshiradi. Yangilanishlar nosozliklar yoki boshqa beqarorlik muammolariga olib kelishi mumkin bo'lgan xatolar uchun tuzatishlarni ham o'z ichiga oladi. Dasturiy ta'minotni yangilab turish sizga eng so'nggi xususiyatlar va yaxshilanishlardan foydalanishingizni ta'minlaydi.
sudo apt update
Ushbu buyruq paketlar indeksini yangilaydi, bu mavjud paketlar va ularning versiyalari recordlarini o'z ichiga olgan ma'lumotlar bazasi. Ushbu buyruqni ishga tushirish orqali siz paket menejerida mavjud yangilanishlar haqida eng so'nggi ma'lumotlarga ega ekanligiga ishonch hosil qilasiz.
sudo apt upgrade
Ushbu buyruq barcha o'rnatilgan paketlarni latest(eng so'nggi) versiyalarga yangilaydi. U paketlar indeksida ko'rsatilgan paketlarning yangi versiyalarini yuklab oladi va o'rnatadi. Bu sizning barcha xavfsizlik patchlari qo'llanilgan latest dasturiy ta'minotni ishga tushirishingizni ta'minlaydi.
sudo apt autoremove
Bu buyruq boshqa paketlar uchun bog'liqlikni(dependenci) qondirish uchun avtomatik ravishda o'rnatilgan va endi kerak bo'lmagan paketlarni olib tashlaydi. Tizimingizda keraksiz paketlarni saqlash xavfsizlikka xavf tug'dirishi va qimmatli disk maydonini iste'mol qilishi mumkin.
Serverni yangilab olganimizdan keyin vaqtni aniq qilib sozlashimiz kerak, bu juda muhim hisoblanadi.
Serverimizda Time Zonani belgilaymiz, masalan Asia/Tashkent
sudo timedatectl set-timezone Asia/Tashkent
NTP (Network Time Protocol)ni o'rnatib sozlab olamiz.
sudo apt install ntp -y
sudo systemctl enable ntp
sudo systemctl start ntp
NTP statusini ko'ramiz.
sudo systemctl status ntp
Kernelni mustahkamlash (Harden the Kernel)
Kernelni mustahkamlash xavfsizlik va hujumlarga chidamliligini oshirish uchun ma'lum tizim parametrlarini sozlashni o'z ichiga oladi. Ushbu sozlamalar tizimning turli turdagi tarmoq hujumlaridan va boshqa zararli harakatlardan himoya qilish qobiliyatini oshiradi.
- IP-spoofingni oldini olish-> O'zini ishonchli IP manzil sifatida ko'rsatuvchi tajovuzkorlardan himoya qiladi.
- ICMP Broadcastlariga e'tibor bermaslik(ignore)-> Serverning translyatsiya pinglariga javob berishini oldini oladi, bu esa smurf attacklari xavfini kamaytiradi.
- Source Routingni o'chirib qo'yish-> Tajovuzkorlarga turli xil hujumlar uchun ishlatilishi mumkin bo'lgan tarmoq paketlari uchun boshqa marshrutni belgilashni oldini oladi.
- SYN Cookie-fayllarini yoqish-> Serverni to'ldirishi mumkin bo'lgan SYN flood hujumlarini yumshatadi.
- Shubhali paketlarni qayd etish-> Shubhali tarmoq faoliyatini aniqlash va ularga javob berishga yordam beradi.
- ICMP Redirectlariga e'tibor bermaslik-> Tajovuzkorlarning aloqani to'xtatish yoki o'zgartirish uchun ishlatilishi mumkin bo'lgan tarmoq trafigini qayta yo'naltirishini oldini oladi.
- Directed Pinglarni e'tiborsiz qoldirsh-> ICMP-based attackalar xavfini kamaytiradi.
Buning uchun sysctl.conf
konfiguratsiya faylini nano yoki vim matn muharririda ochib olamiz.
sudo nano /etc/sysctl.conf
IP Spoofing Protectionni yoqamiz.
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
Source IP manzilini tekshirish orqali kiruvchi paketlar qonuniy manbalardan ekanligini ta'minlaydi. Paketning source IP manzili kutilgan interfeysga mos kelishini ta'minlash orqali IP spoofing hujumlarining oldini olishga yordam beradi.
ICMP Broadcast Requestlarni ignore qilamiz.
net.ipv4.icmp_echo_ignore_broadcasts = 1
Serverning translyatsiya manziliga yuborilgan ping so'rovlariga javob berishini oldini oladi. Ttajovuzkor ko'p sonli ICMP echo requestlarini translyatsiya manziliga yuboradigan, tarmoqdagi barcha qurilmalarning javob berishiga va serverni bosib olishiga olib keladigan Smurf hujumlarini yumshatadi.
Source Packet Routingni o'chirib qo'yamiz.
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
Paketlar uchun marshrutlash yo'llarini belgilash imkoniyatini o'chiradi. Tajovuzkorlarga paketlarni ushlash yoki manipulyatsiya qilish uchun o'z tizimlari orqali qayta yo'naltirish uchun manba marshrutlashdan foydalanishni oldini oladi.
TCP SYN Cookieni yoqamiz.
net.ipv4.tcp_syncookies = 1
SYN flood attackalaridan himoya qiladi. SYN paketlarini qayta ishlash va tekshirish mexanizmi bo'lgan SYN cookie-fayllarini ishga tushiradi va shu bilan serverni soxta ulanish so'rovlari bilan to'lib ketishining oldini oladi.
Log Martians (Suspicious Packets)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
Shubhali yoki imkonsiz manba manzillari bo'lgan paketlarni logga yozish imkonini beradi. Ushbu hodisalarni(event) qayd qilish orqali potentsial hujumlar yoki noto'g'ri konfiguratsiyalarni aniqlash va ularga javob berishga yordam beradi.
ICMP Redirectlarni ignore qilamiz.
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
ICMP redirect messagelarini qabul qilishni o'chiradi. Tarmoq trafigini ushlab turish yoki o'zgartirish uchun ishlatilishi mumkin bo'lgan routing tableni o'zgartirish uchun tajovuzkorlarning ICMP yo'naltirishlaridan foydalanishini oldini oladi.
Directed Pinglarni ignore qilamiz.
net.ipv4.icmp_echo_ignore_all = 1
Serverning ICMP echo requestlariga (pinglarga) javob berishini oldini oladi. Ping requestlariga javob bermaslik orqali ICMP-based attackalar xavfini kamaytiradi, shu bilan serverni tarmoqda kamroq ko'rinadigan qiladi.
sysctl
konfiguratsiyaga o'zgartishlarni kiritganimizdan keyin o'zgarishlarni apply qilib ishga tushiramiz.
sudo sysctl -p
Kernelning mustahkamlanishi tizimni umumiy tarmoq hujumlariga nisbatan chidamliroq qilib sozlash orqali serveringizning xavfsizlik holatini yaxshilaydi. Ushbu sozlamalar IP spoofing, ICMP-based attacks, SYN flood attackslari va ruxsatsiz marshrutni(unauthorized routing) o'zgartirish kabi xavflarni kamaytirishga yordam beradi. Ushbu konfiguratsiyalarni qo'llash orqali siz serveringizning xavfsizlik tizimiga muhim himoya qatlamini qo'shasiz.
SSH portini o'zgartiring
Standart SSH portini o'zgartirish serveringiz xavfsizligini oshirishning oddiy, ammo samarali usulidir. SSH-ni nostandart portga ko'chirish orqali siz avtomatik hujumlar va standart SSH portiga (22) qaratilgan portlarni skanerlash xavfini kamaytirishingiz mumkin. Ko'pgina avtomatlashtirilgan skriptlar va botlar standart portdagi ochiq SSH portlarini qidiradi (22). Portni o'zgartirish ushbu avtomatlashtirilgan hujumlar sizning SSH xizmatingizni topish ehtimolini kamaytiradi. Noma'lumlik orqali xavfsizlik sizning yagona himoyangiz bo'lmasa-da, u tajovuzkorlarga SSH xizmatingizni topishni biroz qiyinlashtirib, qo'shimcha himoya qatlamini qo'shishi mumkin. Portni o'zgartirish orqali siz log fayllaringizga ruxsatsiz kirish urinishlarini(unauthorized access attempt) kamroq ko'rasiz, bu esa haqiqiy tahdidlarni aniqlashni osonlashtiradi.
SSH portini o'zgartirish uchun SSH daemon configuration faylini o'zgartirishimiz kerak bo'ladi.
sudo nano /etc/ssh/sshd_config
Port raqamini ko'rsatadigan qatorni toping va portni o'zgartiring masalan 9876
Port 9876
Bu satr SSH demoni tinglaydigan port raqamini belgilaydi. Ushbu qiymatni o'zgartirish orqali siz SSH xizmatini boshqa portdagi ulanishlarni tinglashga yo'naltirasiz.
O'zgarishlarni saqlab chiqganingizdan keyin, yangi konfiguratsiyalarni qo'llash uchun SSH serviceni restart berish kerak bo'ladi.
sudo systemctl restart ssh
Endi siz serverga ssh orqali quyidagicha kirishingiz mumkin.
ssh -p 9876 myuser@server_ip
User yaratish va Root Loginni o'chirish
Yangi foydalanuvchi yaratish va root login bilan tizimga kirishni o'chirib qo'yish ruxsatsiz kirish xavfini kamaytirish orqali serveringiz xavfsizligini oshiradi. Ma'muriy vazifalar uchun root bo'lmagan foydalanuvchidan foydalanish orqali siz potentsial xavfsizlik buzilishlarining ta'sirini kamaytirishingiz mumkin. To'g'ridan-to'g'ri rootga kirish juda imtiyozli va agar buzilgan bo'lsa, tizimni umumiy boshqarishga olib kelishi mumkin. rootga kirishni cheklash xavfni kamaytiradi. Muayyan foydalanuvchilar tomonidan amalga oshirilgan harakatlar logga kiritilishi va tekshirilishi mumkin, bu o'zgarishlarni kuzatish va zararli faoliyatni aniqlashni osonlashtiradi.
Keling yangi user yaratib olamiz, masalan mansur.
sudo adduser mansur
home directory va default konfiguratsiya fayllari bilan tizimga yangi user qo'shadi.
Ma'muriy imtiyozlarni(administrative privileges) berish uchun yangi foydalanuvchini sudo
groupga qo'shamiz.
sudo usermod -aG sudo mansur
SSH konfiguratsiyasi yangi user uchun ulanishga ruxsat berishni yoqamiz.
sudo nano /etc/ssh/sshd_config
Konfiguratsiyadan AllowUsers
ni qidiring agar bo'lmasa qo'shing va userni kiriting.
AllowUsers mansur
root orqali ulanishni o'chiramiz. konfiguratsiyadan PermitRootLogin
topib uni o'chirib qo'yamiz.
PermitRootLogin no
SSH orqali rootga kirishni o'chirib qo'yadi.
Yangi konfiguratsiyani ishga tushirish uchun SSH servicega restart beramiz.
sudo systemctl restart ssh
Password Authenticationni o'chirib SSH Public Key Authenticationni yoqamiz.
Parolni autentifikatsiya qilishni o'chirib qo'yish va SSH key-based autentifikatsiyani yoqish serveringiz xavfsizligini sezilarli darajada oshiradi. SSH kalitlari parollarga qaraganda ancha xavfsizroq va shafqatsiz kuch hujumlarining oldini olishga yordam beradi.
O'zingizning local kompyuteringizda ssh key yaratib oling.
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Sizga ~/.ssh/
papkasida ikkita key yaratiladi, bular id_rsa
private key va id_rsa.pub
public key.
id_rsa.pub
public keyni server ~/.ssh/authorized_keys
ga qo'shib qo'yish kerak bo'ladi.
Local kompyuterimizdagi id_rsa.pub
key ni cat orqali chiqarib nusxa olamiz.
cat ~/.ssh/id_rsa.pub
Serverga kirib esa ushbu buyruqni kiritamiz.
cat >> ~/.ssh/authorized_keys <<EOF
bu yerga local kompyuterimizdan olgan id_rsa.pub ssh-keyimizni joylashtiramiz
EOF
Serverimizda Password Authenticationni o'chiramiz.
sudo nano /etc/ssh/sshd_config
Konfiguratsiyaga quyidagi o'zgarishlarni kiritamiz.
- Password Authenticationi o'chirish uchun
PasswordAuthentication no
- Public Key Authenticationni yoqish uchun
PubkeyAuthentication yes
O'zgarishlarni saqlab SSH servicega restart beramiz.
sudo systemctl restart ssh
Bu konfiguratsiyalardan keyin serverga faqat authorized_keys
da public keylari qo'shilgan userlarigina kira oladi xolos. Parolni autentifikatsiya qilishni o'chirib qo'yish va SSH key-based autentifikatsiyani yoqish serveringiz xavfsizligini sezilarli darajada yaxshilaydi. SSH kalitlarini qo'pol kuch ishlatish deyarli mumkin emas va serveringizga kirishning xavfsiz, qulay usulini ta'minlaydi.
Firewall sozlash
Firewall o'rnatish serveringizni himoya qilishda muhim qadamdir. Firewall oldindan belgilangan xavfsizlik qoidalari asosida kiruvchi va chiquvchi trafikni boshqarishga yordam beradi va shu bilan serveringiz va potentsial tahdidlar o'rtasida to'siq yaratadi. Firewall bilan serveringizga faqat kerakli trafikni kirishiga ruxsat berish orqali xavflarni kamaytiring va shu bilan tarmoqqa asoslangan turli hujumlardan himoya qiling. Keling oddiy lekin samarali firewall UFW dan foydalanamiz.
UFW'ni serverimizga o'rnatib olamiz.
sudo apt install ufw
UFW Firewallni yoqamiz.
sudo ufw enable
UFW ni ishga tushirganimizda barcha portlar yopilgan bo'ladi. Birinchi navbatda SSH orqali serverga kirish uchun SSH portini ochamiz, yuqorida biz ssh portini default 22 dan 9876ga o'zgartirgan edik.
sudo ufw allow 9876/tcp
Web Server uchun HTTP va HTTPS trafikga ruxsat beramiz.
sudo ufw allow http
sudo ufw allow https
Keraksiz servicelar yoki portlarni yopamiz. Masalan, ruxsat etilganlardan tashqari barcha kiruvchi trafikni rad etish uchun.
sudo ufw default deny incoming
sudo ufw default allow outgoing
By default barcha kiruvchi trafikni(incoming) bloklaydi, aniq ruxsat etilganlardan tashqari va ishonchli manbalarga kirishni cheklash orqali xavfsizlikni kuchaytiradi
UFW statusini ko'rishimiz mumkin.
sudo ufw status
Anti-Intrusion Defense va Audit tizimlardan foydalanish
Buzilishlarga qarshi himoya va audit tizimlarini joriy etish serveringizni ruxsatsiz kirish va potentsial xavfsizlik buzilishidan kuzatish va himoya qilish uchun zarurdir. Ushbu toollar shubhali harakatlarni aniqlashga, hujumlarning oldini olishga yordam beradi va serveringizning xavfsizlik holati haqida tushuncha beradi.
Fail2ban tizimga kirishga muvaffaqiyatsiz urinishlar va boshqa shubhali harakatlar uchun log fayllarini skanerlaydi, so'ngra IP manzillarni buzishni taqiqlaydi.
Fail2banni o'rnatib olamiz.
sudo apt install fail2ban
Konfiguratsiya yaratib olamiz.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Jail konfiguratsiya qilib olamiz. Fail2ban-ga SSH, Apache va boshqalar kabi maxsus xizmatlarni kuzatish va himoya qilish imkonini beradi
sudo nano /etc/fail2ban/jail.local
SSH uchun konfiguratsiyaga misol
[sshd]
enabled = true
port = 9876
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
ushbu konfiguratsiya SSH kirish urinishlarini kuzatib boradi va 1 soat davomida 3 ta muvaffaqiyatsiz urinishdan keyin IP manzillarini bloklaydi.
Fail2banni ishga tushirib yoqamiz.
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Fail2ban serveringizni doimiy ravishda kuzatib borishini va ruxsatsiz kirish urinishlaridan himoya qilishini ta'minlaydi.
Lynis - tizimingizning xavfsizlik holatini chuqur tahlil qiladigan xavfsizlikni tekshirish tool hisoblanadi.
Lynisni sereverimizga o'rnatib olamiz.
sudo apt install lynis
Lynis orqali tizimni tekshiruvdan o'tkizamiz.
sudo lynis audit system
Serveringizning keng qamrovli xavfsizlik auditini boshlaydi va serveringiz xavfsizligini yaxshilash bo'yicha batafsil ma'lumot va tavsiyalar beradi.
Hisobotlarni ushbu faylda ham topsihingiz mumkin.
/var/log/lynis-report.dat
Qo'shimcha maslahatlar
-
Offisial dasturlarni o'rnating Serveringizga har doim Offisial bo'lgan dasturlarni o'rnating, bu sizga serveringizda har xil malwarelar viruslar va atacklar bo'lishini oldini oladi.
-
Oddiy parollardan foydalanmang Hozirgi kunda hech qachon oddiy parollardan foydalanmang, har doim parollarni generatsiya qilib murakkab parollar qo'ying.
-
Default portlarni o'zgartiring Barcha dasturlarda o'zining default porti mavjuda, xavfsizlikni oshirish uchun default portlarni o'zgartiring, masalan databaza(PostgreSQL, MySQL, MongoDB) portlarini o'zgartiring.
Qo'shimcha Resurslar
Sana: 2024.05.19(2024-yil 19-may)
Oxirgi yangilanish: 2024.05.19(2024-yil 19-may)
Muallif: Otabek Ismoilov
Telegram (opens in a new tab) | GitHub (opens in a new tab) | LinkedIn (opens in a new tab) |
---|