Tiems, kuriems reikia suteikti sau, savo artimiesiems prieigą prie savo serverių iš bet kurios pasaulio vietos per SSH/RDP/kitą, nedidelį RTFM/spur.
Turime apsieiti be VPN ir kitų skambučių ir švilpukų iš bet kurio turimo įrenginio.
Ir kad nereikėtų per daug mankštintis su serveriu.
Viskas, ko jums reikia tam, yra
Žinoma, „viskas yra internete“ (netgi
Praktikuosime naudodami Fedora / CentOS kaip pavyzdį, bet tai nesvarbu.
Spuras tinka tiek pradedantiesiems, tiek šio klausimo žinovams, todėl komentarų bus, bet jie bus trumpesni.
1. Serveris
-
įdiegti knock-server:
yum/dnf install knock-server
-
sukonfigūruokite jį (pavyzdžiui, 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
„Atidarymo“ dalis nustatyta taip, kad automatiškai užsidarytų po 1 valandos. Niekada nežinai...
-
/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 ...
-
Persiųsti:
service iptables restart service knockd start
-
galite pridėti KPP prie virtualaus Windows serverio, besisukančio viduje (/etc/knockd.conf; pakeiskite sąsajos pavadinimą pagal savo skonį):
[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
Mes stebime visus savo kliento smūgius serveryje naudodami komandą
iptables -S
.
2. Grėblių vadovas
knockd.conf:
Manoje taip pat yra visko (bet tai netikslu), bet knockd yra gana šykštus žinučių draugas, todėl reikia būti labai atsargiems.
- versija
„Fedora“ / „CentOS“ saugyklose naujausias šios dienos „knockd“ yra 0.63. Kas nori UDP - ieškokite 0.70 paketų. - sąsaja
Numatytoje „Fedora“ / „CentOS“ konfigūracijoje ši eilutė ne. Pridėkite rankomis, kitaip neveiks. - laukimas
Čia galite pasirinkti pagal savo skonį. Būtina, kad klientas turėtų pakankamai laiko visiems smūgiams – ir prievado skaitytuvo botas suges (ir nuskaitys 146 proc.). - start/stop/command.
Jei yra viena komanda, tada komanda, jei yra dvi, tada start_command+stop_command.
Jei padarysite klaidą, knockd tylės, bet neveiks. - todėl
Teoriškai galima naudoti UDP. Praktikoje sumaišiau tcp ir udp, o klientas iš Balio paplūdimio tik penktą kartą sugebėjo atidaryti vartus. Kadangi TCP atvyko, kai reikėjo, bet UDP nėra faktas. Bet čia vėlgi skonio reikalas. - seka
Netiesioginis grėblys yra tas, kad sekos neturi susikirsti... kaip tai pasakyti...
Pavyzdžiui, tai:
open: 11111,22222,33333
close: 22222,11111,33333
Smūgis 11111 atidaryti lauks kito smūgio ties 22222. Tačiau po šio (22222) smūgio jis pradės veikti close ir viskas sugrius. Tai priklauso ir nuo kliento vėlavimo. Tokie dalykai ©.
iptables
Jei /etc/sysconfig/iptables tai yra:
*nat
:PREROUTING ACCEPT [0:0]
Mums tai tikrai netrukdo, todėl štai:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Tai trukdo.
Kadangi knockd prideda taisykles į INPUT grandinės pabaigą, gausime atmetimą.
O išjungti šį atmetimą reiškia atidaryti automobilį visiems vėjams.
Kad nepasiklystumėte iptables, ką įterpti prieš ką (pvz
- numatytas „CentOS“ / „Fedora“. pirmas taisyklė („kas nedraudžiama, tas leidžiama“) bus pakeista priešinga,
- ir pašaliname paskutinę taisyklę.
Rezultatas turėtų būti:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
Žinoma, vietoj DROP galite atlikti REJECT, bet su DROP robotams gyvenimas bus smagesnis.
3. Klientas
Ši vieta yra pati įdomiausia (mano požiūriu), nes dirbti reikia ne tik iš bet kokio paplūdimio, bet ir iš bet kurio įrenginio.
Iš esmės sąraše yra nurodyta keletas klientų
Renkantis klientą, turite įsitikinti, kad jis palaiko vėlavimo tarp paketų parinktį. Taip, yra skirtumų tarp paplūdimių ir 100 megabitų niekada negarantuoja, kad paketai iš tam tikros vietos atvyks reikiama tvarka tinkamu laiku.
Ir taip, steigiant klientą, vėlavimą reikia pasirinkti pačiam. Per daug laiko – robotai puls, per mažai – klientas neturės laiko. Per daug delsimo – klientas nespės laiku arba kils idiotų konfliktas (žr. „grėbliai“), per mažai – paketai pasimes internete.
Kai skirtas laikas = 5 s, delsa = 100...500 ms yra visiškai veikianti parinktis
Windows
Kad ir kaip juokingai tai skambėtų, „Google“ yra gana nebanalus šios platformos klientas. Toks, kad CLI palaiko delsą, TCP – ir be lankų.
Arba galite pabandyti
Linux
Čia viskas paprasta:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
Lengviausias būdas yra įdiegti prievadą iš namų brew:
brew install knock
ir nubrėžkite reikiamus paketinius failus tokioms komandoms kaip:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
"iOS"
Veikia KnockOnD (nemokama, iš parduotuvės).
Android
„Knock on Ports“ Ne reklama, bet tai tiesiog veikia. Ir kūrėjai gana reaguoja.
PS sumažinimas Habré, žinoma, Dievas palaimina jį kada nors...
UPD1: ačiū
UPD2: Kitas
Šaltinis: www.habr.com