Tistim, ki želijo dostopati do svojih strežnikov od kjerkoli po svetu prek SSH/RDP/drugo – mala RTFM/spominska karta.
Potrebujemo, da se obrnemo brez VPN in drugih zapletov, z kateregakoli napravo pri roki.
In tako, da se s strežnikom ne bi preveč trudili.
Vse, kar potrebujete, je - , spretne roke in 5 minut dela.
„Na internetu je vse“, seveda (tudi na ), a ko pride do konkretne izvedbe – tukaj se začne …
Bomo vadili na primerku Fedora/CentOS, a to ni pomembno.
Spomin se prileže tako novincem kot veteranom, zato bodo komentarski pripisi, a bolj kratki.
1. Strežnik
namestite knock-server:
yum/dnf install knock-serverga nastavite (na primer 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„Odprta“ del nastavitve je nastavljena na samodejno zapiranje po 1 uri. Nikoli ne veš…
/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 ...naprej:
service iptables restart service knockd startlahko dodate RDP na virtualni Windows Server ( /etc/knockd.conf; vstavite ime vmesnika po želji):
[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.2Vse naše ukaze od stranke spremljamo na strežniku z ukazom
iptables -S.
2. Vodnik po težavah
knockd.conf:
V dokumentaciji je tudi vse (a to ni nujno), vendar je knockd precej skop z sporočili, zato morate biti zelo pozorni.
- različica
V repozitorijih Fedora/CentOS je zadnji knockd danes – 0.63. Ki želi UDP – naj išče pakete 0.70. - vmesnik
V privzeti konfiguraciji Fedora/CentOS ta vrstica nije dostupno. Dodajte ročno, sicer ne bo delovalo. - časovni izostanek
Tukaj prilagodite po okusu. Pomembno je, da ima klient dovolj časa za vse ukaze – in da se bot-skener portov ustavi (in skeniral bo 146%). - start/stop/command.
Če ekipa deluje sama – uporabite command, če delujeta dve – then start_command+stop_command.
Če naredite napako – knockd bo tiho, a ne bo deloval. - proto
Teoretično je mogoče uporabiti UDP. V praksi sem zamešal tcp in udp, stranka na plaži v Bali pa je lahko odprla vrata šele petič. Ker so TCP paketi prispeli, UDP pa je vprašanje. A to je stvar okusa, ponovno. - zaporedje
Implicitni pasti so, da se zaporedja ne smejo prekrivati… kako bi to povedal…
Na primer, takole:
open: 11111,22222,33333
close: 22222,11111,33333Po piku 11111 open bo čakal naslednji pik na 22222. Vendar pri tem (22222) piku se bo začelo delovati zapri in vse se bo pokvarilo. To je odvisno tudi od zakasnitve stranke. Taka so dejstva ©.
iptables
Če je v /etc/sysconfig/iptables tole:
*nat
:PREROUTING ACCEPT [0:0]nas prav posebno ne ovira, potem pa tole:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedPa ovira.
Ker knockd dodaja pravila na konec INPUT verige, bomo dobili zavrnitev.
In onemogočiti to zavrnitev – to pomeni odpreti napravo vsem vetrovom.
Da se ne bi zapletali v iptables, kam vse kaj postaviti (kot predlagajo ), bomo preprostejši:
- privzeto v CentOS/Fedora prvo pravilo (»kar ni prepovedano, je dovoljeno«) zamenjamo s nasprotnim,
- zadnje pravilo pa odstranimo.
Na koncu bi moralo izgledati:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedSeveda lahko namesto DROP uporabite REJECT, a s DROP bodo botom lažje.
3. Stranka
Na tem mestu je najbolj zanimivo (z mojega vidika), ker je treba delati ne samo z vsake plaže, ampak tudi z vsake naprave.
Načeloma je nekaj strank naštetih na projektu, vendar to spada v isto kategorijo kot »na internetu je vse«. Zato naštevam to, kar trenutno deluje pri meni.
Pri izbiri stranke je treba poskrbeti, da podpira možnost zakasnitve med paketi. Da, plaža plaži ni enaka in 100 megabitov ne zagotavlja, da bodo paketi prispeli v pravilnem vrstnem redu ob pravem času z določenega mesta.
In ja – pri nastavitev stranke je treba zakasnitev prilagoditi samostojno. Prevelika zakasnitev – boti napadejo, premajhna – stranka ne bo zmogla. Prevelika zakasnitev – stranka ne bo zmogla ali bo prišlo do spora (glej »pasti«), premajhna – paketi se lahko izgubijo v internetih.
Pri timeout=5s je povsem delujoča možnost delay=100..500ms
Windows
Kar se morda zdi smešno, toda najti delujoč knock-klijent za to platformo je precej zapleteno. Tak, da podpira CLI, zakasnitev, TCP – in brez okraskov.
Kot možnost lahko poskusite . Očitno moj Google ni preveč dober.
Linux
Tukaj je vse preprosto:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Najlažje je namestiti paket iz homebrew:
brew install knock
in si narisati potrebne skripte, kot so:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Delujoča možnost — KnockOnD (brezplačno, iz trgovine).
Android
„Knock on Ports“. Ni oglas, ampak pač deluje. In razvijalci so dovolj odzivni.
P.S. markdown na Habru, no, naj mu bo zdravje do konca…
UPD1: zahvaljujoč je bil najden za Windows.
UPD2: še en me je spomnil, da ni vedno koristno dodajati novih pravil na konec iptables. Ampak — odvisno.
Izvor: habr.com
