Internet Info, s.r.o. Lupa Root Měšec Podnikatel DigiZone Slunečnice Vitalianew Bomba Navrcholu Weblogy Jagg Woko Dobrý web Computer.cz SK: MojeLinky

Hlavní navigace

Port knocking: zaklepejte na svůj server

Internetových útoků přibývá a nechávat některé služby na serveru veřejně by nemusel být dobrý nápad. Jak ale ukrýt některé porty před zraky kolemjdoucích zvědavců a robotů zkoušejících své finty? Šikovnou, ale ne všem známou technikou je takzvaný port knocking. Nainstalujte si také svého dveřníka.

Minulý týden jsem psal o tom, jak vyhodit útočníky, kteří se snaží automaticky hádat hesla. Použít k tomu můžeme například DenyHosts, který umí hlídat přihlášení a podezřelé pokusy umí automaticky zablokovat. Dokáže zabránit mnoha nepříjemnostem.

Přesto nedokáže takový postup zabránit všem druhům útoků. Pokud se například objeví problém už v samotné implementaci, může útočník napáchat škodu a hesla hádat vůbec nemusí.

Pokud jste administrátorem serveru, můžete jít ale ještě dál a to nejen u SSH. Můžete před nenechavci skrýt vše, co nechcete, aby viděli. Náhodný kolemjdoucí, který oskenuje vaše porty, uvidí jen ty, které mu chcete ukázat a ostatní jsou pro něj zavřené. Přesto se vy jako administrátor k nim můžete kdykoliv připojit. Technika, o které si tu budeme povídat, se jmenuje port knocking (klepání na porty).

Dveřník na tajné heslo

Samozřejmě je možné kritický port ukrýt za firewall a striktně omezit IP adresy, ze kterých je možné se k němu připojit. To ovšem znamená další komplikace, především v případě, že se vaše IP adresa mění nebo potřebujete cestovat. Port knocking řeší tento problém velmi elegantně.

Pomocí firewallu zakážete porty úplně. Pro běžného návštěvníka budou zcela zavřené a vůbec nepozná, že na serveru běží nějaká konkrétní služba. Nainstalujeme si speciální port knocking server, který bude sledovat pokusy o přístup k zavřeným portům. Naprogramujeme mu konkrétní sekvenci, která identifikuje regulérního uživatele.

Taková sekvence může být například: „připoj se na porty 1000, 1256, 865, 22565 během pěti sekund“. Pokud se taková sekvence objeví, firewall automaticky otevře port IP adrese, ze které přišlo zaklepání.

Z hlediska uživatele je vše poměrně jednoduché. Před samotným spuštěním (třeba SSH) klienta spustí skript, který zaťuká na příslušné porty serveru. Pak se mu otevře příslušný port a on se připojí běžným způsobem.

Je to bezpečné? Co odposlech?

Port knocking samozřejmě není náhradou za běžné bezpečnostní mechanismy, ale je jejich účinným doplňkem. Kdyby někdo odhalil vaši klepací sekvenci (tedy pořadí portů), nemělo by to nijak vadit a bezpečnost to neohrozí. Útočník pak stojí před klasickým bezpečnostním mechanismem – RSA nebo heslem.

Je ale jasné, že knocking je možné odhalit pomocí odposlechu spojení. Někdo na trase může o vašem serveru vědět a sledovat, na které porty se dobýváte předtím, než se připojíte k SSH. I proti tomuto postupu ale existuje účinná obrana v podobě šifrovaného port knockingu.

Přestože nemůžete se serverem komunikovat (on zásadně na zavřených portech neodpovídá), můžete mu pomocí ťukání na různé porty předávat jednosměrně nějakou informaci. Obvykle se to provádí tak, že v prostoru portů (0–65535) zvolíte blok 256 z nich, které tvoří hodnoty předávaných bajtů. Takto jste schopni serveru předat libovolná data.

Obvykle jako klient použijete předem daná data jako vlastní IP adresu, port na druhé straně, aktuální čas a datum a podobně a tyto údaje zašifrujete předem daným klíčem. Zašifrovaný výsledek pak vyťukáte serveru na zavřené porty. Druhá strana celý algoritmus včetně dešifrovacího klíče zná, a tak vás opět rozpozná a otevře vám. Se změnou časové značky a dalších údajů v zašifrované zprávě se mění i zadávaná sekvence, kterou není možné později znovu využít.

Jak to implementovat?

Základem je takzvaný knockd server, který nainstalujete na stroj, na kterém si přejete chránit konkrétní porty. Software najdete pravděpodobně ve své distribuci, v Debianu je a má jen několik desítek kilobajtů. Tento program zajistí vše potřebné na straně serveru.

Celá konfigurace se nachází v souboru /etc/knockd.conf. Syntaxe je velmi jednoduchá:

[options]
    logfile = /var/log/knockd.log

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

Na začátku je definován log soubor, do kterého knockd zapisuje informace o své činnosti. Poté následuje definice pravidel pro SSH port. Samozřejmě je možno definovat libovolný počet sekvencí nebo jednou sekvencí otevřít více portů.

Na prvním řádku je otevírací sekvence (čísla portů), následuje časový interval ve kterém musí být zaťukání provedeno. Poté následuje příkaz pro otevření příslušného portu v iptables, za ním je časový údaj, po kterém se provede zavírací příkaz. Poslední část je samozřejmě možné vynechat, port pak zůstane pro IP adresu otevřený navždy.

Pokud jsou porty určeny takto, jedná se o TCP porty, můžete ale využít také UDP, stačí za čísla portů přidat :udp. Příklad:  1000:udp,2000:udp,3000:udp.

Jednorázové sekvence

Démon knockd umí také jednorázové sekvence. Do zvláštního souboru zadáte libovolný počet sekvencí, které budou postupně očekávány shora dolů. Po každém úspěšném zaťukání se aktuální sekvence zahodí a v budoucnu zůstane neplatná.

Implementace je opět velmi jednoduchá, místo direktivy sequence s konkrétními porty zadáte:

one_time_sequences = /etc/knockd/smtp_sequences

s názvem souboru, ze kterého budou sekvence načítány.

Jak zaklepat?

Server máme nastavený, ale ještě jsme si neřekli, jak na něj můžeme zaklepat. K tomu slouží utilitka knock, která je součástí balíčku knockd. Její použití je velmi jednoduché, na náš server zaťukáme:

$ knock 192.168.1.1 7000 8000 9000

případně

$ knock 192.168.1.1 7000:udp 8000:udp 9000:udp

Co dál?

Pokud se chcete dozvědět o knockingu více, navštivte server PortKnocking.org. K dispozici je samozřejmě mnoho implementací celé techniky, včetně výše zmíněného šifrovaného ťukání. Informace o dalších implementací najdete na speciální stránce stejného webu.

Petr Krčmář

Petr Krčmář

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Vystudoval elektroniku se zaměřením na počítačové systémy, nyní se zabývá médii, především těmi elektronickými.

Školení: Provoz sítí a síťové infrastruktury na Linuxu

Akademie Root
  • konfigurace bezpečného firewallu
  • použití IPv4 i IPv6
  • automatická konfigurace sítě
  • domény a DNS služby
  • VLAN, bridging, PPP, PPPoE

Detailní informace o kurzu...

Ohodnoťte jako ve škole:
Průměrná známka 2,79

Přehled názorů

Re: Port knocking: zaklepejte na svůj server
pht 11. 9. 2009 07:13
iptables a modul recent
Kajos 11. 9. 2009 07:16
└ 
Re: iptables a modul recent
Tomazo 11. 9. 2009 10:46
 
└ 
Re: iptables a modul recent
603 11. 9. 2009 17:21
 
 
└ 
Re: iptables a modul recent
JardaP . 11. 9. 2009 21:56
 
 
 
└ 
Re: iptables a modul recent
kkoouu 11. 9. 2009 22:29
 
 
 
 
└ 
Re: iptables a modul recent
kkoouu 11. 9. 2009 22:44
 
 
 
 
 
└ 
Re: iptables a modul recent
JardaP . 12. 9. 2009 05:38
 
 
 
 
 
 
└ 
Re: iptables a modul recent
kkoouu 12. 9. 2009 10:20
 
 
 
 
 
 
 
└ 
Re: iptables a modul recent
JardaP . 12. 9. 2009 10:59
 
 
 
 
 
 
 
 
└ 
Re: iptables a modul recent
kkoouu 12. 9. 2009 11:18
 
 
 
 
 
 
 
 
 
└ 
Re: iptables a modul recent
JardaP . 12. 9. 2009 12:00
 
 
 
 
 
 
 
 
 
 
├ 
Re: iptables a modul recent
kkoouu 12. 9. 2009 12:05
 
 
 
 
 
 
 
 
 
 
│
└ 
Re: iptables a modul recent
JardaP . 12. 9. 2009 12:44
 
 
 
 
 
 
 
 
 
 
│
 
└ 
Re: iptables a modul recent
kkoouu 12. 9. 2009 21:24
 
 
 
 
 
 
 
 
 
 
└ 
Re: iptables a modul recent
biq 12. 9. 2009 21:43
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: iptables a modul recent
JardaP . 12. 9. 2009 22:18
Re: Port knocking: zaklepejte na svůj server
Michal Breškovec 11. 9. 2009 07:43
díky
Filo 11. 9. 2009 08:36
Titulek
MD 11. 9. 2009 09:12
├ 
Re: Titulek
petr 11. 9. 2009 09:15
│
└ 
Re: Titulek
Juraj 11. 9. 2009 09:31
└ 
Re: Titulek
Tomas 11. 9. 2009 09:19
Stare, dobre ale neni cim klepat :-(
Lubosch 11. 9. 2009 09:29
├ 
Re: Stare, dobre ale neni cim klepat :-(
Radovan Garabík 11. 9. 2009 09:43
│
├ 
Re: Stare, dobre ale neni cim klepat :-(
. 11. 9. 2009 10:08
│
│
├ 
Re: Stare, dobre ale neni cim klepat :-(
Jozef Hamar 11. 9. 2009 10:36
│
│
│
├ 
Re: Stare, dobre ale neni cim klepat :-(
. 11. 9. 2009 11:05
│
│
│
│
└ 
Re: Stare, dobre ale neni cim klepat :-(
Jozef Hamar 11. 9. 2009 11:53
│
│
│
│
 
├ 
Re: Stare, dobre ale neni cim klepat :-(
. 11. 9. 2009 12:11
│
│
│
│
 
│
├ 
Re: Stare, dobre ale neni cim klepat :-(
Mordae 11. 9. 2009 14:14
│
│
│
│
 
│
│
├ 
Re: Stare, dobre ale neni cim klepat :-(
. 11. 9. 2009 21:06
│
│
│
│
 
│
│
└ 
Re: Stare, dobre ale neni cim klepat :-(
JardaP . 11. 9. 2009 22:03
│
│
│
│
 
│
│
 
└ 
Re: Stare, dobre ale neni cim klepat :-(
platYpus 13. 9. 2009 15:04
│
│
│
│
 
│
│
 
 
└ 
Re: Stare, dobre ale neni cim klepat :-(
JardaP . 13. 9. 2009 15:42
│
│
│
│
 
│
└ 
Re: Stare, dobre ale neni cim klepat :-(
misch 11. 9. 2009 16:31
│
│
│
│
 
│
 
└ 
Re: Stare, dobre ale neni cim klepat :-(
. 11. 9. 2009 21:05
│
│
│
│
 
│
 
 
├ 
Re: Stare, dobre ale neni cim klepat :-(
přezdívka je povinná 12. 9. 2009 10:06
│
│
│
│
 
│
 
 
└ 
Re: Stare, dobre ale neni cim klepat :-(
aaa 13. 9. 2009 16:57
│
│
│
│
 
└ 
Re: Stare, dobre ale neni cim klepat :-(
JardaP . 11. 9. 2009 22:01
│
│
│
└ 
Re: Stare, dobre ale neni cim klepat :-(
JardaP . 11. 9. 2009 22:00
│
│
└ 
Re: Stare, dobre ale neni cim klepat :-(
Radovan Garabík 11. 9. 2009 10:42
│
└ 
Re: Stare, dobre ale neni cim klepat :-(
Tomazo 11. 9. 2009 10:53
│
 
└ 
Re: Stare, dobre ale neni cim klepat :-(
Radovan Garabík 11. 9. 2009 11:17
├ 
Re: Stare, dobre ale neni cim klepat :-(
JJ 11. 9. 2009 14:09
├ 
Re: Stare, dobre ale neni cim klepat :-(
HonzaCZ 11. 9. 2009 19:16
│
└ 
Re: Stare, dobre ale neni cim klepat :-(
Jiří J. 11. 9. 2009 21:05
├ 
Re: Stare, dobre ale neni cim klepat :-(
BrainLess 11. 9. 2009 21:19
└ 
Re: Stare, dobre ale neni cim klepat :-(
BLEK. 12. 9. 2009 15:22
Covert channels
Jozef Hamar 11. 9. 2009 10:43
└ 
Re: Covert channels
BLEK. 12. 9. 2009 15:13
 
└ 
Re: Covert channels
pht 13. 9. 2009 15:17
orange
Radovan Garabík 11. 9. 2009 12:32
ip6tables
zbyshek 11. 9. 2009 14:33
Zajímavé, ale...
Miroslav Prýmek 11. 9. 2009 15:49
└ 
Re: Zajímavé, ale...
Honza 11. 9. 2009 17:52
 
└ 
Re: Zajímavé, ale...
Miroslav Prýmek 11. 9. 2009 19:02
 
 
└ 
Re: Zajímavé, ale...
Ash 11. 9. 2009 20:06
 
 
 
├ 
Re: Zajímavé, ale...
Miroslav Prýmek 11. 9. 2009 20:20
 
 
 
│
├ 
Re: Zajímavé, ale...
JardaP . 11. 9. 2009 22:12
 
 
 
│
│
└ 
Re: Zajímavé, ale...
Miroslav Prýmek 12. 9. 2009 08:57
 
 
 
│
├ 
Re: Zajímavé, ale...
Jiří J. 11. 9. 2009 22:19
 
 
 
│
│
└ 
Re: Zajímavé, ale...
Jiří J. 11. 9. 2009 22:24
 
 
 
│
├ 
Re: Zajímavé, ale...
Ash 15. 9. 2009 09:09
 
 
 
│
│
└ 
Re: Zajímavé, ale...
Miroslav Prýmek 15. 9. 2009 10:06
 
 
 
│
└ 
Re: Zajímavé, ale...
Ash 15. 9. 2009 09:12
 
 
 
│
 
└ 
Re: Zajímavé, ale...
Ash 15. 9. 2009 09:12
 
 
 
└ 
Re: Zajímavé, ale...
pht 12. 9. 2009 09:29
 
 
 
 
└ 
Re: Zajímavé, ale...
kkoouu 12. 9. 2009 10:26
 
 
 
 
 
└ 
Re: Zajímavé, ale...
Ash 15. 9. 2009 09:06
SPA - Single Packet Auth
Ash 11. 9. 2009 20:09
└ 
Re: SPA - Single Packet Auth
Miroslav Prýmek 11. 9. 2009 20:38
Výkaly pana Krčmáře
nn 12. 9. 2009 11:10
└ 
Re: Výkaly pana Krčmáře
kkoouu 12. 9. 2009 11:24
Workaround?
zefosk 12. 9. 2009 12:30
├ 
Re: Workaround?
ondrada 12. 9. 2009 18:22
│
└ 
Re: Workaround?
zefosk 12. 9. 2009 19:48
└ 
Re: Workaround?
Ash 15. 9. 2009 09:15
K comu je dobry PK
fo 15. 9. 2009 12:03
├ 
Re: K comu je dobry PK
kkoouu 15. 9. 2009 12:07
│
└ 
Re: K comu je dobry PK
fo 15. 9. 2009 12:19
└ 
Re: K comu je dobry PK
Jirka P 15. 9. 2009 16:48
       
Zasílat nově přidané příspěvky e-mailem