A Port Knocking használata Linuxon (és miért nem szabad)

A portkopogtatás a kiszolgáló biztonságának egyik módja a tűzfalportok bezárásával – még azokat is, amelyekről tudja, hogy használni fogják. Ezeket a portokat akkor nyitják meg, ha – és csak akkor –, ha a csatlakozási kérés biztosítja a titkos kopogtatást.

A port kopogtatása „titkos kopogás”

Az 1920-as években, amikor tilalom javában volt, ha be akartál jutni a beszédes, ismernie kellett a titkos kopogtatást, és helyesen ki kell koppintania, hogy bejusson.

A port kopogtatás a modern megfelelője. Ha azt szeretné, hogy az emberek hozzáférjenek a szolgáltatásokhoz a számítógépén, de nem akarja megnyitni a tűzfalát az internethez, használhatja a port kopogtatást. Lehetővé teszi a tűzfal azon portjainak bezárását, amelyek lehetővé teszik a bejövő kapcsolatokat, és automatikusan megnyílnak, amikor egy előre meghatározott csatlakozási kísérlet történik. A kapcsolódási kísérletek sorozata titkos kopogásként működik. Újabb titkos kopogás zárja be a kikötőt.

A port kopogtatás valami újdonság, de fontos tudni, hogy ez egy példa biztonság a homályon keresztül, és az a koncepció alapvetően hibás. A rendszerhez való hozzáférés titka biztonságos, mert csak egy adott csoporthoz tartozók ismerik. De ha ez a titok kiderül – akár azért, mert felfedték, megfigyelték, kitalálták vagy kidolgozták –, akkor a biztonság érvényét veszti. Jobb, ha más, erősebb módszerekkel védi szerverét, például kulcsalapú bejelentkezést ír elő egy SSH-kiszolgálóhoz.

A kiberbiztonság legrobusztusabb megközelítései többrétegűek, ezért talán a port kopogtatásnak kellene ezeknek a rétegeknek lennie. Minél több réteg, annál jobb, igaz? Azonban vitatkozhat amellett, hogy a port kopogtatása nem ad sokat (ha egyáltalán) egy megfelelően edzett, biztonságos rendszerhez.

A kiberbiztonság egy hatalmas és bonyolult téma, de ne használja a port kopogtatást egyetlen védekezési formaként.

A knockd telepítése

A portkopogtatás bemutatására a 22-es port vezérlésére fogjuk használni, ami az SSH-port. Használjuk a knockd nevű eszköz. Használja az apt-get parancsot a csomag telepítéséhez a rendszerére, ha Ubuntut vagy más Debian-alapú disztribúciót használ. Más Linux disztribúciók esetén használja inkább a Linux disztribúció csomagkezelő eszközét.

Írja be a következőket:

sudo apt-get install knockd

Valószínűleg már megvan a iptables tűzfal telepítve van a rendszerére, de előfordulhat, hogy telepítenie kell az iptables-persistent csomagot. Kezeli a mentett iptable szabályok automatikus betöltését.

A telepítéshez írja be a következőket:

sudo apt-get install iptables-persistent

Amikor megjelenik az IPV4 konfigurációs képernyője, nyomja meg a szóköz billentyűt az „Igen” opció elfogadásához.

Nyomja meg a szóköz billentyűt az elfogadáshoz

Nyomja meg ismét a szóköz billentyűt az IPv6 konfigurációs képernyőjén, hogy elfogadja az „Igen” opciót, és lépjen tovább.

Nyomja meg a szóköz billentyűt az elfogadáshoz

A következő parancs megmondja az iptables-nak, hogy engedélyezze a létrehozott és folyamatban lévő kapcsolatok folytatását. Most egy újabb parancsot adunk ki az SSH-port bezárására.

  Hogyan lehet csatlakozni egy csoporthoz a Line Chat alkalmazásban

Ha valakit SSH csatlakozik, amikor kiadjuk ezt a parancsot, nem akarjuk, hogy le legyen vágva:

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

Ez a parancs egy szabályt ad a tűzfalhoz, amely így szól:

-V: A szabály hozzáfűzése a tűzfalszabályok táblájához. Azaz add hozzá az aljára.
BEMENET: Ez a bejövő kapcsolatokra vonatkozó szabály.
-m conntrack: A tűzfalszabályok a szabály feltételeinek megfelelő hálózati forgalomra (csomagokra) hatnak. Az -m paraméter hatására az iptables extra csomagillesztő modulokat használ – ebben az esetben a conntrack nevű modul a kernel hálózati kapcsolatkövetési képességeivel működik együtt.
–cstate ESTABLISHED,RELATED: Megadja a kapcsolat típusát, amelyre a szabály vonatkozni fog, nevezetesen az ESTABLISHED és RELATED kapcsolatokat. Létrehozott kapcsolat az, amelyik már folyamatban van. Kapcsolódó kapcsolat az, amely egy létrehozott kapcsolatból származó művelet miatt jön létre. Lehet, hogy valaki, aki csatlakozik, szeretne letölteni egy fájlt; ez megtörténhet a gazdagép által kezdeményezett új kapcsolaton keresztül.
-j ELFOGADÁS: Ha a forgalom megfelel a szabálynak, ugorjon az ELFOGADÁS célpontra a tűzfalban. Más szóval, a forgalmat elfogadják, és átengedik a tűzfalon.

Most kiadhatjuk a parancsot a port bezárására:

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

Ez a parancs egy szabályt ad a tűzfalhoz, amely így szól:

-V: Hozzáfűzi a szabályt a tűzfalszabályok táblájához, azaz adja hozzá az aljára.
BEMENET: Ez a szabály a bejövő kapcsolatokra vonatkozik.
-p tcp: Ez a szabály a Transmission Control Protocolt használó forgalomra vonatkozik.
–dport 22: Ez a szabály kifejezetten a 22-es portot (az SSH-portot) célzó TCP-forgalomra vonatkozik.
-j ELUTASÍTÁS: Ha a forgalom megfelel a szabálynak, ugorjon a tűzfal ELUTASÍTÁSI célpontjára. Tehát, ha a forgalmat elutasítják, az nem engedélyezett a tűzfalon keresztül.

El kell indítanunk a netfilter-persistent démont. Ezt ezzel a paranccsal tehetjük meg:

sudo systemctl start netfilter-persistent

Azt akarjuk, hogy a netfilter-persistent átmenjen mentési és újratöltési ciklus, tehát betölti és vezérli az iptable szabályokat.

Írja be a következő parancsokat:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Most telepítette a segédprogramokat, és az SSH-port le van zárva (remélhetőleg anélkül, hogy bárkinek megszakadna a kapcsolata). Most itt az ideje beállítani a titkos kopogtatást.

A knockd beállítása

Két fájlt szerkeszthet a knockd konfigurálásához. Az első a következő knockd konfigurációs fájl:

sudo gedit /etc/knockd.conf

A gedit szerkesztő megnyílik a knockd konfigurációs fájl betöltésével.

Ezt a fájlt az igényeinknek megfelelően szerkesztjük. A minket érdeklő szakaszok az „openSSH” és a „closeSSH”. A következő négy bejegyzés található minden szakaszban:

sorozat: A portok sorozata, amelyekhez valakinek hozzá kell férnie a 22-es port megnyitásához vagy bezárásához. Az alapértelmezett portok a 7000, 8000 és 9000 a megnyitáshoz, valamint a 9000, 8000 és 7000 a bezáráshoz. Ezeket módosíthatja, vagy további portokat vehet fel a listára. Céljaink szempontjából maradunk az alapértelmezett értékeknél.
seq_timeout: Az az időtartam, amelyen belül valakinek hozzá kell férnie a portokhoz, hogy elindítsa a nyitást vagy bezárást.
parancs: Az iptables tűzfalnak küldött parancs, amikor a nyitás vagy bezárás aktiválódik. Ezek a parancsok vagy hozzáadnak egy szabályt a tűzfalhoz (a port megnyitásához), vagy eltávolítják (a port bezárásához).
tcpflags: Az a csomag típusa, amelyet minden portnak fogadnia kell a titkos sorrendben. A SYN (synchronize) csomag az első a TCP csatlakozási kérés, az úgynevezett a háromirányú kézfogás.

  Képek szerkesztése a Google Diákban

Az „openSSH” szakasz úgy értelmezhető, hogy „a 7000-es, 8000-es és 9000-es portokra TCP-csatlakozási kérelmet kell küldeni – ebben a sorrendben és 5 másodpercen belül – ahhoz, hogy a 22-es port megnyitására vonatkozó parancs elküldésre kerüljön a tűzfalnak”.

A „closeSSH” szakasz úgy értelmezhető, hogy „a 9000-es, 8000-es és 7000-es TCP-csatlakozási kérelmet kell küldeni – ebben a sorrendben és 5 másodpercen belül – ahhoz, hogy a 22-es port bezárására vonatkozó parancsot elküldjük a tűzfalnak.”

A tűzfalszabályok

A „command” bejegyzések az openSSH és a closeSSH szakaszokban egy paraméter kivételével változatlanok maradnak. Így állnak össze:

-A: A szabályt hozzáfűzi a tűzfalszabályok listájának aljához (az openSSH parancshoz).
-D: Törölje a parancsot a tűzfalszabályok listájából (a closeSSH parancshoz).
BEMENET: Ez a szabály a bejövő hálózati forgalomra vonatkozik.
-s %IP%: A csatlakozást kérő eszköz IP-címe.
-p: Hálózati protokoll; ebben az esetben a TCP.
–dport: A célport; példánkban ez a 22-es port.
-j ELFOGADÁS: Ugrás az elfogadási célpontra a tűzfalon belül. Más szóval, hagyja, hogy a csomag átessen a többi szabályon anélkül, hogy cselekedne.

A bekopogtatott konfigurációs fájl szerkesztése

A fájlon végrehajtott módosítások az alábbiakban pirossal vannak kiemelve:

A „seq_timeout”-t 15 másodpercre meghosszabbítjuk. Ez nagyvonalú, de ha valaki manuálisan indítja el a csatlakozási kérelmeket, akkor lehet, hogy ennyi időre lesz szüksége.

Az „openSSH” részben a parancs -A (hozzáfűzés) opcióját -I-re (beszúrás) változtatjuk. Ez a parancs egy új tűzfalszabályt szúr be a tűzfalszabályok listájának tetejére. Ha elhagyja az -A opciót, akkor hozzáfűzi a tűzfalszabályok listáját, és az aljára helyezi.

A bejövő forgalmat felülről lefelé a lista minden tűzfalszabályával ellenőrzi. Már van egy szabályunk, amely bezárja a 22-es portot. Tehát, ha a bejövő forgalmat ellenőrzik ennek a szabálynak, mielőtt látná azt a szabályt, amely lehetővé teszi a forgalmat, a kapcsolat elutasításra kerül; Ha először látja ezt az új szabályt, a kapcsolat engedélyezett.

A close parancs eltávolítja az openSSH által hozzáadott szabályt a tűzfalszabályok közül. Az SSH-forgalmat ismét a már meglévő „22-es port zárva” szabály kezeli.

A módosítások elvégzése után mentse el a konfigurációs fájlt.

A kopogtató vezérlőfájl szerkesztése

A knockd vezérlőfájl teljesen egyszerűbb. Mielőtt azonban belemerülnénk és szerkesztenénk, tudnunk kell a hálózati kapcsolatunk belső nevét; megkereséséhez írja be ezt a parancsot:

ip addr

A

A gép által a cikk kutatásához használt kapcsolatot enp0s3-nak hívják. Jegyezze fel a kapcsolat nevét.

A következő parancs szerkeszti a knockd vezérlőfájlt:

sudo gedit /etc/default/knockd

Itt van a knockd fájl a geditben.

Az a néhány módosítás, amelyet el kell végeznünk, pirossal van kiemelve:

  Blokkolja a „Mailto:” hivatkozásokat, és másolja az e-mail címet a vágólapra [Chrome]

A „START_KNOCKD=” bejegyzést 0-ról 1-re változtattuk.

A „KNOCKD_OPTS=” bejegyzés elejéről is eltávolítottuk a # hash-t, és az „eth1”-et a hálózati kapcsolatunk nevével, az enp0s3-mal helyettesítettük. Természetesen, ha a hálózati kapcsolatod eth1, akkor nem változtatsz rajta.

A bizonyíték a pudingban van

Ideje megnézni, hogy ez működik-e. A knockd démont ezzel a paranccsal indítjuk el:

sudo systemctrl start knockd

Most átugorunk egy másik gépre, és megpróbálunk csatlakozni. Arra a számítógépre is telepítettük a knockd eszközt, de nem azért, mert port kopogtatást akarunk beállítani, hanem azért, mert a knockd csomag egy másik, knock nevű eszközt is biztosít. Ezt a gépet fogjuk használni, hogy tüzeljünk a titkos sorozatunkban, és elvégezzük a kopogtatást helyettünk.

A következő paranccsal elküldheti a csatlakozási kérelmek titkos sorozatát a 192.168.4.24 IP-című portot kopogtató gazdaszámítógép portjaira:

knock 192.168.4.24 7000 8000 9000 -d 500

Ez azt utasítja a knock-nak, hogy célozza meg a számítógépet a 192.168.4.24 IP-címen, és indítson kapcsolódási kérelmet a 7000-es, 8000-es és 9000-es portokra, 500 ezredmásodperces -d (késleltetés) között.

A „dave” nevű felhasználó ezután SSH-kérést küld a 192.168.4.24 címre:

ssh [email protected]

A kapcsolat elfogadásra kerül, beírja jelszavát, és megkezdődik a távoli munkamenet. A parancssor a következőről változik: [email protected] nak nek [email protected] A távoli számítógépről való kijelentkezéshez a következőket írja be:

exit

A parancssor visszatér a helyi számítógépére. Még egyszer a kopogtatást használja, és ezúttal fordított sorrendben célozza meg a portokat, hogy bezárja a távoli számítógép SSH-portját.

knock 192.168.4.24 9000 8000 7000 -d 500

El kell ismerni, hogy ez nem volt különösebben gyümölcsöző távoli munkamenet, de bemutatja a port nyitását és zárását portkopogtatással, és egyetlen képernyőképen elfér.

Szóval, hogy nézett ki ez a másik oldalról? A port kopogtató gazdagép rendszergazdája a következő parancsot használja a rendszernaplóba érkező új bejegyzések megtekintéséhez:

tail -f /var/log/syslog

Három openSSH bejegyzést lát. Ezek akkor jelennek meg, amikor a távoli knock segédprogram minden portot megcéloz.
Ha a trigger sorozat mindhárom szakasza teljesül, megjelenik egy bejegyzés, amely így szól:SZEZÁM TÁRULJ,” naplózásra kerül
A rendszer elküldi a szabálynak az iptables szabálylistájába történő beillesztésére vonatkozó parancsot. Lehetővé teszi a hozzáférést SSH-n keresztül a 22-es porton annak a számítógépnek az adott IP-címéről, amelyik a megfelelő titkos kopogtatást adta (192.168.4.23).
A „dave” felhasználó csak néhány másodpercre csatlakozik, majd megszakad.
Három closeSSH bejegyzést lát. Ezek akkor jelennek meg, amikor minden portot megcéloz a távoli kopogtató segédprogram – ez utasítja a port kopogtató gazdagépet, hogy zárja be a 22-es portot.
Miután mindhárom szakasz kiváltott, ismét az „OPEN SESAME” üzenetet kapjuk. A rendszer elküldi a parancsot a tűzfalnak a szabály eltávolítására. (Miért nem „CLOSE SESAME”, amikor bezárja a kikötőt? Ki tudja?)

Most az egyetlen szabály az iptables szabálylistájában a 22-es portra vonatkozóan az, amelyet az elején beírtunk a port bezárására. Tehát a 22-es port ismét zárva van.

Üsd a fejedre

Ez a kikötőkopogtatás szalontrükkje. Kezelje elterelésként, és ne a való világban tegye. Vagy ha kell, ne hagyatkozzon rá, mint a biztonság egyetlen formájára.