Dicas e truques do Linux: servidor, abra

Para aqueles que precisam fornecer a si mesmos, a seus entes queridos, acesso aos seus servidores de qualquer lugar do mundo via SSH/RDP/outro, um pequeno RTFM/spur.

Precisamos prescindir de VPN e outros recursos, de qualquer dispositivo disponível.

E para que você não precise se exercitar muito com o servidor.

Tudo que você precisa para isso é bateu, braços esticados e 5 minutos de trabalho.

“Tudo está na Internet”, é claro (mesmo em Habré), mas quando se trata de uma implementação específica, é aqui que tudo começa...

Praticaremos usando o Fedora/CentOS como exemplo, mas isso não importa.

O esporão é adequado tanto para iniciantes quanto para especialistas no assunto, portanto haverá comentários, mas serão mais curtos.

1. Servidor

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

  • configure-o (por exemplo, em 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 fechamento automático 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
    ...

  • avançar:

    service iptables restart
    service knockd start

  • você pode adicionar RDP ao Windows Server virtual girando dentro (/etc/knockd.conf; substitua o nome da interface de acordo com seu gosto):

    [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

    Rastreamos todos os nossos chutes do cliente no servidor com o comando iptables -S.

2. Guia para ancinhos

knockd.conf:

A mana também contém tudo (mas isso é impreciso), mas knockd é um amigo bastante mesquinho com mensagens, então você precisa ter muito cuidado.

  • versão
    Nos repositórios Fedora/CentOS, o último knockd de hoje é 0.63. Quem quer UDP - procure pacotes de 0.70.
  • interface
    Na configuração padrão do Fedora/CentOS esta linha Não. Adicione com as mãos, caso contrário não funcionará.
  • tempo limite
    Aqui você pode escolher de acordo com seu gosto. É necessário que o cliente tenha tempo suficiente para todos os chutes - e o bot do scanner de porta irá quebrar (e 146% fará a varredura).
  • iniciar/parar/comandar.
    Se houver um comando, então comando, se houver dois, então start_command+stop_command.
    Se você cometer um erro, o knockd permanecerá silencioso, mas não funcionará.
  • proto
    Teoricamente, o UDP pode ser usado. Na prática, misturei tcp e udp, e o cliente da praia de Bali só conseguiu abrir o portão pela quinta vez. Porque o TCP chegou quando necessário, mas o UDP não é um fato. Mas isso é uma questão de gosto, novamente.
  • seqüência
    O rake implícito é que as sequências não devem se cruzar... como dizer...

Por exemplo, isto:

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

Por chute 11111 aberto irá esperar pelo próximo chute em 22222. Porém, após esse chute (22222) ele começará a funcionar fechar e tudo vai quebrar. Isso também depende do atraso do cliente. Essas coisas ©.

iptables

Se estiver em /etc/sysconfig/iptables isto é:

*nat
:PREROUTING ACCEPT [0:0]

Isso realmente não nos incomoda, então aqui está:

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

Isso interfere.

Como o knockd adiciona regras ao final da cadeia INPUT, receberemos rejeição.

E desligar essa rejeição significa abrir o carro a todos os ventos.

Para não se perder no iptables o que inserir antes do quê (assim pessoas sugiro) vamos simplificar:

  • padrão no CentOS/Fedora primeiro a regra (“o que não é proibido é permitido”) será substituída pelo contrário,
  • e removemos a última regra.

O resultado deve ser:

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

Você pode, é claro, fazer REJECT em vez de DROP, mas com DROP a vida será mais divertida para os bots.

3. Cliente

Este lugar é o mais interessante (do meu ponto de vista), pois você precisa trabalhar não só de qualquer praia, mas também de qualquer dispositivo.

Em princípio, vários clientes estão listados em On-line projeto, mas este é da mesma série “tudo está na Internet”. Portanto, listarei o que está funcionando ao meu alcance aqui e agora.

Ao escolher um cliente, você precisa ter certeza de que ele suporta a opção de atraso entre pacotes. Sim, existem diferenças entre as praias e 100 megabits nunca garantem que os pacotes chegarão na ordem certa, na hora certa, de um determinado local.

E sim, ao configurar um cliente, você mesmo precisa selecionar o atraso. Muito tempo limite - os bots atacarão, muito pouco - o cliente não terá tempo. Muito atraso - o cliente não chegará a tempo ou haverá um conflito de idiotas (veja “rakes”), muito pouco - os pacotes se perderão na Internet.

Com timeout=5s, delay=100..500ms é uma opção totalmente funcional

Windows

Não importa o quão engraçado pareça, não é nada trivial para o Google um cliente claro para esta plataforma. Tal que a CLI suporte atraso, TCP - e sem arcos.

Como opção, você pode tentar isso está aqui. Aparentemente meu Google não é um bolo.

Linux

Tudo é simples aqui:

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

MacOS

A maneira mais fácil é instalar o port do homebrew:
brew install knock
e desenhe os arquivos em lote necessários para comandos como:

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

iOS

Uma opção funcional é o KnockOnD (gratuito, na loja).

Android

"Bata nas Portas" Não é publicidade, mas simplesmente funciona. E os desenvolvedores são bastante responsivos.

Desconto do PS em Habré, claro, que Deus o abençoe algum dia...

UPD1: graças a para uma boa pessoa encontrado cliente trabalhando sob o Windows.
UPD2: Outro boa pessoa me lembrou que colocar novas regras no final do iptables nem sempre é útil. Mas - depende.

Fonte: habr.com

Adicionar um comentário