Jak používat klepání portů na Linuxu (a proč byste neměli)

Klepání portů je způsob, jak zabezpečit server uzavřením portů brány firewall – dokonce i ty, o kterých víte, že budou použity. Tyto porty jsou otevřeny na vyžádání, pokud – a pouze tehdy – požadavek na připojení poskytuje tajné zaklepání.

Klepání přístavem je „tajné klepání“

Ve dvacátých letech 20. století, kdy zákaz byl v plném proudu, pokud jste se chtěli dostat do a mluviteasy, museli jste znát tajné zaklepání a správně na něj poklepat, abyste se dostali dovnitř.

Klepání portů je moderní ekvivalent. Pokud chcete, aby lidé měli přístup ke službám na vašem počítači, ale nechcete otevírat bránu firewall na internet, můžete použít klepání portů. Umožňuje vám zavřít porty na vaší bráně firewall, které umožňují příchozí připojení, a nechat je automaticky otevřít, když dojde k předem připravenému vzoru pokusů o připojení. Posloupnost pokusů o připojení funguje jako tajné zaklepání. Další tajné zaklepání zavře přístav.

Klepání portů je něco jako novinka, ale je důležité vědět, že je to příklad bezpečnost skrze temnotu, a tento koncept je zásadně chybný. Tajemství, jak získat přístup k systému, je bezpečné, protože ho znají pouze ti, kdo patří do určité skupiny. Ale jakmile je toto tajemství odhaleno – ať už proto, že je odhaleno, pozorováno, uhodnuto nebo vyřešeno – vaše bezpečnost je neplatná. Je lepší zabezpečit server jinými, silnějšími způsoby, jako je vyžadování přihlášení na základě klíče pro server SSH.

Nejrobustnější přístupy ke kybernetické bezpečnosti jsou vícevrstvé, takže jednou z těchto vrstev by možná mělo být klepání portů. Čím více vrstev, tím lépe, ne? Mohli byste však namítnout, že klepání portů nepřidává moc (pokud vůbec něco) k řádně zesílenému a zabezpečenému systému.

Kybernetická bezpečnost je rozsáhlé a komplikované téma, ale neměli byste používat klepání portů jako svou jedinou formu obrany.

Instalace zaklepala

Abychom demonstrovali klepání portu, použijeme jej k ovládání portu 22, což je port SSH. budeme používat nástroj zvaný knockd. Pokud používáte Ubuntu nebo jinou distribuci založenou na Debianu, použijte apt-get k instalaci tohoto balíčku do vašeho systému. V jiných distribucích Linuxu použijte místo toho nástroj pro správu balíčků vaší distribuce Linuxu.

Zadejte následující:

sudo apt-get install knockd

Pravděpodobně již máte firewall iptables nainstalován na vašem systému, ale možná budete muset nainstalovat balíček iptables-persistent. Zvládá automatické načítání uložených pravidel iptable.

Chcete-li jej nainstalovat, zadejte následující:

sudo apt-get install iptables-persistent

Když se objeví konfigurační obrazovka IPV4, stiskněte mezerník pro přijetí možnosti „Ano“.

Stisknutím mezerníku přijmete

Dalším stisknutím mezerníku na obrazovce konfigurace IPv6 přijměte možnost „Ano“ a pokračujte.

Stisknutím mezerníku přijmete

Následující příkaz říká iptables, aby umožnil pokračování navázaných a probíhajících připojení. Nyní vydáme další příkaz k uzavření portu SSH.

  Jak zpětně kompatibilní jsou Xbox Series X a S?

Pokud je někdo připojen přes SSH, když zadáváme tento příkaz, nechceme, aby byl odříznut:

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

Tento příkaz přidá do brány firewall pravidlo, které říká:

-A: Připojte pravidlo do tabulky pravidel brány firewall. To znamená, že ji přidejte na dno.
INPUT: Toto je pravidlo o příchozích připojeních.
-m conntrack: Pravidla brány firewall působí na síťový provoz (pakety), které odpovídají kritériím v pravidle. Parametr -m způsobí, že iptables použije další moduly pro porovnávání paketů – v tomto případě modul nazvaný conntrack pracuje se schopnostmi jádra pro sledování síťových připojení.
–cstate ESTABLISHED,RELATED: Určuje typ připojení, na které se bude pravidlo vztahovat, jmenovitě ESTABLISHED a RELATED připojení. Navázané připojení je takové, které již probíhá. Související připojení je takové, které je vytvořeno díky akci z navázaného připojení. Možná někdo, kdo je připojen, chce stáhnout soubor; k tomu může dojít přes nové připojení iniciované hostitelem.
-j ACCEPT: Pokud provoz odpovídá pravidlu, přeskočte na cíl ACCEPT ve firewallu. Jinými slovy, provoz je přijímán a je mu povoleno procházet přes firewall.

Nyní můžeme vydat příkaz k uzavření portu:

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

Tento příkaz přidá do brány firewall pravidlo, které říká:

-A: Přidat pravidlo do tabulky pravidel brány firewall, tj. přidat jej na konec.
INPUT: Toto pravidlo se týká příchozích připojení.
-p tcp: Toto pravidlo platí pro provoz, který používá Transmission Control Protocol.
–dport 22: Toto pravidlo platí konkrétně pro provoz TCP, který cílí na port 22 (port SSH).
-j REJECT: Pokud provoz odpovídá pravidlu, přeskočte na cíl REJECT ve firewallu. Pokud je tedy přenos odmítnut, není přes firewall povolen.

Musíme spustit démona netfilter-persistent. Můžeme tak učinit pomocí tohoto příkazu:

sudo systemctl start netfilter-persistent

Chceme, aby prošel netfilter-persistent cyklus ukládání a opětovného načítání, takže načte a řídí pravidla iptable.

Zadejte následující příkazy:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Nyní jste nainstalovali nástroje a port SSH je uzavřen (doufejme, že bez přerušení něčího připojení). Nyní je čas nakonfigurovat tajné klepání.

Konfigurace zaklepala

Existují dva soubory, které upravíte pro konfiguraci knockd. Prvním je následující zaklepaný konfigurační soubor:

sudo gedit /etc/knockd.conf

Otevře se editor gedit s načteným konfiguračním souborem knockd.

Tento soubor upravíme tak, aby vyhovoval našim potřebám. Sekce, které nás zajímají, jsou „openSSH“ a „closeSSH“. V každé sekci jsou následující čtyři položky:

sekvence: Posloupnost portů, k nimž musí mít někdo přístup, aby mohl otevřít nebo zavřít port 22. Výchozí porty jsou 7000, 8000 a 9000 pro jeho otevření a 9000, 8000 a 7000 pro jeho uzavření. Můžete je změnit nebo přidat další porty do seznamu. Pro naše účely se budeme držet výchozích hodnot.
seq_timeout: Časové období, během kterého musí někdo přistupovat k portům, aby aktivoval jejich otevření nebo zavření.
příkaz: Příkaz odeslaný do brány firewall iptables, když je spuštěna akce otevření nebo zavření. Tyto příkazy buď přidají pravidlo do firewallu (pro otevření portu), nebo je odstraní (pro uzavření portu).
tcpflags: Typ paketu, který musí každý port přijmout v tajné sekvenci. Paket SYN (synchronizace) je první v a TCP žádost o připojení, nazývaná a třístranné podání ruky.

  Není potřeba žádný kabel: Jak streamovat zápas hvězd NBA

Sekci „openSSH“ lze číst jako „na porty 7000, 8000 a 9000 musí být podán požadavek na připojení TCP – v tomto pořadí a do 5 sekund – aby byl příkaz k otevření portu 22 odeslán na firewall.

Sekci „closeSSH“ lze číst jako „požadavek na připojení TCP musí být proveden na portech 9000, 8000 a 7000 – v tomto pořadí a do 5 sekund – aby byl příkaz k uzavření portu 22 odeslán do firewallu.

Pravidla brány firewall

Položky „příkaz“ v sekcích openSSH a closeSSH zůstávají stejné, s výjimkou jednoho parametru. Takto jsou složeny:

-A: Přidejte pravidlo na konec seznamu pravidel brány firewall (pro příkaz openSSH).
-D: Odstranit příkaz ze seznamu pravidel brány firewall (pro příkaz closeSSH).
INPUT: Toto pravidlo se týká příchozího síťového provozu.
-s %IP%: IP adresa zařízení požadujícího připojení.
-p: Síťový protokol; v tomto případě je to TCP.
–dport: cílový port; v našem příkladu je to port 22.
-j ACCEPT: Skok na cíl přijetí v rámci brány firewall. Jinými slovy, nechte paket projít zbytkem pravidel, aniž byste na něj reagovali.

Klepnuto na úpravy konfiguračního souboru

Úpravy, které v souboru provedeme, jsou níže zvýrazněny červeně:

Prodlužujeme „seq_timeout“ na 15 sekund. To je velkorysé, ale pokud někdo ručně spouští žádosti o připojení, může potřebovat tolik času.

V sekci „openSSH“ změníme volbu -A (append) v příkazu na -I (insert). Tento příkaz vloží nové pravidlo brány firewall na začátek seznamu pravidel brány firewall. Pokud ponecháte volbu -A, připojí seznam pravidel brány firewall a umístí jej na konec.

Příchozí provoz je testován proti každému pravidlu brány firewall v seznamu shora dolů. Již máme pravidlo, které uzavírá port 22. Pokud je tedy příchozí provoz testován podle tohoto pravidla dříve, než uvidí pravidlo, které provoz povoluje, připojení je odmítnuto; pokud toto nové pravidlo uvidí jako první, připojení je povoleno.

Příkaz close odstraní pravidlo přidané pomocí openSSH z pravidel brány firewall. Provoz SSH je opět řízen dříve existujícím pravidlem „port 22 je uzavřen“.

Po provedení těchto úprav uložte konfigurační soubor.

Zaklepaný Control File Edits

Ovládací soubor knockd je úplně jednodušší. Než se do toho pustíme a upravíme to, potřebujeme znát interní název našeho síťového připojení; Chcete-li jej najít, zadejte tento příkaz:

ip addr

The

Spojení, které tento počítač používá k výzkumu tohoto článku, se nazývá enp0s3. Poznamenejte si název vašeho připojení.

Následující příkaz upraví ovládací soubor knockd:

sudo gedit /etc/default/knockd

Zde je soubor knockd v geditu.

Několik úprav, které musíme provést, je zvýrazněno červeně:

  Jak třídit odpovědi na Quora podle hlasů

Změnili jsme položku „START_KNOCKD=“ z 0 na 1.

Také jsme odstranili hash # ze začátku položky „KNOCKD_OPTS=“ a ​​nahradili „eth1“ názvem našeho síťového připojení, enp0s3. Pokud je vaše síťové připojení eth1, samozřejmě to nezměníte.

Důkaz je v pudinku

Je čas zjistit, jestli to funguje. Démona knockd spustíme tímto příkazem:

sudo systemctrl start knockd

Nyní skočíme na jiný stroj a pokusíme se připojit. Nainstalovali jsme nástroj knockd na tento počítač také ne proto, že bychom chtěli nastavit knocking portů, ale protože balíček knockd poskytuje další nástroj zvaný knock. Použijeme tento stroj ke střelbě v naší tajné sekvenci a klepání za nás.

Pomocí následujícího příkazu odešlete svou tajnou sekvenci požadavků na připojení na porty hostitelského počítače s klepáním na porty s IP adresou 192.168.4.24:

knock 192.168.4.24 7000 8000 9000 -d 500

To říká, že knock zacílí počítač na IP adresu 192.168.4.24 a spustí požadavek na připojení k portům 7000, 8000 a 9000, přičemž mezi nimi je -d (zpoždění) 500 milisekund.

Uživatel s názvem „dave“ poté odešle požadavek SSH na 192.168.4.24:

ssh [email protected]

Jeho připojení je přijato, zadá své heslo a začne jeho vzdálená relace. Jeho příkazový řádek se změní z [email protected] na [email protected] Pro odhlášení ze vzdáleného počítače napíše:

exit

Jeho příkazový řádek se vrátí do místního počítače. Znovu použije knock a tentokrát se zaměří na porty v opačném pořadí, aby uzavřel SSH port na vzdáleném počítači.

knock 192.168.4.24 9000 8000 7000 -d 500

Je pravda, že to nebyla nijak zvlášť plodná vzdálená relace, ale demonstruje otevírání a zavírání portu pomocí klepání portu a vejde se na jeden snímek obrazovky.

Jak to tedy vypadalo z druhé strany? Správce systému na hostiteli s klepáním portů používá následující příkaz k zobrazení nových položek, které přicházejí do systémového protokolu:

tail -f /var/log/syslog

Vidíte tři položky openSSH. Ty jsou zvýšeny, když je každý port zacílen obslužným programem pro vzdálené klepání.
Když jsou splněny všechny tři fáze spouštěcí sekvence, zobrazí se záznam, který říká „SEZAME, OTEVŘI SE,“ je přihlášen
Odešle se příkaz pro vložení pravidla do seznamu pravidel iptables. Umožňuje přístup přes SSH na portu 22 ze specifické IP adresy PC, které poskytlo správné tajné zaklepání (192.168.4.23).
Uživatel „dave“ se připojí pouze na několik sekund a poté se odpojí.
Zobrazí se tři položky closeSSH. Ty jsou vyvolány, když je na každý port zacílen obslužný program pro vzdálené klepání – říká hostiteli klepání portu, aby zavřel port 22.
Po spuštění všech tří fází se znovu zobrazí zpráva „OPEN SESAME“. Příkaz je odeslán do brány firewall k odstranění pravidla. (Proč ne „ZAVŘÍT SESAME“, když se zavírá port? Kdo ví?)

Nyní je jediné pravidlo v seznamu pravidel iptables týkající se portu 22 to, které jsme zadali na začátku, abychom tento port uzavřeli. Takže port 22 je nyní opět uzavřen.

Poklepejte to na hlavu

To je trik salonního klepání. Berte to jako rozptýlení a nedělejte to v reálném světě. Nebo, pokud musíte, nespoléhejte na to jako na svou jedinou formu zabezpečení.