Za one koji treba da sebi, svojim najmilijima, obezbede pristup svojim serverima sa bilo kog mesta u svetu preko SSH/RDP/ostalo, mali RTFM/spur.
Moramo bez VPN-a i drugih zvona i zviždaljki, s bilo kojeg uređaja pri ruci.
I tako da ne morate previše vježbati sa serverom.
Sve što vam treba za ovo je
„Sve je na internetu“, naravno (čak i na
Vježbat ćemo korištenje Fedora/CentOS-a kao primjera, ali to nije važno.
Spur je pogodan i za početnike i za stručnjake u ovoj stvari, tako da će biti komentara, ali će oni biti kraći.
1. Server
-
instaliraj knock-server:
yum/dnf install knock-server
-
konfigurirajte ga (na primjer na 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
Dio za "otvaranje" je podešen da se automatski zatvara nakon 1 sata. Nikad ne znaš...
-
/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 ...
-
naprijed:
service iptables restart service knockd start
-
možete dodati RDP virtuelnom Windows Serveru koji se vrti unutar (/etc/knockd.conf; zamijenite ime interfejsa po svom ukusu):
[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
Pratimo sve naše udarce od klijenta na serveru pomoću komande
iptables -S
.
2. Vodič za grablje
knockd.conf:
Mana takođe sadrži sve (ali ovo je netačno), ali knockd je prijatelj koji je dosta škrt sa porukama, tako da treba biti veoma oprezan.
- verzija
U Fedora/CentOS repozitorijumima, najnoviji knockd za danas je 0.63. Ko želi UDP - traži 0.70 paketa. - Interfejs
U podrazumevanoj Fedora/CentOS konfiguraciji ovaj red ne. Dodajte rukama, inače neće raditi. - vrijeme je isteklo
Ovdje možete birati po svom ukusu. Potrebno je da klijent ima dovoljno vremena za sve udarce - i bot skenera portova će se pokvariti (i 146% će skenirati). - start/stop/command.
Ako postoji jedna naredba, onda naredba, ako postoje dvije, onda start_command+stop_command.
Ako pogriješite, knockd će šutjeti, ali neće raditi. - stoga
Teoretski, UDP se može koristiti. U praksi sam pomiješao tcp i udp, a klijent sa plaže na Baliju uspio je otvoriti kapiju tek peti put. Jer TCP je stigao po potrebi, ali UDP nije činjenica. Ali ovo je opet stvar ukusa. - sekvenca
Implicitni rake je da sekvence ne bi trebalo da se presecaju... kako da se izrazim...
Na primjer, ovo:
open: 11111,22222,33333
close: 22222,11111,33333
Udarac 11111 otvoreno će čekati sljedeći udarac u 22222. Međutim, nakon ovog (22222) udarca će početi raditi blizu i sve će se slomiti. Ovo zavisi i od kašnjenja klijenta. Takve stvari ©.
iptables
Ako je u /etc/sysconfig/iptables ovo je:
*nat
:PREROUTING ACCEPT [0:0]
Nama to baš i ne smeta, pa evo:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Ometa se.
Pošto knockd dodaje pravila na kraj INPUT lanca, dobićemo odbijenicu.
A isključivanje ovog odbijanja znači otvaranje automobila svim vjetrovima.
Da se ne izgubite u iptablesima šta umetnuti pre čega (ovako
- default na CentOS/Fedora prvi pravilo ("ono što nije zabranjeno, dozvoljeno je") bit će zamijenjeno suprotnim,
- i uklanjamo posljednje pravilo.
Rezultat bi trebao biti:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
Možete, naravno, uraditi REJECT umjesto DROP, ali sa DROP život će biti zabavniji za botove.
3. Klijent
Ovo mjesto je najzanimljivije (s moje tačke gledišta), jer morate raditi ne samo sa bilo koje plaže, već i sa bilo kojeg uređaja.
U principu, određeni broj klijenata je na listi
Kada birate klijenta, morate biti sigurni da podržava opciju kašnjenja između paketa. Da, postoje razlike između plaža i 100 megabita nikada ne garantuje da će paketi stići u pravom redoslijedu u pravo vrijeme sa određene lokacije.
I da, kada postavljate klijenta, morate sami odabrati kašnjenje. Previše vremena čekanja - botovi će napasti, premalo - klijent neće imati vremena. Previše kašnjenja - klijent neće stići na vrijeme ili će doći do sukoba idiota (vidi "grablje"), premalo - paketi će se izgubiti na internetu.
Sa timeout=5s, kašnjenje=100..500ms je potpuno funkcionalna opcija
Windows
Bez obzira koliko to smiješno zvučalo, Googleu je sasvim netrivijalno da je jasan klijent za ovu platformu. Takav da CLI podržava kašnjenje, TCP - i bez lukova.
Alternativno, možete pokušati
Linux
Ovde je sve jednostavno:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
Najlakši način je da instalirate port iz homebrew-a:
brew install knock
i nacrtajte potrebne batch fajlove za komande kao što su:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
iOS
Radna opcija je KnockOnD (besplatno, iz trgovine).
android
"Kuck on Ports" Nije reklama, ali jednostavno funkcionira. A programeri su prilično osjetljivi.
PS smanjenje na Habréu, naravno, Bog ga blagoslovio jednog dana...
UPD1: Hvala za
UPD2: Drugi
izvor: www.habr.com