Cei care doresc să își asigure accesul la serverele lor din orice colț al lumii prin SSH/RDP/altceva - un mic RTFM/ghid.
Trebuie să ne descurcăm fără VPN și alte complicații, de pe orice dispozitiv la îndemână.
Și astfel, pentru a nu te complica prea mult cu serverul.
Tot ce ai nevoie pentru aceasta este - , mâini abil și 5 minute de muncă.
„Pe internet se găsește tot”, desigur (chiar și pe ), dar când vine vorba de implementarea concretă, aici începe…
Ne vom exersa pe exemplul Fedora/CentOS, dar asta nu contează.
Ghidul se potrivește atât celor începători, cât și celor experimentați în domeniu, așa că vor fi comentarii, dar mai scurte.
1. Serverul
instalăm knock-server:
yum/dnf install knock-serverîl configurăm (de exemplu pentru 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 ACCEPTPartea „de deschidere” este setată să se închidă automat după 1 oră. Cine știe…
/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 ...în continuare:
service iptables restart service knockd startpoți adăuga RDP pe un Windows Server virtual ( /etc/knockd.conf; numele interfeței să fie ales după preferință):
[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.2Toate încercările noastre de la client sunt monitorizate pe server cu comanda
iptables -S.
2. Ghidul capcanelor
knockd.conf:
În documentații se găsește tot (dar nu este sigur), totuși knockd este o resursă destul de zgârcită în mesaje, așa că trebuie să fii foarte atent.
- versiune
În repositoarele Fedora/CentOS, cea mai recentă versiune a lui knockd este - 0.63. Cei care doresc UDP - căutați pachetele 0.70. - interfață
În configurația implicită Fedora/CentOS, această linie ). În SUSE/openSUSE, vulnerabilitatea nu se manifestă din cauza utilizării ramurii Exim 4.88.. Adăugați manual, altfel nu va funcționa. - timeout
Aici poți alege după preferință. Trebuie să asiguri suficient timp clientului pentru toate încercările - și să blochezi scanerul de porturi (iar scanarea va fi de 146%). - start/stop/command.
Dacă echipa este una — atunci command, dacă sunt două — atunci start_command+stop_command.
Dacă greșiți — knockd va tăcea, dar nu va funcționa. - proto
Teoretic se poate folosi UDP. În practică am amestecat tcp și udp, iar clientul de pe plaja din Bali a reușit să-și deschidă poarta doar din a cincea încercare. Deoarece TCP au ajuns când trebuiau, iar UDP — nu e o certitudine. Dar aceasta este o chestiune de gust, iarăși. - sequence
Capcanele neobservate sunt că secvențele nu trebuie să se suprapună… cum să spun…
De exemplu, ceva de genul:
open: 11111,22222,33333
close: 22222,11111,33333Pe lovitura 11111 open va aștepta următoarea lovitură pe 22222. Totuși, la această (22222) lovitură va începe să funcționeze close și totul se va strica. Aceasta depinde și de delay-ul clientului. Asta e situația ©.
iptables
Dacă în /etc/sysconfig/iptables este aceasta:
*nat
:PREROUTING ACCEPT [0:0]nu ne deranjează prea mult, dar aceasta:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedchiar deranjează.
Deoarece knockd adaugă reguli la finalul lanțului INPUT, vom primi reject.
Iar dezactivarea acestui reject — înseamnă să deschidem mașina tuturor vânturilor.
Pentru a evita să ne complicăm în iptables ce și unde să punem (așa cum sugerează) să facem mai simplu:
- default în CentOS/Fedora prima regulă („ce nu este interzis — este permis”) să o înlocuim cu inversa,
- iar ultima regulă să o eliminăm.
În final, ar trebui să iasă:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedSe poate, desigur, în loc de DROP să facem REJECT, dar cu DROP botii vor avea o viață mai simplă.
3. Client
În acest loc este cel mai interesant (din punctul meu de vedere), deoarece trebuie să funcționeze nu doar de pe orice plajă, ci și de pe orice dispozitiv.
În principiu, o serie de clienți sunt enumerați pe proiect, dar aceasta face parte din aceeași serie „totul se găsește pe internet”. De aceea voi enumera ceea ce acum și aici funcționează cu mine.
Când alegeți un client, trebuie să urmăriți că acesta să susțină opțiunea delay între pachete. Da, plaja diferă de plajă și 100 de megabiți nu garantează deloc livrarea pachetelor în ordinea necesară la timpul dorit din acel loc.
Și da — la configurarea clientului, delay-ul trebuie ajustat individual. Mult timeout — vor ataca boții, puțin — clientul nu va reuși. Mult delay — clientul nu va reuși sau va fi un conflict de lovituri (vezi „capcanele”), puțin — pachetele se vor pierde în internet.
Cu timeout=5s este o opțiune funcțională delay=100..500ms
Windows
Cum ar suna amuzant, dar a găsi un client knock decent pentru această platformă este destul de complicat. Să fie CLI, să susțină delay, TCP — și fără briz-brizuri.
Ca alternativă, poți încerca . Se pare că Google meu nu este foarte bun.
Linux
Aici este totul simplu:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Cel mai simplu este să instalezi portul din homebrew:
brew install knock
și să îți creezi camnduri de tip bat:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
O variantă funcțională - KnockOnD (gratuit, din magazin).
Android
„Knock on Ports”. Nu este publicitate, doar că funcționează. Și dezvoltatorii sunt destul de receptivi.
P.S. markdown pe Habr, bineînțeles, să-i dea Dumnezeu sănătate cândva…
UPD1: datorită s-a găsit pentru Windows.
UPD2: încă o persoană bună Celor care doresc să își asigure accesul la serverele lor din orice colț al lumii prin SSH/RDP/alte metode - un mic RTFM/ghid. Trebuie să ne descurcăm fără.
Sursa: habr.com
