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 é
“Tudo está na Internet”, é claro (mesmo em
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
- 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
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
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
UPD2: Outro
Fonte: habr.com