Onima koji trebaju osigurati pristup svojim serverima s bilo kojeg mjesta na svijetu preko SSH/RDP/drugo — mali RTFM/pomoćnik.
Moramo se snaći bez VPN-a i drugih kompliciranih stvari, s bilo kojeg uređaja pri ruci.
I tako da se ne treba previše truditi s serverom.
Sve što je potrebno za to — , spretnost i 5 minuta rada.
„Na internetu sve postoji“, naravno (čak i na ), ali kada dođe do konkretne realizacije — tu i počinju…
Vježbat ćemo na primjeru Fedora/CentOS, ali to nije važno.
Pomoćnik će biti koristan kako početnicima, tako i veteranima, stoga će biti komentara, ali kraćih.
1. Server
instaliramo knock-server:
yum/dnf install knock-serverkonfiguriramo ga (na primjer za 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„Otvoreni“ dio podešen je za automatsko zatvaranje nakon 1 sat. 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 startmožete dodati RDP na virtualni Windows Server (/{etc}/knockd.conf; unosite naziv sučelja 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.2Sve naše aktivnosti od klijenta pratimo na serveru naredbom
iptables -S.
2. Vodič kroz zamke
knockd.conf:
U manulima također ima svega (ali to nije sigurno), no knockd je prilično škrta na porukama, stoga treba biti vrlo pažljiv.
- verzija
U repozitorijima Fedora/CentOS najnoviji knockd do danas je — 0.63. Tko želi UDP — tražite pakete 0.70. - sučelje
U zadnjoj konfiguraciji Fedora/CentOS, ova linija nema. Dodajte ručno, inače neće raditi. - timeout
Ovdje si možete prilagoditi kako želite. Treba da i klijentu ostane dovoljno vremena za sve pingove — i bot-skener portova da ne uspije (a skenirat će 146%). - start/stop/command.
Ako je tim jedan — onda command, ako su dva — onda start_command+stop_command.
Ako pogriješite — knockd će šutjeti, ali neće raditi. - proto
Teoretski je moguće koristiti UDP. U praksi sam pomiješao tcp i udp, a klijent s plaže na Baliju mogao je otvoriti svoju kapiju tek nakon petog pokušaja. Jer TCP su stigli kada je bilo potrebno, a za UDP — to nije sigurno. No, to je stvar ukusa, ponavljam. - sekvenca
Nejasne zamke su u tome što sekvence ne smiju preklapati… kako da to kažem…
Na primjer, ovako:
open: 11111,22222,33333
close: 22222,11111,33333Po udarcu 11111 open će čekati sljedeći udarac na 22222. Međutim, po ovom (22222) udarcu će početi raditi close i sve će se pokvariti. To ovisi i o odgodi klijenta. Takva su pravila ©.
iptables
Ako u /etc/sysconfig/iptables imamo ovo:
*nat
:PREROUTING ACCEPT [0:0]ne smeta nam previše, ali ovo:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitednaš je problem.
Budući da knockd dodaje pravila na kraj INPUT lanca, dobit ćemo odbijanje.
A isključiti to odbijanje — znači otvoriti stroj svim vjetrovima.
Da ne bismo komplicirali s iptables o tome gdje što umetnuti (kao što predlažu), učinimo jednostavnije:
- default u CentOS/Fedora prvo pravilo („što nije zabranjeno — dopušteno je“) zamijenimo suprotnim,
- a posljednje pravilo uklanjamo.
Na kraju bi trebalo ispasti:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedNaravno, umjesto DROP može se koristiti REJECT, ali s DROP-om botovima će biti zabavnije.
3. Klijent
Na ovom mjestu je najzanimljivije (iz mog gledišta), jer je važno raditi ne samo s bilo koje plaže, nego i s bilo kojeg uređaja.
U načelu, niz klijenata je navedeno na projektu, ali to je iz iste serije „na internetu se sve može naći“. Zato ću nabrojati one koji trenutačno rade kod mene.
Pri odabiru klijenta potrebno je osigurati da podržava opciju odgode između paketa. Da, plaža je svaka različita i 100 megabita nikako ne garantira da će paketi stići na pravo mjesto u pravo vrijeme iz tog mjesta.
I da — pri postavljanju klijenta, odgoda se mora ručno prilagoditi. Previše timeout-a — botovi će napasti, premalo — klijent neće stići. Previše odgode — klijent neće stići ili će doći do sukoba udaraca (vidi „zamke“), premalo — paketi će se izgubiti na internetu.
Uz timeout=5s, sasvim je dobro rješenje delay=100..500ms.
Windows
Kako god to smiješno zvučalo, ali pronaći smisleni knock-klijent za ovu platformu prilično je nezgodno. Takav, da CLI podržava odgodu, TCP — i bez ukrasa.
Kao opciju možete probati . Očigledno da mi Google nije baš najbolji.
Linux
Ovdje je sve jednostavno:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Najlakše je instalirati port iz homebrew-a:
brew install knock
i nacrtati si potrebne batnice komande u obliku:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Radna opcija — KnockOnD (besplatno, iz trgovine).
Android
«Knock on Ports». Nije reklama, jednostavno radi. I developeri su dovoljno responzivni.
P.S. markdown na Habreu, naravno, da mu bog da zdravlja jednog dana...
UPD1: zahvaljujući pronađen za Windows.
UPD2: još jedan podsjetio je da postavljanje novih pravila na kraj iptables-a nije uvijek korisno. Ali — to ovisi.
Izvor: habr.com
