Tropic Host

VPS təhlükəsizliyi sıfırdan: SSH açarları, firewall və Fail2ban

8 dəqiqə oxu
Tropic
VPS təhlükəsizliyi sıfırdan: SSH açarları, firewall və Fail2ban

Language: az

VPS təhlükəsizliyi sıfırdan: SSH açarları, firewall və Fail2ban

Ubuntu quraşdırıldıqdan dərhal sonra yeni VPS-i təhlükəsiz hesab etmək olmaz. Giriş konfiqurasiya edilməzdən əvvəl server artıq skanerlər üçün görünür: onlar SSH parollarını sınaqdan keçirir, açıq idarəetmə panellərini axtarır və geniş yayılmış boşluqları yoxlayırlar. Bu təlimatda VPS-i sıfırdan qorumağın əsas addımlarını nəzərdən keçirəcəyik: ayrıca istifadəçi yaratmaq, SSH açarı ilə autentifikasiyanı qurmaq, UFW ilə şəbəkə portlarını məhdudlaşdırmaq və Fail2ban əlavə etmək. Əmrlər sudo səlahiyyətlərinə malik istifadəçi tərəfindən icra edildikdə bütün addımlar Ubuntu 22.04 və 24.04 ilə işləyir.

Başlamazdan əvvəl: portların siyahısını hazırlayın

Portları “ehtiyat üçün” açmayın. Tipik veb serverə bunlar lazımdır:

  • 22/tcp — SSH; ideal olaraq onu IP üzrə məhdudlaşdırın və ya yalnız əlavə tədbir kimi başqa porta köçürün;
  • 80/tcp — HTTP; adətən HTTPS-ə yönləndirmə və sertifikatı yoxlamaq üçün lazımdır;
  • 443/tcp — HTTPS.

Nginx və ya Caddy qarşısında işləyirsə, 3000, 8080 və ya 9000 kimi tətbiq portu internetdən əlçatan olmamalıdır. Tətbiqi 127.0.0.1 ünvanına bağlayın və ya portuna yalnız daxili şəbəkədə icazə verin. Əvvəlcə serverdə nəyin qulaq asdığını öyrənin:

sudo ss -tulpn

Docker quraşdırıldıqdan sonra onun iptables qaydalarını ayrıca yoxlayın: -p 3000:3000 yayımlaması portu gözlənilən quruluşdan kənara çıxara bilər. İctimai xidmət üçün HTTPS proksisindən istifadə etmək və daxili portu gizli saxlamaq daha təhlükəsizdir.

Addım 1. Sistemi yeniləyin və administrator yaradın

Sizə verilən məlumatlarla VPS-ə qoşulun və yeniləmələri quraşdırın:

sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgrades

Şəxsi istifadəçi yaradın. alex sözünü öz adınızla əvəz edin:

sudo adduser alex
sudo usermod -aG sudo alex

Yeni hesabı ayrıca terminal pəncərəsində yoxlamadan əvvəl ilkin girişi silməyin. Bu vacib qaydadır: cari sessiya hələ açıq olduğu müddətdə SSH səhvini düzəltmək daha asandır.

Addım 2. SSH açarı yaradın və serverə quraşdırın

Linux, macOS və ya Windows PowerShell işlədən kompüterinizdə bu əmri yerinə yetirin:

ssh-keygen -t ed25519 -C "alex@my-computer"

Açarı standart faylda saxlamaq üçün Enter düyməsini basın, sonra passphrase təyin edin. Şəxsi açarı heç vaxt çata göndərməyin, repozitoriyaya qoymayın və VPS-ə köçürməyin. Serverə yalnız .pub uzantılı fayl ötürülməlidir:

ssh-copy-id alex@SERVER_IP

ssh-copy-id mövcud deyilsə, PowerShell-də Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub ilə açıq açarı göstərin, sonra onu serverə əlavə edin:

sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keys

Açarı bir sətirə yerləşdirin və parolları söndürməzdən əvvəl girişi yoxlayın:

ssh alex@SERVER_IP
sudo whoami

Son əmrin gözlənilən nəticəsi root olmalıdır. SSH müştərisi açarı tapa bilmirsə, onu açıq şəkildə göstərin: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.

Addım 3. root girişini və parol autentifikasiyasını söndürün

SSH konfiqurasiyasının ehtiyat nüsxəsini yaradın:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

Faylda bu parametrlərin olduğuna əmin olun:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3

Ubuntu-da parametrlər /etc/ssh/sshd_config.d/*.conf daxilində yerləşə bilər, buna görə effektiv konfiqurasiyanı yoxlayın:

sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'

sshd -t xəta bildirirsə, sintaksisi düzəldənə qədər xidməti yenidən başlatmayın. Yoxlama uğurlu olduqdan sonra parametrləri tətbiq edin:

sudo systemctl reload ssh

Köhnə SSH bağlantısını açıq saxlayın və yeni pəncərədə açarla girişi yoxlayın. Yoxlanmış açar olmadan parolları söndürmək serverə girişi itirməyin ən yayılmış səbəbidir.

Addım 4. SSH-ni bloklamadan UFW-ni konfiqurasiya edin

UFW Linux şəbəkə qaydaları üçün rahat örtükdür. Əvvəlcə təhlükəsiz standartları təyin edin, sonra SSH və veb portlarına icazə verin:

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'
sudo ufw enable

SSH qaydası əlavə edildikdən sonra aktivləşdirməni təsdiqləyin. Nəticəni nəzərdən keçirin:

sudo ufw status verbose
sudo ufw status numbered

Daimi ofis IP-si üçün SSH-ni həmin ünvana məhdudlaşdıra bilərsiniz:

sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'

Bu seçimdən yalnız daimi IP və provayder konsoluna giriş olduqda istifadə edin: ünvan dəyişərsə, özünüzü serverdən kənarda saxlaya bilərsiniz.

Tətbiq portunu müvəqqəti necə açmaq olar

Xidməti birbaşa yoxlamaq lazımdırsa, məhdud mənbə ilə qayda yaradın:

sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcp

Yoxlamadan sonra ufw status numbered tərəfindən göstərilən nömrədən istifadə edərək qaydanı silin:

sudo ufw delete RULE_NUMBER

sudo ufw allow 1:65535/tcp istifadə etməyin: belə qayda firewall-u formal bir tədbirə çevirir.

Addım 5. SSH üçün Fail2ban-ı aktivləşdirin

Fail2ban jurnalları təhlil edir və bir neçə uğursuz giriş cəhdindən sonra müvəqqəti bloklama qaydası əlavə edir. O, SSH açarlarını və ya firewall-u əvəz etmir, amma avtomatlaşdırılmış brute-force cəhdlərindən gələn səsi azaldır.

Paket yeniləmələrinin parametrlərinizi üzərindən yazmaması üçün lokal konfiqurasiya yaradın:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

[DEFAULT] bölməsində məntiqli dəyərlər təyin edin:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw

[sshd]
enabled = true
port = 22

Xidməti başladın və jail-i yoxlayın:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd

sshd çıxışında uğursuz cəhdlərin və bloklanmış ünvanların sayını yoxlayın. Öz IP-nizi bloklama siyahısına əlavə etməyin. Daimi istisna üçün ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP parametrini [DEFAULT] bölməsində istifadə edin.

Addım 6. Avtomatik yeniləmələri aktivləşdirin

Avtomatik yeniləmələr təhlükəsizlik paketləri üçün faydalıdır, amma kernel-in yenidən başladılmasını yenə də idarə etmək lazımdır:

sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgrades

Həftədə bir dəfə yenidən başlatmanın lazım olub-olmadığını yoxlayın:

test -f /var/run/reboot-required && echo 'Требуется перезапуск'

Əl ilə yenidən başlamazdan əvvəl işlək açarınızın və VPS konsoluna girişinizin olduğuna əmin olun. Yenidən başlatdıqdan sonra tətbiq xidmətlərini, Nginx-i, UFW-ni və Fail2ban-ı yoxlayın.

Addım 7. Nəticəni kənardan yoxlayın

Qorumanı yalnız konfiqurasiyanı oxumaqla deyil, başqa kompüterdən yoxlayın:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IP

Əmr girişin rədd edilməsi ilə nəticələnməlidir. İşlək açarla girişi ayrıca yoxlayın:

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IP

VPS-də dinləyən ünvanları və qaydaları yoxlayın:

sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshd

Birbaşa giriş üçün nəzərdə tutulmayıbsa, tətbiq portu 127.0.0.1 ünvanında dinləməlidir. Xarici hostdan nmap SERVER_IP istifadə edə bilərsiniz, amma yalnız öz serverinizi skan edin: başqasının infrastrukturunu icazəsiz yoxlamaq qanunu və provayder qaydalarını poza bilər.

Ehtiyat nüsxələri və bərpa

SSH qoruması silinmiş məlumatlardan, administrator səhvindən və ya ələ keçirilmiş tətbiqdən müdafiə etmir. Verilənlər bazasının, konfiqurasiyanın və istifadəçi fayllarının nüsxələrini VPS-dən ayrı saxlayın. Minimum quruluş gündəlik ehtiyat nüsxə, əvvəlki günlərdən bir neçə versiya və dövri bərpa testlərindən ibarətdir.

Parolları və ya tokenləri açıq mətnli skriptlərə yazmayın. Sirr ifşa olunarsa, onu dərhal ləğv edin və yenisini yaradın.

Təhlükəsiz layihə üçün VPS-i necə seçmək olar

Təhlükəsizlik infrastruktur üzərində nəzarətlə başlayır. VPS-də əməliyyat sistemini, firewall qaydalarını, giriş üsulunu, ehtiyat nüsxələri və xidmətlərin yerləşimini özünüz seçə bilərsiniz. Kiçik vebsayt və ya API üçün sabit şəbəkə, SSD yaddaş və bərpa konsolu artıq virtual nüvələrdən daha vacibdir.

Layihəni tropic.host üzərində VPS-də başladarkən onun ictimai giriş nöqtələrini əvvəlcədən müəyyən edin: əksər hallarda SSH, HTTP və HTTPS kifayətdir. Verilənlər bazasını və idarəetmə panellərini daxili şəbəkədə saxlayın. Layihə böyüdükcə tətbiq, verilənlər bazası və monitorinq üçün ayrıca VPS instansiyaları nasazlıq sahələrini təcrid etməyə kömək edir.

Yayğın səhvlər

  • Açarla girişi yoxlamadan parolları söndürmək. Cari sessiyanı açıq saxlayın və yeni girişi ayrıca yoxlayın.
  • Etibarlı ünvanlardan girişə icazə verilə bildiyi halda 22/tcp portunu bütün dünyaya açıq saxlamaq.
  • Docker portlarını birbaşa yayımlamaq. Əvvəlcə Docker və UFW qaydalarını yoxlayın.
  • Fail2ban quraşdırıldıqdan sonra jurnalları bir daha yoxlamamaq. Dəyişikliklərdən sonra journalctl -u ssh və jail statusunu nəzərdən keçirin.

Nəticə

Addımlar düzgün ardıcıllıqla yerinə yetirildikdə əsas VPS qoruması çox vaxt aparmır: ayrıca istifadəçi yaradın, SSH açarı quraşdırın, girişi yoxlayın, root girişini və parolları söndürün, UFW-ni aktivləşdirin, Fail2ban-ı konfiqurasiya edin və avtomatik yeniləmələri qurun. Sonra ehtiyat nüsxələri, jurnal qeydini və xarici monitorinqi əlavə edin.

Bu addımlar serveri toxunulmaz etmir, amma ilkin konfiqurasiyada ən çox rast gəlinən səhvləri aradan qaldırır. Növbəti addım təhlükəsizlik profilini konkret tətbiqə uyğunlaşdırmaqdır: asılılıqları yeniləyin, xidmət icazələrini məhdudlaşdırın, idarəetmə panellərini qoruyun və açıq portları müntəzəm yoxlayın.

FAQ

Standart SSH portunu dəyişməliyəm?

Mütləq deyil. Portu köçürmək avtomatlaşdırılmış səsi azaldır, amma açarları, söndürülmüş parolları, UFW-ni və ya Fail2ban-ı əvəz etmir. Portu dəyişsəniz, firewall qaydasını və Fail2ban jail-indəki port parametrini yeniləyin.

UFW-ni konfiqurasiya etdikdən sonra girişi itirsəm nə etməliyəm?

Provayderin veb və ya rescue konsolundan istifadə edin, sonra SSH qaydasını və sshd konfiqurasiyasını yoxlayın. Yeni giriş təsdiqlənənə qədər köhnə işlək sessiyanı bağlamayın.

Fail2ban SSH-ni qorumaq üçün kifayətdirmi?

Xeyr. Fail2ban artıq baş vermiş giriş uğursuzluqlarına reaksiya verir. Əsas müdafiə SSH açarları, parol autentifikasiyasının söndürülməsi, minimal istifadəçi icazələri və məhdud firewall olmalıdır.

SSH-yə yalnız bir IP ünvanından icazə verə bilərəm?

Bəli, ünvan daimidirsə: həmin IP üçün UFW-də allow from qaydası əlavə edin. Provayder konsoluna girişi və ya başqa ehtiyat üsulu əvvəlcədən təmin edin, çünki IP dəyişdikdən sonra bağlantı bloklanacaq.

VPS təhlükəsizliyini nə qədər tez-tez yoxlamalıyam?

SSH, firewall və ya Docker portlarının yayımlanmasında hər dəyişiklikdən sonra port yoxlaması aparın və girişi test edin. Müntəzəm texniki xidmət kimi yeniləmələri və jurnalları ən azı həftədə bir dəfə nəzərdən keçirin, ehtiyat nüsxədən bərpanı isə müntəzəm test edin.