Consejos y trucos de Linux: servidor, ábrelo

Para aquellos que necesitan proporcionarse a ellos mismos, a sus seres queridos, acceso a sus servidores desde cualquier parte del mundo a través de SSH/RDP/otro, un pequeño RTFM/spur.

Necesitamos prescindir de VPN y otras comodidades, desde cualquier dispositivo que tengamos a mano.

Y para que no tengas que ejercitarte demasiado con el servidor.

Todo lo que necesitas para esto es golpeado, 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, aquí es donde comienza...

Practicaremos usando Fedora/CentOS como ejemplo, pero eso no importa.

El espolón es apto tanto para principiantes como para expertos en esta materia, por lo que habrá comentarios, pero serán más breves.

1 Servidor

  • instalar knock-servidor:
    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 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
    ...

  • adelante:

    service iptables restart
    service knockd start

  • puede agregar RDP al servidor virtual de Windows que gira en su interior (/etc/knockd.conf; sustituya el nombre de la interfaz según 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

    Realizamos un seguimiento de todas nuestras patadas del cliente en el servidor con el comando iptables -S.

2. Guía de rastrillos

knockd.conf:

El maná también contiene todo (pero esto es inexacto), pero knockd es un amigo bastante tacaño con los mensajes, por lo que debes tener mucho cuidado.

  • versión
    En los repositorios de Fedora/CentOS, el último knockd de hoy es 0.63. ¿Quién quiere UDP? Busque paquetes de 0.70.
  • interfaz.
    En la configuración predeterminada de Fedora/CentOS esta línea No. Agrega con las manos, de lo contrario no funcionará.
  • tiempo de espera
    Aquí podrás elegir según tu gusto. Es necesario que el cliente tenga suficiente tiempo para todas las patadas, y el robot del escáner de puertos fallará (y el 146% escaneará).
  • iniciar/detener/comando.
    Si hay un comando, entonces comando, si hay dos, entonces start_command+stop_command.
    Si comete un error, knockd permanecerá en silencio, pero no funcionará.
  • proto
    En teoría, se puede utilizar UDP. En la práctica, mezclé tcp y udp, y el cliente de la playa de Bali solo pudo abrir la puerta la quinta vez. Porque TCP llegó cuando fue necesario, pero UDP no es un hecho. Pero esto es una cuestión de gustos, nuevamente.
  • secuencia
    El rastrillo implícito es que las secuencias no deben cruzarse... cómo debería decir esto...

Por ejemplo, esto:

open: 11111,22222,33333
close: 22222,11111,33333

Por patada 11111 habiertos esperará la próxima patada en 22222. Sin embargo, después de esta patada (22222) comenzará a funcionar Cerrar y todo se romperá. Esto también depende del retraso del cliente. Cosas así ©.

iptables

Si en /etc/sysconfig/iptables esto es:

*nat
:PREROUTING ACCEPT [0:0]

Realmente no nos molesta, así que aquí está:

*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Interfiere.

Dado que knockd agrega reglas al final de la cadena INPUT, obtendremos un rechazo.

Y apagar este rechazo significa abrir el coche a todos los vientos.

Para no perderse en iptables qué insertar antes de qué (como este personas sugerir) hagámoslo más simple:

  • por defecto en CentOS/Fedora primero la regla (“lo que no está prohibido está permitido”) será reemplazada por la contraria,
  • y eliminamos la última regla.

El resultado debería ser:

*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited

Por supuesto, puedes REJECT en lugar de DROP, pero con DROP la vida será más divertida para los bots.

3. Cliente

Este lugar es el más interesante (desde mi punto de vista), ya que es necesario trabajar no solo desde cualquier playa, sino también desde cualquier dispositivo.

En principio, varios clientes figuran en sitio web proyecto, pero esto es de la misma serie "todo está en Internet". Por lo tanto, enumeraré lo que está funcionando a mi alcance aquí y ahora.

Al elegir un cliente, debe asegurarse de que admita la opción de retraso entre paquetes. Sí, existen diferencias entre playas y 100 megabits nunca garantizan que los paquetes lleguen en el orden correcto en el momento correcto desde un lugar determinado.

Y sí, al configurar un cliente, debes seleccionar el retraso tú mismo. Demasiado tiempo de espera: los bots atacarán, muy poco: el cliente no tendrá tiempo. Demasiado retraso: el cliente no llegará a tiempo o habrá un conflicto de idiotas (ver "rastrillos"), muy poco: los paquetes se perderán en Internet.

Con tiempo de espera = 5 segundos, retraso = 100..500 ms es una opción completamente funcional

Windows

No importa lo gracioso que parezca, para Google no es nada trivial un cliente claro para esta plataforma. De modo que la CLI admita retrasos, TCP y sin arcos.

Como una opción, puedes probar esto esta aqui. Al parecer mi Google no es un pastel.

Linux

Es simple aquí:

dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333

MacOS

La forma más sencilla es instalar el puerto desde homebrew:
brew install knock
y dibuje los archivos por lotes necesarios para comandos como:

#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333

iOS

Una opción que funciona es KnockOnD (gratis, en la tienda).

Android

"Llamar a los puertos" No es publicidad, pero simplemente funciona. Y los desarrolladores son bastante receptivos.

PD: rebaja en Habré, por supuesto, Dios lo bendiga algún día...

UPD1: gracias a a una buena persona encontró cliente de trabajo bajo Windows.
UPD2: Otro buen hombre Me recordó que poner nuevas reglas al final de iptables no siempre es útil. Pero depende.

Fuente: habr.com

Añadir un comentario