Per coloro che hanno bisogno di fornire a se stessi e ai propri cari l'accesso ai propri server da qualsiasi parte del mondo tramite SSH/RDP/altro, un piccolo RTFM/spur.
Dobbiamo fare a meno della VPN e di altri fronzoli, da qualsiasi dispositivo a portata di mano.
E così non devi esercitarti troppo con il server.
Tutto ciò di cui hai bisogno è
“Tutto è su Internet”, ovviamente (anche su
Faremo pratica usando Fedora/CentOS come esempio, ma non importa.
Lo sperone è adatto sia ai principianti che agli esperti in materia, quindi ci saranno commenti, ma saranno più brevi.
1. Server
-
installa knock-server:
yum/dnf install knock-server
-
configuralo (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 ACCEPT
La 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 ...
-
inoltrare:
service iptables restart service knockd start
-
puoi aggiungere RDP al server Windows virtuale che gira all'interno (/etc/knockd.conf; sostituisci il nome dell'interfaccia in base ai tuoi gusti):
[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
Teniamo traccia di tutti i nostri calci dal client sul server con il comando
iptables -S
.
2. Guida ai rastrelli
knockd.conf:
Anche il mana contiene tutto (ma questo è impreciso), ma knockd è un amico piuttosto avaro di messaggi, quindi bisogna stare molto attenti.
- versione
Nei repository Fedora/CentOS, l'ultimo knockd di oggi è 0.63. Chi vuole UDP: cerca i pacchetti 0.70. - interfaccia
Nella configurazione predefinita di Fedora/CentOS questa riga no. Aggiungi con le mani, altrimenti non funzionerà. - timeout
Qui potete scegliere in base ai vostri gusti. È necessario che il client abbia abbastanza tempo per tutti i kick e il bot dello scanner delle porte si romperà (e il 146% eseguirà la scansione). - avvio/arresto/comando.
Se è presente un comando, allora comando, se ce ne sono due, allora start_command+stop_command.
Se commetti un errore, knockd rimarrà silenzioso, ma non funzionerà. - proto
Teoricamente è possibile utilizzare UDP. In pratica ho mischiato tcp e udp e il client della spiaggia di Bali è riuscito ad aprire il cancello solo la quinta volta. Perché TCP è arrivato quando necessario, ma UDP non è un dato di fatto. Ma questa è una questione di gusti, ancora una volta. - sequenza
Il vantaggio implicito è che le sequenze non si intersechino... come dire...
Ad esempio, questo:
open: 11111,22222,33333
close: 22222,11111,33333
Con il calcio 11111 aprire aspetterà il prossimo kick a 22222. Tuttavia, dopo questo kick (22222) inizierà a funzionare close e tutto si romperà. Ciò dipende anche dal ritardo del cliente. Cose del genere ©.
iptables
Se in /etc/sysconfig/iptables questo è:
*nat
:PREROUTING ACCEPT [0:0]
Non ci disturba davvero, quindi eccolo qui:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Interferisce.
Poiché knockd aggiunge regole alla fine della catena INPUT, otterremo un rifiuto.
E spegnere questo rifiuto significa aprire l’auto a tutti i venti.
Per non perdersi in iptables cosa inserire prima di cosa (come questo
- predefinito su CentOS/Fedora prima la regola (“ciò che non è vietato è consentito”) sarà sostituita dalla regola opposta,
- e rimuoviamo l'ultima regola.
Il risultato dovrebbe essere:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
Ovviamente puoi fare REJECT invece di DROP, ma con DROP la vita sarà più divertente per i robot.
3. Cliente
Questo posto è il più interessante (dal mio punto di vista), poiché devi lavorare non solo da qualsiasi spiaggia, ma anche da qualsiasi dispositivo.
In linea di principio, sono elencati numerosi clienti
Quando si sceglie un client, è necessario assicurarsi che supporti l'opzione di ritardo tra i pacchetti. Sì, ci sono differenze tra le spiagge e 100 megabit non garantiscono mai che i pacchetti arrivino nell'ordine giusto al momento giusto da una determinata località.
E sì, quando imposti un client, devi selezionare tu stesso il ritardo. Troppo timeout: i robot attaccheranno, troppo poco: il client non avrà tempo. Troppo ritardo - il client non arriverà in tempo o ci sarà un conflitto di idioti (vedi "rakes"), troppo poco - i pacchetti si perderanno su Internet.
Con timeout=5s, ritardo=100..500ms è un'opzione completamente funzionante
Windows
Non importa quanto possa sembrare divertente, non è affatto banale trovare in Google un chiaro client per questa piattaforma. In modo tale che la CLI supporti il ritardo, TCP e senza archi.
Come opzione puoi provare
Linux
Tutto è semplice qui:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
Il modo più semplice è installare il port da homebrew:
brew install knock
e disegna i file batch necessari per comandi come:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
iOS
Un'opzione funzionante è KnockOnD (gratuito, dal negozio).
Android
"Bussa ai porti" Non è pubblicità, ma funziona e basta. E gli sviluppatori sono abbastanza reattivi.
PS ribasso su Habré, ovviamente, Dio lo benedirà un giorno...
UPD1: grazie a
UPD2: Un altro
Fonte: habr.com