Kako uporabiti Port Knocking za zaščito storitve SSH v Linuxu


Port Knocking je izvrstna tehnika nadzora dostopa do vrat z dovoljenjem samo zakonitim uporabnikom dostop do storitve, ki se izvaja na strežniku. Deluje tako, da ob pravilnem zaporedju poskusov povezave požarni zid z veseljem odpre vrata, ki so bila zaprta.

Logika za trkanje vrat je zavarovati storitev SSH. Za demonstracijske namene bomo uporabili Ubuntu 18.04.

1. korak: Namestite in konfigurirajte knockd

Če želite začeti, se prijavite v svoj sistem Linux in namestite demon knockd, kot je prikazano.

$ sudo apt install knockd

Ko je nameščen, odprite konfiguracijo knockd.conf z urejevalnikom besedil v ukazni vrstici vim.

$ sudo vim /etc/knockd.conf

Privzeta konfiguracijska datoteka je prikazana na naslednji način.

V razdelku [openSSH] moramo spremeniti privzeto zaporedje trkanja – 7000,8000,9000 – v nekaj drugega. To je zato, ker so te vrednosti že znane in lahko ogrozijo varnost vašega sistema.

Za namene testiranja smo vrednosti nastavili na 10005, 10006, 10007. To je zaporedje, ki bo uporabljeno za odpiranje vrat SSH iz odjemalskega sistema.

V tretji vrstici – začenši z ukazom, spremenite -A v -I tik za ukazom /sbin/iptables in pred INPUT .

In nazadnje, v razdelku [closeSSH] ponovno spremenite privzeto zaporedje na želeno izbiro. To je zaporedje, ki bo uporabljeno za zapiranje povezave SSH, ko bo uporabnik končal in se odjavil iz strežnika.

Tukaj je naša popolna konfiguracija.

Ko končate, shranite spremembe in zapustite.

Druga konfiguracija, ki jo moramo spremeniti, je /etc/default/knockd. Še enkrat ga odprite z urejevalnikom besedil.

$ sudo vim /etc/default/knockd

Poiščite vrstico START_KNOCKD=0. Odkomentirajte ga in nastavite vrednost na 1.

Nato pojdite na vrstico KNOCKD_OPTS=”-i eth1” Odkomentirajte jo in zamenjajte privzeto vrednost eth1 z aktivnim omrežnim vmesnikom vašega sistema. Če želite preveriti svoj omrežni vmesnik, preprosto zaženite ukaz ifconfig.

Za naš sistem je enp0s3 aktivna omrežna kartica.

Celotna konfiguracija je, kot je prikazano.

Shranite spremembe in zapustite.

Nato zaženite in omogočite demon knockd, kot je prikazano.

$ sudo systemctl start knockd
$ sudo systemctl enable knockd

Če želite preveriti stanje demona knockd, zaženite ukaz:

$ sudo systemctl status knockd

2. korak: Zaprite vrata SSH 22 na požarnem zidu

Ker je cilj storitve knockd odobriti ali zavrniti dostop do storitve ssh, bomo zaprli vrata ssh na požarnem zidu. Toda najprej preverimo stanje požarnega zidu UFW.

$ sudo ufw status numbered

Iz izhoda lahko jasno vidimo, da so vrata SSH 22 odprta na protokolih IPv4 in IPv6, oštevilčenih s 5 oziroma 9.

Ti dve pravili moramo izbrisati, kot je prikazano, začenši z najvišjo vrednostjo – to je 9.

$ sudo ufw delete 9
$ sudo ufw delete 5

Zdaj, če se poskušate na daljavo prijaviti v strežnik, boste prejeli napako časovne omejitve povezave, kot je prikazano.

3. korak: konfigurirajte knock odjemalca za povezavo s strežnikom SSH

V zadnjem koraku bomo konfigurirali odjemalca in se poskusili prijaviti tako, da najprej pošljemo zaporedje knock, ki smo ga konfigurirali na strežniku.

Toda najprej namestite knockd daemon tako kot ste to storili na strežniku.

$ sudo apt install knockd

Ko je namestitev končana, pošljite zaporedje udarcev s prikazano sintakso

$ knock -v server_ip knock_sequence

V našem primeru to pomeni:

$ knock -v 192.168.2.105 10005 10006 10007

Izhod bi moral dobiti podoben tistemu, kar imamo, odvisno od vašega zaporedja. To kaže, da so bili poskusi trkanja uspešni.

Na tej točki bi morali biti v položaju, da se uspešno prijavite v strežnik s pomočjo SSH.

Ko končate z opravljanjem svojega dela na oddaljenem strežniku, zaprite vrata SSH tako, da pošljete zaporedje zapiranja.

$ knock -v 192.168.2.105 10007 10006 10005

Vsak poskus prijave v strežnik ne bo uspel, kot je prikazano.

To zaključuje ta vodnik o tem, kako izkoristiti trkanje vrat za zaščito storitve SSH na vašem strežniku. Boljši in enostavnejši pristop bi bil konfiguriranje preverjanja pristnosti z geslom SSH z uporabo parov ključev SSH. To zagotavlja, da se lahko samo uporabnik z zasebnim ključem overi s strežnikom, na katerem je shranjen javni ključ.