Consejos y trucos de Linux: servidor, ábrete

Para aquellos que desean asegurarse de tener acceso a sus servidores desde cualquier parte del mundo por SSH/RDP/u otro método, aquí hay un pequeño RTFM/guía.

Necesitamos prescindir de VPNs y otros dispositivos, usando cualquier dispositivo a mano.

Y que no sea demasiado complicado trabajar con el servidor.

Todo lo que se necesita es knockd, manos hábiles y 5 minutos de trabajo.

"En Internet hay de todo", por supuesto (incluso en ) y similares estaban en última instancia vinculados a agentes centralizados. Ahora la situación es diferente y), pero cuando se trata de una implementación concreta, ahí es donde comienza la...

Vamos a practicar con un ejemplo de Fedora/CentOS, pero no es lo importante.

La guía servirá tanto para principiantes como para expertos en el tema, así que habrá comentarios, aunque más breves.

1. Servidor

  • instalamos knock-server:
    yum/dnf install knock-server

  • lo configuramos (por ejemplo, para 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 una hora. Por si acaso...

  • /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
    ...

  • avanzamos:

    service iptables restart
    service knockd start

  • se puede añadir RDP para el Windows Server virtual que se ejecute internamente (/etc/knockd.conf; el nombre de la interfaz se puede ajustar según se desee):

    [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 rastreando todos nuestros toques del cliente en el servidor con el comando iptables -S.

2. Guía sobre tropiezos

knockd.conf:

En los manuales también hay de todo (aunque no es seguro), sin embargo, knockd es bastante parco en mensajes, por lo que se debe tener mucho cuidado.

  • versión
    En los repositorios de Fedora/CentOS, la última versión de knockd hoy es la 0.63. Quien quiera UDP, busque los paquetes 0.70.
  • interface
    En la configuración predeterminada de Fedora/CentOS, esta línea no está presente. Se debe añadir manualmente, de lo contrario no funcionará.
  • timeout
    Aquí se puede ajustar a gusto. Necesitamos que el cliente tenga tiempo suficiente para todos los toques, y que el escáner de puertos se vea obstaculizado (ya que escanearán el 146%).
  • start/stop/command.
    Si hay un solo comando, es command; si hay dos, entonces start_command+stop_command.
    Si te equivocas, knockd guardará silencio, pero no funcionará.
  • proto
    Teóricamente se puede usar UDP. En la práctica, mezclaba tcp y udp, y un cliente desde la playa en Bali solo pudo abrir su puerta después de cinco intentos. Porque TCP llegó cuando debía, pero UDP — no es seguro. Pero eso es cuestión de preferencias, de nuevo.
  • sequence
    Las trampas implícitas radican en que las secuencias no deben cruzarse... cómo decirlo...

Por ejemplo, así:

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

Por el golpe 11111 open esperará el siguiente golpe en 22222. Sin embargo, con este (22222) golpe comenzará a funcionar close y todo se romperá. Esto depende también del delay del cliente. Así es la vida ©.

iptables

Si en /etc/sysconfig/iptables esto:

*nat
:PREROUTING ACCEPT [0:0]

no nos molesta particularmente, entonces esto:

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

sí que molesta.

Dado que knockd añade reglas al final de la cadena INPUT, acabaremos con un rechazo.

Deshabilitar este rechazo es abrir la máquina a todos los vientos.

Para no complicarnos con iptables sobre qué poner antes de qué (como la gente sugiere), hagámoslo más simple:

  • por defecto en CentOS/Fedora la primera regla («lo que no está prohibido está permitido») será reemplazada por su opuesta,
  • y eliminaremos la última regla.

Al final debería resultar en:

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

Claro, podría hacer REJECT en lugar de DROP, pero con DROP los bots vivirán más felices.

3. Cliente

Aquí es donde se pone más interesante (desde mi punto de vista), ya que hay que trabajar no solo desde cualquier playa, sino también desde cualquier dispositivo.

En principio, varios clientes están listados en el sitio web el proyecto, pero eso es de la misma serie de «en internet hay de todo». Por eso enumero lo que tengo aquí y ahora en mis manos.

Al elegir un cliente, es necesario asegurarse de que soporte la opción de delay entre paquetes. Sí, cada playa es diferente y 100 megabits no garantizan que los paquetes lleguen en el orden correcto y a tiempo desde este lugar.

Y sí — al configurar el cliente, debes ajustar el delay tú mismo. Demasiado timeout — los bots atacarán, poco — el cliente no alcanzará. Mucho delay — el cliente no alcanzará o habrá conflictos de intento (ver «trampas»), poco — los paquetes se perderán en internet.

Con timeout=5s, un retraso de delay=100..500ms es una opción totalmente funcional.

Windows

Por muy extraño que suene, encontrar un cliente knock claro para esta plataforma es bastante no trivial. Uno que sea CLI, que soporte delay, TCP — y sin adornos.

Como opción, se puede intentar esto. Parece que mi Google no es muy bueno.

Linux

Aquí todo es simple:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

Lo más fácil es instalar el puerto desde homebrew:
brew install knock
y crear los archivos por lotes de comandos que necesites:

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

iOS

Una opción funcional es KnockOnD (gratuito, desde la tienda).

Android

«Knock on Ports». No es publicidad, simplemente funciona. Y los desarrolladores son bastante receptivos.

P.D. markdown en Habra, claro, que Dios le dé salud algún día...

UPD1: gracias a una buena persona apareció un cliente funcional para Windows.
UPD2: otra buena persona recordó que agregar nuevas reglas al final de iptables no siempre es útil. Pero — depende.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster