Fail2ban istifadə edərək SSH serverini kobud güc hücumlarından necə qorumaq olar. SSH serverinin qorunması Qeyri-standart portdan istifadə edin

SSH sizə serverə təhlükəsiz əlaqə yaratmağa imkan verir, lakin düzgün işləmək üçün SSH xidmətinin özünün İnternetə çıxışı olmalıdır. Bu, potensial təcavüzkarlar üçün hücum vektoru yaradır, buna görə də SSH əlavə qorunma tələb edir.

Ümumiyyətlə, şəbəkəyə çıxışı olan istənilən xidmət potensial hədəfdir. Bu xidmətlərin qeydlərində təkrar, sistematik giriş cəhdlərini görə bilərsiniz - bunlar istifadəçilər və botlar tərəfindən həyata keçirilən kobud güc hücumlarıdır.

fail2ban xidməti əvvəlcədən müəyyən edilmiş uğursuz giriş cəhdləri əsasında iptables firewallını avtomatik olaraq yenidən konfiqurasiya edən qaydalardan istifadə edərək hücumları azalda bilər. Bu, serverə administratorun müdaxiləsi olmadan icazəsiz girişə dərhal cavab verməyə imkan verəcək.

Bu təlimat Ubuntu 14.04 serverində fail2ban-ı quraşdırmanıza və konfiqurasiyanıza kömək edəcək.

fail2ban quraşdırılması

Ubuntu repozitoriyası fail2ban paketini təmin edir, ona görə də onu standart paket meneceri vasitəsilə quraşdırmaq olar.

Paket indeksinizi yeniləyin və bu əmrlərdən istifadə edərək fail2ban quraşdırın:

sudo apt-get yeniləməsi
sudo apt-get install fail2ban

İndi yardım proqramını qurmağa başlaya bilərsiniz.

fail2ban konfiqurasiyaları

fail2ban konfiqurasiya faylları /etc/fail2ban kataloqunda saxlanılır. Standart parametrləri jail.conf faylında tapmaq olar.

Bu fayl paket yeniləməsi zamanı dəyişdirilə bildiyi üçün onu redaktə etməyə ehtiyac yoxdur. Onun məzmununu başqa bir fayla köçürmək və oradakı parametrləri tənzimləmək daha yaxşıdır. Bu iki faylın düzgün işləməsini təmin etmək üçün yeni faylda yalnız jail.local faylında ləğv etmək istədiyiniz parametrləri tərk etmək yaxşıdır. Bütün standart parametrlər jail.conf faylından oxunacaq.

jail.conf-u kopyalayın və onu jail.local faylı üçün əsas kimi istifadə edin. Bunu etmək üçün daxil edin:

awk "( printf "# "; çap; )" /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Bundan sonra jail.conf-a baxın:

sudo nano /etc/fail2ban/jail.conf

Bəzi parametrlər bu faylda yenilənə bilər. Bölmə parametrləri fail2ban-ın dəstəklədiyi bütün xidmətlərə tətbiq olunacaq (bu dəyərlər həmin xidmətlərin konfiqurasiya fayllarında ləğv edilmədiyi halda).


. . .
ignoreip = 127.0.0.1/8
. . .

ignoreip parametri fail2ban-ın məhəl qoymayacağı mənbə ünvanlarını konfiqurasiya edir. Varsayılan olaraq, yerli maşından gələn istənilən trafikə icazə verir. Siz boşluqla ayrılaraq ignoreip direktivinin sonunda yerləşdirməklə nəzərə almamaq üçün digər ünvanları əlavə edə bilərsiniz.


. . .
bantime = 600
. . .

Bantime parametri autentifikasiya uğursuz olarsa, müştərinin bloklanacağı vaxtı təyin edir. Onun dəyəri saniyələrlə ölçülür. Varsayılan dəyər 600 saniyədir (10 dəqiqə).


. . .
tapmaq vaxtı = 600
maxretry = 3
. . .

Diqqət edilməli olan növbəti iki parametr findtime və maxretry. Onlar birlikdə qeyri-qanuni istifadəçilərin bloklanacağı şərtləri müəyyənləşdirirlər.

Maxretry dəyişəni giriş cəhdlərinin sayını, findtime isə istifadəçinin autentifikasiya etməli olduğu vaxt intervalını təyin edir. Müştəri bu göstəricilərdən hər hansı birini keçərsə, bloklanacaq. Varsayılan olaraq, fail2ban xidməti 10 dəqiqə ərzində 3 dəfə etimadnamə təqdim etməyən müştəriləri bloklayır.


. . .
destemail = root@localhost
göndərən adı = Fail2Ban
mta = göndərmək
. . .

Destemail, sendername və mta parametrləri e-poçt xəbərdarlıqlarını konfiqurasiya etməyə imkan verir. Destemail parametri ünvanı müəyyən edir E-poçt, bloklanmış istifadəçilər haqqında mesajlar almalıdır. Göndərən adı parametri mesajın göndəricisini təyin edir. mta parametri hansının olduğunu müəyyən edir Poçt xidməti poçt göndərmək üçün istifadə olunacaq. Bu parametrləri jail.local bölməsinə əlavə edin və müvafiq dəyərləri təyin edin.


. . .
fəaliyyət = $(action_)s
. . .

Bu parametr, fail2ban bloklandığı təqdirdə nə edəcəyini konfiqurasiya edir. action_ dəyəri faylda bu parametrdən bir qədər əvvəl müəyyən edilir. Defolt hərəkət təhlükəsizlik duvarını yenidən konfiqurasiya etməklə qadağanın müddəti bitənə qədər təcavüzkarın trafikini bloklayacaq.

E-poçt xəbərdarlıqlarını konfiqurasiya etmək istəyirsinizsə, jail.local faylına fəaliyyət elementi əlavə edin və ya şərhi silin və onun dəyərini action_-dən action_mw-a dəyişin. E-poçtun qeydlərdən müvafiq sətirləri daxil etməsini istəyirsinizsə, action_mwl dəyərini təyin edə bilərsiniz. E-poçt xəbərdarlıqlarından istifadə etmək qərarına gəlsəniz, e-poçt parametrlərinizin onları dəstəklədiyinə əmin olun.

Fərdi parametrlər

Fərdi xidmətlərə dəstək eyni adlı xüsusi bölmələrə daxildir. Məsələn, ssh xidmətinin parametrləri bölmədə göstərilə bilər.

Bu bölmələrin hər biri jail.local-da bölmə başlığını şərhdən çıxararaq və aktiv sətri "true" olaraq dəyişdirməklə aktivləşdirilə bilər:


. . .
aktiv = doğrudur
. . .

Varsayılan olaraq, yalnız SSH xidməti dəstəklənir və bütün digər xidmətlər deaktivdir.

Bu bölmələr bölmədə müəyyən edilmiş dəyərləri əsas götürür və lazım olduqda onları tənzimləyir. İstənilən dəyərləri ləğv etmək üçün jail.local-a müvafiq xidmət üçün bölmə əlavə edin və onun dəyərlərini dəyişdirin.

Bəzi digər parametrlər də burada təyin olunur. Filtr parametri jurnaldakı xəttin uğursuz autentifikasiya cəhdini göstərib-göstərmədiyini müəyyən etməyə kömək edir; Logpath parametri fail2ban-a həmin xüsusi xidmət üçün qeydlərin harada yerləşdiyini bildirir.

Filtr parametrinin dəyəri /etc/fail2ban/filter.d qovluğunda yerləşən .conf uzantılı fayla keçiddir. Bu fayllar ehtiva edir müntəzəm ifadələr, jurnaldakı xəttin uğursuz autentifikasiya cəhdi haqqında mesaj olub-olmadığını müəyyən edir. Bu fayllar bu təlimatın əhatə dairəsindən kənardadır, çünki onlar olduqca mürəkkəbdir və əksər hallarda standart parametrlər yaxşıdır.

Bu kataloqda filtrlərə baxa bilərsiniz:

ls /etc/fail2ban/filter.d

Tələb olunan xidmətlə əlaqəli faylı tapın və onunla açın mətn redaktoru. Faylların əksəriyyəti olduqca yaxşı şərh edilmişdir və siz xidmətin qorunması skripti ilə tanış ola bilərsiniz. Bu filtrlərin əksəriyyətinin jail.conf faylında müvafiq bölmələri var (onlar standart olaraq qeyri-aktivdir). Lazım gələrsə, onları jail.local faylında aktivləşdirmək olar.

Tutaq ki, sizin Nginx-dən istifadə edən bir veb saytınız var. Veb server qeydləri uğursuz giriş cəhdləri ilə daim yenilənir. Fail2ban yardım proqramı /var/log/nginx/error.log-u daim yoxlamaq üçün nginx-http-auth.conf faylından istifadə edə bilər.

Bunun üçün lazım olan demək olar ki, bütün parametrlər artıq /etc/fail2ban/jail.conf faylının bölməsindədir. Siz sadəcə olaraq jail.local faylında bu bölmənin şərhini silməlisiniz və aktivləşdirilmiş parametri doğru olaraq təyin etməlisiniz.

. . .
aktiv = doğrudur
. . .

Bundan sonra fail2ban-ı yenidən başlatmalısınız.

fail2ban qurulur

İndi fail2ban-ın necə işlədiyinin əsaslarını bilirsiniz. SSH və Nginx xidməti üçün avtomatik bloklama siyasətini qurmağa cəhd edin. IP ünvanı bloklandıqda e-poçt göndərmək üçün sizə fail2ban aləti də lazımdır.

Əvvəlcə lazımi proqramı quraşdırın.

Sizə nginx lazımdır, çünki fail2ban öz qeydlərinə nəzarət edəcək və bildirişlər göndərmək üçün sendmail. Siz həmçinin iptables-persistent paketinə ehtiyacınız var ki, server işə salındıqda firewall qaydalarını server saxlasın və avtomatik yükləsin. Bütün bu paketləri standart Ubuntu depolarından endirmək olar:

sudo apt-get yeniləməsi
sudo apt-get quraşdırma nginx sendmail iptables-persistent

Əsas firewall qurmaq üçün fail2ban xidmətini dayandırın.

Təhlükəsizlik divarının qurulması

Əsas firewall dəstəkləməlidir qurulmuş əlaqələr, həmçinin serverin özü tərəfindən yaradılan trafik və SSH və veb server portları üçün nəzərdə tutulmuş trafik. Bütün digər trafik bloklanacaq. Qaydalar belə görünür:

sudo iptables -A INPUT -i lo -j QƏBUL EDİR
sudo iptables -A INPUT -m conntrack --ctstate QURULDU,RELATED -j QƏBUL EDİR
sudo iptables -A INPUT -p tcp --dport 22 -j QƏBUL EDİR
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j QƏBUL EDİN
sudo iptables -A INPUT -j DROP

Bu əmrlər yuxarıdakı siyasəti həyata keçirir. Cari firewall qaydalarına baxmaq üçün yazın:

sudo iptables -S
-P GİRİŞ QƏBUL
-P İLERİ QƏBUL
-P ÇIXIŞI QƏBUL EDİR
-A GİRİŞ -i lo -j QƏBUL EDİR




-A INPUT -j DROP

Yenidən başladıqdan sonra itirilməməsi üçün təhlükəsizlik duvarı qaydalarınızı yadda saxlayın.

sudo dpkg-iptables-davamlılığı yenidən konfiqurasiya edin

fail2ban-ı yenidən başladın:

sudo xidməti fail2ban start

Sorğu firewall qaydaları:

sudo iptables -S
-P GİRİŞ QƏBUL
-P İLERİ QƏBUL
-P ÇIXIŞI QƏBUL EDİR
-N fail2ban-ssh

-A GİRİŞ -i lo -j QƏBUL EDİR
-A INPUT -m conntrack --ctstate BAĞLI,QURULMUŞ -j QƏBUL EDİR
-A INPUT -p tcp -m tcp --dport 22 -j QƏBUL EDİR
-A INPUT -p tcp -m tcp --dport 80 -j QƏBUL EDİR
-A INPUT -j DROP
-A fail2ban-ssh -j RETURN

Hər bir zəncirin indi öz standart siyasəti var. Firewallda həmçinin beş əsas qayda var. Fail2ban strukturu qırmızı rənglə vurğulanır: bu alət artıq SSH qadağan qaydalarını tətbiq edir. Bəzən bu struktur əvvəlcə göstərilmir, çünki fail2ban strukturu ilk qadağaya qədər əlavə etməyə bilər.

fail2ban qurulur

İndi jail.local faylına fail2ban parametrlərini əlavə etməlisiniz:

sudo nano /etc/fail2ban/jail.local

Burada daha ciddi bloklama vaxt intervalı təyin edə bilərsiniz. Başlığı tapın və şərhi silin. Bu bölmədə bantime parametrini dəyişdirin ki, xidmət müştərini yarım saat blok etsin:


. . .
bantime = 1800
. . .

Siz həmçinin bildirişləri qurmalısınız. Birincisi, destemail parametrini tapın, bu da bölmədə olmalıdır. Bu mesajları toplamaq üçün istifadə etmək istədiyiniz e-poçt ünvanını daxil edin:


. . .
destemail = [email protected]
. . .

Göndərən adında istənilən əlverişli dəyəri göstərin. E-poçt xidmətinin asanlıqla süzgəcdən keçirə bilməsi üçün burada təsviri dəyərdən istifadə etmək tövsiyə olunur.

Sonra hərəkətin dəyərini düzəltmək lazımdır. Siz müştərini bloklamaq üçün action_mw təyin edə və sonra "whois" hesabatı göndərə bilərsiniz. action_mwl dəyəri eyni şeyi edir, həm də mesajda müvafiq jurnal sətirlərini göndərir.


. . .
fəaliyyət = %(action_mwl)s
. . .

Maxretry direktivinin SSH bölməsində siz uğursuz autentifikasiya cəhdlərinin sayını dəyişə bilərsiniz. Əgər siz qeyri-standart portdan istifadə edirsinizsə (22 deyil), onu port parametrində göstərin. Daha əvvəl qeyd edildiyi kimi, bu server artıq aktivdir.

Sonra nginx-http-auth bölməsini tapın. Başlığı şərhdən çıxarın və aktiv parametri "doğru" olaraq dəyişdirin.

. . .

aktiv = doğrudur
. . .

Veb server standart portlardan istifadə edirsə və onun qeydləri standart kataloqda saxlanılırsa, bu bölmədə etməli olduğunuz hər şey budur.

fail2ban-ı yenidən başladın

Faylı saxla və bağlayın.

Sonra fail2ban xidmətini yenidən başladın. Bəzən onu dayandırıb yenidən başlamaq daha yaxşıdır.

sudo xidməti fail2ban stop
sudo xidməti fail2ban start

Bütün firewall qaydalarının endirilməsi bir neçə dəqiqə çəkə bilər. Bəzən ilk müştəri bloklanana qədər qaydalar əlavə edilmir. Bir müddət sonra siz yeni qaydaları yoxlaya biləcəksiniz:

sudo iptables -S
-P GİRİŞ QƏBUL
-P İLERİ QƏBUL
-P ÇIXIŞI QƏBUL EDİR
-N fail2ban-nginx-http-auth

-N fail2ban-ssh

-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth


-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh

-A GİRİŞ -i lo -j QƏBUL EDİR
-A INPUT -m conntrack --ctstate BAĞLI,QURULMUŞ -j QƏBUL EDİR
-A INPUT -p tcp -m tcp --dport 22 -j QƏBUL EDİR
-A INPUT -p tcp -m tcp --dport 80 -j QƏBUL EDİR
-A INPUT -j DROP
-A fail2ban-nginx-http-auth -j RETURN

-A fail2ban-ssh -j RETURN

fail2ban siyasəti ilə yaradılmış xətlər qırmızı rənglə vurğulanır. Hal-hazırda onlar sadəcə olaraq trafiki yeni, əsasən boş zəncirlərə yönləndirirlər və sonra trafik axınını INPUT zəncirinə qaytarırlar.

Bu zəncirlərə bloklama qaydaları əlavə olunacaq.

Bloklama siyasəti sınaqdan keçirilir

İndi siz fail2ban serverində etimadnaməsi olmayan başqa serverdən qoşularaq qaydaları sınaya bilərsiniz.

Mövcud olmayan etimadnamələrdən istifadə edərək serverə SSH bağlantısı yaratmağa cəhd edin:

ssh blah@fail2ban_server_IP

Parol olaraq təsadüfi simvol dəstini daxil edin. Bir neçə dəfə təkrarlayın. Bir nöqtədə fail2ban girişi rədd edəcək və “İcazə rədd edildi” mesajını göstərəcək.

Birinci serverə qayıdın və yeni iptables qaydalarına baxın:

sudo iptables -S
-P GİRİŞ QƏBUL
-P İLERİ QƏBUL
-P ÇIXIŞI QƏBUL EDİR
-N fail2ban-nginx-http-auth
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A GİRİŞ -i lo -j QƏBUL EDİR
-A INPUT -m conntrack --ctstate BAĞLI,QURULMUŞ -j QƏBUL EDİR
-A INPUT -p tcp -m tcp --dport 22 -j QƏBUL EDİR
-A INPUT -p tcp -m tcp --dport 80 -j QƏBUL EDİR
-A INPUT -j DROP
-A fail2ban-nginx-http-auth -j RETURN
-A fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN

Yeni qayda qırmızı rənglə vurğulanıb. O, ikinci serverin IP ünvanından SSH portuna trafiki bloklayır. Tezliklə müştərinin bloklandığı barədə bildiriş alacaqsınız.

Nəticə

İndi siz fail2ban-ın əsasları ilə tanışsınız və bu alət üçün əsas konfiqurasiya yarada bilərsiniz.

Secure Shell hər yerdə tapıla bilər. 1995-ci ildə buraxıldıqdan sonra SSH Linux üçün güclü uzaqdan giriş protokolu kimi geniş istifadə olunur.

Ancaq bildiyimiz kimi, böyük güclə böyük məsuliyyət gəlir. Yanlış konfiqurasiya edilmiş SSH demonu köməkdən daha çox təhlükə ola bilər. Bu yazıda SSH təhlükəsizliyini gücləndirmək üçün beş addıma baxacağıq.

1. Kök girişini söndürün.

Ən sadə addım. Aydındır ki, SSH vasitəsilə kök girişlərinə icazə vermək üçün çox az səbəb var. Belə girişi söndürmək olduqca sadədir və təhlükəsizliyi artıracaq.

Gəlin /etc/ssh/sshd_config tapaq (o, başqa kataloqda yerləşə bilər, paylanmadan asılıdır). Orada PermitRootLogin-in yerini təyin edəcəyik və dəyəri "no" ilə əvəz edəcəyik:

PermitRootLogin nömrəsi

Təbii ki, bu, heç kimin adi istifadəçi kimi sistemə girməsinə mane olmayacaq, lakin yenə də sistemin hökmranlığına əlavə maneə rolunu oynayacaq.

Yuxarıda yazılan hər şeyi oxuyub praktikada tətbiq etdikdən sonra biz serverdə avtorizasiya üçün açarları alacağıq. Hər şeyin işlədiyinə əmin olduqdan sonra interaktiv daxiletməni söndürə bilərsiniz:

PasswordAuthentication No
ChallengeResponseAuthentication no

Bu Python skriptindən istifadə edərək, administrator uğursuz giriş halında avtomatik olaraq hostları qara siyahıya əlavə edə və onları həmişəlik qadağan edə bilər. Ən sadə yol parametrlər:

Europa ~ # ortaya -pv denyhosts
Bunlar ardıcıllıqla birləşdiriləcək paketlərdir:
Asılılıqların hesablanması... tamamlandı!
app-admin/denyhosts-2.5 0 kB
Yükləmələrin ümumi ölçüsü: 0 kB
avropa ~ # ortaya çıxan denyhostlar

Proqramda çoxlu sənədləşmə yoxdur (məsələn, bir şey varsa), lakin bütün konfiqurasiya variantları adətən aşağıda təsvir olunur. konfiqurasiya faylı.

Avropa $ nano -w /etc/denyhosts.conf

Düşünmürəm ki, DenyHosts-u konfiqurasiya etmək heç bir xüsusi problem yaradacaq - sadəcə konfiqurasiyanı diqqətlə oxuyun.

Konfiqurasiyadan sonra proqramı bir daemon kimi və ya planlaşdırıcı vasitəsilə işlədə bilərsiniz. Gentoo demonunda:

Rc yeniləməsi denyhosts default əlavə edin

Cron vasitəsilə hər 10 dəqiqədən bir deyin:

Python /usr/bin/denyhosts -c /etc/denyhosts.conf

DenyHost-un bütün sevinci təkcə SSH serverinizə keçməyə çalışan hostları bloklamaqda deyil, həm də “qara siyahınızı” DenyHost serverləri ilə sinxronlaşdıra bilməyinizdədir. Bu, bütün təcavüzkarları ehtiva edən hostların kollektiv siyahısını yaradır. Kökdə hücumun qarşısını alacaq.

4. Port nömrəsini dəyişdirin.

Hack cəhdlərinin əksəriyyəti şəbəkəni SSH demonları üçün skan edən avtomatlaşdırılmış skriptlərdən gəlir. Əksər hallarda, onlar yalnız bizim əlimizdə olan 22-ci limana girməyə çalışırlar. Portu dəyişdirməklə, biz icazəsiz giriş cəhdlərinin əksəriyyətini avtomatik olaraq kəsəcəyik.

Konfiqurasiyada dəyişməyə dəyər.

Ssh serverinə girişi qorumaq üçün bir neçə qayda.

1. Standartdan əlavə daha bir portu dinləmək üçün ssh server konfiqurasiyasına əlavə edin. (Yadda saxlamaq asanlığı üçün bütün serverləriniz üçün 4 təkrarlanan nömrədən istifadə edə bilərsiniz).

$ sudo vi /etc/ssh/sshd_config Port 22 Port xxxx

2. Biz 22 nömrəli porta zəngləri yalnız etibarlı IP ünvanlarına məhdudlaşdırırıq *məsələn 8.8.8.8 (bir neçə belə qayda yarada bilərsiniz, iş/ev)

$ sudo vi /etc/sysconfig/iptables -A INPUT -s 8.8.8.8 -p tcp -m vəziyyət --state YENİ -m tcp --dport 22 -j QƏBUL EDİN

3. İpv6 istifadə etdiyimizi yoxlamağı unutmayın, əgər belədirsə, lazımsız olanı bağlayın;

$ sudo vi /etc/sysconfig/ip6tables *süzgəc:GİRİŞ QƏBUL :ÖNƏLƏR QƏBUL :ÇIXIŞ QƏBUL -A GİRİŞ -m vəziyyəti --VƏZİYYƏT QURULANIB,ƏLAQƏLİ -j QƏBUL EDİR -A GİRİŞ -p ipv6-icmp -A ACCEPT -j - i lo -j QƏBUL EDİN -GİRİŞ -m vəziyyəti --vəziyyət YENİ -m tcp -p tcp --dport 80 -j QƏBUL EDİN -A GİRİŞ -m vəziyyəti --vəziyyət YENİ -m tcp -p tcp --dport 443 -j QƏBUL EDİN -A GİRİŞ -j RƏDD EDİN --redded-ilə icmp6-adm-qadağan edilib -A FORWARD -j REDD EDİN --redded-ilə icmp6-adm-qadağan edilib TƏHSİL EDİN

Ssh-dən yalnız müəyyən bir ünvanda istifadə etmək üçün konfiqurasiya faylında kifayətdir sshd_config parametrini təyin edin ListenAddress(məsələn, ListenAddress 74.125.200.100). Bu halda, ssh yalnız bu ünvanda mövcud olacaq və ipv6 vasitəsilə işləməyəcək

4. Müştəri tərəfində ssh konfiqurasiya faylından istifadə edin.

Məkan: ~/.ssh/config

# düzəliş Yazmaq uğursuz oldu: qırıq boru ServerAliveInterval 120 TCPKeepAlive qısa adlardan istifadə etmək üçün # yoxdur Host dev-vps # ip ünvanı və ya ictimai Domen adı host Hostname 127.0.0.3 # Hansı istifadəçinin daxil olması üçün İstifadəçi tərtibçisi # Avtorizasiya üçün açar fayl (istifadə edildikdə) IdentityFile ~/.ssh/id_rsa.dev

Və konfiqurasiya faylından istifadənin başqa bir nümunəsi:
{<1>}

Host ssh-server-1 Hostname 1.2.3.4 İstifadəçi dev Port 1234 Host ssh-server-2 İstifadəçi kökü # Hostname 192.168.10.20 # nc -q0 olmadan RHEL əsaslı və -q0 debian əsaslı IdentityFile ~/.ssh/id_rsa.work -pc ProxyCommand ssh -q0 ssh-server-1 nc -q0 192.168.10.20 22

İndi ssh-server-1-ə qoşulduqda dərhal ehtiyac duyduğumuz hosta keçəcəyik. (Məsələn, serverlərdə müxtəlif düymələrlə istifadə etmək rahatdır)

hipster proxy seçimi:

{<2>}

Ngrok müştərisini firewallun arxasında yerləşən serverə endirin. Binar sistemi işə salırıq və hansı portu yönləndirməmiz lazım olduğunu göstəririk

SSHşəbəkədə məlumat ötürülməsinin təhlükəsizliyini və şifrələnməsini təmin etmək üçün istifadə olunan protokoldur. Dairə şəklində geniş istifadə olunur Linux uzaq serveri idarə etmək üçün idarəçilər. Serverə giriş əldə etmək üçün İnternetə server bağlantıları çox vaxt SSH xidməti tərəfindən hücuma məruz qalır. Ən çox yayılmış administrator hüquqları olan bir istifadəçinin parolunu təxmin etməkdir. Bu təlimatda biz əsas təhlükəsizlik tövsiyələrinə baxacağıq SSHəlaqələri.

Kompleks parol təyin edin

Serveriniz istifadə edərək server parolunu təxmin etməyə çalışan təcavüzkarların hücumuna məruz qala bilər SSH Hack riskini azaltmaq üçün aşağıdakı parametrlərə uyğun gələn server hesabları üçün parol təyin etməyi tövsiyə edirik:

  • Ən azı 8 simvol
  • Böyük və kiçik hərflərdən istifadə edin (AaBb)
  • Hərflərdən istifadə edin - rəqəmlər və işarələr (!BasDf345$@)

Güclü parol təkcə sındırmalardan qorunmayacaq SSH protokol, lakin ümumiyyətlə server təhlükəsizliyini yaxşılaşdıracaq.

SSH açarlarından istifadə edin

Serveriniz üçün əlavə qorunma vasitəsilə serverə qoşulmaq üçün açarın istifadəsi olacaq SSH, siz qoşulacağınız kompüterdə/serverdə açar yaratmalısınız:

Necə yaratmaq SSH açarı yandırın Windows OS:

Bir açar yaratmaq üçün Linuxəmri yazın:

Ssh-keygen -t rsa

Bu açarı qoşulacağınız serverə quraşdırmaq üçün əmri yazın:

Ssh-copy-id -p 22 [email protected]

  • -səh 22- işlədiyi server portu SSH protokol (dəyişdirilə bilər, aşağıda ətraflı məlumat)
  • admin- Serverinizdən daxil olun
  • 192.168.1.1 - serverinizin IP ünvanı

Hər şeyi düzgün etmisinizsə, indi açardan istifadə edərək serverə qoşula bilərsiniz və hər dəfə parol daxil etməli olmayacaqsınız.

Qeyri-standart portdan istifadə edin

Standart SSH serverdə işləyən xidmət dinləyir 22 Port məlumatı birləşdirmək/ötürmək üçün təcavüzkarlar, əksər istifadəçilərin serverə qoşulmaq üçün standart portu dəyişmədiyini nəzərə alaraq bundan yararlana bilərlər. Beləliklə, biz portu dəyişəcəyik və bununla da serverimizin sındırılma riskini bir daha azaldacağıq.

Bunu etmək üçün konfiqurasiya faylını açın SSH serverdə:

Sudo nano /etc/ssh/sshd_config

Gəlin belə şərh edilmiş sətir tapaq:

# Port 22

Simvol silin # - şərh seçimini silmək və dəyişdirmək üçün 22 -dən başlayaraq istənilən nömrələrə 11060 və artan qaydada, məsələn, istifadə edəcəyik 11 060 , xətt indi belə görünməlidir:

Port 11060

Konfiqurasiyanı yadda saxla" Ctrl+O"və redaktordan çıxın" Ctrl+X".

Yenidən yükləmək lazımdır SSH xidmət - yeni parametrləri qəbul etmək üçün əmri yerinə yetirin:

Sudo xidməti sshd yenidən başladın

Beləliklə, əlaqə portunu dəyişdirdik, bundan sonra - serverə qoşulmaq üçün seçimi ilə qeyri-standart bir port göstərməlisiniz. -səh 11060 , Misal üçün:

Ssh -p 11060 [email protected]

Yalnız bir alt qrupa girişi məhdudlaşdırın

SSHəlaqə fərdi hesablar üçün məhdudlaşdırıla bilər, məsələn, serverdə üç hesab varsa: admin , sergey , alex- icazə vermək imkanınız var uzaqdan əlaqə yalnız bəziləri üçün. Bunu etmək üçün konfiqurasiya faylını açın SSH:

Bu faylda son sətirə enmək və aşağıdakı məzmunlu yenisini əlavə etmək üçün oxlardan istifadə edin:

AllowUsers admin alex

Konfiqurasiyanı yadda saxla" Ctrl+O"və redaktordan çıxın" Ctrl+X".

Xidməti yenidən başladın SSH:

Sudo xidməti sshd yenidən başladın

Siz belə icazə verdiniz uzaqdan giriş istifadəçilər üçün adminalex, istifadəçi isə sergey artıq uzaqdan qoşula bilməyəcək.

SSH protokolunu aktivləşdirin 2

Standarta uyğun olaraq SSH versiya 1 rejimində işləyir, bu versiya köhnəlmişdir və təmin etmək üçün bir çox zəifliklərə malikdir daha yaxşı təhlükəsizlik 2-ci versiya rejiminə keçməyi məsləhət görürük. Bunun üçün konfiqurasiya faylını açın SSH:

Sudo nano /etc/ssh/ssh_config

Xətti tapın:

# Protokol 2

Xarakteri silin # - şərh seçimini silmək və bu sətirdən istifadə etmək üçün belə görünməlidir:

Protokol 2

Konfiqurasiyanı yadda saxla" Ctrl+O"və redaktordan çıxın" Ctrl+X".

Xidməti yenidən başladın SSH:

Sudo xidməti sshd yenidən başladın

Boş parolları söndürün

Defolt SSH xidmət parolu olmayan istifadəçilərin qoşulmasını qadağan edir, lakin bu seçim serverinizdə qeyri-aktiv ola bilər, ona görə də konfiqurasiya faylını açın SSH:

Sudo nano /etc/ssh/ssh_config

Xətti tapın PermitEmptyPasswords və dəyər olduğundan əmin olun "yox".

PermitEmptyPasswords nömrəsi

Ətraflı qeydi aktivləşdirin

Xidmət etmək SSH IP ünvanlarını göstərən uğursuz bağlantılar jurnalını saxladı, konfiqurasiya faylını açın SSH:

Sudo nano /etc/ssh/ssh_config

Xətti tapın LogLevel və əvəzinə MƏLUMAT qeyd edin VERBOSE, xətt belə görünməlidir:

LogLevel VERBOSE

Faylı saxla" Ctrl+O"və redaktordan çıxın" Ctrl+X".

Xidməti yenidən başladın SSH:

Sudo xidməti sshd yenidən başladın

Komandanı daxil etməklə yoxlaya bilərsiniz:

Pişik /var/log/secure

Sistem bizə belə bir məlumat verəcəkdir:

21 iyun 13:06:28 centos sshd: 118.212.143.47 port 48263 ssh2-dən kök üçün uğursuz parol

Yəni bu yazıdan görürük ki, olub uğursuz cəhd göstərilən ünvandan serverə daxil olmaq.

Diqqətiniz üçün təşəkkür edirəm, bu qədər.

Bu qısa qeyddə mən ssh serverinin təhlükəsizliyini artırmaq yollarını bir araya gətirdim. Ən sadə və yerinə yetirilməsi sadə üsullar təsvir edilir və daha mürəkkəb olanlar yalnız maraqlanan oxucular üçün göstərilir.

Əsas Texnikalar

Bütün hərəkətlər sshd daemon konfiqurasiya faylında yerinə yetirilir - /etc/ssh/sshd_config. Aşağıda konfiqurasiya faylımın bir hissəsini şərhlərlə təmin edəcəyəm.

### Şəbəkə ### # Biz qeyri-standart portdan (>1024) istifadə edirik 5679 # Biz yalnız IPv4 bağlantılarından istifadə edirik # inet = IPv4, inet6 = IPv6, hər hansı = hər ikisi ÜnvanFamily inet # Siz yalnız müəyyən IP-dən bağlantıları qəbul edə bilərsiniz. ünvanlar #ListenAddress 0.0 # Protokolun ikinci versiyasını istifadə edirik, çünki birincisi # məlum Protokol 2 boşluqlarına məruz qalır # Sizə açıq şəkildə ehtiyac duyana qədər qrafik yönləndirməni (X serveri) deaktiv edin X11Yönləndirmə yoxdur # Disable TCPKeepAlive-i söndürün və əvəzinə ClientAliveInterval-dan istifadə edin TCP Spoofing TCPKeepAlive kimi hücumların qarşısını almaq üçün # istifadə edin. 600 saniyə) fəaliyyətsizlik ClientAliveInterval 600 ClientAliveCountMax 3 ### Açar konfiqurasiya faylları ### # Protokol versiyası 2 üçün HostKeys HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_keycom prosesində #müştəridən çıxarılan prosesdən istifadə edin. trafik # sandbox - openSSH >= 5.9 ("bəli" - aşağı versiyalar üçün) UsePrivilegeSeparation sandbox # Bu dəyərlər dəyişdikdə onun silinməsi tələb olunur köhnə açar# /etc/ssh/ssh_host_rsa_key(,.pub) və # sshd-ni yenidən başlatmaqla yenisini yaradın. # # Açar ömrü, yəni. Onun yaradılması nə qədər vaxt aparacaq? yeni açar# əvvəlki istifadə edildiyi halda. KeyRegenerationInterval 1h # açar gücü ServerKeyBits 2048 # Açıq açardan istifadə edərək avtorizasiyaya icazə verin PubkeyAuthentication bəli # AuthorizedKeysFile .ssh/authorized_keys istifadəçi kataloqunda etibarlı açarların saxlanma yeri özü LogLevel INFO ### Doğrulama ### # icazə verilən istifadəçilərin siyahısı AllowUsers ivan # ssh açarı LoginGraceTime 30s üçün parolun daxil olma müddətini məhdudlaşdırın # uzaqdan girişi qadağan edin hesab root PermitRootLogin no # Faylların və qovluqların hüquqlarının ssh düymələri ilə açıq şəkildə yoxlanılmasını aktivləşdirin StrictModes bəli # Yanlış daxil edildikdə parolu yenidən neçə dəfə soruşmaq lazımdır MaxAuthTries 3 # Boş parolla girişi qadağan edin PermitEmptyPasswords no # Parolla girişi qadağan edin prinsip # (Bunun əvəzinə ictimai/məxfi açardan istifadə edin) ParolAuthentication no # "Çağırış-cavab" icazəsinin istifadəsini söndürün, # çünki ChallengeResponseAuthentication açarlarından istifadə edərkən faydasızdır no # Paroldan istifadə etmədiyimiz üçün bizə ehtiyac yoxdur (PAM, login(1)) UsePAM no UseLogin no # Müştəriyə yalnız müəyyən mühit dəyişənləri dəstini ötürməyə icazə verin # RH BZ#CVE-2014-2532 # ShellShock istismarı AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_MELEASURENTIC LC_MESTELEPHONEIC LC_MESTELEFONİC_qəbul edin

Bunlar sshd konfiqurasiya faylında konfiqurasiya edilən parametrlərdir. Parametrləri dəyişdirdikdən sonra sshd xidmətini yenidən başlatmalısınız.

Şərhlər

  • Açar autentifikasiyasından istifadə edərkən açar tələb olunur əvvəlüzərində yaratmaq müştəri maşını və açıq açarı serverə kopyalayın. Misal:
müştəri $ ssh-keygen müştəri $ cat ~/.ssh/id_rsa.pub | ssh -p 5679 [email protected]"pişik >> ~/.ssh/authorized_keys"
  • /var/log/auth.log faylında mesajlar olacaq sshd. Bu fayl çatışmırsa, giriş sisteminizi konfiqurasiya etməlisiniz. syslog və syslon-ng üçün nümunə. Mən syslog-ng istifadə edirəm və /etc/syslog-ng/syslog-ng.conf faylına aşağıdakı sətirləri əlavə etmək lazımdır:
təyinat authlog ( fayl("/var/log/auth.log"); ); log (mənbə(src); təyinat(authlog); );

və syslog-ng xidmətini yenidən başladın.

  • Qeyri-standart portdan istifadə edirsinizsə, təhlükəsizlik duvarınızı (iptables, firewalld və s.) konfiqurasiya etməlisiniz.
    Misal iptables üçün parametrlər:
root# iptables -A INPUT -p tcp -m state --state YENİ, QURULUŞDUR --dport 5679 -j QƏBUL EDİN root# xidmət iptables saxla root# iptables -L -n Chain INPUT (siyasəti QƏBUL EDİN) hədəf prot opt ​​​​mənbə təyinatı QƏBUL EDİN icmp -- 0.0.0.0/0 0.0.0.0/0 QƏBUL ET tcp -- 0.0.0.0/0 0.0.0.0/0 vəziyyət YENİ tcp dpt:22 QƏBUL ET tcp -- 0.0.0.0/0 0.0.0.0/0 vəziyyət YENİ0. tcp dpt :80 QƏBUL EDİN tcp -- 0.0.0.0/0 0.0.0.0/0 vəziyyət YENİ, QURULAN tcp dpt:5679 ...

Bu kifayət deyilsə

Bu sadəcə əsas parametrlər. Əlavə olaraq konfiqurasiya edə bilərsiniz

  • firewall (iptables)