Aquellos que necesitan proporcionarse, amados, acceso a sus servidores desde cualquier parte del mundo a través de SSH / RDP / de lo contrario, un pequeño RTFM / espuela.
Necesitamos prescindir de VPN y otras campanas y silbatos, desde cualquier dispositivo disponible.
Y para que el servidor no ejerza demasiado.
Todo lo que necesitas es knockd , brazos rectos y 5 minutos de trabajo.
"Todo está en Internet", por supuesto (incluso en Habré ), pero cuando se trata de una implementación específica, comienza ...
Haremos ejercicio en el ejemplo de Fedora / CentOS, pero no importa.
El estímulo se adaptará tanto a los principiantes como al bisonte de este negocio, por lo que habrá comentarios, pero más cortos.
1. Servidor
poner servidor de golpe:
yum/dnf install knock-server
configúrelo (por ejemplo 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
La parte de "apertura" está configurada para cerrarse automáticamente después de 1 hora. Nunca se sabe ...
/ 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 ...
adelante:
service iptables restart service knockd start
puede agregar RDP al servidor virtual de Windows girando dentro (/etc/knockd.conf; nombre la interfaz a su 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
Todas las patadas del cliente son monitoreadas en el servidor por el comando iptables -S
.
2. Guía de rastrillo
knockd.conf:
Todo está en el hombre también (pero esto es inexacto), sin embargo, knockd es un compañero bastante tacaño con los mensajes, por lo que debe tener mucho cuidado.
- version
En los repositorios de Fedora / CentOS, el golpe extremo para hoy es 0.63. ¿Quién quiere UDP? Busque paquetes de 0.70. - interfaz
En la configuración predeterminada de Fedora / CentOS, falta esta línea. Agregue a mano, de lo contrario no funcionará. - tiempo de espera
Aquí para elegir al gusto. Es necesario que el cliente tenga tiempo suficiente para todas las patadas, y el escáner de bot de los puertos se interrumpirá (y el 146% lo escaneará). - iniciar / detener / comando.
Si el comando es uno, luego el comando, si son dos, entonces start_command + stop_command.
Si comete un error, knockd permanecerá en silencio, pero no funcionará. - proto
Teóricamente, puedes usar UDP. En la práctica, mezclé tcp y udp, y un cliente de la playa en Bali solo pudo abrir una puerta por quinta vez. Para TCP voló cuando sea necesario, y UDP no es un hecho. Pero esto es cuestión de gustos, de nuevo. - secuencia
El rastrillo implícito es que las secuencias no deben superponerse ... cómo decirlo ...
Por ejemplo, esto:
open: 11111,22222,33333 close: 22222,11111,33333
La patada abierta 11111 esperará la próxima patada en 22222. Sin embargo, esta patada (22222) comenzará a trabajar cerca y todo se romperá. Depende también del retraso del cliente. Tales cosas ©.
iptables
Si en / etc / sysconfig / iptables esto es esto:
*nat :PREROUTING ACCEPT [0:0]
no nos molesta, entonces aquí está:
*filter :INPUT ACCEPT [0:0] ... -A INPUT -j REJECT --reject-with icmp-host-prohibited
Taki interfiere.
Dado que knockd agrega reglas al final de la cadena INPUT, obtenemos rechazo.
Y apagar este rechazo es abrir el auto a todos los vientos.
Para no entrar en iptables, dónde poner algo antes (como la gente sugiere) lo haremos más fácil:
- por defecto en CentOS / Fedora la primera regla ("lo que no está prohibido - permitido") se reemplaza por lo contrario,
- y eliminar la última regla.
El resultado debería ser:
*filter :INPUT DROP [0:0] ... #-A INPUT -j REJECT --reject-with icmp-host-prohibited
Puedes, por supuesto, hacer RECHAZAR en lugar de DROP, pero con DROP, los bots se divertirán más.
3. Cliente
En este lugar lo más interesante (desde mi punto de vista), ya que necesitas trabajar no solo desde cualquier playa, sino también desde cualquier dispositivo.
En principio, varios clientes están listados en el sitio web del proyecto, pero esto es de la misma serie "todo está en Internet". Por lo tanto, enumeraré lo que funciona aquí y ahora a mi alcance.
Al elegir un cliente, debe asegurarse de que sea compatible con la opción de retraso entre paquetes. Sí, la playa y la lucha por la playa y 100 megabits nunca garantizan que los paquetes lleguen en el orden correcto en el momento correcto desde este lugar.
Y sí, al configurar el cliente, el retraso debe seleccionarse de forma independiente. Mucho tiempo de espera - los bots atacarán, un poco - el cliente no llegará a tiempo. Hay mucha demora: el cliente no llegará a tiempo o habrá un conflicto de idiotas (ver "rastrillo"), un poco, los paquetes se volverán a perder en Internet.
Con tiempo de espera = 5s, el retraso de la opción de trabajo completo = 100..500ms
Ventanas
No importa cuán ridículo suene, pero buscar en Google un cliente knock distinto para esta plataforma no es nada trivial. De modo que CLI admite demora, TCP, y sin arcos.
Como opción, puedes probarlo aquí . Al parecer, mi Google no es un pastel.
Linux
Aquí todo es simple:
dnf install knock -y knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
La forma más fácil es poner el puerto desde homebrew:
brew install knock
y dibuja por ti mismo camisas de cuerpo Comandantes de la forma:
#!bin/sh knock -d <delay> <dst_ip> 11111 22222 33333
iOS
La opción de trabajo es KnockOnD (gratis, de la tienda).
Android
"Knock on Ports". No es publicidad, sino solo trabajo. Y los desarrolladores son bastante receptivos.
PS rebaja en Habr, por supuesto, que Dios lo bendiga algún día ...
UPD1 : gracias a una buena persona, se encontró un cliente que funciona para Windows.
UPD2 : otra buena persona recordó que poner nuevas reglas al final de iptables no siempre es útil. Pero depende.