Howto port knocking

Da PtLUG Wiki.

Jump to: navigation, search

Contents

Introduzione

Il port knocking è una tecnica che vi permette di stabilire una connessione, per esempio ssh, anche se il vostro sistema è protetto da una firewall (iptables). E tramite un certo ordine di invio di certi pacchetti a determinate porte (questa configurazione è da fare tra client/server ma la vedremo più avanti) e se tutte le condizioni si sono avverate il sistema ci aprirà la porta desiderata. Ovviamente quando abbiamo finito per richiudere la porta ci sarà la bussata di chiusura.

Installare i pacchetti necessari

Esistono diversi pacchetti che ci mettono a disposizione questa caratteristica interessante ma noi analizzeremo questo pacchetto. http://www.portknocking.org/distribution/portknocking-0.30.tgz è interamente scritto in Perl quindi dovrete averlo installato dopo averlo spacchettato con il solito:

tar xvzf portknocking-0.30.tgz

per visualizzare la guida fate:

./knockclient -man

se vi da questo:

-bash:./knockclient: /usr/local/bin/perl:bad interpreter: No such file o directory

errore nello script è specificata la directory sbagliata del perl quindi modificatela manualmente. ora riproviamoci se adesso l'errore è:

Can't locate nomemodulo.pm in @INC

eseguite da root:

perl -MCPAN -e shell

a questo punto se vi rende la shell cpan>

install Nome::Modulo

al posto di Nome::Modulo dovete mettere queste dipendenze Config::General , File::Tail , Crypt::CBC , Crypt::Blowfish , Math::VecStat , Net::Pcap , Netpacket , Pod::Usage , Schedule::At , Storable. Adesso dando ./knockclient -man. Per il server c'è lo script knockdaemon.


Configurazione

Ecco la parte più importante. La configurazione del client si fa tramite il file knockclient.conf (scommetto non l'avreste mai immaginato). Per prima cosa indichiamo a quale sistema vogliamo connetterci tramite l'opzione remote e poi in knock ci va messo il tipo di knock che vogliamo effettuare:

  • RAND valore casuale tra 0-255
  • THIS YEAR valore dato dall'anno modulo 256
  • THISDAY giorno modulo 256
  • THISHOUR ora modulo 256
  • THISMINUTE immaginate
  • THISSECOND .......
  • CHECKSUM somma di tutti i campi del knock modulo 256
  • CLIENT indirizzo ip pubblico del client
  • PORT porta che deve essere bloccata/sbloccata
  • FLAGm valore arbitrario tra 0-255 anche m(contatore) può assumere un valore tra 0-255

Per le varie impostazioni delle variabili:

  • client = xxx.xxx.xxx.xxx
  • port = 10000
  • flag0 = 12
  • flag1 = 134
  • encrypt = yes/no(consigliato si)
  • key = (chiave decidete voi)
  • cipher = Blowfish/IDEA/DES
  • timeout = (tempo di attesa tra l'invio dei pacchetti)
  • portspan = (range di porte)

Per la configurazione del client abbiamo finito adesso sta al server. Il file di configurazione è knockdaemon.conf vediamo i parametri fondamentali:

  • runmode = network/file la differenza è che nel primo caso abbiamo uno sniffing del dei dati dalla rete invece nel secondo verrà utilizzato il file di log consultato in real-time
  • interface = (interfaccia su cui verrà ascoltato il knock)
  • useethfilter = tcpconn(per esempio) ma dopo dovrà essere specificato questo blocco:
<ethfilter tcpconn>
proto = IP_PROTO_TCP
flags = SYN
dest_ip = yyy.yyy.yyy.yyy
</ethfilter>
l'unica da spiegare è dest_ip che restringe il campo di analisi a tutti i pacchetti ricevuti dall'ip che è l'interfaccia pubblica del server
  • knock deve essere uguale a quella indicata nel file di configurazione del server
  • adesso dobbiamo configurare l'azione che deve essere eseguita all ricezione di un knock corretto
<action>
condition = PORT == 10000 && FLAG0 == 12 && FLAG1 == 134
template = iptables_open
use = yes
</action>
  • dopo di che dobbiamo scrivere il blocco template che viene eseguito se la condizione è verificata
<template iptables_open>
system = "/sbin/iptables -i INPUT -p TCP -s IP --dport PORT -j ACCEPT"
</template>
  • per concludere la configurazione settate decrypt , key , cipher e portspan agli stessi valori del client

Conclusioni

E' vero questa tecnica non è assolutamente usata per un client (io stesso non la metterei mai) ma se si tratta di avere un po' di sicurezza in più perché no e poi fare esperienza fa sempre bene. Comunque io ho parlato soltanto bene di questa tecnica e quindi adesso un po' di critiche:

  • c'è la possibilità che a causa della latenza della rete i pacchetti non arrivino nell'ordine giusto
  • la massiccia richiesta da parte del client potrebbe diminuire le prestazioni del sistema. Un attacco DOS di piccole dimensioni

Comunque ci sono anche molti vantaggi.

  • non far vedere a malintenzionati i servizi a rischio tramite un port scan
  • la crittografazione dei dati per una maggior sicurezza ancora


Ciao

Personal tools