Consejos y trucos de Linux: servidor, abierto

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.

Source: https://habr.com/ru/post/470001/


All Articles