GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak používat Port Knocking na Ubuntu ke skrytí portu SSH

Všichni znáte tyhle staré gangsterské filmy, kde chlap používá sekvenci klepání na dveře, aby se dostal dovnitř? Port knocking je přesně to, jen pro váš server. Změna výchozího portu ssh nezaručuje, že nebudete napadeni. Hackeři často používají nástroje k automatickému skenování otevřených portů předtím, než zaútočí na server. Knockování portů je způsob, jak se můžete bránit proti skenerům portů. Odmítne přístup k chráněnému portu, dokud klient předem nepřistoupí k sekvenci dalších portů ve správném pořadí.

Instalace klepání portů na Ubuntu je snadná. V tomto článku vám ukážu, jak nainstalovat a nastavit klepání portů. Kroky z tohoto tutoriálu by měly fungovat i pro Debian 8.

Krok 1:Ujistěte se, že jsou nainstalovány všechny požadované balíčky

Všechny níže uvedené příkazy nesmí být spouštěny jako uživatel root. Nechci předvádět sudo všem příkazům, takže používám:

sudo su

stát se uživatelem root. Úplně prvním krokem je aktualizace seznamů balíčků Ubuntu:

apt-get update

Poté nainstalujte SSH server (pokud jste jej ještě nenainstalovali).

apt-get install openssh-server

Nyní nainstalujte knockd software, což je démon, který řídí klepání portu.

apt-get install knockd
Get:1 http://security.debian.org wheezy/updates Release.gpg [1,554 B]
Get:2 http://security.debian.org wheezy/updates Release [102 kB]
Get:3 http://security.debian.org wheezy/updates/main amd64 Packages [336 kB]
Hit http://mirrors.digitalocean.com wheezy Release.gpg
Hit http://mirrors.digitalocean.com wheezy Release
Get:4 http://security.debian.org wheezy/updates/main Translation-en [195 kB]
Hit http://mirrors.digitalocean.com wheezy/main amd64 Packages
Hit http://mirrors.digitalocean.com wheezy/main Translation-en
Fetched 635 kB in 1s (358 kB/s)
Reading package lists... Done
[email protected]:~#
[email protected]:~# apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
openssh-client
Suggested packages:
ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard ufw
The following packages will be upgraded:
openssh-client openssh-server
2 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
Need to get 1,364 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? 

Pokračujte stisknutím Y a Enterem.

Po instalaci balíčku musíte nainstalovat firewall jádra iptables. Spustit:

apt-get install iptables

Krok 2: Přidání pravidel do iptables

Nejprve vyprázdníme stávající pravidla brány firewall a zajistíme, aby nedocházelo k přerušení odchozích připojení.

iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
iptables --policy OUTPUT ACCEPT

Chceme zajistit, aby byla všechna navázaná připojení a probíhající relace povolena přes bránu firewall, jinak by brána firewall zablokovala aktuální relaci SSH:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Poznámka : Výše uvedené pravidlo nemá žádné mezery na obou stranách čárky v STABLISHED,RELATED.

Poté použijte následující pravidlo k blokování příchozího portu 22 (SSH):

iptables -A INPUT -p tcp --destination-port 22 -j DROP

Jakmile vytvoříte pravidla iptables, můžete proces obnovení při restartu automatizovat pomocí iptables-persistent. Můžeme si to stáhnout z výchozího úložiště Ubuntu:

apt-get install iptables-persistent
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v4. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of iptables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv4 rules?
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v6. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of ip6tables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv6 rules?

Během instalace vás program vyzve k uložení aktuálních pravidel iptables (ipV4 a ipV6), stačí u obou vybrat Ano.

Uložte aktuální sadu pravidel do souboru pomocí příkazu iptables-save. Tento soubor může iptables-restore použít později k obnovení stejného nastavení iptables:

iptables-save
 # Generated by iptables-save v1.4.14 on Tue Feb 23 04:59:28 2016
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:1976]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
COMMIT
# Completed on Tue Feb 23 04:59:28 2016

Nyní zůstanete připojeni ke svému stávajícímu připojení a zároveň budete blokovat ostatní připojení na portu SSH.

Dále musíme nakonfigurovat knockd.

Pro konfiguraci služby budeme muset upravit konfigurační soubor /etc/knockd.conf. Otevřete soubor pomocí nano:

nano /etc/knockd.conf

Uvidíte sekce, které budou vypadat takto.

[options]
UseSyslog

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
  • V části „možnosti“ vidíme název direktivy UseSyslog . soubor protokolu je poměrně zřejmé – zaznamenává všechny pokusy o zaklepání
  • Pod nimi máme dvě sekce: openSSH a closeSSH. První umožní klepači přístup k portu 22 (SSH) a druhý zavře port, když je klepadlo dokončeno.
  • knockd automaticky nahradí %IP% adresou IP klienta, který odeslal zaklepání, takže port můžete otevřít pouze autorizovanému klientovi.
sequence = 9000,8000,7000

To znamená, že tato sada pravidel se bude shodovat, pokud stejná IP požaduje připojení na portu 7000, následuje přímo port 8000 a nakonec port 9000. Je velmi vhodné změnit výchozí porty a jejich pořadí, protože výchozí pořadí je v pořádku známý i útočníkům.

seq_timeout = 5

Možnost "seq_timeout" definuje v sekundách, jak dlouho máte čas zadat všechna čísla pro zaklepání. Tato výchozí hodnota by měla být v pořádku a nebude problém, pokud klepání generujete automaticky.

command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

Zadejte příkaz, který se má provést, když klient provede správné klepnutí na port. Všechny výskyty %IP% budou nahrazeny IP adresou klepátka.

tcpflags = syn

Věnujte pozornost paketům, které je třeba použít k nastavení tohoto příznaku, v tomto případě paketům syn. Při použití příznaků TCP bude knockd IGNOROVAT pakety tcp, které neodpovídají příznakům.

Nyní povolte zaklepání. Upravte soubor /etc/default/knockd pomocí nano:

nano /etc/default/knockd

a změnit:

START_KNOCKD=0

do

START_KNOCKD=1

po tomto uložení a ukončení. Pokud máte více síťových adaptérů nebo máte problémy s tím, že se funkce Knockd nespouští automaticky během spouštění systému, můžete ručně určit síťové rozhraní, které bude naslouchat, zrušením komentáře a úpravou druhého řádku KNOCKD_OPTS.

Pak začněte klepat ručně:

service knockd start

Toto spustí démona a umožní vám změnit sady pravidel iptables klepáním na sekvence portů.

Nainstalovali jste požadované balíčky, pokud jste odpojeni od svého serveru, abyste se mohli znovu připojit, musíte zaklepat porty, které jste definovali ve správném pořadí, vytvořit připojení SSH.

Krok 3: Přístup k serveru, když je spuštěn knockd

Pokud jste postupovali podle výše uvedených kroků, nebudete se již moci připojit k serveru SSH přímo bez klepání portu.

Od serveru byste neměli obdržet žádnou odpověď a klient SSH by měl vypršet. Je to proto, že náš démon SSH je aktuálně blokován iptables. Napište ctrl-C pro ukončení pokusu o SSH, pokud automaticky nevyprší.

Testovací klepání s klientem telnet

Pro uživatele Linuxu:Nainstalujte balíček telnet pomocí apt.

Pro uživatele Windows:Klienta Telnet můžete nainstalovat tak, že vstoupíte do sekce „Programy“, vyhledejte „Zapnout nebo vypnout funkce systému Windows“, odtud povolte klienta Telnet.

Do příkazového řádku zadejte následující příkaz (nahraďte sekvenci portů vlastní sekvencí):

telnet youripaddress 7000
telnet youripaddress 8000
telnet youripaddress 9000

To vše musíte udělat za 5 sekund, protože to je časový limit pro konfiguraci. Nyní se pokuste připojit k serveru přes SSH. Budete mít přístup k připojení.

Spuštěním výše uvedených příkazů v opačném pořadí zavřete server SSH.

telnet youripaddress 9000
telnet youripaddress 8000
telnet youripaddress 7000

Nejlepší na klepání portů je, že jej můžete nakonfigurovat spolu s autentizací privátním klíčem. Pokud nakonfigurujete oba, pak prakticky neexistuje žádná šance, že by někdo mohl získat přístup nebo se připojit, dokud nezná oba porty a soukromý klíč.


Ubuntu
  1. Jak zajistit, aby pravidla brány firewall iptables trvala na Debianu/Ubuntu

  2. Jak povolit uživateli používat sudo v Ubuntu Linux

  3. Jak používat příkaz tail v Ubuntu Linux

  1. Jak používat příkaz string v Ubuntu

  2. Jak používat příkaz netplan na Ubuntu

  3. Jak používat správce úloh v Ubuntu ke sledování systému

  1. Jak používat SSH Port Forwarding

  2. Jak povolit SSH na Ubuntu 18.04

  3. Jak zajistit vypršení platnosti pravidel iptables?