Dicas e truques de Linux: servidor, abra-se

Para quem precisa garantir acesso aos seus servidores de qualquer lugar do mundo via SSH/RDP/outro — um pequeno RTFM/suporte.

Precisamos evitar VPNs e outras complicações, a partir de qualquer dispositivo ao alcance das mãos.

E que não seja necessário muito esforço com o servidor.

Tudo o que você precisa é de knockd, mãos ágeis e 5 minutos de trabalho.

"Na internet tem tudo", claro (até no Habr), mas quando se trata de uma implementação específica — é aí que começa...

Vamos praticar com o exemplo do Fedora/CentOS, mas isso não importa.

O suporte serve tanto para novatos quanto para especialistas, então haverá comentários, mas mais curtos.

1. Servidor

  • instale o knock-server:
    yum/dnf install knock-server

  • configure-o (por exemplo, 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

    "A parte de abertura" está configurada para fechar automaticamente após 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
    ...

  • em frente:

    service iptables restart
    service knockd start

  • pode-se adicionar RDP a um Windows Server virtual em execução ( /etc/knockd.conf; o nome da interface deve ser ajustado de acordo):

    [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

    Todos os nossos pings do cliente são monitorados no servidor com o comando iptables -S.

2. Um guia pelos obstáculos

knockd.conf:

Também tem tudo nos manuais (mas isso não é certo), no entanto, knockd — é bem econômico em mensagens, então é preciso ter bastante atenção.

  • versão
    Nos repositórios do Fedora/CentOS, a versão mais recente do knockd é 0.63. Quem quiser UDP — procure pacotes 0.70.
  • interface
    Na configuração padrão do Fedora/CentOS, esta linha é inexistente. Adicionar manualmente, caso contrário não vai funcionar.
  • timeout
    Aqui, escolha como preferir. É necessário que o cliente tenha tempo suficiente para todos os pings — e que o bot-escaner de portas não consiga (e vão tentar escanear 146%).
  • start/stop/command.
    Se a equipe for única — use command, se houver duas — use start_command+stop_command.
    Se você errar — o knockd ficará em silêncio, mas não funcionará.
  • proto
    Teoricamente, é possível usar UDP. Na prática, eu misturei tcp e udp, e um cliente na praia de Bali conseguiu abrir o portão apenas na quinta tentativa. Porque o TCP conseguiu chegar quando deveria, mas o UDP — nem sempre. Mas isso é uma questão de gosto, novamente.
  • sequence
    As armadilhas não explícitas são que as sequências não devem se sobrepor... como dizer isso...

Por exemplo, algo assim:

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

Pelo golpe 11111 open esperará pelo próximo golpe em 22222. No entanto, com esse (22222) golpe, começará a funcionar fechar e tudo quebrará. Isso depende também do atraso do cliente. Essas são as coisas ©.

iptables

Se em /etc/sysconfig/iptables tiver isso aqui:

*nat
:PREROUTING ACCEPT [0:0]

não nos atrapalha muito, mas isso aqui:

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

de fato atrapalha.

Como o knockd adiciona regras ao final da cadeia INPUT, receberemos reject.

Desabilitar esse reject — é como abrir a máquina a todos os ventos.

Para não complicar com iptables sobre onde inserir cada coisa (como algumas pessoas sugerem) faremos mais simples: default

  • no CentOS/Fedora a primeira regra (‘aquilo que não é proibido é permitido’) substituirá pela inversa, e a última regra será removida.
  • No final, deve ficar assim:

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

É possível, claro, em vez de DROP, ter REJECT, mas com DROP os bots terão uma vida mais fácil.

3. Cliente

Neste ponto, a parte mais interessante (na minha opinião), pois é necessário trabalhar não apenas de qualquer praia, mas também de qualquer dispositivo.

Em princípio, uma série de clientes estão listados no

projeto, mas isso é da mesma série de ‘tudo na internet existe’. Portanto, listarei o que aqui e agora funciona para mim. site Ao escolher um cliente, é necessário verificar se ele suporta a opção de atraso entre os pacotes. Sim, praia é diferente, e 100 megabits não garantem que os pacotes cheguem na ordem correta na hora certa deste lugar.

E sim — ao configurar o cliente, o atraso deve ser ajustado manualmente. Muito timeout — os bots atacarão, pouco — o cliente não terá tempo. Muito atraso — o cliente não terá tempo ou haverá conflitos de toques (veja ‘armadilhas’), pouco — os pacotes se perderão na internet.

Com timeout=5s, uma opção viável é delay=100..500ms

Por mais estranho que pareça, encontrar um cliente knock claro para esta plataforma é bastante não trivial. Um que seja CLI, suporte atraso, TCP — e sem firulas.

Windows

Как это ни смешно звучит, но нагуглить внятный knock-клиент под эту платформу довольно нетривиально. Такой, чтобы CLI, поддерживал delay, TCP — и без бантиков.

Uma opção é tentar isso aqui. Aparentemente meu Google não é bom.

Linux

Aqui tudo é simples:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

É mais fácil instalar o porta pelo homebrew:
brew install knock
e desenhar os scripts de comandos que você precisa:

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

iOS

Uma opção funcional — KnockOnD (gratuito, da loja).

Android

"Knock on Ports". Não é propaganda, mas funciona. E os desenvolvedores são bastante responsivos.

P.S. markdown no Habra, claro, que Deus lhe dê saúde algum dia...

UPD1: graças a uma boa pessoa encontramos um cliente funcional para Windows.
ATUALIZAÇÃO 2: mais uma boa pessoa lembrou que adicionar novas regras ao final do iptables nem sempre é útil. Mas — depende.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster