Tiem, kam jānodrošina piekļuve saviem serveriem no jebkuras vietas pasaulē, izmantojot SSH/RDP/citu — neliela RTFM/krāpšanās.
Mums jāiztiek bez VPN un citiem zvaniem un svilpieniem, no jebkuras pie rokas esošas ierīces.
Un lai nebūtu pārāk daudz jāvingro ar serveri.
Viss, kas jums tam nepieciešams, ir , taisnas rokas un 5 minūtes darba.
“Viss ir internetā,” protams (pat internetā) ), bet, runājot par konkrētu ieviešanu, viss sākas tieši tur...
Praktizēsimies, izmantojot Fedora kā piemēru.CentOS, bet tam nav nozīmes.
Šī apkrāptu lapa ir piemērota gan iesācējiem, gan pieredzējušiem ekspertiem, tāpēc būs daži komentāri, taču tie būs īsi.
1. Serveris
mēs instalējam knock-serveri:
yum/dnf install knock-serverMēs to konfigurējam (piemēram, 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"Atvēršanas" daļa ir iestatīta tā, lai tā automātiski aizvērtos pēc 1 stundas. Nekad nevar zināt...
/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 ...uz priekšu:
service iptables restart service knockd startVarat pievienot RDP virtuālajai mašīnai, kas darbojas iekšpusē Windows Server (/etc/knockd.conf; aizstājiet saskarnes nosaukumu pēc garšas):
[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.2Mēs izsekojam visus mūsu sitienus no klienta serverī ar komandu
iptables -S.
2. Grābekļa lietošanas ceļvedis
knockd.conf:
Mangā arī ir viss (bet tas nav precīzi), bet knockd ir diezgan skops puisis ar ziņojumiem, tāpēc jābūt ļoti uzmanīgiem.
- versija
Fedora repozitorijos/CentOS Jaunākais šodienas kritums ir 0.63. Tiem, kas vēlas UDP, jāmeklē 0.70 paketes. - saskarne
Fedora noklusējuma konfigurācijā/CentOS šī līnija nēPievienojiet ar rokām, pretējā gadījumā tas nedarbosies. - taimautu
Tas ir personīgo preferenču jautājums. Klientam ir jābūt pietiekami daudz laika, lai pabeigtu visas nepieciešamās darbības, un portu skenera robotam vajadzētu neizdoties (un 146% no tiem skenēs). - sākt/apturēt/komanda.
Ja ir viena komanda, tad komanda; ja ir divas, tad start_command+stop_command.
Ja pieļaujat kļūdu, knockd klusēs, bet nedarbosies. - tāpēc
Teorētiski varētu izmantot UDP. Praksē es kombinēju TCP un UDP, un klients Bali pludmalē varēja atvērt vārtus tikai ar piekto mēģinājumu. Jo TCP piegādāja laikā, savukārt UDP netiek garantēts. Bet atkal, tas ir gaumes jautājums. - secība
Slēptais āķis ir tāds, ka secības nedrīkst krustoties... kā lai es to pasaku...
Piemēram, šis:
open: 11111,22222,33333
close: 22222,11111,33333Autors: kick 11111 atvērt gaidīs nākamo sitienu 22222. Tomēr šajā (22222) sitienā tas sāks darboties. aizvērt un viss sabojāsies. Tas ir atkarīgs no klienta kavēšanās, cita starpā. Tā tas ir ©.
iptables
Ja failā /etc/sysconfig/iptables ir šis:
*nat
:PREROUTING ACCEPT [0:0]tas mūs īsti neuztrauc, tāpēc lūk, kas:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedTas gan traucē.
Tā kā knockd pievieno noteikumus INPUT ķēdes beigās, mēs saņemam noraidījumu.
Un šīs atgrūšanas izslēgšana nozīmē automašīnas atvēršanu visiem vējiem.
Lai nejauktos ar iptables, ko un kur likt pirms kā (piemēram, šādi) (Viņi iesaka) padarīsim to vienkāršāku:
- noklusējuma в CentOSFedora pirmais noteikums (“kas nav aizliegts, ir atļauts”) tiks aizstāts ar pretējo,
- un mēs atceļam pēdējo noteikumu.
Rezultātā jābūt:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedProtams, DROP vietā var izmantot REJECT, taču DROP padarīs robotiem dzīvi jautrāku.
3. Klients
Šeit tas kļūst visinteresantākais (no mana viedokļa), jo jāstrādā ne tikai no jebkuras pludmales, bet arī no jebkuras ierīces.
Principā vairāki klienti ir uzskaitīti vietnē projekts, bet tas ir gluži kā "viss ir internetā". Tāpēc uzskaitīšu, kas man šobrīd darbojas.
Izvēloties klientu, pārliecinieties, vai tas atbalsta aizkaves opciju starp paketēm. Jā, katra pludmale ir atšķirīga, un 100 megabiti negarantē, ka paketes pienāks pareizajā secībā pareizajā laikā no dotās vietas.
Un jā, iestatot klientu, jums pašam jāizvēlas aizkave. Pārāk liels taimauts un boti uzbruks; pārāk mazs un klients nepaspēs laikā. Pārāk liela aizkave un klients nepaspēs laikā vai arī radīsies tērzēšanas konflikts (skatīt "Rake"); pārāk mazs un paketes pazudīs internetā.
Ar taimautu=5s, pilnībā funkcionējoša opcija ir aizkave=100..500ms
Windows
Lai cik smieklīgi tas neizklausītos, atrast pienācīgu "knock" klientu šai platformai Google ir diezgan sarežģīti. Tādu ar komandrindas saskarni, latentuma atbalstu, TCP atbalstu un bez liekām ekstras.
Varat arī izmēģināt Acīmredzot mans Google nav gluži viegls uzdevums.
Linux
Šeit viss ir vienkārši:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333MacOS
Vienkāršākais veids ir instalēt portu no homebrew:
brew install knock
un uzzīmējiet sev nepieciešamos komandrindas pakešfailus šādi:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Darbojoša opcija ir KnockOnD (bez maksas, no veikala).
Android
"Knock on Ports." Tā nav reklāma, tā vienkārši darbojas. Un izstrādātāji ir diezgan atsaucīgi.
P.S. Markdown Habr, protams, lai Dievs tam kādreiz dod veselību...
UPD1: Pateicoties atrasts saskaņā ar Windows.
UPD2: vēl viens Es viņam atgādināju, ka jaunu noteikumu pievienošana iptables beigās ne vienmēr ir noderīga. Bet — tas atkarīgs no situācijas.
Avots: www.habr.com
