A chi deve garantirsi l'accesso ai propri server da qualsiasi luogo nel mondo tramite SSH/RDP/altro — una piccola RTFM/spiegazione.
Dobbiamo fare a meno di VPN e altri fronzoli, con qualsiasi dispositivo a portata di mano.
E così, senza dover troppo esercitare sul server.
Tutto ciò di cui abbiamo bisogno è — , mani abilissime e 5 minuti di lavoro.
«C'è tutto su Internet», certo (anche su ), ma quando si tratta di attuare concretamente — qui inizia...
Ci eserciteremo con l'esempio di Fedora/CentOS, ma non è importante.
Questa guida si adatta sia ai principianti che ai veterani del settore, quindi ci saranno commenti, ma più brevi.
1. Server
installare knock-server:
yum/dnf install knock-serverconfigurarlo (ad esempio su 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 ACCEPTLa parte «di apertura» è impostata per chiudersi automaticamente dopo 1 ora. Non si sa mai...
/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 ...avanti:
service iptables restart service knockd startpuoi aggiungere RDP su un Windows Server virtuale in esecuzione ( /etc/knockd.conf; sostituisci il nome dell'interfaccia a piacere):
[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.2Tutti i nostri pacchetti dai client vengono monitorati sul server con il comando
iptables -S.
2. Guida alle trappole
knockd.conf:
Anche nella documentazione c'è tutto (ma non è certo), tuttavia knockd è piuttosto avaro di messaggi, quindi bisogna prestare molta attenzione.
- versione
Nei repository Fedora/CentOS l'ultima versione di knockd disponibile è 0.63. Chi cerca UDP — cercate i pacchetti 0.70. - interfaccia
Nella configurazione predefinita di Fedora/CentOS, questa riga è assente. Aggiungerla manualmente, altrimenti non funzionerà. - timeout
Qui puoi scegliere in base ai tuoi gusti. È necessario che il cliente abbia abbastanza tempo per tutti i pings — e il bot scanner delle porte si è rotto (e scannerizzeranno il 146%). - start/stop/command.
Se il comando è uno — allora command, se sono due — allora start_command+stop_command.
Se commetti un errore — knockd rimarrà in silenzio, ma non funzionerà. - proto
Teoricamente si può usare UDP. Nella pratica, io ho mescolato tcp e udp, e un cliente sulla spiaggia di Bali è riuscito ad aprire il cancello solo al quinto tentativo. Poiché TCP arrivava quando doveva, ma UDP — non è garantito. Ma questa è una questione di gusti, di nuovo. - sequence
Ci sono insidie implicite nel fatto che le sequenze non devono sovrapporsi... come dire...
Ad esempio, questo:
open: 11111,22222,33333
close: 22222,11111,33333Per il ping 11111 open aspetterà il prossimo ping su 22222. Tuttavia, con questo ping (22222) inizierà a funzionare close e tutto si romperà. Dipende anche dal delay del cliente. Queste sono le cose ©.
iptables
Se in /etc/sysconfig/iptables c'è questo:
*nat
:PREROUTING ACCEPT [0:0]questo non ci dà particolarmente fastidio, ma questo:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedSì, crea fastidio.
Poiché knockd aggiunge regole alla fine della catena INPUT, otterremo un rifiuto.
Disattivare questo rifiuto significa aprire la macchina a tutti i venti.
Per non complicarci con iptables su cosa mettere prima (come fanno suggeriscono) faremo più semplice:
- di default in CentOS/Fedora la prima regola (“ciò che non è vietato è consentito”) la sostituiamo con l'opposto,
- e l'ultima regola la eliminiamo.
Il risultato dovrebbe essere:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedCerto, si può fare REJECT al posto di DROP, ma con DROP i bot vivranno meglio.
3. Cliente
Qui le cose diventano davvero interessanti (dal mio punto di vista), poiché bisogna lavorare non solo da qualsiasi spiaggia, ma anche da qualsiasi dispositivo.
In linea di principio, alcuni clienti sono elencati sul del progetto, ma questo è della stessa serie di «internet ha tutto». Quindi elencherò ciò che funziona qui ed ora con me.
Quando si sceglie un cliente bisogna assicurarsi che supporti l'opzione delay tra i pacchetti. Sì, ogni spiaggia è diversa e 100 megabit non garantiscono affatto che i pacchetti arrivino nell'ordine corretto e al momento giusto da questo luogo.
E sì — quando si configura il cliente, il delay deve essere impostato manualmente. Troppo timeout — i bot attaccheranno, troppo poco — il cliente non ce la fa. Troppo delay — il cliente non ce la fa o ci sarà conflitto di ping (vedi «insidie»), troppo poco — i pacchetti si perderanno in internet.
Con timeout=5s è un'opzione funzionale delay=100..500ms
Windows
Per quanto possa sembrare strano, trovare un knock client decente per questa piattaforma è piuttosto difficile. Uno che, oltre a essere CLI, supporti delay, TCP — e senza fronzoli.
Come alternativa, si può provare . Evidentemente Google non è il mio forte.
Linux
Qui è tutto semplice:
dnf install knock -y
knock -d 11111 22222 33333MacOS
È più facile installare la versione da homebrew:
brew install knock
e creare dei file batch di comandi come:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Un'opzione funzionante è KnockOnD (gratuito, disponibile nello store).
Android
«Knock on Ports». Non è pubblicità, ma semplicemente funziona. E gli sviluppatori sono abbastanza reattivi.
P.S. Markdown su Habr, certo, che Dio lo benedica un giorno…
UPD1: grazie a è stato trovato per Windows.
UPD2: un'altra mi ha ricordato che aggiungere nuove regole in fondo a iptables non è sempre utile. Ma — dipende.
Fonte: habr.com
