For those who need to ensure access to their servers from anywhere in the world via SSH/RDP/other â a small RTFM/cheat sheet.
We need to do without VPNs and other frills, from any device at hand.
And so that we don't have to juggle too much with the server.
Everything you need for this is â , skilled hands, and 5 minutes of work.
"Everything is on the internet", of course (even at ), but when it comes to concrete implementation â that's where it all begins...
We'll practice using Fedora/CentOS as an example, but that's not important.
The cheat sheet is suitable for both beginners and veterans of the field, so there will be comments, but shorter.
1. Server
install knock-server:
yum/dnf install knock-serverconfigure it (for example on 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"The opening part" is set to auto-close in 1 hour. Just in case...
/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 ...go ahead:
service iptables restart service knockd startyou can add RDP on a virtual Windows Server running inside ( /etc/knockd.conf; substitute the interface name to your liking):
[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.2We keep track of all our client pings on the server with the command
iptables -S.
2. Guide to pitfalls
knockd.conf:
There's everything in the manuals too (but this is not certain), however, knockd is quite stingy with messages, so you need to be very attentive.
- version
In the Fedora/CentOS repositories, the latest knockd is 0.63. If you want UDP â look for version 0.70. - interface
In the default configuration of Fedora/CentOS this line manglende. You need to add it manually, otherwise it won't work. - timeout
Here you can choose as you like. It needs to be enough time for the client to make all pings â and to block the bot port scanner (and they will be scanning at 146%). - start/stop/command.
Hvis der er ét kommando - sÄ command, hvis der er to - sÄ start_command+stop_command.
Hvis du laver en fejl - vil knockd vĂŠre stille, men det vil ikke fungere. - proto
Teoretisk kan man bruge UDP. I praksis blandede jeg tcp og udp, og klienten fra stranden i Bali kunne kun Äbne sin port efter femte forsÞg. For TCP kom pakkerne, men for UDP var det ikke sikkert. Men det er en smagssag, igen. - sekvens
Implicit faldgruber er, at sekvenserne ikke mÄ overlappe... hvordan skal jeg sige det...
For eksempel, sÄdan her:
open: 11111,22222,33333
close: 22222,11111,33333Ved spark 11111 open vil vente pÄ nÊste spark ved 22222. Men ved dette (22222) spark vil det begynde at fungere close og alt vil gÄ i stykker. Dette afhÊnger ogsÄ af forsinkelsen fra klienten. SÄdan er det ©.
iptables
Hvis i /etc/sysconfig/iptables er dette her:
*nat
:PREROUTING ACCEPT [0:0]det generer os ikke meget, sÄ er dette her:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibiteddet gĂžr det ikke.
Da knockd tilfÞjer regler til slutningen af INPUT kÊden, vil vi fÄ reject.
At deaktivere dette reject - det ville vÊre at Äbne maskinen for alle vinde.
For ikke at blive forvirret med iptables om hvad der skal indsÊttes hvornÄr (som folk standard
- i CentOS/Fedora den fĂžrste regel ("hvad ikke er forbudt - er tilladt") vil vi ĂŠndre til det modsatte, og den sidste regel fjerner vi.
- Resultatet skal blive:
*filter :INPUT DROP [0:0] ... #-A INPUT -j REJECT --reject-with icmp-host-prohibited
Man kan selvfĂžlgelig gĂžre det til REJECT i stedet for DROP, men med DROP vil bots have det sjovere.3. Klient
Her bliver det mest interessante (efter min mening), da man skal kunne arbejde ikke kun fra enhver strand, men ogsÄ fra enhver enhed.
I princippet er en rÊkke klienter nÊvnt pÄ
projektet, men det er i samme kategori som "alt er pÄ internettet". Derfor vil jeg nÊvne det, som virker for mig lige nu. NÄr du vÊlger en klient, skal du sikre dig, at den understÞtter muligheder for forsinkelse mellem pakkerne. Ja, strande varierer, og 100 megabit garanterer ikke pakkerne ankommer i den rigtige rÊkkefÞlge pÄ det rigtige tidspunkt fra dette sted.
Og ja - nÄr du konfigurerer klienten, skal du justere forsinkelsen selv. For meget timeout - bots vil angribe, for lidt - klienten kan ikke fÞlge med. For meget delay - klienten kan ikke fÞlge med, eller der vil vÊre konflikter med gentagne spark (se "faldgruber"), for lidt - pakkerne vil fortsÊtte med at fare vild pÄ internettet.
Ved timeout=5s er delay=100..500ms en helt fungerende mulighed.
Som sjovt det lyder, men det er ret kompliceret at finde en ordentlig knock-klient til denne platform. En, der har CLI, understĂžtter delay, TCP - og uden unĂždvendige ting.
Windows
Det lyder mĂ„ske morsomt, men det er ret vanskeligt at finde en ordentlig knock-klient til denne platform. En, der er CLI-baseret, understĂžtter forsinkelse, TCP â og uden nogen unĂždvendige detaljer.
Som en mulighed kan man prÞve . à benbart er min Google ikke sÄ god.
Linux
Det er meget enkelt:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Det nemmeste er at installere porten fra homebrew:
brew install knock
og lave de nĂždvendige batchfiler i form af:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
En fungerende lĂžsning â KnockOnD (gratis, fra butikken).
Android
«Knock on Ports». Ikke reklame, det virker bare. Og udviklerne er ret lydhÞre.
P.S. Markdown pÄ Habré, mÄ lad os hÄbe, at det engang bliver bedre...
UPD1: takket vĂŠre blev fundet til Windows.
UPD2: endnu en mindede mig om, at det ikke altid er nyttigt at tilfĂžje nye regler til bunden af iptables. Men â det afhĂŠnger.
Kilde: habr.com
