+ <ul class="simple">
+ <li>Spedire una mail a una casella locale / remota e
+ controllare i log (syslog)</li>
+
+ <li>Collegarsi via <em>telnet</em> al server di posta:
+ <a class="reference external" href=
+ "http://www.netadmintools.com/art276.html">http://www.netadmintools.com/art276.html</a></li>
+
+ <li>usare una utility come SWAKS</li>
+ </ul>
+
+ <div class="section" id="swaks">
+ <h3><a class="toc-backref" href=
+ "#id95">9.1.1 Swaks</a></h3>
+
+ <dl class="docutils">
+ <dt>Per gli utenti meno esperti e' consigliabile
+ utilizzare <em>SWAKS</em>: si installi l'omonimo
+ pacchetto e si esegua un test con::</dt>
+
+ <dd>swaks --to <a class="reference external" href=
+ "mailto:utente@destinatario.tilde">utente@destinatario.tilde</a>
+ --from <a class="reference external" href=
+ "mailto:utente@propio.mail.tilde">utente@propio.mail.tilde</a></dd>
+ </dl>
+
+ <p>Ecco un esempio di una sessione corretta:</p>
+ <pre class="literal-block">
+swaks --to andrea@piffa.net from andrea@mydomain.com
+=== Trying smtp.piffa.net:25...
+=== Connected to smtp.piffa.net.
+<- 220 zoo.piffa.net ESMTP Postfix (Debian/GNU)
+ -> EHLO alice.mydomain.com
+<- 250-zoo.piffa.net
+<- 250-PIPELINING
+<- 250-SIZE 10240000
+<- 250-VRFY
+<- 250-ETRN
+<- 250-STARTTLS
+<- 250-ENHANCEDSTATUSCODES
+<- 250-8BITMIME
+<- 250 DSN
+ -> MAIL FROM:<root@alice.mydomain.com>
+<- 250 2.1.0 Ok
+ -> RCPT TO:<andrea@piffa.net>
+<- 250 2.1.5 Ok
+ -> DATA
+<- 354 End data with <CR><LF>.<CR><LF>
+ -> Date: Thu, 28 May 2009 13:11:19 +0200
+ -> To: andrea@piffa.net
+ -> From: root@alice.mydomain.com
+ -> Subject: test Thu, 28 May 2009 13:11:19 +0200
+ -> X-Mailer: swaks v20061116.0 jetmore.org/john/code/#swaks
+ ->
+ -> This is a test mailing
+ ->
+ -> .
+<- 250 2.0.0 Ok: queued as 41FB261AFC
+ -> QUIT
+<- 221 2.0.0 Bye
+=== Connection closed with remote host.
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="imap-e-pop">
+ <h2><a class="toc-backref" href=
+ "#id96">9.2 Imap e pop</a></h2>
+
+ <p>Postfix e' un server SMTP, di conseguenza se volete che
+ i vostri utenti possano <em>scaricare</em> in locale la
+ posta generalmente volete mettere a loro disposizione un
+ server <em>POP3</em> o <em>IMAP</em>. Oppure entrambi.</p>
+
+ <dl class="docutils">
+ <dt>Pacchetti da installare</dt>
+
+ <dd>courier-imap courier-pop</dd>
+ </dl>
+
+ <p>Si noti che IMAP necessita delle <em>Maildir</em>, non
+ funziona con le Mailbox in <tt class=
+ "docutils literal">/var/mail/</tt> .</p>
+ </div>
+
+ <div class="section" id="client-a-riga-di-comando">
+ <h2><a class="toc-backref" href=
+ "#id97">9.3 Client a riga di
+ comando</a></h2>
+
+ <p>Per testare il corretto funzionamento del server di
+ posta e' utile avere a disposizione delle utility per
+ inviare e leggere la posta: ovviamente da riga di
+ comando.</p>
+
+ <div class="section" id="mailx">
+ <h3><a class="toc-backref" href=
+ "#id98">9.3.1 mailx</a></h3>
+
+ <dl class="docutils">
+ <dt>Uno dei client piu' semplici, sopratutto per
+ inviare un messaggioi. e' sufficiente usare una formula
+ come::</dt>
+
+ <dd>mail <a class="reference external" href=
+ "mailto:utente@dominio.com">utente@dominio.com</a></dd>
+ </dl>
+
+ <p>Se il comando <tt class="docutils literal">mail</tt>
+ non fosse disponibile si installi il pacchetto <tt class=
+ "docutils literal">mailx</tt>.</p>
+
+ <p>Al primo prompt si digitera' l'oggetto, il testo del
+ messaggio (per terminare l'inserimento lasciare una riga
+ vuota, digitare un <tt class="docutils literal">punto +
+ Invio</tt> su una riga vuota), la Carbon Copy (se
+ necessaria).</p>
+
+ <p>es:</p>
+ <pre class="literal-block">
+mail andrea@localhost
+Subject: Oggetto della mail
+Testo del messagio,
+per terminare il messaggio
+lasciare una riga vuota
+e un punto (poi Invio).
+
+.
+Cc:
+</pre>
+
+ <p>Per altrre opzioni si veda la pagina man.</p>
+ </div>
+
+ <div class="section" id="mutt">
+ <h3><a class="toc-backref" href=
+ "#id99">9.3.2 Mutt</a></h3>
+
+ <p>Mutt e' uno dei gestori di posta preferiti da chi
+ preferisce utilizzare l'interfaccia testuale per la
+ gestione della posta.</p>
+
+ <p>Mutt ha un file di configurazione <tt class=
+ "docutils literal">.muttrc</tt> nella <em>home</em>
+ dell'utente, alcuni settaggi possono essere utili:</p>
+
+ <dl class="docutils">
+ <dt>set folder="~/Maildir"</dt>
+
+ <dd>Per utilizzare <tt class=
+ "docutils literal">/home/nome_utente/Maildir come
+ mailbox</tt>, invece del default <tt class=
+ "docutils literal">/var/mail/nome_utente</tt>.</dd>
+
+ <dt>set editor="vim"</dt>
+
+ <dd>Utilizzare <tt class="docutils literal">vim</tt>
+ come editor per comporre i messaggi.</dd>
+ </dl>
+
+ <p>Spesso e' utile poter <em>levvere al volo</em> la
+ Mailbox / Maildir di un utente sul server di posta, per
+ controllare se i messaggi vengono recapitati
+ correttamente:</p>
+ <pre class="literal-block">
+mutt -f /var/mail/utente
+mutt -f /home/utente/Maildir
+</pre>
+
+ <p>In modo analogo si puo' consultare al volo la propia
+ mailbox su un server remoto tramite IMAP/POP:</p>
+ <pre class="literal-block">
+mutt -f imap://nome_utente@piffa.net
+</pre>
+ </div>
+
+ <div class="section" id="web-client">
+ <h3><a class="toc-backref" href=
+ "#id100">9.3.3 Web client</a></h3>
+
+ <p>Per mettere a disposizione degli utenti un client web
+ per gestire la propria posta si installi il pacchetto:
+ <tt class="docutils literal">squirrelmail</tt> . Ci sono
+ tanti altri client web disponibili: questo e'
+ particolarmente semplice. Naturalmente dovrete aver
+ installato: <tt class="docutils literal">php5
+ apache2</tt> .</p>
+
+ <p>L'interfaccia dovrebbe essere disponibile all'url:
+ <tt class="docutils literal"><span class=
+ "pre">http://localhost/squirrelmail</span></tt> . Se
+ cosi' non fosse assicuratevi che Apache abbia incluso il
+ file di configurazione di squirrelmail:</p>
+ <pre class="literal-block">
+cd /etc/apache2/conf.d/
+ln -s /etc/squirrelmail/apache.conf ./squirrelmail.conf
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="graylisting">
+ <h2><a class="toc-backref" href=
+ "#id101">9.4 Graylisting</a></h2>
+
+ <p>Il <em>graylisting</em> e' un sistema relativamente poco
+ invasivo, con un limitato consumo di risorse per limitare
+ lo <em>SPAM</em> in arrivo sul propio server di posta. Come
+ suggerisce il nome e' una via di mezzo tra una <em>white
+ list</em> (una lista di mittenti privilegiata, sempre
+ benvenuti) e una <em>black list</em> (mittenti
+ <em>bannati</em>, banditi dal poter inviare nuovi
+ messaggi).</p>
+
+ <p>Il funzionamento e' relativamente semplice: ogni
+ mittente sconosciuto viene immediatamente rifiutato con un
+ errore <em>non grave</em> come un <em>server non
+ disponibile, provare piu' tardi</em>. Questo inconveniente
+ non dovrebbe mettere in difficolta' un server di posta /
+ mittente legittimo, che dopo un periodo di attesa tentera'
+ nuovamente di inviare il messaggio ottenendo finalmente il
+ risultato atteso. Diversamente un <em>bot</em> per l'invio
+ di SPAM o un applicazione improvvisata (tipicamente di
+ derivazione virale) che stesse inviando il messaggio
+ <em>probabilmente</em> non insisterebbe, rinunciano ad
+ inviare il messaggio preferendo destinazioni meno
+ problematiche.</p>
+
+ <div class="section" id="abilitazione-in-postfix">
+ <h3><a class="toc-backref" href=
+ "#id102">9.4.1 Abilitazione in
+ Postfix</a></h3>
+
+ <p>Installare il pacchetto: <tt class=
+ "docutils literal">postgrey</tt> e aggiungere il file di
+ configurazione di Postfix <tt class=
+ "docutils literal">/etc/postfix/main.cf</tt>:</p>
+ <pre class="literal-block">
+smtpd_recipient_restrictions =
+ permit_mynetworks,
+ reject_unauth_destination,
+ check_policy_service inet:127.0.0.1:60000
+</pre>
+ </div>
+
+ <div class="section" id="test">
+ <h3><a class="toc-backref" href=
+ "#id103">9.4.2 Test</a></h3>
+
+ <p>Inviando un messaggio il client dovrebbe ricevere un
+ iniziale messaggio di rifiuto del messaggio:</p>
+ <pre class="literal-block">
+swaks --to andrea@piffa.net from andrea@mydonain.com
+=== Trying smtp.piffa.net:25...
+=== Connected to smtp.piffa.net
+...
+<- 250 2.1.0 Ok
+ -> RCPT TO:<andrea@piffa.net>
+<** 450 4.2.0 <andrea@piffa.net>: Recipient address rejected:
+Greylisted, see http://postgrey.schweikert.ch/help/piffa.net.html
+ -> QUIT
+<- 221 2.0.0 Bye
+=== Connection closed with remote host.
+</pre>
+
+ <p>A lato server si dovrebbe rilevare su <tt class=
+ "docutils literal">/var/log/syslog</tt> qualcosa di
+ simile:</p>
+ <pre class="literal-block">
+connect from alice.mydomain.com[65.98.21.97]
+May 28 14:53:34 r24266 postgrey: action=greylist, reason=new,
+ client_name=alice.mydomain.com,
+ client_address=10.0.0.1, sender=root@alice.mydomain.com, recipient=andrea@piffa.net
+May 28 14:53:34 r24266 postfix/smtpd[22538]:
+ NOQUEUE: reject: RCPT from alice.mydomain.com[10.0.0.1]:
+ 450 4.2.0 <andrea@piffa.net>: Recipient address rejected: Greylisted,
+ see http://postgrey.schweikert.ch/help/piffa.net.html;
+ from=<root@alice.mydomain.com> to=<andrea@piffa.net>
+ proto=ESMTP helo=<alice.mydomain.com>
+May 28 14:53:34 r24266 postfix/smtpd[22538]: disconnect from alice.mydomain.com[10.0.0.1]
+</pre>
+ </div>
+
+ <div class="section" id="statistiche">
+ <h3><a class="toc-backref" href=
+ "#id104">9.4.3 Statistiche</a></h3>
+
+ <p>E' sempre utile poter tracciare qualche statistica
+ sulle percentuali di messaggi ricevuti, da chi, messaggi
+ rifiutati (e per quale motivo). Statistiche che attingono
+ dai soliti log del server di posta <tt class=
+ "docutils literal">/var/log/syslog</tt> di default oltre
+ che i dedicati <tt class=
+ "docutils literal">/var/log/mail</tt> .</p>
+
+ <p>Una utility semplice per analizzare l'attivita' del
+ propio server smtp potrebbe essere <tt class=
+ "docutils literal">pflogsumm</tt> , installato il
+ pacchetto la si puo' invocare con:</p>
+ <pre class="literal-block">
+pflogsumm.pl /var/log/mail.log
+</pre>
+
+ <p>oppure utilizzare i log piu' vecchi ad es. <tt class=
+ "docutils literal">/var/log/mail.log.0</tt></p>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="firewall">
+ <h1><a class="toc-backref" href=
+ "#id105">10 Firewall</a></h1>
+
+ <p>In Informatica, nell'ambito delle reti di computer, un
+ firewall (termine inglese dal significato originario di
+ parete refrattaria, muro tagliafuoco, muro ignifugo; in
+ italiano anche parafuoco o parafiamma) e' un componente
+ passivo di difesa perimetrale che puo anche svolgere funzioni
+ di collegamento tra due o piu' tronconi di rete. Usualmente
+ la rete viene divisa in due sotto reti: una, detta esterna,
+ comprende l'intera Internet mentre l'altra interna, detta LAN
+ (Local Area Network), comprende una sezione piu' o meno
+ grande di un insieme di computer locali. In alcuni casi e'
+ possibile che si crei l'esigenza di creare una terza sotto
+ rete detta DMZ (o zona demilitarizzata) atta a contenere quei
+ sistemi che devono essere isolati dalla rete interna ma
+ devono comunque essere protetti dal firewall.</p>
+
+ <p>Una prima definizione chiusa di firewall e' la
+ seguente:</p>
+
+ <p>Apparato di rete hardware o software che filtra tutti i
+ pacchetti entranti ed uscenti, da e verso una rete o un
+ computer, applicando regole che contribuiscono alla sicurezza
+ della stessa.</p>
+
+ <p>In realta' un firewall puo' essere realizzato con un
+ normale computer (con almeno due schede di rete e software
+ apposito), puo' essere una funzione inclusa in un router o
+ puo' essere un apparato specializzato. Esistono inoltre i
+ cosiddetti "firewall personali", che sono programmi
+ installati sui normali calcolatori, che filtrano solamente i
+ pacchetti che entrano ed escono da quel calcolatore; in tal
+ caso viene utilizzata una sola scheda di rete.</p>
+
+ <p>La funzionalita' principale in sostanza e' quella di
+ creare un filtro sulle connessioni entranti ed uscenti, in
+ questo modo il dispositivo innalza il livello di sicurezza
+ della rete e permette sia agli utenti interni che a quelli
+ esterni di operare nel massimo della sicurezza. Il firewall
+ agisce sui pacchetti in transito da e per la zona interna
+ potendo eseguire su di essi operazioni di: controllo modifica
+ monitoraggio</p>
+
+ <p>Questo grazie alla sua capacita' di "aprire" il pacchetto
+ IP per leggere le informazioni presenti sul suo header, e in
+ alcuni casi anche di effettuare verifiche sul contenuto del
+ pacchetto.</p>
+
+ <div class="section" id="links">
+ <h2><a class="toc-backref" href=
+ "#id106">10.1 Links</a></h2>
+
+ <ul class="simple">
+ <li><a class="reference external" href=
+ "http://openskill.info/topic.php?ID=124">http://openskill.info/topic.php?ID=124</a></li>
+
+ <li><a class="reference external" href=
+ "http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html">
+ http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html</a></li>
+ </ul>
+ </div>
+
+ <div class="section" id="ipfilter">
+ <h2><a class="toc-backref" href=
+ "#id107">10.2 Ipfilter</a></h2>
+
+ <p>Link: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#IPFILTERING</a></p>
+
+ <p>Natura di un firewall ip: su cosa lavora (livello 2 e un
+ po' del 3) e su cosa <em>non</em> lavora (livello 4).
+ Netfilter lavora anche su parti del livello 3 (TCP, UDP,
+ etc) e del livello 1 (MAC source address). Iptables
+ comunque permette di fare il <em>connection-tracking</em>,
+ mediante il quale possiamo implementare il Network Address
+ Translation.</p>
+
+ <p>Netfilter non ricostruisce il flusso di dati tra
+ pacchetti, non puo' quindi rilevare la presenza di virus o
+ simili che si trasmettono su pacchetti separati:
+ ricomporre, analizzare e tornare a scomporre i frammenti
+ richiederebbe troppa RAM e risorse di sistema, con il
+ conseguente rischio di saturare il firewall fino
+ all'abbandono dei nuovi pacchetti in transito. Ci sono
+ altri software piu' adatti a questi compiti, ad esempio un
+ proxy HTTP come Squid che e' appunto una applicazione di
+ quarto livello, progettata e strutturata per analizzare e
+ modificare i flussi di dati (il <em>contenuto</em> dei
+ pacchetti, non le sole <em>intestazioni</em>) facendo
+ abbondate uso delle risorse RAM e di calcolo del sistema.
+ Non a caso su macchine embedded dalle prestazioni molto
+ ridotte (CPU ARM ~250MHZ con ~30MB di RAM) Squid sfrutta al
+ massimo le risorse di sistema per gestire il traffico di
+ una rete 10/100, mentre il lavoro tipico svolto da
+ netfilter e' quasi irrilevante.</p>
+ </div>
+
+ <div class="section" id="progettazione-di-un-firewall">
+ <h2><a class="toc-backref" href=
+ "#id108">10.3 Progettazione di un
+ firewall</a></h2>
+
+ <p>Per implementare un firewall bisogna decidere un aio di
+ cose: la collocazione e l'approccio (inclusivo o esclusivo)
+ al filtraggio, il tipo di hardware.</p>
+
+ <div class="section" id="collocazione">
+ <h3><a class="toc-backref" href=
+ "#id109">10.3.1 Collocazione</a></h3>
+
+ <p>DMZ e MZ, internet, intranet, extranet. Frammentazione
+ della rete, decidere se diversi reparti di una azienda si
+ possano vedere tra loro e in che misura.</p>
+
+ <p>Collocazione:</p>
+
+ <blockquote>
+ <ol class="arabic simple">
+ <li>sul router</li>
+
+ <li>tra router e servers / LAN</li>
+
+ <li>Unico server / router / firewall e connessi
+ rischi. considerare l'acquisto di un router hardware
+ dedicato.</li>
+ </ol>
+ </blockquote>
+
+ <dl class="docutils">
+ <dt>Layeed security:</dt>
+
+ <dd>Implementare piu' device / software sui diversi
+ livelli: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#HOWTOPLANANIPFILTER</a></dd>
+ </dl>
+ </div>
+
+ <div class="section" id="policy-di-default">
+ <h3><a class="toc-backref" href=
+ "#id110">10.3.2 Policy di
+ default</a></h3>
+
+ <p>Drop o Accept: conseguenze per sicurezza, facilita' di
+ gestione.</p>
+ </div>
+
+ <div class="section" id="hardware">
+ <h3><a class="toc-backref" href=
+ "#id111">10.3.3 Hardware</a></h3>
+
+ <p>Sostanzialmente potremmo distinguere due tipologie di
+ hardware:</p>
+
+ <dl class="docutils">
+ <dt>Network appliance dedicata::</dt>
+
+ <dd>Un dispositivo hardware dedicato alla funzione di
+ Firewall, ad es un Cisco / Fortigate. Si noti che molti
+ firewall economici altro non sono che Linux box molto
+ striminzite.</dd>
+
+ <dt>Server / Personal computer:</dt>
+
+ <dd>Un server sul quale viene fatto girare Netfilter ad
+ uso del server stesso e della rete connessa.</dd>
+ </dl>
+
+ <p>Vantaggi e svantaggi: consumo elettrico, efficienza,
+ flessibilita', strumenti di gestione, sicurezza,
+ OpenBSD.</p>
+ </div>
+ </div>
+
+ <div class="section" id=
+ "percorso-dei-pacchetti-tra-tabelle-e-catene">
+ <h2><a class="toc-backref" href=
+ "#id112">10.4 Percorso dei pacchetti tra
+ tabelle e catene</a></h2>
+
+ <p>E importante conoscere il percorso che i paccheti
+ seguono passando tra le varie catene, l'ordine infatti puo'
+ cambiare il riusultato ottenuto (che il pacchetto raggiunga
+ o meno l'host, oppure modificare il pachetto stesso).</p>
+
+ <p>link: <a class="reference external" href=
+ "http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html">
+ http://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html</a></p>
+ </div>
+
+ <div class="section" id="concetti-di-base">
+ <h2><a class="toc-backref" href=
+ "#id113">10.5 Concetti di base</a></h2>
+
+ <div class="section" id="tabelle-catene-regole">
+ <h3><a class="toc-backref" href=
+ "#id114">10.5.1 Tabelle, catene,
+ regole</a></h3>
+
+ <p>Iptables lavora su 3 tabelle (tables) di default:</p>
+
+ <ul class="simple">
+ <li>filter - Regola il firewalling: quali pacchetti
+ accettare, quali bloccare</li>
+
+ <li>nat - Regola le attivita' di natting</li>
+
+ <li>mangle - Interviene sulla alterazione dei
+ pacchetti.</li>
+ </ul>
+
+ <p>Ogni tabella ha delle catene (chains) predefinite
+ (INPUT, OUTPUT, FORWARD ... ) a cui possono essere
+ aggiunte catene custom. Ogni catena e' composta da un
+ elenco di regole (rules) che identificano pacchetti di
+ rete secondo criteri diversi (es: -p tcp --dport 80 -d
+ 10.0.0.45) Ogni regola termina con una indicazione
+ (target) su cosa fare dei pacchetti identificati dalla
+ regola stessa (es: -j ACCEPT, -j DROP ...)</p>
+ </div>
+
+ <div class="section" id="match">
+ <h3><a class="toc-backref" href=
+ "#id115">10.5.2 Match</a></h3>
+
+ <p>I Match di una regola (rule) servono a testare un
+ pacchetto per valutare se corrisponda a certe
+ caratteristiche. I match di possono servire a controllare
+ se un pacchetto e' destinato a una porta particolare o
+ utilizza un protocollo particolare.</p>
+
+ <p>Alcuni esempi:</p>
+
+ <dl class="docutils">
+ <dt>-p [!] proto</dt>
+
+ <dd>Protocollo IP. Secondo IP number o nome (es: tcp,
+ udp, gre, ah...)</dd>
+
+ <dt>-s [!] address[/mask]</dt>
+
+ <dd>Indirizzo IP sorgente (o network con maschera di
+ sotto rete)</dd>
+
+ <dt>-d [!] address[/mask]</dt>
+
+ <dd>Indirizzo IP destinazione (o network)</dd>
+
+ <dt>-i [!] interface[+]</dt>
+
+ <dd>Interfaccia di rete di entrata ([+] wildcard)</dd>
+
+ <dt>-o [!] interface[+]</dt>
+
+ <dd>Interfaccia di rete di uscita ([+] wildcard)</dd>
+ </dl>
+
+ <table class="docutils option-list" frame="void" rules=
+ "none">
+ <col class="option">
+ <col class="description">
+
+ <tbody valign="top">
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-f</span></kbd></td>
+
+ <td>Frammento di pacchetto</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="section" id="targets">
+ <h3><a class="toc-backref" href=
+ "#id116">10.5.3 Targets</a></h3>
+
+ <p>Se un pacchetto soddisfa le condizioni del Match
+ <em>salta</em> (jump) su uno dei target possibili, in
+ caso contrario continua il suo percorso tra regole catene
+ e tabelle.</p>
+
+ <p>Target principali:</p>
+
+ <dl class="docutils">
+ <dt><em>-j ACCEPT</em></dt>
+
+ <dd>Il pacchetto matchato viene accettato e procede
+ verso la sua destinazione. Si usa per definire il
+ traffico permesso.</dd>
+
+ <dt><em>-j DROP</em></dt>
+
+ <dd>Il pacchetto viene rifiutato e scartato, senza
+ alcuna notifica al mittente. Si usa, in alternativa a
+ REJECT, per bloccare traffico.</dd>
+
+ <dt><em>-j REJECT</em></dt>
+
+ <dd>Il pacchetto viene rifiutato. Al mittente viene
+ mandato un pacchetto (configurabile) di notifica tipo
+ ICMP port-unreachable (--reject-with
+ icmp-port-unreachable)</dd>
+ </dl>
+
+ <table class="docutils option-list" frame="void" rules=
+ "none">
+ <col class="option">
+ <col class="description">
+
+ <tbody valign="top">
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-t <var>LOG</var></span></kbd></td>
+
+ <td>Il pacchetto viene loggato via syslog e procede
+ l'attraversamento della catena. Opzioni:
+ (--log-level, --log-prefix, --log-tcp-sequence,
+ --log-tcp-options, --log-ip-options)</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>DNAT</var></span></kbd></td>
+
+ <td>Viene modificato l'IP di destinazione del
+ pacchetto. Target disponibile solo in nat /
+ PREROUTING e nat / OUTPUT. L'opzione
+ --to-destination IP:porta definisce il nuovo IP di
+ destinazione. Si usa tipicamente su network
+ firewall che nattano server di una DMZ</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>SNAT</var></span></kbd></td>
+
+ <td>Viene modificato l'IP sorgente. Solo in nat /
+ POSTROUTING. Prevede l'opzione --to-source
+ IP:porta. Si usa per permettere l'accesso a
+ Internet da una rete locale con IP privati.</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>MASQUERADE</var></span></kbd></td>
+
+ <td>Simile a SNAT, si applica quando i pacchetti
+ escono da interfacce con IP dinamico (dialup, adsl,
+ dhcp...). Si usa solo in nat / POSTROUTING e
+ prevede l'opzione --to-ports porte.</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>REDIRECT</var></span></kbd></td>
+
+ <td>Redirige il pacchetto ad una porta locale.
+ Usabile solo in nat / PREROUTING e nat / OUTPUT e'
+ previsto per fare un transparent proxy (con proxy
+ server in esecuzione sulla macchina con
+ iptables)</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>RETURN</var></span></kbd></td>
+
+ <td>Interrompe l'attraversamento della catena. Se
+ questa e' una secondaria, il pacchetto torna ad
+ attraversare la catena madre da punto in cui aveva
+ fatto il salto nella secondaria. Se il RETURN e' in
+ una delle catene di default, il pacchetto
+ interrompe l'attraversamento e segue la policy di
+ default.</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>TOS</var></span></kbd></td>
+
+ <td>Usabile solo nella tabella mangle, permette di
+ cambiare il TOS (Type Of Service) di un pacchetto
+ con l'opzione --set-tos. Per un elenco dei
+ parametri disponibili: iptables -j TOS -h</td>
+ </tr>
+
+ <tr>
+ <td class="option-group"><kbd><span class=
+ "option">-j <var>MIRROR</var></span></kbd></td>
+
+ <td>Curioso e sperimentale, questo target invia un
+ pacchetto speculare al mittente. In pratica e' come
+ se facesse da specchio per tutti i pacchetti
+ ricevuti. Da usare con cautela, per evitare
+ attacchi DOS indiretti.</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ <div class="section" id="tabella-filter">
+ <h2><a class="toc-backref" href=
+ "#id117">10.6 Tabella Filter</a></h2>
+
+ <p>E' quella implicita e predefinita (-t filter) Riguarda
+ le attivita' di filtraggio del traffico. Ha 3 catene di
+ default: INPUT - Riguarda tutti i pacchetti destinati al
+ sistema. In entrata da ogni interfaccia. OUTPUT - Riguarda
+ i pacchetti che sono originati dal sistema e destinati ad
+ uscire. FORWARD - Riguarda i pacchetti che attraversano il
+ sistema, con IP sorgente e destinazione esterni.</p>
+
+ <p>Esempio per permettere accesso alla porta 80 locale:
+ iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
+ Analoga a: iptables -I INPUT -p tcp --dport 80 -j
+ ACCEPT</p>
+
+ <p>Esempio per permettere ad un pacchetto con IP sorgente
+ 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando
+ il firewall: iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1
+ -j ACCEPT</p>
+ </div>
+
+ <div class="section" id=
+ "flush-automatico-per-macchine-remote">
+ <h2><a class="toc-backref" href=
+ "#id118">10.7 Flush automatico per
+ macchine remote</a></h2>
+
+ <p>Se state provando una configurazione del firewall per
+ una macchina remota e' buona norma per evitare brutte
+ figure attivare uno script che faccia il <em>flush</em>
+ delle regole dopo qualche minuto. Potreste infatti
+ inavvertitamente impostare una regola che vi impedisca di
+ raggiungere la macchina remota, cosi' da non poter neanche
+ eliminare quella regola e ripristinare la situazione
+ precedente.</p>
+
+ <p><em>Veramente</em>, prima di lavorare sul firewall di
+ una macchina remota impostate almeno un <tt class=
+ "docutils literal">at now +5 min</tt> o con un'oretta di
+ margine per fare il <em>flush</em> delle regole (su tutte
+ le tabelle):</p>
+ <pre class="literal-block">
+ at now +5 min
+at> /sbin/iptables -F
+at> [CTR+d]
+</pre>
+ </div>
+
+ <div class="section" id="gestione-regole-rules">
+ <h2><a class="toc-backref" href=
+ "#id119">10.8 Gestione regole
+ (rules)</a></h2>
+
+ <p>Il comando iptables viene usato per ogni attivita' di
+ gestione e configurazione.</p>
+
+ <p>Inserimento regole:</p>
+
+ <dl class="docutils">
+ <dt>iptables -A CATENA ...</dt>
+
+ <dd>Aggiunge una regola alla fine della catena
+ indicata</dd>
+
+ <dt>iptables -I CATENA [#] ...</dt>
+
+ <dd>Inserisce alla riga # (default 1) una regola nella
+ catena indicata</dd>
+
+ <dt>iptables -N CATENA</dt>
+
+ <dd>Crea una nuova catena custom</dd>
+
+ <dt>iptables -P CATENA TARGET</dt>
+
+ <dd>Imposta il target di default per la catena
+ indicata</dd>
+ </dl>
+
+ <p>Rimozione regole e azzeramenti:</p>
+
+ <dl class="docutils">
+ <dt>iptables -F [catena]</dt>
+
+ <dd>Ripulisce tutte le catene (o quella indicata)</dd>
+
+ <dt>iptables -X [catena]</dt>
+
+ <dd>Ripulisce tutte le catene custom (o quella
+ indicata)</dd>
+
+ <dt>iptables -Z [catena]</dt>
+
+ <dd>Azzera i contatori sulle catene</dd>
+
+ <dt>iptables -D catena #</dt>
+
+ <dd>Cancella la regola numero # dalla catena
+ indicata</dd>
+ </dl>
+
+ <p>Interrogazione:</p>
+
+ <dl class="docutils">
+ <dt>iptables -L</dt>
+
+ <dd>Elenca le regole esistenti</dd>
+
+ <dt>iptables -L -n -v</dt>
+
+ <dd>Elenca, senza risolvere gli host, in modo verboso le
+ regole esistenti</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="salvataggio-regole">
+ <h2><a class="toc-backref" href=
+ "#id120">10.9 Salvataggio regole</a></h2>
+
+ <p>Il comando <tt class="docutils literal">iptables</tt>
+ serve per interagire con il framework <tt class=
+ "docutils literal">Netfilter</tt> che gestisce il firewall
+ di Linux al livello del kernel. Questo comporta, in modo
+ analogo a quando avviene col comando <tt class=
+ "docutils literal">ifconfig</tt>, che i cambiamenti
+ impostati siano in <em>tempo reale, RAM</em>, non
+ persistenti nel sistema: al boot successivo del sistema
+ tutto tornera' alle impostazioni di base (in questo caso
+ <em>nulle</em>, con policy di default settate su <tt class=
+ "docutils literal">ACCEPT</tt> per tutto).</p>
+
+ <p>Le varie invocazioni di iptables potrebbero essere
+ richiamate da degli scripts dedicati, ma fortunatamente e'
+ stata predisposta una apposita utility per gestire questi
+ scripts in modo da avere a disposizione un <em>formato
+ standard</em> per il salvataggio e il ripristino delle
+ regole del firewall.</p>
+
+ <p>Altro problema: decidere quando attivare / disattivare
+ queste regole. Utilizzare i <em>runlevels</em> non e' una
+ soluzione adeguata: le regole del firewall sono legate
+ all'attivita' delle schede di rete (e un host con diverse
+ schede di rete puo' attivarle a secondo delle esigenze di
+ routing, partenza di servizi es file_sharing per un
+ back-up...): il sistema operativo Debian permette di legare
+ l'esecuzione di comandi alla attivazione di una device di
+ rete (<tt class="docutils literal">up</tt>), dopo la sua
+ attivazione (<tt class="docutils literal"><span class=
+ "pre">post-up</span></tt>, utile per devices che richiedono
+ un certo tempo per inizializzarsi: come un tunnel o una
+ connessione punto a punto), prima della sua attivazione
+ (<tt class="docutils literal"><span class=
+ "pre">pre-up</span></tt>). Allo stesso modo sono
+ disponibili eventi analoghi per accompagnare la
+ disattivazione dei device di rete: si veda la pagina man di
+ <tt class="docutils literal">interfaces</tt>.</p>
+
+ <p>Nel nostro caso avremo per una possibile scheda
+ <tt class="docutils literal">eth0</tt>:</p>
+
+ <p><tt class=
+ "docutils literal">/etc/network/interfaces</tt></p>
+ <pre class="literal-block">
+iface eth1 inet static
+ up /sbin/iptables-restore /root/firewall/basic_fw
+ # Seguono i soliti parametri della scheda di rete
+ address 10.10.208.21
+</pre>
+
+ <div class="section" id="iptables-save">
+ <h3><a class="toc-backref" href=
+ "#id121">10.9.1 Iptables-save</a></h3>
+
+ <p>Per salvare le regole di iptables attualmente presenti
+ nel kernel si usi il comando:</p>
+ <pre class="literal-block">
+# iptables-save >> /root/firewall/basic_fw
+</pre>
+
+ <p>Il contenuto del file dovrebbe essere
+ <em>comprensibile</em>: sostanzialmente sono regole di
+ iptables, senza il comando iptables ripetuto, suddivisi
+ per le varie tabelle. Potete comunque correggere
+ eventuali parametri con un edito di testo.</p>
+
+ <p>Se non avete un'idea migliore potreste voler tenere
+ gli script dei firewall in una cartella <tt class=
+ "docutils literal">~/firewall</tt> nella home directory
+ dell'utente <tt class="docutils literal">root</tt>.</p>
+ </div>
+
+ <div class="section" id="iptables-restore">
+ <h3><a class="toc-backref" href=
+ "#id122">10.9.2 Iptables-restore</a></h3>
+
+ <p>Per ripristinare un set di regole precedentemente
+ salvate con <tt class="docutils literal"><span class=
+ "pre">iptables-save</span></tt> si utilizzi <tt class=
+ "docutils literal"><span class=
+ "pre">iptables-restore</span></tt>. Se questo deve essere
+ fatto in modalita' <em>non interattiva</em>, ad esempio
+ deve essere eseguito dal demone che si occupa di
+ inizializzare le schede di rete, oppure un <em>cron</em>
+ o altro, e' buona norma richiamare i percorsi completi
+ sia dei comandi che dei file:</p>
+ <pre class="literal-block">
+/sbin/iptables-restore /root/firewall/basic_fw
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="esempi">
+ <h2><a class="toc-backref" href=
+ "#id123">10.10 Esempi</a></h2>
+
+ <p>Seguono alcuni esempi sull'uso di iptables, lo scenario
+ e' un computer con un paio di schede di rete fisiche una
+ delle quali collegata alla rete internet l'altra a una rete
+ privata per la LAN interna.</p>
+
+ <blockquote>
+ <ol class="arabic simple">
+ <li><tt class="docutils literal">eth0</tt> scheda di
+ rete principale sulla rete privata interna
+ 192.168.0.0/24</li>
+
+ <li><tt class="docutils literal">eth1</tt> scheda di
+ rete secondaria per la connessione ad internet</li>
+
+ <li><tt class="docutils literal">ppp0</tt>
+ punto-a-punto per una connessione ad internet</li>
+ </ol>
+ </blockquote>
+
+ <div class="section" id="bloccare-i-ping-dall-esterno">
+ <h3><a class="toc-backref" href=
+ "#id124">10.10.1 Bloccare i ping
+ dall'esterno</a></h3>
+
+ <p>Spesso gli script che attaccano
+ <em>automaticamente</em> le varie reti provano a fare un
+ ping per verificare quali IP sono on-line: bloccare il
+ traffico <tt class="docutils literal">ICMP</tt> in
+ ingresso puo' aiutare ad evitare parte di questi
+ attacchi:</p>
+ <pre class="literal-block">
+iptables -A INPUT -i ppp0 -p ICMP -j DROP
+</pre>
+ </div>
+
+ <div class="section" id="masquerading-snat">
+ <h3><a class="toc-backref" href=
+ "#id125">10.10.2 Masquerading
+ (sNAT)</a></h3>
+
+ <dl class="docutils">
+ <dt>Per attivare la network address translation (in
+ questo caso un SNAT) per la rete locale privata
+ sull'indirizzo ip del <em>modem</em>::</dt>
+
+ <dd>iptables -t nat -A POSTROUTING -s
+ 192.168.0.0/255.255.255.0 -o ppp0 -j MASQUERADE</dd>
+ </dl>
+
+ <p>Il <em>Masquerading</em> a differenza dello
+ <em>SNAT</em> puro (<tt class=
+ "docutils literal"><span class="pre">-j</span> SNAT
+ <span class="pre">--to-source</span> proprio_ip_pubblico
+ ) legge l'indirizzo ip del device ``ppp0</tt>. In questo
+ modo se l'IP cambia automaticamente si aggiorna anche il
+ source natting. Se avete un indirizzo IP statico
+ assegnato al vostro gateway potete invece usare lo SNAT
+ semplice.</p>
+
+ <dl class="docutils">
+ <dt>Altri esempi::</dt>
+
+ <dd>
+ <p class="first">## Change source addresses to
+ 1.2.3.4. # iptables -t nat -A POSTROUTING -o eth0 -j
+ SNAT --to 1.2.3.4</p>
+
+ <p>## Change source addresses to 1.2.3.4, 1.2.3.5 or
+ 1.2.3.6 # iptables -t nat -A POSTROUTING -o eth0 -j
+ SNAT --to 1.2.3.4-1.2.3.6</p>
+
+ <p class="last">## Change source addresses to
+ 1.2.3.4, ports 1-1023 # iptables -t nat -A
+ POSTROUTING -p tcp -o eth0 -j SNAT --to
+ 1.2.3.4:1-1023</p>
+ </dd>
+ </dl>
+ </div>
+
+ <div class="section" id="brute-force">
+ <h3><a class="toc-backref" href=
+ "#id126">10.10.3 Brute force</a></h3>
+
+ <p>Per limitare attacchi di tipo brute force su SSH:</p>
+ <pre class="literal-block">
+iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 3000 --hitcount 4 --name DEFAULT --rsource -j DROP
+
+iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="proc-filesystem">
+ <h2><a class="toc-backref" href=
+ "#id127">10.11 Proc filesystem</a></h2>
+
+ <p>Tramite il filesystem virtuale <strong>proc</strong>
+ possiamo monitorare talvolta anche modificarei, a seconda
+ dei casi, alcuni parametri utili per il networking. La
+ parte di proc che ci interessa si riconduce al percorso:
+ <tt class="docutils literal">/proc/sys/net/ipv4</tt> :
+ vediamo alcuni dei parametri fondamentali.</p>
+
+ <div class="section" id="ip-forward">
+ <h3><a class="toc-backref" href=
+ "#id128">10.11.1 ip_forward</a></h3>
+
+ <p>Questa variabile determine se l'instradamento dei
+ pacchetti e' attvo, in caso positivo il kernel
+ instradera' i pacchetti (routing). Con ip_forward settato
+ a <tt class="docutils literal">0</tt> la nostra macchina
+ continuera' a vedere le varie reti su cui eventualmente
+ si trova (gateway) ma non instradera' i pacchetti da
+ parte di altri host.</p>
+
+ <p>Questo parametro determina tutti gli instradamenti che
+ il nostro host puo' fare, quindi e' determinante anche
+ per NAT, firewall, masquerading.</p>
+
+ <p>E' possibile settarlo per le singole interfacce, ad
+ esempio per eth0: <tt class=
+ "docutils literal">/proc/sys/net/ipv4/conf/eth0/forwarding</tt>
+ .</p>
+
+ <p>Per approfondimenti su cosa si intenda per
+ instradamento: rfc1812.txt sezione 2.3:</p>
+ <pre class="literal-block">
+In the Internet model, constituent networks are connected together by
+ IP datagram forwarders which are called routers or IP routers. In
+ this document, every use of the term router is equivalent to IP
+ router. Many older Internet documents refer to routers as gateways.
+
+ A router connects to two or more logical interfaces, represented by
+ IP subnets or unnumbered point to point lines (discussed in section
+ [2.2.7]). Thus, it has at least one physical interface. Forwarding
+ an IP datagram generally requires the router to choose the address
+ and relevant interface of the next-hop router or (for the final hop)
+ the destination host. This choice, called relaying or forwarding
+ depends upon a route database within the router. The route database
+ is also called a routing table or forwarding table. The term
+ "router" derives from the process of building this route database;
+ routing protocols and configuration interact in a process called
+ routing.
+
+Routers provide datagram transport only, and they seek to minimize
+ the state information necessary to sustain this service in the
+ interest of routing flexibility and robustness.
+</pre>
+ </div>
+
+ <div class="section" id="ip-default-ttl">
+ <h3><a class="toc-backref" href=
+ "#id129">10.11.2 ip_default_ttl</a></h3>
+
+ <p><em>Time to leave</em> di default usato dal nostro
+ host: in genere <tt class="docutils literal">64</tt>.</p>
+ </div>
+
+ <div class="section" id="ip-local-port-range">
+ <h3><a class="toc-backref" href=
+ "#id130">10.11.3 ip_local_port_range</a></h3>
+
+ <p>Il range di porte usato dal nostro host quando si
+ connette come client ad altri host. Puo' essere utile
+ modificarlo per poi intercettare piu' facilmente i
+ pacchetti provenienti da qusto host, oppupure quel
+ qualunqe limitazione vogliamo imporre sul range da
+ usarsi. Si ricorda che solo root puo' aprire porte sotto
+ la <tt class="docutils literal">1024</tt>.</p>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="ftp-server">
+ <h1><a class="toc-backref" href=
+ "#id131">11 FTP Server</a></h1>
+
+ <p>Il File Transfer Protocol (FTP) (protocollo di
+ trasferimento file), รจ un Protocollo per la trasmissione di
+ dati tra host basato su TCP, in genere usato dagli autori di
+ pagine web per <em>pubblicare</em> queste nei propio spazi
+ web. Storicamente veniva anche usato, mediate l'utilizzo di
+ utenze anonime, come punto di scambio per materiali di vari
+ utenti tra loro sconosciuti (una directory dei materiali
+ scaricabili e una dedicata agli <em>uploads</em> degli
+ utenti, poi riordinati dall'<em>ftpmaster</em>). Tuttora si
+ mantiene la cosuetudine di renedere disponibile i materiali
+ dei <em>mirrors</em> anche tramite FTP, probabilmente per
+ garantire l'accesso ai client piu' datati che non possono
+ utilizzare tecnologie piu' recenti.</p>
+
+ <p>Il protocollo FTP e' in chiaro (cioe' non criptato), sia
+ per quanto riguarda il traffico ad esso associato che per il
+ passaggio delle passwords degli utenti, facilmente sniffabili
+ da chiunque abbia accesso alla rete. Naturalmente vsftp per
+ quanto votato alla sicurezza non modifica queste
+ caratteristiche del protocollo FTP (ma consente di usare
+ OpenSSL per la autenticazione degli utenti).</p>
+
+ <p>Se propio si deve mettere a disposizione un server FTP ai
+ propi utenti si considerino le seguenti alternative:</p>
+
+ <ul class="simple">
+ <li>Spingere gli utenti ad usare SFTP invece che FTP</li>
+
+ <li>Spingere gli utenti ad usare SSL per autenticarsi al
+ server FTP</li>
+
+ <li>Nel caso di webdesigners si consideri la possibilita'
+ di offrire alternative come GIT, Subversion, Rsync o
+ Webdav</li>
+ </ul>
+
+ <p>Nel caso non si possa evitare il server FTP:</p>
+
+ <ul class="simple">
+ <li>Non dare agli utenti FTP una shell di sistema (
+ Concedere come shell <tt class="docutils literal">ftp</tt>
+ al posto di <tt class="docutils literal">bash</tt> in
+ <tt class="docutils literal">/etc/passwd</tt>)</li>
+
+ <li>Rendere il filesytem su cui scrive il demone FTP
+ <tt class="docutils literal">noexec</tt> e <tt class=
+ "docutils literal">nosuid</tt> (vedi dopo)</li>
+
+ <li>Utilizzare un demone FTP come Vsftp: un server FTP con
+ una forte inclinazione alla sicurezza: <em>Very Secure FTP
+ Daemon</em>.</li>
+ </ul>
+
+ <p>Per maggiori informazioni sulle scelte di design legate
+ alla sicurezza del demone si veda: <a class=
+ "reference external" href=
+ "http://vsftpd.beasts.org/DESIGN">http://vsftpd.beasts.org/DESIGN</a></p>
+
+ <p>Vsftp mette a disposizione le seguenti funzionalita':</p>
+
+ <ul class="simple">
+ <li>Virtual IP configurations</li>
+
+ <li>Virtual users</li>
+
+ <li>Standalone or inetd operation</li>
+
+ <li>Powerful per-user configurability</li>
+
+ <li>Bandwidth throttling</li>
+
+ <li>Per-source-IP configurability</li>
+
+ <li>Per-source-IP limits</li>
+
+ <li>IPv6</li>
+
+ <li>Encryption support through SSL integration</li>
+ </ul>
+
+ <div class="section" id="id8">
+ <h2><a class="toc-backref" href=
+ "#id132">11.1 Pacchetti</a></h2>
+
+ <p>Per installare il demone vero e propio si usi il
+ pacchetto <tt class="docutils literal">vsftpd</tt> , mentre
+ per aver un client da cui fare qualche test sono
+ dipsonibili:</p>
+
+ <ul class="simple">
+ <li><tt class="docutils literal">ftp</tt> (pacchetto da
+ installare) e' il solito client a riga di comando</li>
+
+ <li><tt class="docutils literal">gftp</tt> e' un client
+ grafico simile al classico <em>WSftp</em></li>
+
+ <li>Normalmente i file mananager com Konqueror possono
+ lavarorare come client FTP</li>
+ </ul>
+ </div>
+
+ <div class="section" id="sessioni-ftp">
+ <h2><a class="toc-backref" href=
+ "#id133">11.2 Sessioni ftp</a></h2>
+
+ <p>Vediamo alcuni dei comandi di base per gestire una
+ sessione ftp a riga di comando:</p>
+
+ <dl class="docutils">
+ <dt>ftp nome_host</dt>
+
+ <dd>stabilire la connessione all'host, poi verra' chiesta
+ la password dell'utente. Se avete sbagliato utente: user
+ .</dd>
+
+ <dt>help</dt>
+
+ <dd>Lista dei comandi disponibili.</dd>
+
+ <dt>help [nome_comando]</dt>
+
+ <dd>Cosa fa quel comando.</dd>
+
+ <dt>put</dt>
+
+ <dd>Per caricare un file.</dd>
+
+ <dt>get</dt>
+
+ <dd>Per scaricare un file.</dd>
+
+ <dt>ls</dt>
+
+ <dd>Lista dei file disponibili.</dd>
+
+ <dt>cd</dt>
+
+ <dd>Spostarsi in un altra directory.</dd>
+
+ <dt>lcd</dt>
+
+ <dd>Cambio directory in LOCALE.</dd>
+
+ <dt>mput/mget</dt>
+
+ <dd>Per lavorare su file multipli.</dd>
+
+ <dt>prompt</dt>
+
+ <dd>
+ <dl class="first last docutils">
+ <dt>Per uscire dalla modalita' interattiva</dt>
+
+ <dd>
+ <dl class="first last docutils">
+ <dt>(non vi chiede conferma di ogni singola
+ operazione</dt>
+
+ <dd>su ogni singolo file...).</dd>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>binary</dt>
+
+ <dd>Entra in modalita' trasferimento binario.</dd>
+
+ <dt>asii</dt>
+
+ <dd>Entra in modalita' trasferimento ascii.</dd>
+
+ <dt>bye</dt>
+
+ <dd>Per chiudere la sessione.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="configurazione-iniziale">
+ <h2><a class="toc-backref" href=
+ "#id134">11.3 Configurazione
+ iniziale</a></h2>
+
+ <p>Il demone di vsftpd e' immediatamente disponibile ma
+ solo in modalita' anonima (si pensi a uno scenario in cui
+ si vuole rendere disponibili dei files tramite FTP) e in
+ <em>sola lettura</em>. Per accedere al servizio si usi
+ quini come utente <tt class=
+ "docutils literal">anonymous</tt> (la passwords in genere
+ e' come consuetudine il propio indirizzo email), la cui
+ <em>home</em> directory sara' <tt class=
+ "docutils literal">/home/ftp/</tt> (<tt class=
+ "docutils literal">/srv/ftp</tt> in Squeeze):</p>
+ <pre class="literal-block">
+zoo:~# ftp localhost
+Connected to localhost.localdomain.
+220 (vsFTPd 2.0.7)
+Name (localhost:root): anonymous
+331 Please specify the password.
+Password:
+230 Login successful.
+Remote system type is UNIX.
+Using binary mode to transfer files.
+ftp> ls
+200 PORT command successful. Consider using PASV.
+150 Here comes the directory listing.
+-rw-r--r-- 1 0 0 0 Feb 03 17:17 anoni
+226 Directory send OK.
+</pre>
+ </div>
+
+ <div class="section" id="abilitare-gli-utenti-locali">
+ <h2><a class="toc-backref" href=
+ "#id135">11.4 Abilitare gli utenti
+ locali</a></h2>
+
+ <p>Per poter modificare le impostazioni iniziali, ad
+ esempio per permettere l'accesso agli utenti del server, si
+ modifichera' il file <tt class=
+ "docutils literal">/etc/vsftpd.conf</tt>, a seguire le
+ impostazioni fondamentali ed altre interessanti per rendere
+ il server accessibile da utenti di sistema (autenticati
+ tramite la loro password, quindi con PAM) per il tipico
+ utilizzo di web designers che debbano pubblicare le loro
+ pagine web (e non si siano fatti convincere a usare
+ SFTP!):</p>
+ <pre class="literal-block">
+# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
+anonymous_enable=NO
+# Disabilitiamo l'utente anonimo
+
+# Uncomment this to allow local users to log in.
+local_enable=YES
+# Accesso garantito agli utenti di sistema
+
+# Uncomment this to enable any form of FTP write command.
+write_enable=YES
+# Permettiamo agli utenti di caricare documenti nella loro home
+
+# You may fully customise the login banner string:
+ftpd_banner=Benvenuti al servizio ftp del sito example.com
+</pre>
+
+ <p>Per abilitare i cambiamenti si proceda a riavviare il
+ server: <tt class="docutils literal">/etc/init.d/vsftpd
+ restart</tt> e si monitorizzi il file di log <tt class=
+ "docutils literal">tail <span class="pre">-f</span>
+ /var/log/vsftpd.log</tt> per controllarne il funzionamento
+ (e anche <tt class="docutils literal">/var/log/syslog</tt>
+ nel caso non si riuscisse a far partire correttamente il
+ servizio.</p>
+
+ <p>NOTE: Se non riuscite ad ottenere un <em>directory
+ listing</em> (<tt class="docutils literal">ls</tt>)
+ ottenendo un errore <tt class="docutils literal">500
+ Illegal PORT command? FTP error</tt> abilitare la modalita'
+ passiva col comando ftp <tt class=
+ "docutils literal">passive</tt>.</p>
+ </div>
+
+ <div class="section" id="jail-chroot">
+ <h2><a class="toc-backref" href=
+ "#id136">11.5 Jail chroot</a></h2>
+
+ <p>Si puo' impedire all'utente di spostarsi arbitrariamente
+ per il file system del servere visualizzare il contenuto
+ delle directory, ad esempio la cartella <tt class=
+ "docutils literal">/etc</tt>, confinandolo in una jail
+ chroot limitata alla sua home directory:</p>
+ <pre class="literal-block">
+# You may restrict local users to their home directories. See the FAQ for
+# the possible risks in this before using chroot_local_user or
+# chroot_list_enable below.
+chroot_local_user=YES
+</pre>
+
+ <p>Generalmente un utente di sistema con il solo accesso
+ FTP non dovrebbe avere la possibilita' di poter navigare
+ liberamente per il file system del server, esponendo file
+ di configurazione e quant'altro l'utente potrebbe trarre
+ utili informazioni sul quali software siano installati e di
+ che tipo:</p>
+ <pre class="literal-block">
+Remote system type is UNIX.
+Using binary mode to transfer files.
+ftp> pwd
+257 "/"
+ftp> cd /etc/
+550 Failed to change directory.
+</pre>
+ </div>
+
+ <div class="section" id="permessi-sul-filesystem">
+ <h2><a class="toc-backref" href=
+ "#id137">11.6 Permessi sul
+ filesystem</a></h2>
+
+ <p>Come accennato precedentemente e' opportuno che i
+ filesystems sui quali un utente puo' scrivere o modificare
+ il contenuto non abbiano i privilegi di eseguibilita' e
+ suid, nel nonstro caso vsftpd lavora sull'intera <tt class=
+ "docutils literal">/home/</tt> directory quindi avremo in
+ <tt class="docutils literal">/etc/fstab</tt>:</p>
+ <pre class="literal-block">
+/dev/mapper/store-homes /home ext3 rw,nosuid,noexec 0 2
+</pre>
+ </div>
+
+ <div class="section" id="shell-dell-utente">
+ <h2><a class="toc-backref" href=
+ "#id138">11.7 Shell dell'utente</a></h2>
+
+ <p>Come gia' detto piu' volte le passwords degli utenti
+ viaaggiano in rete in chiaro, ponendo un grave problema di
+ sicurezza. Sara' quindi opportuno disbilitare la shell di
+ questi utenti, tramite il flag <tt class=
+ "docutils literal"><span class="pre">--shell</span>
+ /bin/false</tt> in fase di creazione degli utenti:</p>
+ <pre class="literal-block">
+# adduser --shell /bin/false nome_utente
+</pre>
+
+ <p>Oppure correggiendo manualmente il file <tt class=
+ "docutils literal">/etc/passwd</tt> per modificare
+ l'inpostazione della shell dell'utente:</p>
+ <pre class="literal-block">
+nome_utente:x:1001:1001::/var/spool/postfix:/bin/bash
+# la riga sopra deve essere trasformata in
+nome_utente:x:1001:1001::/var/spool/postfix:/bin/false
+</pre>
+
+ <p>Sui sistemi DEbian REcenti sara' necessario aggiungere
+ <tt class="docutils literal">/bin/false</tt> all'elenco
+ delle shell valide.</p>
+
+ <p><tt class="docutils literal">/etc/shells</tt></p>
+ <pre class="literal-block">
+...
+/bin/false
+</pre>
+ </div>
+
+ <div class="section" id="altre-opzioni">
+ <h2><a class="toc-backref" href=
+ "#id139">11.8 Altre opzioni</a></h2>
+
+ <dl class="docutils">
+ <dt>xferlog_enable=YES</dt>
+
+ <dd>Verra' tenuto un file di log <tt class=
+ "docutils literal">/var/log/vsftpd.log</tt> degli upload
+ e download sul server.</dd>
+
+ <dt>hide_ids=YES</dt>
+
+ <dd>Nasconde le userid e groupid mascherandole con
+ <tt class="docutils literal">ftp</tt> .</dd>
+
+ <dt>anon_root=/home/ftp</dt>
+
+ <dd>Home directory dell'utente anonimo.</dd>
+
+ <dt>write_enable=YES</dt>
+
+ <dd>Permette agli utenti di eseguire i comandi che
+ possono modificare il filesystem: STOR, DELE, RNFR, RNTO,
+ MKD, RMD, APPE e SITE .</dd>
+
+ <dt>idle_session_timeout=600</dt>
+
+ <dd>Permette agli utenti di restare connessi piu' a
+ lungo, utile per i webdesigners che passano intere
+ giornate connessi al server.</dd>
+ </dl>
+ </div>