Niille, joiden on tarjottava itselleen, läheisilleen pääsy palvelimiinsa mistä päin maailmaa tahansa SSH/RDP/muu kautta, pieni RTFM/spur.
Meidän on pärjättävä ilman VPN:ää ja muita kelloja ja pillejä miltä tahansa laitteelta.
Ja jotta sinun ei tarvitse harjoitella liikaa palvelimen kanssa.
Kaikki mitä tarvitset tähän on
"Kaikki on Internetissä" tietysti (myös
Harjoittelemme Fedora/CentOS:n käyttöä esimerkkinä, mutta sillä ei ole väliä.
Spur sopii sekä aloittelijoille että asiantuntijoille tässä asiassa, joten kommentteja tulee, mutta ne ovat lyhyempiä.
1. Palvelin
-
asenna knock-server:
yum/dnf install knock-server
-
määritä se (esimerkiksi ssh:ssa) - /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
Avausosa on asetettu sulkeutumaan automaattisesti 1 tunnin kuluttua. Ei sitä koskaan tiedä...
-
/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 ...
-
eteenpäin:
service iptables restart service knockd start
-
voit lisätä RDP:n virtuaaliseen Windows Serveriin, joka pyörii sisällä (/etc/knockd.conf; korvaa käyttöliittymän nimi makusi mukaan):
[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
Seuraamme kaikkia potkujamme asiakkaalta palvelimella komennolla
iptables -S
.
2. Opas haravoihin
knockd.conf:
Mana sisältää myös kaiken (mutta tämä on epätarkka), mutta knockd on ystävä, joka on melko niukka viesteissä, joten sinun on oltava erittäin varovainen.
- versio
Fedora/CentOS-varastoissa tämän päivän viimeisin koputus on 0.63. Kuka haluaa UDP:n - etsi 0.70 paketteja. - liitäntä
Fedora/CentOS-oletuskokoonpanossa tämä rivi ei. Lisää käsin, muuten se ei toimi. - aikakatkaisu
Täällä voit valita makusi mukaan. On välttämätöntä, että asiakkaalla on tarpeeksi aikaa kaikkiin potkuihin - ja porttiskanneribotti hajoaa (ja 146% skannaa). - käynnistys/pysäytys/komento.
Jos komentoja on yksi, niin komento, jos niitä on kaksi, niin start_command+stop_command.
Jos teet virheen, knockd pysyy hiljaa, mutta ei toimi. - siksi
Teoriassa UDP:tä voidaan käyttää. Käytännössä sekoitin tcp:n ja udp:n, ja asiakas Balin rannalta pystyi avaamaan portin vasta viidennen kerran. Koska TCP saapui tarvittaessa, mutta UDP ei ole tosiasia. Mutta tämä on taas makuasia. - järjestys
Implisiittinen rake on se, että sekvenssit eivät saa leikkiä... kuinka sen sanoisin...
Esimerkiksi tämä:
open: 11111,22222,33333
close: 22222,11111,33333
Potkulla 11111 avata odottaa seuraavaa potkua klo 22222. Kuitenkin tämän (22222) potkun jälkeen se alkaa toimia lähellä ja kaikki menee rikki. Tämä riippuu myös asiakkaan viiveestä. Sellaiset asiat ©.
iptables
Jos tiedostossa /etc/sysconfig/iptables tämä on:
*nat
:PREROUTING ACCEPT [0:0]
Se ei todellakaan haittaa meitä, joten tässä se on:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Se häiritsee.
Koska knockd lisää säännöt INPUT-ketjun loppuun, saamme hylkäämisen.
Ja tämän hylkäyksen kytkeminen pois päältä tarkoittaa auton avaamista kaikille tuulille.
Jotta et eksy iptablesiin, mitä ennen mitä tulee lisätä (kuten tämä
- oletuksena CentOS/Fedorassa ensimmäinen sääntö ("mikä ei ole kiellettyä on sallittua") korvataan päinvastoin,
- ja poistamme viimeisen säännön.
Tuloksena pitäisi olla:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
Voit tietysti tehdä hylkäämisen DROP:n sijaan, mutta DROP-toiminnolla elämä on hauskempaa boteille.
3. Asiakas
Tämä paikka on mielenkiintoisin (minun näkökulmastani), koska sinun ei tarvitse työskennellä vain miltä tahansa rannalta, vaan myös mistä tahansa laitteesta.
Periaatteessa listattuna on useita asiakkaita
Asiakasta valittaessa on varmistettava, että se tukee pakettien välistä viivevaihtoehtoa. Kyllä, rantojen välillä on eroja, ja 100 megabittiä ei koskaan taata, että paketit saapuvat oikeassa järjestyksessä oikeaan aikaan tietystä paikasta.
Ja kyllä, asiakasta perustaessasi sinun on valittava viive itse. Liian paljon aikakatkaisua - botit hyökkäävät, liian vähän - asiakkaalla ei ole aikaa. Liian paljon viivettä - asiakas ei ehdi ajoissa tai syntyy idioottien konflikti (katso "haravat"), liian vähän - paketit katoavat Internetiin.
Kun aikakatkaisu = 5 s, viive = 100...500 ms on täysin toimiva vaihtoehto
Windows
Huolimatta siitä, kuinka hauskalta se kuulostaa, Googlelle ei ole aivan triviaalia selkeä koputusasiakas tälle alustalle. Sellainen, että CLI tukee viivettä, TCP:tä - ja ilman jousia.
Vaihtoehtona voit kokeilla
Linux
Täällä se on yksinkertaista:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
Helpoin tapa on asentaa portti Homebrew'sta:
brew install knock
ja piirrä tarvittavat erätiedostot komennoille, kuten:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
iOS
Toimiva vaihtoehto on KnockOnD (ilmainen, kaupasta).
Android
"Knock on Ports" Ei mainontaa, mutta se vain toimii. Ja kehittäjät ovat melko reagoivia.
PS-merkintä Habrelle, tietysti, Jumala siunatkoon häntä jonain päivänä...
UPD1: kiitokset
UPD2: Toinen
Lähde: will.com