Aqueles que precisam fornecer a si mesmos, amados, acesso a seus servidores de qualquer lugar do mundo via SSH / RDP / de outra forma - um pequeno RTFM / estímulo.
Precisamos ficar sem VPN e outros sinos e assobios, de qualquer dispositivo disponível.
E para que o servidor não se exercite muito.
Tudo que você precisa é batido , braços retos e 5 minutos de trabalho.
"Está tudo na Internet", é claro (mesmo em Habré ), mas quando se trata de uma implementação específica, começa ...
Vamos nos exercitar no exemplo do Fedora / CentOS, mas isso não importa.
O estímulo será adequado tanto para iniciantes quanto para o bisonte deste negócio, portanto haverá comentários, mas mais curtos.
1. Servidor
colocar knock-server:
yum/dnf install knock-server
configure-o (por exemplo no 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 "abertura" está definida para fechar automaticamente após 1 hora. Você nunca 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 ...
encaminhar:
service iptables restart service knockd start
você pode adicionar o RDP ao Windows Server virtual girando dentro (/etc/knockd.conf; nomeie a interface ao 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
Todos os nossos pontapés do cliente são monitorados no servidor pelo comando iptables -S
.
2. Guia de Rake
knockd.conf:
Tudo está no homem também (mas isso é impreciso), por mais que seja um camarada bastante mesquinho com mensagens, você precisa ter muito cuidado.
- versão
Nos repositórios do Fedora / CentOS, o número extremo de hoje é de 0,63. Quem quer UDP - procure pacotes de 0,70. - interface
Na configuração padrão do Fedora / CentOS, esta linha está ausente . Adicione à mão, caso contrário não funcionará. - timeout
Aqui para escolher a provar. É necessário que o cliente tenha tempo suficiente para todos os pontapés - e o bot-scanner das portas será interrompido (e 146% a digitalizará). - iniciar / parar / comando.
Se o comando for um - então comando, se dois - então start_command + stop_command.
Se você cometer um erro, o knockd permanecerá silencioso, mas não funcionará. - proto
Teoricamente, você pode usar o UDP. Na prática, misturei tcp e udp, e um cliente da praia de Bali conseguiu abrir um portão apenas pela quinta vez. Para TCP voou quando necessário, e UDP não é um fato. Mas isso é uma questão de gosto, novamente. - sequência
O rake implícito é que as seqüências não devem se sobrepor ... como dizê-lo ...
Por exemplo, isto:
open: 11111,22222,33333 close: 22222,11111,33333
O chute aberto 11111 aguardará o próximo chute em 22222. No entanto, esse chute (22222) começará a funcionar próximo e tudo vai quebrar. Depende do atraso do cliente também. Tais coisas ©.
iptables
Se em / etc / sysconfig / iptables, é este:
*nat :PREROUTING ACCEPT [0:0]
não nos incomoda, então aqui está:
*filter :INPUT ACCEPT [0:0] ... -A INPUT -j REJECT --reject-with icmp-host-prohibited
Taki interfere.
Como o knockd adiciona regras ao final da cadeia INPUT, somos rejeitados.
E desligar essa rejeição é abrir o carro para todos os ventos.
Para não entrar no iptables, onde colocar algo antes (como as pessoas sugerem), facilitaremos:
- Por padrão, no CentOS / Fedora, a primeira regra ("o que não é proibido - permitido") é substituída pelo contrário,
- e remova a última regra.
O resultado deve ser:
*filter :INPUT DROP [0:0] ... #-A INPUT -j REJECT --reject-with icmp-host-prohibited
Obviamente, você pode fazer REJECT em vez de DROP, mas com DROP, os bots se divertem mais.
3. Cliente
Neste lugar o mais interessante (do meu ponto de vista), já que você precisa trabalhar não apenas de qualquer praia, mas também de qualquer dispositivo.
Em princípio, vários clientes estão listados no site do projeto, mas isso é da mesma série "está tudo na Internet". Portanto, vou listar o que funciona aqui e agora ao meu alcance.
Ao escolher um cliente, você deve garantir que ele ofereça suporte à opção de atraso entre pacotes. Sim, a praia e a disputa para a praia e 100 megabits nunca garantem que os pacotes cheguem na ordem certa e na hora certa a partir deste local.
E sim - ao configurar o cliente, o atraso deve ser selecionado independentemente. Muito tempo limite - os bots atacam um pouco - o cliente não chega a tempo. Há muito atraso - o cliente não chegará a tempo ou haverá um conflito de idiotas (consulte "rake"), insuficiente - os pacotes entrarão novamente na Internet.
Com timeout = 5s, o atraso da opção totalmente funcional = 100..500ms
Windows
Não importa o quão ridículo isso pareça, mas pesquisar no Google um cliente de bate-papo distinto para essa plataforma não é trivial. Tal que a CLI suporta atraso, TCP - e sem curvas.
Como opção, você pode tentar 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 é colocar a porta do homebrew:
brew install knock
e desenhe para si mesmo camisas de corpo Comandantes do formulário:
#!bin/sh knock -d <delay> <dst_ip> 11111 22222 33333
iOS
A opção de trabalho é KnockOnD (gratuito, da loja).
Android
"Bata nas portas". Não anunciando, mas apenas trabalhando. E os desenvolvedores são bastante responsivos.
PS remarcação em Habr, é claro, Deus o abençoe um dia ...
UPD1 : graças a uma boa pessoa, foi encontrado um cliente funcional para Windows.
UPD2 : outra pessoa boa lembrou que colocar novas regras no final do iptables nem sempre é útil. Mas - depende.