Need for secure access to your servers from anywhere in the world via SSH/RDP/other methods â a handy RTFM/guide.
We aim to avoid VPNs and other complexities, using any device at hand.
And to ensure that managing the server isn't too cumbersome.
All you need for this is â , skilled hands, and 5 minutes of effort.
âEverything is on the internet,â of course (even on ), but when it comes to a specific implementation â thatâs where the trouble beginsâŠ
We will practice using Fedora/CentOS as an example, but it doesnât really matter.
This guide is suited for both newcomers and seasoned experts, so there will be comments, but shorter.
1. Server
let's install knock-server:
yum/dnf install knock-serverconfigure it (for example, for 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 ACCEPTThe 'opening' part is set to auto-close after 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 ...edasi:
service iptables restart service knockd startvÔid lisada RDP pöörlevasse virtuaalsesse Windows Serverisse (/etc/knockd.conf; liidese nimi vastavalt soovile):
[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.2KÀivitasime kÔik meie pinged kliendilt serveris kÀsuga
iptables -S.
2. DĆŸungli teejuht
knockd.conf:
Manuaalid on olemas (aga see pole tĂ€pne), kuid knockd on ĂŒsna tagasihoidlik teateid andes, seega tuleb olla vĂ€ga tĂ€helepanelik.
- versioon
Fedora/CentOS hetkese seisuga on viimane knockd versioon 0.63. Kes soovib UDP-d, otsige pakette 0.70. - liides
Fedora/CentOS vaikimisi konfiguratsioonis on see rida on puudub. Lisa kÀsitsi, muidu ei hakka tööle. - ajakava
Siit leiate enda maitsele sobivad variandid. Oluline on, et kliendil oleks aega kĂ”ikide nullide jaoks â ja et portide skaneerimise robot kokku ei jooksuks (skaneeritakse 146%). - start/stop/command.
Kui kĂ€sky on ĂŒks â siis command, kui kaks â siis start_command+stop_command.
Kui eksite â knockd vaikib, kuid ei tööta. - proto
Teoreetiliselt on vĂ”imalik kasutada UDP-d. Praktikas segasin ma TCP-d ja UDP-d, ja klient Bali rannalt suutis oma vĂ€rava avada alles viiendal katsel. Sest TCP jĂ”udis kohale, kui vaja, kuid UDP â ei pruugi. Aga see on maitse kĂŒsimus, jĂ€lle. - sequence
Karm tĂ”de on see, et jĂ€rjestused ei tohi kattuda⊠kuidas nĂŒĂŒd öeldaâŠ
NĂ€iteks midagi sellist:
open: 11111,22222,33333
close: 22222,11111,3333311111 nulliga open ootab jÀrgmist nulli 22222. Siiski, selle (22222) nulliga hakkab tööle close ja kÔik lÀheb katki. See sÔltub ka kliendi viivitusest. Selline on elu ©.
iptables
Kui /etc/sysconfig/iptables on selline:
*nat
:PREROUTING ACCEPT [0:0]ei sega meid eriti, siis see:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedsegab kĂŒll.
Kuna knockd lisab reegleid INPUT ahela lÔppu, saame reject.
Ja selle reject'i vĂ€ljalĂŒlitamine â see avab masina tuulele.
Ettei peaksime pelgalt iptables'i nÀppima, kui kuhu ja mida sisestada (nagu inimesed soovitavad), teeme asja lihtsamaks: pakuvad)
- vaikimisi CentOSi/Fedora esimene reegel ("mis pole keelatud, on lubatud") asendame vastupidisega,
- ja viimane reegel eemaldame.
Tulemuseks peaks olema:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedMuidugi vÔib DROPi asemel kasutada REJECTi, kuid DROPiga saavad robotid lÔbusamalt hakkama.
3. Klient
Siin on huvitav osa (minu arvates), kuna tuleb töötada mitte ainult igalt rannalt, vaid ka igalt seadmel.
PÔhimÔtteliselt on mitu klienti loetletud projektis, kuid see kuulub kategooriasse "interneti teab kÔik". SeetÔttu loetlen selle, mis on praegu minu kÀeulatuses toimiv.
Kliendi valimisel on oluline kontrollida, et see toetaks pakettide vahel viivituse (delay) vÔimalust. Jah, rand on erinev ja 100 megabitti ei garanteeri pakettide jÔudmist Ôiges jÀrjekorras Ôigel ajal sellest kohast.
Ja jah â kliendi viivituse seadistamine tuleb iseseisvalt kohandada. Liigne timeout â robotid rĂŒndavad, liiga vĂ€he â klient ei jĂ”ua hakkama. Liigne viivitus â klient ei jĂ”ua vĂ”i tekib konflikt (vt "trikk"), liiga vĂ€he â paketid eksivad internetis.
Timeout=5s on ĂŒsna töötav variant delay=100..500ms
Windows
Kuidas see ka ei kĂ”laks, on mĂ”istliku knock-kliendi leidmine selle platvormi jaoks ĂŒsna keeruline. Selline, mis toetab CLI, delay, TCP â ja ilma igasuguste lisanditeta.
VÔib proovida . Tundub, et minu Google ei tööta hÀsti.
Linux
Siin on kÔik lihtne:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Lihtsaim on paigaldada port homebrew'st:
brew install knock
ja joonistada endale vajalikud kÀskude skriptid sellise kujuga:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Töötav variant â KnockOnD (tasuta, poest).
Android
«Knock on Ports». Ei ole reklaam, aga lihtsalt see töötab. Ja arendajad on piisavalt vastutulelikud.
P.S. markdown Hubis, muidugi, jumal tead, kas see kunagi paraneb...
UPD1: tÀnu leiti Windowsi jaoks.
UPD2: veel ĂŒks meenis, et uute reeglite lĂ”ppu iptables'i lisamine ei ole alati kasulik. Aga â see sĂ”ltub.
Allikas: habr.com
