Come nascondere la porta dell’applicazione usando knockd in Linux
In qualità di amministratore di sistema, dovremmo fare di tutto per proteggere il nostro server dagli aggressori. Con la crescita di Internet, crescono anche le minacce al nostro server. Uno degli ingressi popolari per attaccare il nostro server è attraverso la porta che si apre sul tuo server. Se il tuo server SSH è in esecuzione sulla tua macchina, di solito la porta SSH è in ascolto. Il che significa che è aperto, in attesa di connessione.
Non è consigliabile lasciare il porto aperto per 24 ore in quanto è vulnerabile. Perché possiamo scansionare la macchina per vedere la porta aperta. nmap è uno dei port scanner più popolari che può essere utilizzato da chiunque per scansionare la tua auto.
E se potessimo aprire la porta su richiesta e chiuderla quando non è in uso? Sembra interessante. Ora possiamo farlo usando l’app knockd.
Cos’è bussato?
Knockd è un server port-knock. Ascolta tutto il traffico su un’interfaccia ethernet (o PPP), alla ricerca di speciali sequenze di “posizione” di porte. (Fonte: http://www.zeroflux.org/projects/knock)
Come funziona
Ogni applicazione necessita di una porta come “porta” per “ascoltare” le richieste di altri client. Questa porta è solitamente in uno stato aperto o chiuso. Ci sono molte porte disponibili sul server. Ma ci sono alcune porte che hanno concordato per consenso, come SSH (22), Web (80) e FTP (21).
Una regola empirica di base per la sicurezza del server è aprire solo le porte che usi e chiudere il resto. Potresti avere alcune porte che a volte vengono utilizzate e talvolta no. Si sconsiglia di lasciare aperte queste porte quando non sono in uso.
Quando installi knockd, puoi lasciare che il client “colpisca” il server con il pattern. La sequenza di battiti può essere personalizzata da te, quindi questo pattern di battiti sarà unico l’uno per l’altro. Se il modello corrisponde, la porta di cui hai bisogno sarà aperta per un periodo di tempo e la richiesta può entrare nel tuo server.
Una volta che hai finito con l’applicazione, puoi chiudere la porta manualmente o automaticamente.
Come installare knockd
In questo articolo utilizziamo il sistema operativo Zorin 9 basato su Ubuntu 14.04 LTS. Se stai utilizzando una distribuzione diversa, adattala al metodo di installazione della tua distribuzione.
Knockd è disponibile nel repository di Ubuntu. Quindi possiamo usare apt-get per installare knockd.
$ sudo apt-get install knockd
Aspetta qualche minuto, quindi il tuo knockd è già configurato.
Configura knockd
Il file di configurazione di Knock si trova nel file /etc/knockd.conf
La configurazione di esempio è semplice e facile da capire.
Possiamo vedere che la configurazione è divisa in tre sezioni. Il [options] sezione, [openSSH] sezione per aprire la porta SSH e [closeSSH] sezione per chiudere la porta SSH.
Implicitamente [options] la sezione contiene solo 1 riga. Ci dice che il registro knockd verrà registrato utilizzando l’applicazione di registro del sistema operativo. Su Ubuntu, vedremo il login /var/log/syslog; pieghevole.
Ovviamente possiamo scegliere di non utilizzare SysLog. Possiamo cambiarlo in questa riga se vogliamo usare il registro personalizzato.
logfile = /var/log/knockd.log
La riga sopra inserirà il file di registro dei risultati /var/log/knockd.log
[openSSH] section ha comandi identici a [closeSSH] sezione.
sequenza = 1200,1300,1400
Questo è il modello martellante. Attiverà il comando di seguito nella sezione. Il valore di questo parametro è completamente personalizzabile. Possiamo scegliere un altro numero casuale.
seq_timeout = 10
Questo dirà a knockd quanto tempo è necessario per completare lo schema di detonazione.
comando = /sbin/iptables -I INPUT -s %IP% -p tcp –dport 22 -j ACCETTA
Questo parametro aprirà la porta SSH sulla porta 22
tcpflags = sin
Questo parametro indica che il client invierà un pacchetto TCP SYNchronize al server
Configurazione del firewall
Come sappiamo prima, knockd aprirà una porta temporanea. Quindi dobbiamo assicurarci che il firewall sia in esecuzione sul server. Fondamentalmente, chiuderemo tutti i porti. Usiamo la sintassi iptables per fare questo. Ecco i passaggi.
Il primo comando consentirà la sessione corrente in corso attraverso il firewall.
Il secondo comando consentirà al server di essere sottoposto a ping da un’altra macchina.
Il terzo comando rifiuterà tutte le richieste.
Per testare il servizio knockd, ci aspettiamo che il nostro firewall interrompa tutte le connessioni ssh. Quindi knockd lo aprirà temporaneamente su richiesta.
Prova knockd lato server
Una volta configurati firewall e knockd, possiamo testarli.
Per testare il firewall, prova il server remoto tramite SSH da un’altra macchina. (In questo articolo, l’IP del client è 10.1.6.14 e l’IP del server è 10.0.76.224)
$ ssh -l pungki 10.0.76.224
Insieme a :
esso = nome di accesso
borse = nome utente sul server di destinazione
Se il firewall funziona, otterremo “Connessione rifiutata” messaggio di errore.
Il motivo per cui riceviamo il messaggio di errore è perché 10.1.6.14 non è consentito sul server. Se usiamo questo comando, non vedremo alcun risultato.
$ sudo /sbin/iptables -L -n |grep 10.1.6.14
Successivamente, vedremo la differenza dopo aver implementato knockd.
Il passaggio successivo consiste nel testare il servizio knockd.
Per eseguire knockd, dobbiamo modificare il file knockd predefinito che si trova in /etc/default/knockd. Cambia il suo valore parametro START_KNOCKD da 0 a 1.
Salva il file. Quindi digitare:
$ sudo service knockd start
*nota: ho provato a eseguire il servizio utilizzando /etc/init.d/knockd start ma non si avvia sempre
Testare la digitazione lato client
Sul lato client, abbiamo bisogno di Knock Client per “bussare” al server. Sul lato client, utilizziamo Centos 5.2. Quindi installiamo knock-client da http://pkgs.repoforge.org/knock/knock-0.5.3.el5.rf.i386.rpm
Quindi esegui il comando seguente per colpire il server:
$ knock -v 10.0.76.224 1200 1300 1400
v = verboso
10.0.76.224 = IP del server
1200 1300 1400 = la sequenza di detonazione definita nella configurazione knockd
Dopo aver raggiunto il server, ora vedremo che l’IP del client è ora autorizzato a entrare nel server.
$ sudo /sbin/iptables -L -n |grep 10.1.6.14
Quindi possiamo eseguire SSH remoto sul server.
Come possiamo vedere nell’immagine sopra, i nomi host sono diversi. Dopo aver stabilito SSH sulla macchina remota, il nome host viene modificato da @web01 a @dev-machine.
Chiudi il porto
Dopo che il client ha remoto il server, il client deve chiudere la porta. Per fare ciò, possiamo usare il comando seguente:
$ knock -v 10.0.76.224 1400 1300 1200
Fate attenzioneper chiudere la porta, invertiamo la sequenza dei battiti.
Dopo aver raggiunto il server, vedremo di nuovo un messaggio. Per verificare che il colpo abbia avuto successo, utilizziamo nuovamente il comando iptables. Se ha avuto successo, vedremo che l’IP 10.1.6.14 scomparirà.
In quello precedente, dopo aver bussato per aprire la porta, ho visto che l’indirizzo IP del client – 10.1.6.14 – può entrare nel server attraverso il firewall. Ora dopo aver premuto per chiudere la porta, se controlliamo con lo stesso comando iptables, la regola è stata eliminata.
Chiudi automaticamente la porta
Poiché l’attività di chiusura della porta viene attivata dal client, avremo la possibilità che il client si dimentichi di chiudere la porta. Non vogliamo che accada. Quindi possiamo configurare knockd per chiudere automaticamente la porta.
Per farlo, dobbiamo personalizzare file di configurazione knockd. Ecco un esempio di un file di configurazione knockd modificato.
L’ordine sembra ancora identico. La differenza rispetto alla configurazione precedente è che mettiamo [openSSH] sezione e [closeSSH] sezione dello stesso blocco.
Poi aggiungiamo cmd_timeout = 10 linea per informare il server per eseguire stop_command 10 secondi dopo l’esecuzione di start_command. La porta verrà chiusa automaticamente, ma la connessione stabilita rimane connessa.
Conclusione
Knockd ci aiuta a ridurre al minimo il rischio di lasciare sempre aperte tutte le porte. Con knockd, possiamo aprire le porte di cui abbiamo bisogno su richiesta. Per migliorare la sicurezza, dobbiamo conoscere la sequenza di detonazione prima di aprire il portello.