Para aqueles que precisan proporcionarse a si mesmos, aos seus seres queridos, acceso aos seus servidores desde calquera parte do mundo a través de SSH/RDP/outro, un pequeno RTFM/spur.
Necesitamos prescindir da VPN e doutros timbres e asubíos, desde calquera dispositivo que teñamos a man.
E para que non teñas que facer moito exercicio co servidor.
Todo o que necesitas para iso é
"Todo está en Internet", por suposto (incluso en
Practicaremos usando Fedora/CentOS como exemplo, pero iso non importa.
O espolón é adecuado tanto para principiantes como para expertos nesta materia, polo que haberá comentarios, pero serán máis breves.
1. Servidor
-
instalar knock-server:
yum/dnf install knock-server
-
configúrao (por exemplo en 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
A parte de "apertura" está configurada para pecharse automaticamente despois de 1 hora. Nunca sabes...
-
/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 ...
-
adiante:
service iptables restart service knockd start
-
podes engadir RDP ao servidor virtual de Windows xirando dentro (/etc/knockd.conf; substitúe o nome da interface segundo o teu gusto):
[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
Seguimos todas as nosas patadas do cliente no servidor co comando
iptables -S
.
2. Guía de anciños
knockd.conf:
O mana tamén contén todo (pero isto é inexacto), pero knockd é un amigo bastante tacaño coas mensaxes, polo que hai que ter moito coidado.
- versión
Nos repositorios Fedora/CentOS, o último knockd para hoxe é 0.63. Quen quere UDP: busque paquetes de 0.70. - interface
Na configuración predeterminada de Fedora/CentOS esta liña ningunha. Engade coas mans, se non, non funcionará. - tempo de espera
Aquí podes escoller segundo o teu gusto. É necesario que o cliente teña tempo suficiente para todas as patadas e o bot do escáner de portos avarase (e o 146% escaneará). - iniciar/parar/comando.
Se hai un comando, entón comando, se hai dous, entón start_command+stop_command.
Se cometes un erro, knockd permanecerá en silencio, pero non funcionará. - prototipo
Teoricamente, pódese usar UDP. Na práctica, mesturei tcp e udp, e o cliente da praia de Bali só puido abrir a porta por quinta vez. Porque TCP chegou cando era necesario, pero UDP non é un feito. Pero isto é unha cuestión de gustos, de novo. - secuencia
O rake implícito é que as secuencias non deben cruzarse... como debería dicir isto...
Por exemplo, isto:
open: 11111,22222,33333
close: 22222,11111,33333
Por kick 11111 abrir agardará pola seguinte patada en 22222. Non obstante, despois desta (22222) comezará a funcionar pechar e todo se romperá. Isto tamén depende do atraso do cliente. Tales cousas ©.
iptables
Se está en /etc/sysconfig/iptables isto é:
*nat
:PREROUTING ACCEPT [0:0]
Non nos molesta moito, así que aquí está:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Interfire.
Dado que knockd engade regras ao final da cadea INPUT, rexeitaremos.
E desactivar este rexeitamento significa abrir o coche a todos os ventos.
Para non perderse en iptables que inserir antes que (como este
- por defecto en CentOS/Fedora primeiro a regra (“o que non está prohibido está permitido”) substituirase pola contraria,
- e eliminamos a última regra.
O resultado debe ser:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
Por suposto, podes REXECTAR en lugar de DROP, pero con DROP a vida será máis divertida para os bots.
3. Cliente
Este lugar é o máis interesante (desde o meu punto de vista), xa que hai que traballar non só desde calquera praia, senón tamén desde calquera dispositivo.
En principio, figuran varios clientes
Ao escoller un cliente, cómpre asegurarse de que admite a opción de atraso entre paquetes. Si, hai diferenzas entre as praias e os 100 megabits nunca garanten que os paquetes cheguen na orde correcta no momento axeitado desde unha determinada localización.
E si, ao configurar un cliente, cómpre seleccionar o atraso vostede mesmo. Demasiado tempo de espera - os bots atacarán, moi pouco - o cliente non terá tempo. Demasiado atraso - o cliente non chegará a tempo ou haberá un conflito de idiotas (ver "rastrillos"), moi pouco - os paquetes perderanse en Internet.
Con timeout=5s, delay=100..500ms é unha opción completamente funcional
Windows
Non importa o divertido que pareza, non é nada trivial para Google un cliente claro para esta plataforma. De tal xeito que a CLI admite retardo, TCP e sen arcos.
Alternativamente, podes probar
Linux
Todo é sinxelo aquí:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
O xeito máis sinxelo é instalar o porto desde Homebrew:
brew install knock
e debuxa os ficheiros por lotes necesarios para comandos como:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
IOS
Unha opción de traballo é KnockOnD (gratuíto, desde a tenda).
androide
"Knock on Ports" Non é publicidade, pero só funciona. E os desenvolvedores son bastante sensibles.
Desconto de PS en Habré, por suposto, Deus o bendiga algún día...
UPD1: grazas a
UPD2: Outro
Fonte: www.habr.com