Za one koji trebaju sebi, svojim voljenima osigurati pristup svojim serverima s bilo kojeg mjesta u svijetu putem SSH/RDP/ostalo, mali RTFM/spur.
Moramo raditi bez VPN-a i drugih dodataka, s bilo kojeg uređaja pri ruci.
I tako da ne morate previše vježbati s poslužiteljem.
Sve što trebate za ovo je
"Sve je na internetu", naravno (čak i na
Vježbat ćemo koristeći Fedora/CentOS kao primjer, ali to nije važno.
Spur je pogodan i za početnike i za stručnjake u ovom pitanju, tako da će biti komentara, ali oni će biti kraći.
1. Poslužitelj
-
instaliraj knock-server:
yum/dnf install knock-server
-
konfigurirajte ga (na primjer 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
Dio za "otvaranje" postavljen je na automatsko zatvaranje nakon 1 sata. Nikad ne znaš...
-
/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 ...
-
naprijed:
service iptables restart service knockd start
-
možete dodati RDP virtualnom Windows Serveru koji se vrti unutra (/etc/knockd.conf; zamijenite naziv sučelja prema svom ukusu):
[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.2
Naredbom pratimo sve naše udarce od klijenta na serveru
iptables -S
.
2. Vodič za grablje
knockd.conf:
Mana također sadrži sve (ali ovo je netočno), ali knockd je prijatelj koji je dosta škrt s porukama, pa treba biti jako oprezan.
- verzija
U Fedora/CentOS spremištima, najnoviji knockd za danas je 0.63. Tko želi UDP - traži 0.70 paketa. - sučelje
U zadanoj Fedora/CentOS konfiguraciji ovaj redak ne. Dodajte rukama, inače neće ići. - tajm-aut
Ovdje možete odabrati prema svom ukusu. Potrebno je da klijent ima dovoljno vremena za sve udarce - i bot za skeniranje portova će se pokvariti (a 146% će skenirati). - start/stop/naredba.
Ako postoji jedna naredba, onda naredba, ako su dvije, onda start_command+stop_command.
Ako pogriješite, knockd će ostati tih, ali neće raditi. - proto
Teoretski, UDP se može koristiti. U praksi sam miješao tcp i udp, a klijent s plaže na Baliju uspio je otvoriti kapiju tek peti put. Jer TCP je stigao kad treba, ali UDP nije činjenica. Ali ovo je opet stvar ukusa. - slijed
Implicitni rake je da se nizovi ne bi trebali presijecati... kako da se izrazim...
Na primjer, ovo:
open: 11111,22222,33333
close: 22222,11111,33333
Udarcem 11111 otvoriti čekat će sljedeći udarac na 22222. Međutim, nakon ovog (22222) udarca počet će raditi blizu i sve će se slomiti. To ovisi i o kašnjenju klijenta. Takve stvari ©.
iptables
Ako je u /etc/sysconfig/iptables ovo:
*nat
:PREROUTING ACCEPT [0:0]
Nama to baš i ne smeta, pa evo:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
To ometa.
Budući da knockd dodaje pravila na kraj INPUT lanca, dobit ćemo odbijenicu.
A gašenje ovog odbijanja znači otvaranje automobila svim vjetrovima.
Kako se ne bi izgubili u iptables što staviti prije čega (ovako
- zadano na CentOS/Fedora prvi pravilo ("dopušteno je što nije zabranjeno") bit će zamijenjeno suprotnim,
- i uklanjamo posljednje pravilo.
Rezultat bi trebao biti:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
Možete, naravno, napraviti REJECT umjesto DROP, ali uz DROP život će botovima biti zabavniji.
3. Klijent
Ovo mjesto je najzanimljivije (s moje točke gledišta), jer morate raditi ne samo s bilo koje plaže, već i s bilo kojeg uređaja.
U principu, naveden je niz klijenata
Prilikom odabira klijenta morate biti sigurni da podržava opciju odgode između paketa. Da, postoje razlike između plaža i 100 megabita nikad ne jamči da će paketi stići pravim redoslijedom u pravo vrijeme s određene lokacije.
I da, kada postavljate klijenta, morate sami odabrati odgodu. Previše vremena - botovi će napasti, premalo - klijent neće imati vremena. Previše kašnjenja - klijent neće stići na vrijeme ili će doći do sukoba idiota (vidi "grablje"), premalo - paketi će se izgubiti na internetu.
S timeout=5s, delay=100..500ms je potpuno radna opcija
Windows
Bez obzira koliko smiješno zvučalo, Googleu je sasvim netrivijalan jasan knock klijent za ovu platformu. Takav da CLI podržava kašnjenje, TCP - i bez lukova.
Alternativno, možete pokušati
Linux
Ovdje je sve jednostavno:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
Najlakši način je instalirati port iz homebrew-a:
brew install knock
i nacrtajte potrebne batch datoteke za naredbe kao što su:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
iOS
Radna opcija je KnockOnD (besplatno, iz trgovine).
Android
"Kucaj na portove" Nije oglašavanje, ali jednostavno radi. I programeri su prilično osjetljivi.
PS smanjenje na Habréu, naravno, Bog ga blagoslovio jednog dana...
UPD1: zahvaljujući
UPD2: Još jedan
Izvor: www.habr.com