## page was renamed from Paolo''''''Visnoviz/Prove1 ## page was renamed from Paolo''''''Visnoviz/Prove0 ## page was renamed from Paolo''''''Visnoviz/prove0 #format wiki #LANGUAGE it <
> <> <> = Introduzione = Le tecniche di '''Port knocking''' permettono di aumentare considerevolmente la sicurezza di un server che deve garantire alcuni servizi non permanenti attraverso IP pubblici. Se s'inviano dei pacchetti a delle porte prestabilite sulle quali il demone è in ascolto e nel caso la sequenza sia corretta, questi attiverà un comando che potrà eseguire delle regole di [[Sicurezza/Iptables|iptables]] che apriranno le porte necessarie alla connessione. Il vantaggio è notevole in quanto il server potrebbe rimanere sempre in ''stealth'' e aprire le porte per un determinato servizio solo in caso di necessità. = Preparativi = È necessario che il firewall [[Sicurezza/Iptables| iptables]] sia configurato e attivo. = Installazione = Per utilizzare le tecniche di '''Port knocking''' è necessario [[AmministrazioneSistema/InstallareProgrammi|installare]] il pacchetto ''knockd'', reperibile dal [[Repository/Componenti|componente]] '''universe''' dei [[Repository|repository ufficiali]]. = Configurazione knockd = 0. Per fare in modo che il demone parta all'avvio del computer modificare con un [[Ufficio/EditorDiTesto|editor di testo]] e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] il file `/etc/default/knockd` in questo modo:{{{ START_KNOCKD=1 }}} 0. Sempre nel medesimo file `/etc/default/knockd` modificare con un [[Ufficio/EditorDiTesto|editor di testo]] e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] indicando su quale interfaccia il demone dovrà rimanere in ascolto:{{{ KNOCKD_OPTS="-i eth0" }}} = Configurazione knockd.conf per l'apertura di una sola porta = Modificare con un [[Ufficio/EditorDiTesto|editor di testo]] e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] il file `/etc/knockd.conf` impostandolo come segue:{{{ [options] logfile = /var/log/knockd.log [openSSH] sequence = 7000,8000,9000 # Questa è la sequenza delle porte sulle quali knockd rimarrà in ascolto. Di default il protocollo è TCP. # Quali e quante porte usare è discrezionale. # sequence = 7000:udp,8000:tcp,9000:udp # Esempio con sequenza con porte miste udp/tcp seq_timeout = 30 #Tempo di attesa massimo per completare la sequenza. command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # Quando la sequenza verrà accettata verrà inserita una regola che aprirà la porta SSH standard. tcpflags = syn # Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte. [closeSSH] sequence = 9000,8000,7000 # Questa è un'altra sequenza di porte sulle quali knockd rimarrà in ascolto. seq_timeout = 30 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # Quando la sequenza verrà accettata verrà inserita una regola che cancellerà quella creata in precedenza. tcpflags = syn # Ulteriore filtro, sul tipo di flag del pacchetto iviato alla sequenza di porte. }}} La variabile «%IP%» passa alla regola di iptables l'indirizzo che ha effettuato la richiesta di connessione, in questo caso verrà permessa l'apertura della porta SSH discriminando solo l'IP validato. = Configurazione knockd.conf per l'apertura di più porte = Nell'esempio sopra esposto si è visto come aprire una sola porta. Se l'esigenza fosse però quella di aprirne di più procedere creando più sessioni «[openServizio]» e «[closeServizio]». Questo sistema risulta però scomodo per ovvi motivi, per ottenere lo stesso risultato è consigliato usare degli script. Modificare con un [[Ufficio/EditorDiTesto|editor di testo]] e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] il file `/etc/knockd.conf` impostandolo come segue:{{{ [options] logfile = /var/log/knockd.log [open] sequence = 7000,8000,9000 seq_timeout = 30 tcpflags = syn command = sh /etc/open_ports %IP% [close] sequence = 9000,8000,7000 seq_timeout = 30 tcpflags = syn command = sh /etc/close_ports %IP% }}} In questo caso invece di eseguire direttamente iptables si richiamano due script passando il parametro «%IP%» alla variabile speciale «$1». == Esempio di script open_ports == Modificare con un [[Ufficio/EditorDiTesto|editor di testo]] e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] il file `/etc/open_ports` impostandolo come segue:{{{ #! /bin/sh iptables -A INPUT -s $1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 21 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 631 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 5125 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 5126 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 8888 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 10000 -j ACCEPT iptables -A INPUT -s $1 -p tcp --dport 81 -j ACCEPT }}} == Esempio di script close_ports == Modificare con un [[Ufficio/EditorDiTesto|editor di testo]] e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] il file `/etc/close_ports` impostandolo come segue:{{{ #! /bin/sh iptables -D INPUT -s $1 -p tcp --dport 22 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 21 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 631 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 5125 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 5126 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 8888 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 10000 -j ACCEPT iptables -D INPUT -s $1 -p tcp --dport 81 -j ACCEPT }}} = Client = Di seguito viene mostrato come configurare i client a dipendenza del sistema operativo utilizzato. == Linux == Scaricare i sorgenti da [[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki|questo indirizzo]] all'interno della propria '''Home''' e [[AmministrazioneSistema/FormatiDiCompressione| scompattarli]], entrare nella cartella `knock-0.x/src` e digitare all'interno di una finestra di terminale il seguente comando:{{{ gcc -o knock knock.c }}} Sempre da una finestra di terminale digitare il [[#comando_client|comando per la connessione]]. == Windows == Scaricare da [[http://www.zeroflux.org/knock/files/knock.exe|questo indirizzo]] e digitare all'interno di una finestra DOS il [[#comando_client|comando per la connessione]] tralasciando la prima parte «./» == OSX == Consultare la [[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki|relativa pagina]]. <> = Connessione = Per effettuare la connessione digitare il seguente comando all'interno di una finestra di terminale:{{{ ./knock -v ip_host port1 port2 port3 port... }}} Nel caso una porta sia configurata tramite il protocollo UDP, usare la sintassi «port:udp» = Ulteriori risorse = * [[http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki|Sito ufficiale del progetto]] * [[http://www.portknocking.org/|Port knocking in perl]] * [[http://portknocko.berlios.de/|Sito ufficiale del progetto PortKnockO]] * [[http://www.openskill.info/infobox.php?ID=694|Documentazione sui TCP Flag ]] ---- CategoryHomepage