VPS ишга туширилгандан бир неча дақиқа ўтиб унинг SSH портига нотаниш манзиллардан уланиш уринишлари кела бошлайди. Бу шахсан сизга қарши ҳужум эмас: интернетда очиқ серверларни автоматик қидирадиган ботлар доимо ишлайди ва оддий паролларни синаб кўради. Шунинг учун серверга сайт ёки илова ўрнатишдан олдин бир нечта асосий созламаларни бажариб қўйиш керак. Қуйидаги тартиб Ubuntu 22.04 ва 24.04 учун ёзилган, Debian'да ҳам деярли бир хил ишлайди.
1. Биринчи уланиш ва тизимни янгилаш
Сервер тайёр бўлгач, сизга IP манзил ва root пароли ёки SSH калити берилади. Компьютерингиздаги терминалдан уланинг ва биринчи навбатда пакетларни янгиланг. Тайёр образлар бир неча ҳафта ёки ой олдин йиғилган бўлиши мумкин, шунинг учун уларда ёпилмаган хавфсизлик тузатишлари бўлади:
ssh root@203.0.113.10
apt update && apt upgrade -y
Янгиланиш ядрони ҳам ўз ичига олган бўлса, тизим қайта юклашни талаб қилади. Буни /var/run/reboot-required файли мавжудлигидан билиш мумкин. Ҳозирча қайта юкламай, кейинги созламаларни тугатиб, охирида бир марта reboot қилиш қулайроқ.
2. Root ўрнига алоҳида фойдаланувчи
Ҳар куни root остида ишлаш хавфли: битта нотўғри буйруқ бутун тизимни бузиши мумкин, root пароли эса ботлар энг кўп синайдиган ҳисоб. Шунинг учун ўзингиз учун оддий фойдаланувчи яратинг ва унга sudo ҳуқуқини беринг. Қуйидаги мисолда фойдаланувчи номи deploy, уни ўзингизга мос ном билан алмаштиринг:
adduser deploy
usermod -aG sudo deploy
adduser парол сўрайди. Бу парол SSH орқали кириш учун эмас, sudo буйруқларини тасдиқлаш учун керак бўлади, шунинг учун уни узун ва мураккаб қилинг.
3. SSH калит билан кириш
Парол билан кириш ўрнига калит жуфтлигидан фойдаланиш энг муҳим қадамлардан бири. Калит компьютерингизда яратилади: махфий қисми сизда қолади, очиқ қисми серверга кўчирилади. Агар сизда ҳали калит бўлмаса, уни ўз компьютерингизда яратинг ва серверга юборинг. Windows 10 ва 11'да ҳам бу буйруқлар PowerShell'да ишлайди, фақат ssh-copy-id бўлмаса, очиқ калитни қўлда нусхалаш керак:
ssh-keygen -t ed25519 -C "laptop-ofis"
ssh-copy-id deploy@203.0.113.10
Энди янги терминал ойнасида ssh deploy@203.0.113.10 билан кириб кўринг. Парол сўралмаса ёки фақат калит пароли сўралса, калит тўғри ишлаяпти. sudo -v буйруғи билан sudo ҳуқуқи борлигини ҳам текширинг.
4. Root ва парол билан киришни ёпиш
Калит ишлашига ишонч ҳосил қилгандан кейин SSH созламаларида root киришини ва парол билан аутентификацияни ўчириш мумкин. Ubuntu'нинг янги версияларида асосий файлдан ташқари /etc/ssh/sshd_config.d/ папкасидаги файллар ҳам ўқилади ва улардан бири, масалан булут образларида 50-cloud-init.conf, парол билан киришни қайта ёқиб қўйиши мумкин. Шунинг учун ўз созламангизни алоҳида файлга ёзиш ва бошқа файлларни текшириш ишончлироқ:
sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
Файл номи 00 билан бошланади, чунки SSH бир параметр учун биринчи учраган қийматни олади ва файллар алифбо тартибида ўқилади. Созламани текшириб, хизматни қайта ишга туширинг:
sudo sshd -t
sudo grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
sudo systemctl restart ssh
Энг муҳим қоида: жорий SSH сессиясини ёпманг. Янги ойнада қайта уланиб кўринг ва ҳаммаси ишлаганига ишонч ҳосил қилгандан кейингина эски ойнани ёпинг. Акс ҳолда битта хато туфайли сервердан бутунлай чиқиб қолишингиз мумкин.
5. Файрвол: фақат кераклисини очинг
Ubuntu'да UFW оддий ва қулай файрвол. Аввал SSH'га рухсат бериш, кейин файрволни ёқиш керак, акс ҳолда уланиш узилиб қолади. Веб-сайт жойлаштирмоқчи бўлсангиз, 80 ва 443 портларини ҳам очинг:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
MySQL, Redis ёки илова портларини ташқарига очманг. Улар сервернинг ичида 127.0.0.1 орқали ишлаши етарли. Қайси хизматлар қайси портларда тинглаётганини sudo ss -tulpn билан кўриш мумкин.
6. Вақт минтақаси ва сервер номи
Логлар, cron вазифалари ва захира нусхалар вақти тўғри кўриниши учун вақт минтақасини созланг. Ўзбекистондаги лойиҳа учун бу Asia/Tashkent. Сервер номи эса бир нечта сервер билан ишлаганда қайси терминалда турганингизни адаштирмасликка ёрдам беради:
sudo timedatectl set-timezone Asia/Tashkent
sudo hostnamectl set-hostname web1.example.uz
timedatectl
7. Автоматик хавфсизлик янгиланишлари
Серверни ҳар куни қўлда янгилаб бориш осон эмас. Ubuntu'да хавфсизлик янгиланишларини автоматик ўрнатувчи пакет бор ва кўп образларда у олдиндан ўрнатилган бўлади. У ёқилганини текшириб қўйинг:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Бу фақат тизим пакетларини қамраб олади. Сайт двигатели, плагинлар ва илова кутубхоналарини янгилаш барибир сизнинг вазифангиз бўлиб қолади.
8. Парол танловчи ботларга қарши fail2ban
Парол билан кириш ёпилган бўлса ҳам, ботлар уринишда давом этади ва логларни тўлдиради. fail2ban кўп марта муваффақиятсиз уринган манзилларни вақтинча блоклайди. Ubuntu'да у ўрнатилгандан кейин SSH учун ҳимоя стандарт ҳолатда ёқилган бўлади:
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Мисол: кичик онлайн дўкон учун тайёргарлик
Тошкентдаги кийим дўкони ўз сайтини умумий хостингдан VPS'га кўчирмоқчи дейлик. Дастурчи серверни олган куни аввал юқоридаги саккиз қадамни бажаради, кейин қайта юклайди ва фақат шундан сўнг Nginx, PHP ва MySQL ўрнатишга ўтади. Бу тартиб ишнинг кейинги босқичларини ҳам соддалаштиради: барча ўрнатишлар алоҳида фойдаланувчи остида, фақат керакли портлар очиқ ҳолда бажарилади. Домен DNS ёзувини янги серверга йўналтириш эса энг охирида, сайт тўлиқ текширилгандан кейин қилинади. sayt.uz'да домен ёзувлари кабинетдаги DNS бўлимида ўзгартирилади.
Барча қадамлардан кейин серверни sudo reboot билан қайта юкланг ва янги фойдаланувчи билан калит орқали қайта кира олишингизни яна бир бор текширинг. Шу ярим соатлик иш кейинчалик кўплаб муаммоларнинг олдини олади.