Cum să utilizați Port Knocking pe Linux (și de ce nu ar trebui)

Locuirea portului este o modalitate de a securiza un server prin închiderea porturilor de firewall – chiar și cele despre care știți că vor fi folosite. Acele porturi sunt deschise la cerere dacă – și numai dacă – cererea de conectare oferă un cioc secret.

Ciocănirea în port este o „ciocănire secretă”

În anii 1920, când interdicţie era în plină desfășurare, dacă voiai să intri într-o speakeasy, trebuia să cunoști ciocănirea secretă și să o atingi corect pentru a intra înăuntru.

Locația în port este un echivalent modern. Dacă doriți ca oamenii să aibă acces la serviciile de pe computerul dvs., dar nu doriți să vă deschideți firewall-ul la internet, puteți utiliza port knocking. Vă permite să închideți porturile de pe firewall care permit conexiunile de intrare și să le deschideți automat atunci când se face un model prestabilit de încercări de conectare. Secvența încercărilor de conectare acționează ca ciocănirea secretă. Un alt ciocănit secret închide portul.

Locația în port este o noutate, dar este important să știți că este un exemplu securitate prin obscuritate, iar acest concept este fundamental defectuos. Secretul modului de accesare a unui sistem este sigur, deoarece numai cei dintr-un anumit grup îl cunosc. Dar odată ce secretul a fost dezvăluit – fie pentru că a fost dezvăluit, observat, ghicit sau rezolvat – securitatea ta este nulă. Este mai bine să vă securizați serverul în alte moduri mai puternice, cum ar fi solicitarea autentificărilor bazate pe chei pentru un server SSH.

Cele mai robuste abordări ale securității cibernetice sunt multistratificate, așa că, probabil, baterea porturilor ar trebui să fie unul dintre aceste straturi. Cu cât mai multe straturi, cu atât mai bine, nu? Cu toate acestea, ați putea susține că lovirea portului nu adaugă prea mult (dacă ceva) unui sistem sigur, bine întărit.

Securitatea cibernetică este un subiect vast și complicat, dar nu ar trebui să utilizați baterea în port ca singura formă de apărare.

Instalarea knockd

Pentru a demonstra declanșarea portului, îl vom folosi pentru a controla portul 22, care este portul SSH. Vom folosi un instrument numit knockd. Utilizați apt-get pentru a instala acest pachet pe sistemul dvs. dacă utilizați Ubuntu sau o altă distribuție bazată pe Debian. Pe alte distribuții Linux, utilizați instrumentul de gestionare a pachetelor din distribuția dvs. Linux.

Introduceți următoarele:

sudo apt-get install knockd

Probabil că ai deja firewall iptables instalat pe sistemul dvs., dar poate fi necesar să instalați pachetul iptables-persistent. Se ocupă de încărcarea automată a regulilor iptable salvate.

Introduceți următoarele pentru a-l instala:

sudo apt-get install iptables-persistent

Când apare ecranul de configurare IPV4, apăsați bara de spațiu pentru a accepta opțiunea „Da”.

Apăsați bara de spațiu pentru a accepta

Apăsați din nou bara de spațiu în ecranul de configurare IPv6 pentru a accepta opțiunea „Da” și continuați.

Apăsați bara de spațiu pentru a accepta

Următoarea comandă îi spune iptables să permită conexiunilor stabilite și în curs de desfășurare să continue. Acum vom lansa o altă comandă pentru a închide portul SSH.

  Cum să rulați aplicații Android pe Linux

Dacă cineva este conectat prin SSH când lansăm această comandă, nu vrem să fie tăiat:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Această comandă adaugă o regulă la firewall, care spune:

-A: Adăugați regula la tabelul de reguli de firewall. Adică, adăugați-l în partea de jos.
INTRARE: Aceasta este o regulă despre conexiunile de intrare.
-m conntrack: regulile firewall acţionează asupra traficului de reţea (pachete) care corespund criteriilor din regulă. Parametrul -m face ca iptables să utilizeze module suplimentare de potrivire a pachetelor – în acest caz, cel numit conntrack funcționează cu capabilitățile de urmărire a conexiunii de rețea ale nucleului.
–cstate ESTABLISHED,RELATED: Acesta specifică tipul de conexiune la care se va aplica regula, și anume conexiunile ESTABLISHED și RELATED. O conexiune stabilită este una care este deja în curs. O conexiune asociată este una care se realizează datorită unei acțiuni dintr-o conexiune stabilită. Poate că cineva care este conectat dorește să descarce un fișier; care s-ar putea întâmpla printr-o nouă conexiune inițiată de gazdă.
-j ACCEPT: Dacă traficul se potrivește cu regula, săriți la ținta ACCEPT în firewall. Cu alte cuvinte, traficul este acceptat și permis să treacă prin firewall.

Acum putem lansa comanda pentru a închide portul:

sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

Această comandă adaugă o regulă la firewall, care spune:

-A: Adăugați regula la tabelul de reguli de firewall, adică adăugați-o în partea de jos.
INTRARE: Această regulă se referă la conexiunile de intrare.
-p tcp: Această regulă se aplică traficului care utilizează protocolul de control al transmisiei.
–dport 22: Această regulă se aplică în mod specific traficului TCP care vizează portul 22 (portul SSH).
-j REJECT: Dacă traficul se potrivește cu regula, săriți la ținta REJECT din firewall. Deci, dacă traficul este respins, nu este permis prin firewall.

Trebuie să pornim demonul netfilter-persistent. Putem face acest lucru cu această comandă:

sudo systemctl start netfilter-persistent

Vrem să treacă prin netfilter-persistent un ciclu de salvare și reîncărcare, deci încarcă și controlează regulile iptable.

Tastați următoarele comenzi:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Acum ați instalat utilitățile, iar portul SSH este închis (sperăm că, fără a întrerupe conexiunea nimănui). Acum, este timpul să configurați ciocănirea secretă.

Se configurează knockd

Există două fișiere pe care le editați pentru a configura knockd. Primul este următorul fișier de configurare knockd:

sudo gedit /etc/knockd.conf

Editorul gedit se deschide cu fișierul de configurare knockd încărcat.

Vom edita acest fișier pentru a se potrivi nevoilor noastre. Secțiunile care ne interesează sunt „openSSH” și „closeSSH”. Următoarele patru intrări sunt în fiecare secțiune:

secvență: secvența de porturi pe care cineva trebuie să le acceseze pentru a deschide sau închide portul 22. Porturile implicite sunt 7000, 8000 și 9000 pentru a-l deschide și 9000, 8000 și 7000 pentru a-l închide. Puteți să le modificați sau să adăugați mai multe porturi la listă. În scopurile noastre, vom rămâne cu valorile implicite.
seq_timeout: perioada de timp în care cineva trebuie să acceseze porturile pentru a declanșa deschiderea sau închiderea acestuia.
comandă: Comanda trimisă la paravanul de protecție iptables când este declanșată acțiunea de deschidere sau închidere. Aceste comenzi fie adaugă o regulă la firewall (pentru a deschide portul), fie o scot (pentru a închide portul).
tcpflags: tipul de pachet pe care trebuie să-l primească fiecare port în secvența secretă. Un pachet SYN (sincronizare) este primul din a TCP cerere de conectare, numită a strângere de mână în trei căi.

  Cele mai bune 6 distribuții Kodi Linux de folosit

Secțiunea „openSSH” poate fi citită ca „o solicitare de conexiune TCP trebuie făcută către porturile 7000, 8000 și 9000 — în această ordine și în 5 secunde — pentru ca comanda de deschidere a portului 22 să fie trimisă către firewall”.

Secțiunea „closeSSH” poate fi citită ca „o solicitare de conexiune TCP trebuie făcută către porturile 9000, 8000 și 7000 — în această ordine și în decurs de 5 secunde — pentru ca comanda de închidere a portului 22 să fie trimisă către firewall”.

Regulile pentru firewall

Intrările „comandă” din secțiunile openSSH și closeSSH rămân aceleași, cu excepția unui parametru. Iată cum sunt compuse:

-A: Adăugați regula în partea de jos a listei de reguli de firewall (pentru comanda openSSH).
-D: Ștergeți comanda din lista de reguli de firewall (pentru comanda closeSSH).
INTRARE: Această regulă se referă la traficul de rețea de intrare.
-s %IP%: adresa IP a dispozitivului care solicită o conexiune.
-p: Protocol de rețea; în acest caz, este TCP.
–dport: Portul de destinație; în exemplul nostru, este portul 22.
-j ACCEPT: Salt la ținta acceptată din firewall. Cu alte cuvinte, lăsați pachetul să treacă prin restul regulilor fără a acționa în conformitate cu el.

Editările fișierului de configurare knockd

Modificările pe care le vom face fișierului sunt evidențiate cu roșu mai jos:

Extindem „seq_timeout” la 15 secunde. Acest lucru este generos, dar dacă cineva declanșează manual solicitările de conectare, ar putea avea nevoie de atât de mult timp.

În secțiunea „openSSH”, schimbăm opțiunea -A (adăugați) din comandă în -I (inserați). Această comandă inserează o nouă regulă de firewall în partea de sus a listei de reguli de firewall. Dacă părăsiți opțiunea -A, aceasta adaugă lista de reguli de firewall și o pune în partea de jos.

Traficul de intrare este testat în funcție de fiecare regulă de firewall din listă, de sus în jos. Avem deja o regulă care închide portul 22. Deci, dacă traficul de intrare este testat împotriva acelei reguli înainte de a vedea regula care permite traficul, conexiunea este refuzată; dacă vede mai întâi această nouă regulă, conexiunea este permisă.

Comanda de închidere elimină regula adăugată de openSSH din regulile firewall. Traficul SSH este din nou gestionat de regula preexistentă „portul 22 este închis”.

După ce faceți aceste modificări, salvați fișierul de configurare.

Editările fișierului de control knockd

Fișierul de control knockd este cu totul mai simplu. Totuși, înainte de a ne arunca și edita asta, trebuie să cunoaștem numele intern al conexiunii noastre de rețea; pentru a-l găsi, tastați această comandă:

ip addr

The

Conexiunea pe care o folosește această mașină pentru a cerceta acest articol se numește enp0s3. Notați numele conexiunii dvs.

Următoarea comandă editează fișierul de control knockd:

sudo gedit /etc/default/knockd

Iată fișierul knockd în gedit.

Câteva modificări pe care trebuie să le facem sunt evidențiate cu roșu:

Am schimbat intrarea „START_KNOCKD=” la 0 la 1.

  Cum se instalează Electrum pe Linux

De asemenea, am eliminat hash # de la începutul intrării „KNOCKD_OPTS=” și am înlocuit „eth1” cu numele conexiunii noastre de rețea, enp0s3. Desigur, dacă conexiunea dvs. la rețea este eth1, nu o veți schimba.

Dovada este în budincă

Este timpul să vedem dacă funcționează. Vom porni demonul knockd cu această comandă:

sudo systemctrl start knockd

Acum, vom sări pe o altă mașină și vom încerca să ne conectăm. Am instalat instrumentul knockd și pe acel computer, nu pentru că dorim să setăm port knocking, ci pentru că pachetul knockd oferă un alt instrument numit knock. Vom folosi această mașină pentru a trage în secvența noastră secretă și a bate pentru noi.

Utilizați următoarea comandă pentru a trimite secvența dvs. secretă de solicitări de conexiune către porturile de pe computerul gazdă cu adresa IP 192.168.4.24:

knock 192.168.4.24 7000 8000 9000 -d 500

Aceasta îi spune lui Knock să vizeze computerul la adresa IP 192.168.4.24 și să lanseze o solicitare de conexiune la porturile 7000, 8000 și 9000, la rândul lor, cu un -d (întârziere) de 500 de milisecunde între ele.

Un utilizator numit „dave” face apoi o solicitare SSH la 192.168.4.24:

ssh [email protected]

Conexiunea lui este acceptată, își introduce parola și începe sesiunea la distanță. Promptul lui de comandă se schimbă de la [email protected] la [email protected] Pentru a se deconecta de la computerul de la distanță, el tastează:

exit

Linia de comandă revine la computerul local. Folosește încă o dată knock-ul și de data aceasta țintește porturile în ordine inversă pentru a închide portul SSH de pe computerul de la distanță.

knock 192.168.4.24 9000 8000 7000 -d 500

Desigur, aceasta nu a fost o sesiune la distanță deosebit de fructuoasă, dar demonstrează deschiderea și închiderea portului prin lovirea portului și se potrivește într-o singură captură de ecran.

Deci, cum arăta asta din cealaltă parte? Administratorul de sistem de pe gazda de batere a portului folosește următoarea comandă pentru a vedea noile intrări care ajung în jurnalul de sistem:

tail -f /var/log/syslog

Vedeți trei intrări openSSH. Acestea sunt ridicate pe măsură ce fiecare port este vizat de utilitarul de declanșare de la distanță.
Când toate cele trei etape ale secvenței de declanșare sunt îndeplinite, o intrare care spune „SESAM DESCHIDE-TE,” este înregistrat
Este trimisă comanda de inserare a regulii în lista de reguli iptables. Permite accesul prin SSH pe portul 22 de la adresa IP specifică a PC-ului care a dat lovitura secretă corectă (192.168.4.23).
Utilizatorul „dave” se conectează doar pentru câteva secunde, apoi se deconectează.
Vedeți trei intrări closeSSH. Acestea sunt ridicate pe măsură ce fiecare port este vizat de utilitarul de declanșare de la distanță – acesta îi spune gazdei care declanșează portul să închidă portul 22.
După ce sunt declanșate toate cele trei etape, primim din nou mesajul „OPEN SESAME”. Comanda este trimisă la firewall pentru a elimina regula. (De ce nu „ÎNCHIDE SESAME” când închide portul? Cine știe?)

Acum singura regulă din lista de reguli iptables referitoare la portul 22 este cea pe care am tastat-o ​​la început pentru a închide acel port. Deci, portul 22 este acum închis din nou.

Bate-l pe cap

Ăsta e trucul de la bătaia în port. Tratați-o ca pe o diversiune și nu o faceți în lumea reală. Sau, dacă trebuie, nu vă bazați pe ea ca pe singura voastră formă de securitate.