Voor degenen die zichzelf toegang willen bieden tot hun servers, waar ook ter wereld, via SSH/RDP/een andere optie — een kleine RTFM/handleiding.
We willen zonder VPN en andere fratsen werken, met elk apparaat binnen handbereik.
En zodat we niet teveel hoeven te rommelen met de server.
Alles wat daarvoor nodig is — , vaardige handen en 5 minuten werk.
"Op internet staat alles", dat klopt (zelfs op ), maar als het aankomt op concrete implementaties — daar begint het...
We zullen oefenen met Fedora/CentOS, maar dat maakt niet uit.
De handleiding is geschikt voor zowel beginners als doorgewinterde mensen, dus er zullen opmerkingen zijn, maar korter.
1. Server
installeer knock-server:
yum/dnf install knock-serverstel het in (bijvoorbeeld op 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"Het" openende deel is ingesteld op automatisch sluiten na 1 uur. 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 ...vooruit:
service iptables restart service knockd startje kunt RDP toevoegen aan een draaiende virtuele Windows Server (/etc/knockd.conf; gebruik de interface naam die je wilt):
[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 volgen al onze clientpings op de server met het commando
iptables -S.
2. Gids door de struikels
knockd.conf:
In de manual staat ook alles (maar dat is niet zeker), echter knockd is een behoorlijk spaarzame vriend wat betreft berichten, dus wees extra aandachtig.
- versie
In de repositories van Fedora/CentOS is de laatste knockd versie vandaag — 0.63. Wie UDP wil — zoek naar pakketten 0.70. - interface
In de standaardconfiguratie van Fedora/CentOS staat deze regel ontbreekt. Handmatig toevoegen, anders werkt het niet. - timeout
Hier zelf kiezen wat je wilt. Het moet zo zijn dat de client voldoende tijd heeft voor alle pings — en dat de bot-poortscanner het moeilijk krijgt (want ze zullen 146% scannen). - start/stop/command.
Als er één team is, dan command, als er twee zijn, dan start_command+stop_command.
Als je een fout maakt, zal knockd zwijgen, maar niet werken. - proto
In theorie kun je UDP gebruiken. In de praktijk heb ik tcp en udp gemengd, en de klant op het strand in Bali kon de poort pas openen na de vijfde poging. Want TCP kwam aan wanneer dat moest, maar UDP is niet zeker. Maar dat is weer een kwestie van smaak. - sequence
De onzichtbare valkuil is dat de sequenties elkaar niet mogen overlappen... hoe zeg je dat...
Bijvoorbeeld, zo:
open: 11111,22222,33333
close: 22222,11111,33333Bij een schoppende 11111 open zal hij wachten op de volgende schoppende op 22222. Echter, bij deze (22222) schoppende zal hij beginnen met werken sluiten en alles zal kapotgaan. Dit hangt ook af van de vertraging van de client. Zo gaat dat ©.
iptables
Als dit in /etc/sysconfig/iptables staat:
*nat
:PREROUTING ACCEPT [0:0]doet ons weinig pijn, dan is dit:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedtoch hinderlijk.
Aangezien knockd regels aan het einde van de INPUT-keten toevoegt, zullen we reject krijgen.
En dit reject uitschakelen betekent dat je de machine aan alle winden blootstelt.
Om niet te ergeren aan iptables wat waar voor wat moet komen (zoals mensen de standaard
- in CentOS/Fedora de eerste regel (‘wat niet verboden is, is toegestaan’) vervangen door het tegenovergestelde, en de laatste regel verwijderen.
- Uiteindelijk zou het er als volgt uit moeten zien:
*filter :INPUT DROP [0:0] ... #-A INPUT -j REJECT --reject-with icmp-host-prohibited
Je kunt natuurlijk in plaats van DROP ook REJECT doen, maar met DROP hebben bots een beter leven.3. Klant
Dit is het meest interessante deel (tenzij je mij vraagt), omdat je niet alleen vanaf elk strand moet kunnen werken, maar ook vanaf elk apparaat.
In principe zijn een aantal klanten vermeld op
het project, maar dat valt ook in de categorie 'alles is te vinden op internet'. Daarom zal ik noemen wat hier en nu bij mij werkt. Bij het kiezen van een klant moet je ervoor zorgen dat deze de optie delay tussen de pakketten ondersteunt. Ja, het strand is het strand, maar 100 megabit garandeert geen correcte volgorde van pk's op het juiste moment vanuit deze locatie.
En ja — bij het configureren van de client moet je de delay zelf afstemmen. Te veel timeout — bots vallen aan, te weinig — de klant kan niet bijbenen. Te veel delay — de klant kan niet bijbenen of er zijn conflicten van schoppen (zie 'vallen'), te weinig — pakketten dwalen af in het internet.
Bij timeout=5s is delay=100..500ms een prima werkbare optie.
Hoe vreemd het ook klinkt, het is vrij moeilijk om een duidelijke knock-client voor dit platform te vinden. Een die CLI ondersteunt, delay heeft, TCP — en zonder tierelantijnen.
Windows
Het is moeilijk te geloven, maar een duidelijke knock-client voor dit platform vinden is best uitdagend. Eén die CLI ondersteunt, delay heeft, TCP — en zonder franjes.
Je kunt bijvoorbeeld proberen . Blijkbaar is mijn Google niet zo goed.
Linux
Hier is alles eenvoudig:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Het eenvoudigst is om de poort van homebrew te installeren:
brew install knock
en maak de benodigde batchbestanden zoals:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Een werkende optie is KnockOnD (gratis, uit de winkel).
Android
«Knock on Ports». Geen reclame, maar hij werkt gewoon. En de ontwikkelaars zijn behoorlijk responsief.
P.S. markdown op Habr, dat zal ooit wel goedkomen…
UPD1: dankzij is er een voor Windows.
UPD2: nog een herinnerde me eraan dat het niet altijd nuttig is om nieuwe regels aan het einde van iptables toe te voegen. Maar — het hangt ervan af.
Bron: habr.com
