FĂŒr diejenigen, die sich den Zugang zu ihren Servern von ĂŒberall auf der Welt per SSH/RDP/anderes sichern möchten â eine kleine RTFM/Hilfe.
Wir mĂŒssen ohne VPN und andere Spielereien auskommen, von jedem verfĂŒgbaren GerĂ€t.
Und so, dass man sich nicht zu sehr mit dem Server herumÀrgern muss.
Alles, was dazu nötig ist â , geschickte HĂ€nde und 5 Minuten Arbeit.
âIm Internet gibt es allesâ, natĂŒrlich (sogar auf ), aber wenn es auf die konkrete Umsetzung ankommt â dann gehtâs losâŠ
Wir ĂŒben am Beispiel von Fedora/CentOS, aber das ist nicht wichtig.
Die Hilfe eignet sich sowohl fĂŒr AnfĂ€nger als auch fĂŒr alte Hasen, daher wird es Kommentare geben, aber kĂŒrzer gehalten.
1. Server
installieren wir den knock-server:
yum/dnf install knock-serverkonfigurieren ihn (zum Beispiel fĂŒr 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 ACCEPTDer âöffnendeâ Teil ist so eingestellt, dass er sich nach 1 Stunde automatisch schlieĂt. Wer weiĂâŠ
/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 ...weiter:
service iptables restart service knockd startman kann RDP fĂŒr den virtuellen Windows Server hinzufĂŒgen ( /etc/knockd.conf; den Namen der Schnittstelle nach Belieben einsetzen):
[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.2Alle unsere Pings vom Client verfolgen wir auf dem Server mit dem Befehl
iptables -S.
2. Wegweiser durch die Fallstricke
knockd.conf:
In den Manpages steht auch alles (aber das ist ungenau), jedoch ist knockd ein recht geiziger Freund mit Nachrichten, daher sollte man sehr aufmerksam sein.
- Version
In den Repositories von Fedora/CentOS ist die neueste Version von knockd heute â 0.63. Wer UDP möchte â sucht nach Paketen 0.70. - interface
In der Standardkonfiguration von Fedora/CentOS fehlt diese Zeile komplett.Man muss sie manuell hinzufĂŒgen, sonst funktioniert es nicht. - timeout
Hier nach Geschmack anpassen. Es sollte genug Zeit fĂŒr den Client fĂŒr alle Pings geben â und der Bot-Port-Scanner sollte gestoppt werden (und scannen werden sie zu 146%). - start/stop/command.
Wenn das Team eins ist â dann command, wenn zwei â dann start_command+stop_command.
Wenn Sie einen Fehler machen â wird knockd schweigen, aber nicht funktionieren. - proto
Theoretisch kann man UDP verwenden. Praktisch habe ich tcp und udp gemischt, und ein Client am Strand in Bali konnte sein Tor nur beim fĂŒnften Mal öffnen. Denn TCP kommt an, wenn es muss, UDP â nicht unbedingt. Aber das ist Geschmackssache. - sequence
Die impliziten Fallstricke bestehen darin, dass Sequenzen sich nicht ĂŒberschneiden dĂŒrfen⊠wie soll ich das sagenâŠ
Zum Beispiel so:
open: 11111,22222,33333
close: 22222,11111,33333Beim Kick 11111 öffnen wird er auf den nĂ€chsten Kick bei 22222 warten. Aber bei diesem (22222) Kick wird er anfangen zu arbeiten schlieĂen und alles wird kaputtgehen. Das hĂ€ngt auch vom Delay des Clients ab. So sieht's aus ©.
iptables
Wenn in /etc/sysconfig/iptables das hier steht:
*nat
:PREROUTING ACCEPT [0:0]dann stört uns das nicht besonders, aber das hier:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedstört uns wirklich.
Da knockd Regeln am Ende der INPUT-Kette hinzufĂŒgt, werden wir eine Ablehnung erhalten.
Und diesen Ablehnung ausschalten â das wĂ€re es, die Maschine allen Winden auszusetzen.
Um nicht im iptables herumzuwĂŒhlen, was wohin vor was einzufĂŒgen (wie es vorschlagen) machen wir es einfacher:
- StandardmĂ€Ăig in CentOS/Fedora erster Regel (âwas nicht verboten ist, ist erlaubtâ) ersetzen wir durch das Gegenteil,
- und die letzte Regel entfernen wir.
Am Ende sollte es so aussehen:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedMan kann natĂŒrlich statt DROP auch REJECT machen, aber mit DROP wird es Bots leichter fallen.
3. Client
An dieser Stelle wird es am interessantesten (meiner Meinung nach), da man nicht nur von jedem Strand aus arbeiten muss, sondern auch von jedem GerÀt.
Viele Clients sind auf dem Projekt aufgelistet, aber das gehört zur Kategorie âim Internet gibtâs allesâ. Deshalb werde ich nur das auffĂŒhren, was ich hier und jetzt unter meinen HĂ€nden habe.
Bei der Auswahl eines Clients muss darauf geachtet werden, dass er die Option Delay zwischen den Paketen unterstĂŒtzt. Ja, Strand ist nicht gleich Strand und 100 Megabit garantieren nicht, dass die Pakete zur richtigen Zeit in der richtigen Reihenfolge von diesem Ort ankommen.
Und ja â bei der Konfiguration des Clients muss das Delay selbst angepasst werden. Zu viel Timeout â Bots werden angreifen, zu wenig â der Client hat keine Zeit. Zu viel Delay â der Client hat keine Zeit oder es kommt zu Konflikten bei den StöĂen (siehe âFallstrickeâ), zu wenig â die Pakete verirren sich im Internet.
Bei timeout=5s ist delay=100..500ms eine durchaus praktikable Option.
Windows
So lustig es auch klingt, aber es ist ziemlich untrivial, einen klaren Knock-Client fĂŒr diese Plattform zu finden. Einen, der CLI unterstĂŒtzt, Delay hat, TCP â und keine Schleifen.
Alternativ können Sie es versuchen . Offensichtlich ist mein Google nicht das Wahre.
Linux
Hier ist alles einfach:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Am einfachsten ist es, das Paket aus Homebrew zu installieren:
brew install knock
und die benötigten Batch-Dateien in dieser Art zu erstellen:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Eine funktionierende Variante ist KnockOnD (kostenlos, aus dem Store).
Android
âKnock on Portsâ. Keine Werbung, sondern es funktioniert einfach. Und die Entwickler sind recht reaktionsschnell.
P.S. Markdown auf Habr, nun ja, möge es ihm irgendwann gut gehenâŠ
UPD1: Dank wurde gefunden fĂŒr Windows.
UPD2: Noch ein hat erinnert, dass es nicht immer sinnvoll ist, neue Regeln ans Ende von iptables zu setzen. Aber - es kommt darauf an.
Quelle: habr.com
