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 , mãos ágeis e 5 minutos de trabalho.
"Na internet tem tudo", claro (até no ), 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-serverconfigure-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 startpode-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.2Todos 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,33333Pelo 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-prohibitedde 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 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. 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 . Aparentemente meu Google não é bom.
Linux
Aqui tudo é simples:
dnf install knock -y
knock -d 11111 22222 33333MacOS
É 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 33333iOS
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 encontramos para Windows.
ATUALIZAÇÃO 2: mais uma lembrou que adicionar novas regras ao final do iptables nem sempre é útil. Mas — depende.
Fonte: habr.com
