Pro ty, kteří potřebují poskytnout sobě, svým blízkým, přístup ke svým serverům odkudkoli na světě přes SSH/RDP/ostatní, malý RTFM/spur.
Musíme se obejít bez VPN a dalších zvonků a píšťalek z jakéhokoli zařízení, které máme po ruce.
A abyste se serverem nemuseli příliš cvičit.
Vše, co k tomu potřebujete, je , rovné paže a 5 minut práce.
"Všechno je na internetu," samozřejmě (i na ), ale pokud jde o konkrétní implementaci, tady to začíná...
Pojďme si to procvičit na příkladu Fedory.CentOS, ale to nevadí.
Ostruha je vhodná pro začátečníky i odborníky v této věci, takže komentáře budou, ale budou kratší.
1. Server
nainstalovat knock-server:
yum/dnf install knock-servernakonfigurujte jej (například na ssh) - /etc/knockd.conf:
[options] UseSyslog interface = enp1s0f0 [SSHopen] sequence = 33333,22222,11111 seq_timeout = 5 tcpflags = syn start_command = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT cmd_timeout = 3600 stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT [SSHclose] sequence = 11111,22222,33333 seq_timeout = 5 tcpflags = syn command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT„Otevírací“ část je nastavena na automatické zavření po 1 hodině. Nikdy nevíš...
/etc/sysconfig/iptables:
... -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT ...vpřed:
service iptables restart service knockd startMůžete přidat RDP k virtuálnímu počítači spuštěnému uvnitř Windows Server (/etc/knockd.conf; doplňte název rozhraní dle libosti):
[RDPopen] sequence = 44444,33333,22222 seq_timeout = 5 tcpflags = syn start_command = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 cmd_timeout = 3600 stop_command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 [RDPclose] sequence = 22222,33333,44444 seq_timeout = 5 tcpflags = syn command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2Pomocí příkazu sledujeme všechny naše kopy od klienta na serveru
iptables -S.
2. Průvodce hráběmi
knockd.conf:
Mana také obsahuje vše (ale to je nepřesné), ale knockd je kamarád, který je na zprávy docela skoupý, takže je potřeba být hodně opatrný.
- verze
V repozitářích Fedory/CentOS Nejnovější dnešní hodnota je 0.63. Ti, kteří chtějí UDP, by se měli dívat po paketech s verzí 0.70. - rozhraní
Ve výchozí konfiguraci Fedory/CentOS tento řádek Ne. Přidejte rukama, jinak to nepůjde. - timeout
Zde si můžete vybrat podle svého vkusu. Je nutné, aby měl klient na všechny kopance dostatek času – a bot skeneru portů se porouchal (a 146 % skenuje). - start/stop/příkaz.
Pokud existuje jeden příkaz, pak příkaz, pokud jsou dva, pak start_command+stop_command.
Pokud uděláte chybu, zaklepání zůstane tiché, ale nebude fungovat. - proto
Teoreticky lze použít UDP. V praxi jsem namíchal tcp a udp a klient z pláže na Bali dokázal otevřít bránu až popáté. Protože TCP dorazil, když bylo potřeba, ale UDP není fakt. Ale to je zase otázka vkusu. - sekvence
Implicitní rake je, že sekvence by se neměly protínat... jak bych to řekl...
Například toto:
open: 11111,22222,33333
close: 22222,11111,33333Kopem 11111 otevřít bude čekat na další kop na 22222. Nicméně po tomto (22222) kopu začne fungovat zavřít a všechno se zlomí. To závisí také na zpoždění klienta. Takové věci ©.
iptables
Pokud je v /etc/sysconfig/iptables toto:
*nat
:PREROUTING ACCEPT [0:0]Moc nás to netrápí, tak tady je:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedPřekáží to.
Protože knockd přidává pravidla na konec řetězce INPUT, dostaneme odmítnutí.
A vypnout toto odmítnutí znamená otevřít auto všem větrům.
Abyste se v iptables neztratili, co vložit před co (takto navrhněte), pojďme to zjednodušit:
- výchozí в CentOS/Fedora první pravidlo („co není zakázáno, je dovoleno“) bude nahrazeno opakem,
- a odstraníme poslední pravidlo.
Výsledek by měl být:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedMísto DROP můžete samozřejmě udělat REJECT, ale s DROP bude život pro roboty zábavnější.
3. Klient
Toto místo je nejzajímavější (z mého pohledu), protože musíte pracovat nejen z jakékoli pláže, ale také z jakéhokoli zařízení.
V zásadě je uvedena řada klientů projekt, ale toto je ze stejné série „všechno je na internetu“. Proto uvedu, co mi tady a teď funguje.
Při výběru klienta se musíte ujistit, že podporuje možnost zpoždění mezi pakety. Ano, mezi plážemi jsou rozdíly a 100 megabitů nikdy nezaručí, že pakety dorazí z daného místa ve správném pořadí ve správný čas.
A ano, při nastavování klienta musíte sami zvolit zpoždění. Příliš mnoho časového limitu – boti budou útočit, příliš málo – klient nebude mít čas. Příliš velké zpoždění – klient to nestihne nebo dojde ke konfliktu idiotů (viz „hrabání“), příliš málo – pakety se ztratí na internetu.
S timeout=5s, delay=100..500ms je zcela funkční volba
Windows
Bez ohledu na to, jak legračně to zní, pro Google je to zcela netriviální jako jasný klient pro tuto platformu. Takové, že CLI podporuje zpoždění, TCP - a bez oblouků.
Jako možnost si můžete vyzkoušet . Můj Google zřejmě není dort.
Linux
Vše je zde jednoduché:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333MacOS
Nejjednodušší způsob je nainstalovat port z homebrew:
brew install knock
a nakreslete potřebné dávkové soubory pro příkazy jako:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Funkční možností je KnockOnD (zdarma, z obchodu).
Android
"Knock on Ports" Není to reklama, ale prostě to funguje. A vývojáři jsou velmi vstřícní.
PS markdown na Habrého, samozřejmě, Bůh mu žehnej jednou...
UPD1: díky nalezeno pod Windows.
UPD2: Další připomnělo mi, že umístění nových pravidel na konec iptables není vždy užitečné. Ale - záleží.
Zdroj: www.habr.com
