<html lang="it">
<head>
<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 7 December 2008), see www.w3.org">
+ "HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org">
<meta http-equiv="Content-Type" content=
"text/html; charset=iso-8859-1">
<meta name="generator" content=
<style type="text/css">
/*
- :Author: David Goodger (goodger@python.org)
- :Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $
- :Copyright: This stylesheet has been placed in the public domain.
-
- Default cascading style sheet for the HTML output of Docutils.
-
- See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
- customize this style sheet.
+ Author: Peter Parente
+ Date: 2008/01/22
+ Version: 1.0
+ Copyright: This stylesheet has been placed in the public domain - free to edit and use for all uses.
*/
- /* used to remove borders from tables and images */
- .borderless, table.borderless td, table.borderless th {
- border: 0 }
+ body {
+ font: 100% sans-serif;
+ background: #ffffff;
+ color: black;
+ margin: 2em;
+ padding: 0em 2em;
+ }
+ pre.literal-block {
+ overflow: auto;
+ padding: 5px;
+ background-color: #eeffcc;
+ color: #333333;
+ line-height: 120%;
+ border: 1px solid #ac9;
+ border-left: none;
+ border-right: none;
+ }
- table.borderless td, table.borderless th {
- /* Override padding for "table.docutils td" with "! important".
- The right padding separates the table cells. */
- padding: 0 0.5em 0 0 ! important }
-
- .first {
- /* Override more specific margin styles with "! important". */
- margin-top: 0 ! important }
+ p.topic-title {
+ font-weight: bold;
+ }
- .last, .with-subtitle {
- margin-bottom: 0 ! important }
+ table.docinfo {
+ text-align: left;
+ margin: 2em 0em;
+ }
- .hidden {
- display: none }
+ a[href] {
+ color: #436976;
+ background-color: transparent;
+ }
a.toc-backref {
- text-decoration: none ;
- color: black }
-
- blockquote.epigraph {
- margin: 2em 5em ; }
-
- dl.docutils dd {
- margin-bottom: 0.5em }
-
- /* Uncomment (and remove this text!) to get bold-faced definition list terms
- dl.docutils dt {
- font-weight: bold }
- */
-
- div.abstract {
- margin: 2em 5em }
-
- div.abstract p.topic-title {
- font-weight: bold ;
- text-align: center }
-
- div.admonition, div.attention, div.caution, div.danger, div.error,
- div.hint, div.important, div.note, div.tip, div.warning {
- margin: 2em ;
- border: medium outset ;
- padding: 1em }
-
- div.admonition p.admonition-title, div.hint p.admonition-title,
- div.important p.admonition-title, div.note p.admonition-title,
- div.tip p.admonition-title {
- font-weight: bold ;
- font-family: sans-serif }
-
- div.attention p.admonition-title, div.caution p.admonition-title,
- div.danger p.admonition-title, div.error p.admonition-title,
- div.warning p.admonition-title {
- color: red ;
- font-weight: bold ;
- font-family: sans-serif }
-
- /* Uncomment (and remove this text!) to get reduced vertical space in
- compound paragraphs.
- div.compound .compound-first, div.compound .compound-middle {
- margin-bottom: 0.5em }
-
- div.compound .compound-last, div.compound .compound-middle {
- margin-top: 0.5em }
- */
-
- div.dedication {
- margin: 2em 5em ;
- text-align: center ;
- font-style: italic }
-
- div.dedication p.topic-title {
- font-weight: bold ;
- font-style: normal }
-
- div.figure {
- margin-left: 2em ;
- margin-right: 2em }
-
- div.footer, div.header {
- clear: both;
- font-size: smaller }
-
- div.line-block {
- display: block ;
- margin-top: 1em ;
- margin-bottom: 1em }
+ text-decoration: none;
+ }
+
+ h1 a[href] {
+ color: #003a6b;
+ text-decoration: none;
+ background-color: transparent;
+ }
+
+ a.strong {
+ font-weight: bold;
+ }
+
+ img {
+ margin: 0;
+ border: 0;
+ }
+
+ p {
+ margin: 0.5em 0 1em 0;
+ text-align: justify;
+ line-height: 1.5em;
+ }
+
+
+ p a:visited {
+ color: purple;
+ background-color: transparent;
+ }
+
+ p a:active {
+ color: red;
+ background-color: transparent;
+ }
+
+ a:hover {
+ text-decoration: none;
+ }
+
+ p img {
+ border: 0;
+ margin: 0;
+ }
- div.line-block div.line-block {
- margin-top: 0 ;
- margin-bottom: 0 ;
- margin-left: 1.5em }
-
- div.sidebar {
- margin: 0 0 0.5em 1em ;
- border: medium outset ;
- padding: 1em ;
- background-color: #ffffee ;
- width: 40% ;
- float: right ;
- clear: right }
-
- div.sidebar p.rubric {
- font-family: sans-serif ;
- font-size: medium }
-
- div.system-messages {
- margin: 5em }
-
- div.system-messages h1 {
- color: red }
-
- div.system-message {
- border: medium outset ;
- padding: 1em }
-
- div.system-message p.system-message-title {
- color: red ;
- font-weight: bold }
-
- div.topic {
- margin: 2em }
-
- h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
- h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
- margin-top: 0.4em }
+ p.rubric {
+ font-weight: bold;
+ font-style: italic;
+ }
h1.title {
- text-align: center }
+ color: #003a6b;
+ font-size: 250%;
+ margin-bottom: 0em;
+ }
h2.subtitle {
- text-align: center }
-
- hr.docutils {
- width: 75% }
-
- img.align-left {
- clear: left }
-
- img.align-right {
- clear: right }
-
- ol.simple, ul.simple {
- margin-bottom: 1em }
-
- ol.arabic {
- list-style: decimal }
-
- ol.loweralpha {
- list-style: lower-alpha }
+ color: #003a6b;
+ border-bottom: 0px;
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ color: #555;
+ background-color: transparent;
+ margin: 0em;
+ padding-top: 0.5em;
+ }
+
+ h1 {
+ font-size: 160%;
+ margin-bottom: 0.5em;
+ border-bottom: 2px solid #aaa;
+ }
+
+ h2 {
+ font-size: 140%;
+ margin-bottom: 0.5em;
+ border-bottom: 1px solid #aaa;
+ }
+
+ h3 {
+ font-size: 130%;
+ margin-bottom: 0.5em;
+ }
+
+ h4 {
+ font-size: 110%;
+ font-weight: bold;
+ margin-bottom: 0.5em;
+ }
+
+ h5 {
+ font-size: 105%;
+ font-weight: bold;
+ margin-bottom: 0.5em;
+ }
+
+ h6 {
+ font-size: 100%;
+ font-weight: bold;
+ margin-bottom: 0.5em;
+ }
+
+ dt {
+ font-style: italic;
+ }
+
+ dd {
+ margin-bottom: 1.5em;
+ }
+
+ div.admonition, div.note, div.tip, div.caution, div.important {
+ margin: 2em 2em;
+ padding: 0em 1em;
+ border-top: 1px solid #aaa;
+ border-left: 1px solid #aaa;
+ border-bottom: 2px solid #555;
+ border-right: 2px solid #555;
+ }
+
+ div.important {
+ background: transparent url('../images/important.png') 10px 2px no-repeat;
+ }
+
+ div.caution {
+ background: transparent url('../images/caution.png') 10px 2px no-repeat;
+ }
+
+ div.note {
+ background: transparent url('../images/note.png') 10px 2px no-repeat;
+ }
+
+ div.tip {
+ background: transparent url('../images/tip.png') 10px 2px no-repeat;
+ }
+
+ div.admonition-example {
+ background: transparent url('../images/tip.png') 10px 2px no-repeat;
+ }
+
+ div.admonition-critical-example {
+ background: transparent url('../images/important.png') 10px 2px no-repeat;
+ }
+
+ p.admonition-title {
+ font-weight: bold;
+ border-bottom: 1px solid #aaa;
+ padding-left: 30px;
+ }
- ol.upperalpha {
- list-style: upper-alpha }
-
- ol.lowerroman {
- list-style: lower-roman }
-
- ol.upperroman {
- list-style: upper-roman }
-
- p.attribution {
- text-align: right ;
- margin-left: 50% }
+ table.docutils {
+ text-align: left;
+ border: 1px solid gray;
+ border-collapse: collapse;
+ width: 100%;
+ margin: 1.5em 0em;
+ }
- p.caption {
- font-style: italic }
+ table.docutils caption {
+ font-style: italic;
+ }
- p.credits {
- font-style: italic ;
- font-size: smaller }
+ table.docutils td, table.docutils th {
+ padding: 0.25em 0.5em;
+ }
- p.label {
- white-space: nowrap }
+ table.docutils th {
+ background-color: #dddddd;
+ }
- p.rubric {
- font-weight: bold ;
- font-size: larger ;
- color: maroon ;
- text-align: center }
+ div.sidebar {
+ width: 33%;
+ float: right;
+ margin: 0em 2em;
+ padding: 0em 1em;
+ border-top: 1px solid #aaa;
+ border-left: 1px solid #aaa;
+ border-bottom: 2px solid #555;
+ border-right: 2px solid #555;
+ }
p.sidebar-title {
- font-family: sans-serif ;
- font-weight: bold ;
- font-size: larger }
+ margin-bottom: 0em;
+ color: #003a6b;
+ border-bottom: 1px solid #aaa;
+ font-weight: bold;
+ }
p.sidebar-subtitle {
- font-family: sans-serif ;
- font-weight: bold }
-
- p.topic-title {
- font-weight: bold }
-
- pre.address {
- margin-bottom: 0 ;
- margin-top: 0 ;
- font-family: serif ;
- font-size: 100% }
-
- pre.literal-block, pre.doctest-block {
- margin-left: 2em ;
- margin-right: 2em }
-
- span.classifier {
- font-family: sans-serif ;
- font-style: oblique }
-
- span.classifier-delimiter {
- font-family: sans-serif ;
- font-weight: bold }
-
- span.interpreted {
- font-family: sans-serif }
-
- span.option {
- white-space: nowrap }
-
- span.pre {
- white-space: pre }
-
- span.problematic {
- color: red }
-
- span.section-subtitle {
- /* font-size relative to parent (h1..h6 element) */
- font-size: 80% }
-
- table.citation {
- border-left: solid 1px gray;
- margin-left: 1px }
-
- table.docinfo {
- margin: 2em 4em }
-
- table.docutils {
- margin-top: 0.5em ;
- margin-bottom: 0.5em }
-
- table.footnote {
- border-left: solid 1px black;
- margin-left: 1px }
-
- table.docutils td, table.docutils th,
- table.docinfo td, table.docinfo th {
- padding-left: 0.5em ;
- padding-right: 0.5em ;
- vertical-align: top }
-
- table.docutils th.field-name, table.docinfo th.docinfo-name {
- font-weight: bold ;
- text-align: left ;
- white-space: nowrap ;
- padding-left: 0 }
-
- h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
- h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
- font-size: 100% }
-
- ul.auto-toc {
- list-style-type: none }
+ margin-top: 0em;
+ font-style: italic;
+ color: #003a6b;
+ }
</style>
</head>
<h1 class="title">Servizi di rete passo a passo</h1>
<h2 class="subtitle" id=
- "appunti-sulla-installazione-e-configurazione-dei-servizi">
- Appunti sulla installazione e configurazione dei servizi</h2>
+ "appunti-sulla-installazione-e-configurazione-dei-servizi-di-rete-in-ambiete-gnu-linx">
+ Appunti sulla installazione e configurazione dei servizi di
+ rete in ambiete Gnu/Linx</h2>
<blockquote>
<table class="docutils field-list" frame="void" rules="none">
<tr class="field">
<th class="field-name">Version:</th>
- <td class="field-body">0.4</td>
+ <td class="field-body">0.94</td>
</tr>
</tbody>
</table>
</blockquote>
- <p>Questa guida e' dedicata agli studenti delle lezioni di
- informatica tenute da Andrea nel lab208. Nella parte iniziale
- sono presenti alcuni richiami alle impostazioni di rete e di
- installazione del laboratorio 208 (lab208) dove generalmente si
- tengono le lezioni. Questi parametri non sono interessanti per
- chiunque si trovasse al di fuori della rete piffa.net .</p>
+ <p>Questa guida tratta la configurazione di base dei principali
+ servizi di rete utilizzati con sistemi operativi <em>Unix</em>
+ e derivati come <em>GNU/Linux</em> per gli studenti dei corsi
+ per amministratori di rete in ambiente <em>GNU/Linux</em>. In
+ particolare questa guida e' stata scritta usando come
+ riferimento la distribuzione <em>Debian GNU/Linux</em>. Gli
+ esempi presentati dovrebbero quindi essere direttamente
+ utilizzabili anche su distribuzioni derivate da Debian come
+ Ubuntu, per sistemi operativi diversi si presti attenzione ai
+ percorsi dei file citati.</p>
<div class="contents topic" id="indice-degli-argomenti">
<p class="topic-title first">Indice degli argomenti</p>
<ul class="auto-toc simple">
<li>
<a class="reference internal" href=
- "#configurazione-sistema" id="id6" name=
- "id6">1 Configurazione sistema</a>
+ "#configurazione-sistema" id="id9" name=
+ "id9">1 Configurazione sistema</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
- "#solo-per-uso-interno" id="id7" name=
- "id7">1.1 Solo per uso
+ "#solo-per-uso-interno" id="id10" name=
+ "id10">1.1 Solo per uso
interno</a></li>
- <li><a class="reference internal" href="#rete" id="id8"
- name="id8">1.2 Rete</a></li>
+ <li>
+ <a class="reference internal" href="#rete" id="id11"
+ name="id11">1.2 Rete</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#interfaces" id="id12" name=
+ "id12">1.2.1 interfaces</a></li>
+ </ul>
+ </li>
<li><a class="reference internal" href=
- "#bash-completion" id="id9" name=
- "id9">1.3 Bash completion</a></li>
+ "#bash-completion" id="id13" name=
+ "id13">1.3 Bash completion</a></li>
- <li><a class="reference internal" href="#vim" id="id10"
- name="id10">1.4 Vim</a></li>
+ <li><a class="reference internal" href="#vim" id="id14"
+ name="id14">1.4 Vim</a></li>
- <li><a class="reference internal" href="#vnc" id="id11"
- name="id11">1.5 VNC</a></li>
+ <li><a class="reference internal" href="#vnc" id="id15"
+ name="id15">1.5 VNC</a></li>
<li><a class="reference internal" href=
- "#lista-dei-pacchetti-di-base" id="id12" name=
- "id12">1.6 Lista dei pacchetti di
+ "#lista-dei-pacchetti-di-base" id="id16" name=
+ "id16">1.6 Lista dei pacchetti di
base</a></li>
<li>
<a class="reference internal" href=
- "#apt-configurazione" id="id13" name=
- "id13">1.7 Apt configurazione</a>
+ "#apt-configurazione" id="id17" name=
+ "id17">1.7 Apt configurazione</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#sources-list" id="id18" name=
+ "id18">1.7.1 sources.list</a></li>
+
+ <li><a class="reference internal" href=
+ "#etc-apt-apt-conf" id="id19" name=
+ "id19">1.7.2 /etc/apt/apt.conf</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href="#squid" id="id20"
+ name="id20">2 Squid</a>
+
+ <ul class="auto-toc">
+ <li>
+ <a class="reference internal" href=
+ "#configurazione-squid-conf" id="id21" name=
+ "id21">2.1 Configurazione:
+ squid.conf</a>
+
+ <ul class="auto-toc">
+ <li>
+ <a class="reference internal" href="#cache-dir"
+ id="id22" name=
+ "id22">2.1.1 Cache_dir</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#opzioni-del-file-system" id="id23" name=
+ "id23">2.1.1.1 Opzioni del
+ file system</a></li>
+ </ul>
+ </li>
+
+ <li><a class="reference internal" href=
+ "#configurazioni-di-cache-dir" id="id24" name=
+ "id24">2.1.2 Configurazioni di
+ Cache_dir</a></li>
+
+ <li><a class="reference internal" href=
+ "#tag-maximum-object-size" id="id25" name=
+ "id25">2.1.3 TAG:
+ maximum_object_size</a></li>
+
+ <li><a class="reference internal" href=
+ "#tag-cache-mem" id="id26" name=
+ "id26">2.1.4 TAG:
+ cache_mem</a></li>
+
+ <li><a class="reference internal" href=
+ "#tag-minimum-object-size" id="id27" name=
+ "id27">2.1.5 TAG:
+ minimum_object_size</a></li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href=
+ "#negoziazione-degli-accesi-al-servizio" id="id28"
+ name="id28">2.2 Negoziazione degli
+ accesi al servizio</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#acl-e-http-access" id="id29" name=
+ "id29">2.2.1 ACL e http
+ access</a></li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href="#testare-squid"
+ id="id30" name="id30">2.3 Testare
+ Squid</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
- "#sources-list" id="id14" name=
- "id14">1.7.1 sources.list</a></li>
+ "#client-wgetrc" id="id31" name=
+ "id31">2.3.1 Client:
+ ~/.wgetrc</a></li>
<li><a class="reference internal" href=
- "#etc-apt-apt-conf" id="id15" name=
- "id15">1.7.2 /etc/apt/apt.conf</a></li>
+ "#server-access-log" id="id32" name=
+ "id32">2.3.2 Server:
+ access.log</a></li>
</ul>
</li>
</ul>
</li>
- <li><a class="reference internal" href="#squid" id="id16"
- name="id16">2 Squid</a></li>
+ <li><a class="reference internal" href="#tiny-proxy" id=
+ "id33" name="id33">3 Tiny proxy</a></li>
<li>
- <a class="reference internal" href="#apache" id="id17"
- name="id17">3 Apache</a>
+ <a class="reference internal" href="#apache" id="id34"
+ name="id34">4 Apache</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
- "#pacchetti-da-installare" id="id18" name=
- "id18">3.1 Pacchetti da
+ "#pacchetti-da-installare" id="id35" name=
+ "id35">4.1 Pacchetti da
installare::</a></li>
<li><a class="reference internal" href=
- "#configurazione-di-apache" id="id19" name=
- "id19">3.2 Configurazione di
+ "#configurazione-di-apache" id="id36" name=
+ "id36">4.2 Configurazione di
Apache</a></li>
<li><a class="reference internal" href="#apache-conf"
- id="id20" name=
- "id20">3.3 apache.conf</a></li>
+ id="id37" name=
+ "id37">4.3 apache.conf</a></li>
<li>
<a class="reference internal" href=
- "#installazione-di-php" id="id21" name=
- "id21">3.4 Installazione di PHP</a>
+ "#installazione-di-php" id="id38" name=
+ "id38">4.4 Installazione di PHP</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
- "#test-del-modulo-php" id="id22" name=
- "id22">3.4.1 Test del modulo
+ "#test-del-modulo-php" id="id39" name=
+ "id39">4.4.1 Test del modulo
php</a></li>
<li><a class="reference internal" href=
- "#installazione-del-supporto-per-mysql" id="id23"
- name="id23">3.4.2 Installazione
- del supporto per Mysql</a></li>
+ "#installazione-del-supporto-per-mysql-a-php" id=
+ "id40" name=
+ "id40">4.4.2 Installazione del
+ supporto per Mysql a PHP</a></li>
<li><a class="reference internal" href=
- "#phpmyadmin" id="id24" name=
- "id24">3.4.3 phpmyadmin</a></li>
+ "#phpmyadmin" id="id41" name=
+ "id41">4.4.3 phpmyadmin</a></li>
<li><a class="reference internal" href=
- "#installazione-del-supporto-per-postgresql" id=
- "id25" name=
- "id25">3.4.4 Installazione del
- supporto per Postgresql</a></li>
+ "#installazione-del-supporto-per-postgresql-a-php"
+ id="id42" name=
+ "id42">4.4.4 Installazione del
+ supporto per Postgresql a PHP</a></li>
<li><a class="reference internal" href=
- "#phppgadmin" id="id26" name=
- "id26">3.4.5 phppgadmin</a></li>
+ "#phppgadmin" id="id43" name=
+ "id43">4.4.5 phppgadmin</a></li>
</ul>
</li>
<li>
<a class="reference internal" href="#virtual-hosts"
- id="id27" name="id27">3.5 Virtual
+ id="id44" name="id44">4.5 Virtual
hosts</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
- "#gestione-dns" id="id28" name=
- "id28">3.5.1 Gestione DNS</a></li>
+ "#gestione-dns" id="id45" name=
+ "id45">4.5.1 Gestione DNS</a></li>
<li><a class="reference internal" href=
- "#virtual-host" id="id29" name=
- "id29">3.5.2 Virtual host</a></li>
+ "#eseguire-una-query-dns-con-dig" id="id46" name=
+ "id46">4.5.2 Eseguire una query
+ DNS con <tt class="docutils literal"><span class=
+ "pre">dig</span></tt>::</a></li>
+
+ <li><a class="reference internal" href="#id3" id=
+ "id47" name="id47">4.5.3 Virtual
+ hosts</a></li>
</ul>
</li>
<li>
<a class="reference internal" href=
- "#negoziazione-accessi" id="id30" name=
- "id30">3.6 Negoziazione accessi</a>
+ "#negoziazione-accessi" id="id48" name=
+ "id48">4.6 Negoziazione accessi</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
- "#limiti-su-base-ip" id="id31" name=
- "id31">3.6.1 Limiti su base
- ip</a></li>
-
- <li><a class="reference internal" href=
- "#user-authentication" id="id32" name=
- "id32">3.6.2 User
- Authentication</a></li>
+ "#limiti-su-base-ip" id="id49" name=
+ "id49">4.6.1 Limiti su base
+ IP</a></li>
</ul>
</li>
- <li><a class="reference internal" href=
- "#definire-la-cartella" id="id33" name=
- "id33">3.7 Definire la
- cartella</a></li>
+ <li>
+ <a class="reference internal" href=
+ "#user-authentication" id="id50" name=
+ "id50">4.7 User Authentication</a>
- <li><a class="reference internal" href=
- "#creazione-del-database-delle-passwords" id="id34"
- name="id34">3.8 Creazione del database
- delle passwords</a></li>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#definire-la-cartella" id="id51" name=
+ "id51">4.7.1 Definire la
+ cartella</a></li>
- <li><a class="reference internal" href="#id3" id="id35"
- name="id35">3.9 Configurazione di
- Apache</a></li>
+ <li><a class="reference internal" href=
+ "#creazione-del-database-delle-passwords" id="id52"
+ name="id52">4.7.2 Creazione del
+ database delle passwords</a></li>
+
+ <li><a class="reference internal" href="#id4" id=
+ "id53" name=
+ "id53">4.7.3 Configurazione di
+ Apache</a></li>
+ </ul>
+ </li>
<li><a class="reference internal" href="#cavets" id=
- "id36" name=
- "id36">3.10 Cavets</a></li>
+ "id54" name="id54">4.8 Cavets</a></li>
</ul>
</li>
<li>
<a class="reference internal" href="#domain-name-system"
- id="id37" name="id37">4 Domain Name
+ id="id55" name="id55">5 Domain Name
System</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
- "#nomi-di-dominio" id="id38" name=
- "id38">4.1 Nomi di dominio</a></li>
+ "#risoluzione-inversa" id="id56" name=
+ "id56">5.1 Risoluzione
+ Inversa</a></li>
+
+ <li><a class="reference internal" href=
+ "#nomi-di-dominio" id="id57" name=
+ "id57">5.2 Nomi di dominio</a></li>
<li><a class="reference internal" href=
- "#tipologie-di-record" id="id39" name=
- "id39">4.2 Tipologie di
+ "#tipologie-di-record" id="id58" name=
+ "id58">5.3 Tipologie di
record</a></li>
<li><a class="reference internal" href="#utilizzo" id=
- "id40" name=
- "id40">4.3 Utilizzo</a></li>
+ "id59" name=
+ "id59">5.4 Utilizzo</a></li>
<li><a class="reference internal" href=
- "#risoluzione-dei-nomi-di-dominio" id="id41" name=
- "id41">4.4 Risoluzione dei nomi di
+ "#risoluzione-dei-nomi-di-dominio" id="id60" name=
+ "id60">5.5 Risoluzione dei nomi di
dominio</a></li>
- <li><a class="reference internal" href="#dig" id="id42"
- name="id42">4.5 Dig</a></li>
+ <li><a class="reference internal" href="#dig" id="id61"
+ name="id61">5.6 Dig</a></li>
+
+ <li><a class="reference internal" href="#resolv-conf"
+ id="id62" name=
+ "id62">5.7 resolv.conf</a></li>
+
+ <li><a class="reference internal" href="#etc-hosts" id=
+ "id63" name=
+ "id63">5.8 /etc/hosts</a></li>
+
+ <li>
+ <a class="reference internal" href="#hostname" id=
+ "id64" name="id64">5.9 Hostname</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#fqdn" id=
+ "id65" name=
+ "id65">5.9.1 FQDN</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href="#dnsmasq" id="id66"
+ name="id66">6 DNSmasq</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#configurazione" id="id67" name=
+ "id67">6.1 Configurazione</a></li>
+
+ <li><a class="reference internal" href="#dhcp" id=
+ "id68" name="id68">6.2 DHCP</a></li>
+
+ <li><a class="reference internal" href="#dns-cache" id=
+ "id69" name="id69">6.3 DNS
+ cache</a></li>
</ul>
</li>
- <li><a class="reference internal" href="#dnsmasq" id="id43"
- name="id43">5 DNSmasq</a></li>
+ <li>
+ <a class="reference internal" href=
+ "#bind-dns-autoritativo" id="id70" name=
+ "id70">7 Bind : DNS Autoritativo</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#id5" id="id71"
+ name="id71">7.1 DNS cache</a></li>
+
+ <li>
+ <a class="reference internal" href=
+ "#ospitare-una-zona" id="id72" name=
+ "id72">7.2 Ospitare una zona</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#named-conf-local" id="id73" name=
+ "id73">7.2.1 named.conf.local</a></li>
+
+ <li>
+ <a class="reference internal" href=
+ "#configurazione-della-zona" id="id74" name=
+ "id74">7.2.2 Configurazione
+ della zona</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#soa-start-of-authority-record" id="id75"
+ name="id75">7.2.2.1 SOA: Start
+ of Authority Record</a></li>
+
+ <li><a class="reference internal" href=
+ "#altri-campi" id="id76" name=
+ "id76">7.2.2.2 Altri
+ campi:</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li><a class="reference internal" href="#dns-slave" id=
+ "id77" name="id77">7.3 DNS
+ slave</a></li>
+
+ <li>
+ <a class="reference internal" href=
+ "#aggiornamento-dinamico-nsupdate" id="id78" name=
+ "id78">7.4 Aggiornamento dinamico:
+ nsupdate</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#configurazione-client-nsupdate" id="id79" name=
+ "id79">7.4.1 Configurazione client
+ (nsupdate)</a></li>
+
+ <li><a class="reference internal" href=
+ "#configurazione-server-riconoscimento-chiave" id=
+ "id80" name=
+ "id80">7.4.2 Configurazione
+ server: riconoscimento chiave</a></li>
+
+ <li><a class="reference internal" href=
+ "#server-gestione-dell-intera-zona" id="id81" name=
+ "id81">7.4.3 Server: gestione
+ dell'intera zona</a></li>
+
+ <li><a class="reference internal" href=
+ "#automatizzare-l-aggiornamento-dinamico" id="id82"
+ name="id82">7.4.4 Automatizzare
+ l'aggiornamento dinamico</a></li>
+ </ul>
+ </li>
+
+ <li><a class="reference internal" href=
+ "#link-suggeriti" id="id83" name=
+ "id83">7.5 Link suggeriti:</a></li>
+ </ul>
+ </li>
<li>
- <a class="reference internal" href="#samba" id="id44"
- name="id44">6 Samba</a>
+ <a class="reference internal" href="#samba" id="id84"
+ name="id84">8 Samba</a>
<ul class="auto-toc">
<li><a class="reference internal" href="#pacchetti" id=
- "id45" name=
- "id45">6.1 Pacchetti</a></li>
+ "id85" name=
+ "id85">8.1 Pacchetti</a></li>
<li><a class="reference internal" href=
- "#passwords-e-autenticazione" id="id46" name=
- "id46">6.2 Passwords e
+ "#passwords-e-autenticazione" id="id86" name=
+ "id86">8.2 Passwords e
autenticazione</a></li>
<li><a class="reference internal" href=
- "#creazione-utenti" id="id47" name=
- "id47">6.3 Creazione Utenti</a></li>
+ "#creazione-utenti" id="id87" name=
+ "id87">8.3 Creazione Utenti</a></li>
<li>
<a class="reference internal" href=
- "#creare-la-condivisione" id="id48" name=
- "id48">6.4 Creare la
+ "#creare-la-condivisione" id="id88" name=
+ "id88">8.4 Creare la
condivisione</a>
<ul class="auto-toc">
<li><a class="reference internal" href=
"#sicurezza-permessi-di-esecuzione-sul-server" id=
- "id49" name=
- "id49">6.4.1 Sicurezza: permessi
+ "id89" name=
+ "id89">8.4.1 Sicurezza: permessi
di esecuzione sul server</a></li>
</ul>
</li>
- <li><a class="reference internal" href=
- "#configurazione-dell-applicativo-samba-vero-e-proprio"
- id="id50" name=
- "id50">6.5 Configurazione
- dell'applicativo Samba vero e proprio.</a></li>
+ <li>
+ <a class="reference internal" href=
+ "#configurazione-dell-applicativo-samba-vero-e-proprio"
+ id="id90" name=
+ "id90">8.5 Configurazione
+ dell'applicativo Samba vero e proprio.</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#creazione-di-un-gruppo" id="id91" name=
+ "id91">8.5.1 Creazione di un
+ gruppo</a></li>
+ </ul>
+ </li>
<li><a class="reference internal" href=
- "#testare-il-servizio" id="id51" name=
- "id51">6.6 Testare il
+ "#testare-il-servizio" id="id92" name=
+ "id92">8.6 Testare il
Servizio</a></li>
</ul>
</li>
- <li><a class="reference internal" href="#note" id="id52"
- name="id52">7 NOTE</a></li>
- </ul>
- </div>
+ <li>
+ <a class="reference internal" href=
+ "#server-di-posta-postfix" id="id93" name=
+ "id93">9 Server di posta: Postfix</a>
- <p>Generato con: <a class="reference external" href=
- "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
+ <ul class="auto-toc">
+ <li>
+ <a class="reference internal" href=
+ "#test-del-server-smtp" id="id94" name=
+ "id94">9.1 Test del server smtp</a>
- <div class="section" id="configurazione-sistema">
- <h1><a class="toc-backref" href=
- "#id6">1 Configurazione sistema</a></h1>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#swaks" id=
+ "id95" name=
+ "id95">9.1.1 Swaks</a></li>
+ </ul>
+ </li>
- <div class="section" id="solo-per-uso-interno">
- <h2><a class="toc-backref" href=
- "#id7">1.1 Solo per uso interno</a></h2>
+ <li><a class="reference internal" href="#imap-e-pop"
+ id="id96" name="id96">9.2 Imap e
+ pop</a></li>
- <p>Impostazioni di base per la configurazione del sistema
- operativo e della rete nel laboratorio 208 facente parte
- della rete piffa.net .</p>
+ <li>
+ <a class="reference internal" href=
+ "#client-a-riga-di-comando" id="id97" name=
+ "id97">9.3 Client a riga di
+ comando</a>
- <p>Qui riportati per comodita' degli studenti (e del
- docente che non sara' <strong>mai piu'</strong> costretto a
- ripeterli! )</p>
- </div>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#mailx" id=
+ "id98" name=
+ "id98">9.3.1 mailx</a></li>
- <div class="section" id="rete">
- <h2><a class="toc-backref" href=
- "#id8">1.2 Rete</a></h2>
+ <li><a class="reference internal" href="#mutt" id=
+ "id99" name=
+ "id99">9.3.2 Mutt</a></li>
- <p>Parametri della rete attualmente in uso:</p>
+ <li><a class="reference internal" href=
+ "#web-client" id="id100" name=
+ "id100">9.3.3 Web client</a></li>
+ </ul>
+ </li>
- <table border="1" class="docutils">
- <colgroup>
- <col width="45%">
- <col width="55%">
- </colgroup>
+ <li>
+ <a class="reference internal" href="#graylisting" id=
+ "id101" name=
+ "id101">9.4 Graylisting</a>
- <tbody valign="top">
- <tr>
- <td colspan="2">Parametri della rete</td>
- </tr>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#abilitazione-in-postfix" id="id102" name=
+ "id102">9.4.1 Abilitazione in
+ Postfix</a></li>
- <tr>
- <td>rete</td>
+ <li><a class="reference internal" href="#test" id=
+ "id103" name=
+ "id103">9.4.2 Test</a></li>
- <td>10.10.208.0/24</td>
- </tr>
+ <li><a class="reference internal" href=
+ "#statistiche" id="id104" name=
+ "id104">9.4.3 Statistiche</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
- <tr>
- <td>netmask</td>
+ <li>
+ <a class="reference internal" href="#firewall" id="id105"
+ name="id105">10 Firewall</a>
- <td>255.255.255.0</td>
- </tr>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#links" id=
+ "id106" name=
+ "id106">10.1 Links</a></li>
- <tr>
- <td>broadcast</td>
+ <li><a class="reference internal" href="#ipfilter" id=
+ "id107" name=
+ "id107">10.2 Ipfilter</a></li>
- <td>10.10.208.255</td>
- </tr>
+ <li>
+ <a class="reference internal" href=
+ "#progettazione-di-un-firewall" id="id108" name=
+ "id108">10.3 Progettazione di un
+ firewall</a>
- <tr>
- <td>gateway</td>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#collocazione" id="id109" name=
+ "id109">10.3.1 Collocazione</a></li>
- <td>10.10.208.254</td>
- </tr>
+ <li><a class="reference internal" href=
+ "#policy-di-default" id="id110" name=
+ "id110">10.3.2 Policy di
+ default</a></li>
- <tr>
- <td>gateway</td>
+ <li><a class="reference internal" href="#hardware"
+ id="id111" name=
+ "id111">10.3.3 Hardware</a></li>
+ </ul>
+ </li>
- <td>10.10.208.250 persistente</td>
- </tr>
+ <li><a class="reference internal" href=
+ "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
+ "id112" name="id112">10.4 Percorso dei
+ pacchetti tra tabelle e catene</a></li>
- <tr>
- <td>DNS</td>
+ <li>
+ <a class="reference internal" href=
+ "#concetti-di-base" id="id113" name=
+ "id113">10.5 Concetti di base</a>
- <td>10.10.208.254</td>
- </tr>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#tabelle-catene-regole" id="id114" name=
+ "id114">10.5.1 Tabelle, catene,
+ regole</a></li>
- <tr>
- <td>DNS</td>
+ <li><a class="reference internal" href="#match" id=
+ "id115" name=
+ "id115">10.5.2 Match</a></li>
- <td>10.10.208.250 persistente</td>
- </tr>
- </tbody>
+ <li><a class="reference internal" href="#targets"
+ id="id116" name=
+ "id116">10.5.3 Targets</a></li>
+ </ul>
+ </li>
+
+ <li><a class="reference internal" href=
+ "#tabella-filter" id="id117" name=
+ "id117">10.6 Tabella Filter</a></li>
+
+ <li><a class="reference internal" href=
+ "#flush-automatico-per-macchine-remote" id="id118"
+ name="id118">10.7 Flush automatico per
+ macchine remote</a></li>
+
+ <li><a class="reference internal" href=
+ "#gestione-regole-rules" id="id119" name=
+ "id119">10.8 Gestione regole
+ (rules)</a></li>
+
+ <li>
+ <a class="reference internal" href=
+ "#salvataggio-regole" id="id120" name=
+ "id120">10.9 Salvataggio regole</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#iptables-save" id="id121" name=
+ "id121">10.9.1 Iptables-save</a></li>
+
+ <li><a class="reference internal" href=
+ "#iptables-restore" id="id122" name=
+ "id122">10.9.2 Iptables-restore</a></li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href="#esempi" id=
+ "id123" name=
+ "id123">10.10 Esempi</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#bloccare-i-ping-dall-esterno" id="id124" name=
+ "id124">10.10.1 Bloccare i ping
+ dall'esterno</a></li>
+
+ <li><a class="reference internal" href=
+ "#masquerading-snat" id="id125" name=
+ "id125">10.10.2 Masquerading
+ (sNAT)</a></li>
+
+ <li><a class="reference internal" href=
+ "#brute-force" id="id126" name=
+ "id126">10.10.3 Brute
+ force</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href="#ftp-server" id=
+ "id127" name="id127">11 FTP Server</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#id8" id=
+ "id128" name=
+ "id128">11.1 Pacchetti</a></li>
+
+ <li><a class="reference internal" href="#sessioni-ftp"
+ id="id129" name="id129">11.2 Sessioni
+ ftp</a></li>
+
+ <li><a class="reference internal" href=
+ "#configurazione-iniziale" id="id130" name=
+ "id130">11.3 Configurazione
+ iniziale</a></li>
+
+ <li><a class="reference internal" href=
+ "#abilitare-gli-utenti-locali" id="id131" name=
+ "id131">11.4 Abilitare gli utenti
+ locali</a></li>
+
+ <li><a class="reference internal" href="#jail-chroot"
+ id="id132" name="id132">11.5 Jail
+ chroot</a></li>
+
+ <li><a class="reference internal" href=
+ "#permessi-sul-filesystem" id="id133" name=
+ "id133">11.6 Permessi sul
+ filesystem</a></li>
+
+ <li><a class="reference internal" href=
+ "#shell-dell-utente" id="id134" name=
+ "id134">11.7 Shell
+ dell'utente</a></li>
+
+ <li><a class="reference internal" href="#altre-opzioni"
+ id="id135" name="id135">11.8 Altre
+ opzioni</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+
+ <p>Generato il 2010-02-09 con: <a class="reference external"
+ href=
+ "http://docutils.sourceforge.net/rst.html">http://docutils.sourceforge.net/rst.html</a></p>
+
+ <div class="section" id="configurazione-sistema">
+ <h1><a class="toc-backref" href=
+ "#id9">1 Configurazione sistema</a></h1>
+
+ <div class="section" id="solo-per-uso-interno">
+ <h2><a class="toc-backref" href=
+ "#id10">1.1 Solo per uso interno</a></h2>
+
+ <p>Impostazioni di base per la configurazione del sistema
+ operativo e della rete nel laboratorio 208 facente parte
+ della rete piffa.net .</p>
+
+ <p>Sono qui riportati i parametri della rete locale per
+ comodita' degli studenti, gli altri lettori possono
+ considerarli come riferimento per comprendere i valori
+ espressi nei vari file di configurazione. Ad esempio:
+ quando leggerete <tt class="docutils literal"><span class=
+ "pre">10.10.208.248:3128</span></tt> saprete che si tratta
+ del nostro <em>proxy http</em> in ascolto sulla porta
+ <cite>3128</cite>, stara' quindi a voi sostituire i dati
+ con gli equivalenti <em>IP</em> della vostra rete.</p>
+ </div>
+
+ <div class="section" id="rete">
+ <h2><a class="toc-backref" href=
+ "#id11">1.2 Rete</a></h2>
+
+ <p>Parametri della rete attualmente in uso:</p>
+
+ <table border="1" class="docutils">
+ <colgroup>
+ <col width="45%">
+ <col width="55%">
+ </colgroup>
+
+ <tbody valign="top">
+ <tr>
+ <td colspan="2">Parametri della rete</td>
+ </tr>
+
+ <tr>
+ <td>rete</td>
+
+ <td>10.10.208.0/24</td>
+ </tr>
+
+ <tr>
+ <td>netmask</td>
+
+ <td>255.255.255.0</td>
+ </tr>
+
+ <tr>
+ <td>broadcast</td>
+
+ <td>10.10.208.255</td>
+ </tr>
+
+ <tr>
+ <td>gateway</td>
+
+ <td>10.10.208.248</td>
+ </tr>
+
+ <tr>
+ <td>DNS</td>
+
+ <td>10.10.208.248</td>
+ </tr>
+ </tbody>
</table>
- <p>Sul portatile di Andrea, corrispondente all'ip 254, gira
- un DHCP, proxy http e mirror di Debian ( <a class=
- "reference external" href=
- "http://debian.piffa.net">http://debian.piffa.net</a>). Se
- Andrea non e' in aula (o ancora peggio non c'e' il suo
- portatile Net) gli studenti dovranno darsi un indirizzo ip
- manualmente e disabilitare il proxy (che pero' e
- trasparente, quindi fate pure come se non ci fosse ;) .</p>
+ <p>Dal server locale degli studeti,
+ <strong>Bender</strong>, corrispondente all'IP <tt class=
+ "docutils literal"><span class=
+ "pre">10.10.208.248</span></tt>, vengono erogati i servizi
+ DHCP, DNS, gateway (con NAT), proxy http e mirror della
+ distribuzione Debian ( <a class="reference external" href=
+ "http://debian.piffa.net">http://debian.piffa.net</a>).
+ Altri servizi in esecuzione sul server:</p>
+
+ <ul class="simple">
+ <li>Rsync server e altri software di aggiornamento /
+ installazione di massa</li>
+
+ <li>Server imap / pop3 / webmail / smtp</li>
+
+ <li>Server ssh per i test degli studenti</li>
+
+ <li>File server Samba, NFS e controller di qualsiasi
+ altro FS distribuito</li>
+
+ <li>Print server per la gestione delle stampanti</li>
+
+ <li>DNS server</li>
+
+ <li>Mirror locale delle *.iso dei sistemi operativi e dei
+ vari software usati durante le lezioni</li>
+
+ <li>Spazi web con PHP, MySQL, Postgresql (altri DB o
+ framework vengono attivati a seconda dei corsi
+ attivi)</li>
+ </ul>
+
+ <p>Durante il corso delle lezioni e' opportuno che le
+ macchine degli studenti si appoggino al server Bender
+ (ottetto finale <tt class="docutils literal"><span class=
+ "pre">248</span></tt>), nel caso questo non fosse
+ raggiungibile (ad esempio per permettere impostazioni di
+ DHCP / routing diverse) sara' comunque disponibile il
+ <tt class="docutils literal"><span class=
+ "pre">10.10.208.254</span></tt> come gateway | DNS per la
+ rete <tt class="docutils literal"><span class=
+ "pre">10.10.208.10</span></tt>.</p>
+
+ <p><strong>Non e' piu' possibile</strong> raggiungere
+ Bender tramite l'IP pubblico <tt class=
+ "docutils literal"><span class=
+ "pre">212.22.136.248</span></tt> o <em>qualsiasi altro
+ ip</em> della classe <tt class=
+ "docutils literal"><span class="pre">C</span> <span class=
+ "pre">212.22.136.0/24</span></tt> precedentemente
+ disponibile.</p>
+
+ <p>Il computer del docente con il server VNC e' sempre
+ configurato con l'ottetto finale: <tt class=
+ "docutils literal"><span class="pre">177</span></tt> della
+ rete utilizzata durante le lezioni (quindi generalmente la
+ VNC sara' disponibile sul <tt class=
+ "docutils literal"><span class=
+ "pre">10.10.208.177:1</span></tt>.</p>
+
+ <p>Gli studenti sono pregati di non impedire l'accesso SSH
+ alla propria macchina dal computer del docente, e non
+ modificare la password dell'utente <tt class=
+ "docutils literal"><span class="pre">root</span></tt> del
+ sistema operativo <em>pre-istallato</em> (ad es:
+ <em>Diurno</em>).</p>
+
+ <div class="section" id="interfaces">
+ <h3><a class="toc-backref" href=
+ "#id12">1.2.1 interfaces</a></h3>
+
+ <p>Segue un esempio del file di configurazione della
+ scheda di rete con configurazione statica:</p>
+
+ <p>/etc/network/interfaces:</p>
+ <pre class="literal-block">
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+iface lo inet loopback
+
+# La prima scheda di rete (se si chiama eth0)
+iface etho inet static
+ # esempio con dhcp:
+ # iface etho inet dhcp
+address 10.10.208.101
+netmask 255.255.255.0
+network 10.10.208.0
+broadcast 10.10.208.255
+gateway 10.10.208.254
+
+# Quali interfaccie devono partire automaticamente:
+auto lo eth0
+</pre>
+
+ <p>Controllare il nome della propria scheda di rete: a
+ volte <em>udev</em> rinomina la prima scheda a <tt class=
+ "docutils literal"><span class="pre">eth1</span></tt>,
+ oppure potreste avere piu' di una scheda di rete (anche
+ un'interfaccia <em>firewire</em> puo' essere
+ automaticamente abilitata come scheda di rete).</p>
+
+ <p>Se si usano <em>schede di rete virtuali</em> ( eth0:1
+ , eth0:1 , ...) ricordarsi che queste dipendono dalla
+ scheda fisica a cui sono associate: abbattere con
+ <tt class="docutils literal"><span class=
+ "pre">ifconfig</span> <span class="pre">down</span>
+ <span class="pre">eth0</span></tt> la scheda principale
+ fara' cadere anche queste. Tornando ad attivare la scada
+ principale con <tt class="docutils literal"><span class=
+ "pre">ifconfig</span> <span class="pre">eth0</span>
+ <span class="pre">up</span></tt> la virtuale tornera'
+ attiva: nel caso voleste disabilitarla dovrete quindi
+ sempre abbattere manualmente la scheda virtuale
+ <em>prima</em> della scheda reale.</p>
+
+ <p>I DNS vanno indicati nel file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/resolv.conf</span></tt> , la cui sintassi e'
+ spiegata al punto 4.6 . Come DNS si <em>deve</em> usare
+ il server Bender, alcuni parametri dei software di
+ installazione, risoluzione dei mirror, vengono
+ opportunamente modificatia da questo DNS.</p>
+ </div>
</div>
<div class="section" id="bash-completion">
<h2><a class="toc-backref" href=
- "#id9">1.3 Bash completion</a></h2>
+ "#id13">1.3 Bash completion</a></h2>
<p>Il completamento automatico della shell (che si attiva
premendo il tasto tab una o due volte mentre si sta
ad es. volendo digitare <tt class=
"docutils literal"><span class="pre">apt-get</span>
<span class="pre">inst[TAB]</span> <span class=
- "pre">xtigh[TAB]</span></tt> ora verra' completatato
+ "pre">xtigh[TAB]</span></tt> ora verra' completato
automaticamente sia la parola <tt class=
"docutils literal"><span class="pre">install</span></tt>
che il nome del pacchetto <tt class=
export PS1='\h:\w\$ '
umask 022
-# Decommentare le seguenti righr per abilitare la colorazione dei
+# De-commentare le seguenti righe per abilitare la colorazione dei
# nomi dei file:
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
-# Some more alias to avoid making mistakes:
+# Abilitare i seguenti alias per impostare la conferma per cancellare file
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'
<li><a class="reference external" href=
"http://www.caliban.org/bash/">Working more productively
with bash 2.x/3.x</a></li>
+
+ <li>UNIX / Linux Shell Scripting Tutorial: <a class=
+ "reference external" href=
+ "http://steve-parker.org/sh/sh.shtml">http://steve-parker.org/sh/sh.shtml</a></li>
</ul>
</div>
<div class="section" id="vim">
<h2><a class="toc-backref" href=
- "#id10">1.4 Vim</a></h2>
+ "#id14">1.4 Vim</a></h2>
<p>Vim e' l'editor di testo preferito dai sistemisti,
quindi sara' conveniente impostare fin da subito alcune
impostazioni per renderlo piu' comodo.</p>
<p>Assicurarsi che sia installata nel sistema la versione
- completa dell'editor <tt class=
- "docutils literal"><span class="pre">vim</span></tt>
- nstallando il pacchetto vimi:</p>
+ completa dell'editor installando il pacchetto <tt class=
+ "docutils literal"><span class="pre">vim</span></tt>:</p>
+ <pre class="literal-block">
+# apt-get install vim
+</pre>
+
+ <p>Modificare poi il file di configurazione generale
+ <tt class="docutils literal"><span class=
+ "pre">/etc/vim/vimrc</span></tt></p>
<pre class="literal-block">
- # apt-get install vim
-
-e modificare il file di configurazione generale ``/etc/vim/vimrc`` ::
-
- " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
- " /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
- " you can find below. If you wish to change any of those settings, you should
- " do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
- " everytime an upgrade of the vim packages is performed. It is recommended to
- " make changes after sourcing debian.vim since it alters the value of the
- " 'compatible' option.
-
- " This line should not be removed as it ensures that various options are
- " properly set to work with the Vim-related packages available in Debian.
- runtime! debian.vim
-
- " Uncomment the next line to make Vim more Vi-compatible
- " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
- " options, so any other options should be set AFTER setting 'compatible'.
- "set compatible
-
- " Vim5 and later versions support syntax highlighting. Uncommenting the next
- " line enables syntax highlighting by default.
- syntax on
-
- " If using a dark background within the editing area and syntax highlighting
- " turn on this option as well
- set background=dark
-
- " Uncomment the following to have Vim jump to the last position when
- " reopening a file
-
- if has("autocmd")
- au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
- \| exe "normal! g'\"" | endif
- endif
-
- " Uncomment the following to have Vim load indentation rules and plugins
- " according to the detected filetype.
- if has("autocmd")
- filetype plugin indent on
- endif
-
- " The following are commented out as they cause vim to behave a lot
- " differently from regular Vi. They are highly recommended though.
- set showcmd " Show (partial) command in status line.
- "set showmatch " Show matching brackets.
- set ignorecase " Do case insensitive matching
- "set smartcase " Do smart case matching
- "set incsearch " Incremental search
- set autowrite " Automatically save before commands like :next and :make
- "set hidden " Hide buffers when they are abandoned
- "set mouse=a " Enable mouse usage (all modes) in terminals
-
- " Source a global configuration file if available
- " XXX Deprecated, please move your changes here in /etc/vim/vimrc
- if filereadable("/etc/vim/vimrc.local")
- source /etc/vim/vimrc.local
- endif
+" All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
+" /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
+" you can find below. If you wish to change any of those settings, you should
+" do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
+" everytime an upgrade of the vim packages is performed. It is recommended to
+" make changes after sourcing debian.vim since it alters the value of the
+" 'compatible' option.
+
+" This line should not be removed as it ensures that various options are
+" properly set to work with the Vim-related packages available in Debian.
+runtime! debian.vim
+
+" Uncomment the next line to make Vim more Vi-compatible
+" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
+" options, so any other options should be set AFTER setting 'compatible'.
+"set compatible
+
+" Vim5 and later versions support syntax highlighting. Uncommenting the next
+" line enables syntax highlighting by default.
+syntax on
+
+" If using a dark background within the editing area and syntax highlighting
+" turn on this option as well.
+set background=dark
+
+" Uncomment the following to have Vim jump to the last position when
+" reopening a file
+
+if has("autocmd")
+ au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
+ \| exe "normal! g'\"" | endif
+endif
+
+" Uncomment the following to have Vim load indentation rules and plugins
+" according to the detected filetype.
+" This is not recommanded if you often copy and paste into vim,
+" as it messes all the indentation.
+if has("autocmd")
+ filetype plugin indent on
+endif
+
+" This goes for comments folding: use co to expnad and zc to compress,
+" zi to toggle on/off
+set fdm=expr
+set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0
+
+" The following are commented out as they cause vim to behave a lot
+" differently from regular Vi. They are highly recommended though.
+set showcmd " Show (partial) command in status line.
+"set showmatch " Show matching brackets.
+# Ignorecase is quite userfull
+set ignorecase " Do case insensitive matching
+"set smartcase " Do smart case matching
+"set incsearch " Incremental search
+set autowrite " Automatically save before commands like :next and :make
+"set hidden " Hide buffers when they are abandoned
+"set mouse=a " Enable mouse usage (all modes) in terminals
+
+" Source a global configuration file if available
+" XXX Deprecated, please move your changes here in /etc/vim/vimrc
+if filereadable("/etc/vim/vimrc.local")
+ source /etc/vim/vimrc.local
+endif
</pre>
+
+ <p>I principianti faranno bene ad esercitarsi con
+ <tt class="docutils literal"><span class=
+ "pre">vimtutor</span> <span class="pre">it</span></tt>.</p>
+
+ <p>Altri link per VIM:</p>
+
+ <ul class="simple">
+ <li>Vim Introduction and Tutorial: <a class=
+ "reference external" href=
+ "http://blog.interlinked.org/tutorials/vim_tutorial.html">
+ http://blog.interlinked.org/tutorials/vim_tutorial.html</a></li>
+
+ <li><a class="reference external" href=
+ "http://blog.smr.co.in/category/vim/">http://blog.smr.co.in/category/vim/</a></li>
+
+ <li><a class="reference external" href=
+ "http://vimdoc.sourceforge.net/">http://vimdoc.sourceforge.net/</a></li>
+ </ul>
</div>
<div class="section" id="vnc">
<h2><a class="toc-backref" href=
- "#id11">1.5 VNC</a></h2>
+ "#id15">1.5 VNC</a></h2>
<p>I Virtual Network Computing (o VNC) sono software di
- controllo remoto e servono per amministrare il proprio
- computer a distanza o visuallizare la sessione di lavoro di
- un altro computer sul proprio a scopo didattico.
- Installando un server VNC sulla propria macchina ed
- impostando una opportuna password si consente ai client VNC
- di ricevere una immagine dello schermo ed eventualmente di
- inviare input di tastiera e mouse al computer server
- (durante le lezioni questo non e' possibile per gli
- studenti, solo Andrea esegue i comandi). In pratica si può
- gestire il computer server da un'altra postazione, come se
- fosse il proprio computer fisico.</p>
-
- <p>Scaricare il pacchetto <tt class=
- "docutils literal"><span class=
- "pre">xtightvncviewer</span></tt> e lo script <tt class=
- "docutils literal"><span class="pre">guarda.sh</span></tt>
- in una posizione (collocazione nel <em>path</em> degli
- utenti, es <tt class="docutils literal"><span class=
- "pre">echo</span> <span class="pre">$PATH</span></tt> per
- visualizzare l'attuale path ) comoda per gli utenti ( in
- genere <tt class="docutils literal"><span class=
- "pre">/bin</span></tt> ), rndere eseguibile lo script.</p>
+ controllo remoto e servono per amministrare un computer a
+ distanzai. Nel nostro caso la VNC sara' utilizzata per
+ visualizzare la sessione di lavoro di un altro computer sul
+ proprio a scopo didattico.</p>
+
+ <p>Per collegarvi al server del docente usate lo script
+ <tt class="docutils literal"><span class=
+ "pre">guarda.sh</span></tt> che dovrebbe gia essere
+ disponibili sui sistemi preconfigurati, oppure potete
+ invocare direttamente il collegamento con:</p>
+ <pre class="literal-block">
+xtightvncviewer -viewonly 10.10.208.177:1
+</pre>
+
+ <p>Se il comando non fosse disponibile installate il
+ pacchetto <tt class="docutils literal"><span class=
+ "pre">xtightvncviewer</span></tt>. Potete anche scaricare
+ lo script <tt class="docutils literal"><span class=
+ "pre">guarda.sh</span></tt> e renderlo eseguibile, ed
+ eventualmente creare una voce nel menu di KDE per
+ richiamarlo.</p>
<p>Procedura:</p>
<pre class="literal-block">
su root
-cd /bin
-wget http://debian.piffa.net/guarda.sh
+cd /usr/local/bin
+wget http://bender/guarda.sh
chmod +x guarda.sh
exit
</pre>
+ <p>Per eseguire lo script digitare semplicemente <tt class=
+ "docutils literal"><span class="pre">guarda.sh</span></tt>,
+ oppure creare un link / collegamento sul Desktop allo
+ script <tt class="docutils literal"><span class=
+ "pre">/usr/local/bin/guarda.sh</span></tt>.</p>
+
+ <p>Le impostazioni del server VNC sono:</p>
+
+ <table border="1" class="docutils">
+ <colgroup>
+ <col width="55%">
+ <col width="45%">
+ </colgroup>
+
+ <thead valign="bottom">
+ <tr>
+ <th class="head">Parametro</th>
+
+ <th class="head">Valore</th>
+ </tr>
+ </thead>
+
+ <tbody valign="top">
+ <tr>
+ <td>IP</td>
+
+ <td>10.10.208.177:1</td>
+ </tr>
+
+ <tr>
+ <td>Server grafico</td>
+
+ <td>:1</td>
+ </tr>
+
+ <tr>
+ <td>password</td>
+
+ <td>password</td>
+ </tr>
+ </tbody>
+ </table>
+
<p>Si noti che non e' possibile lanciare un applicativo sul
server grafico di un utente da una shell in cui si sta
lavorando come altro utente, anche se root. E' quindi
<div class="section" id="lista-dei-pacchetti-di-base">
<h2><a class="toc-backref" href=
- "#id12">1.6 Lista dei pacchetti di
+ "#id16">1.6 Lista dei pacchetti di
base</a></h2>
<p>I pacchetti installati generalmente <a class=
<td><tt class="docutils literal"><span class=
"pre">kde-core</span></tt> e' piu' leggero del
pacchetto <tt class="docutils literal"><span class=
- "pre">kde</span></tt>, esiste anche un equivalente
- <tt class="docutils literal"><span class=
- "pre">gnome-core</span> <span class=
- "pre">gnome</span></tt> e il log-in manager
+ "pre">kde</span></tt>. Esiste un equivalente
<tt class="docutils literal"><span class=
- "pre">gdm</span></tt> per il l'ambiente grafico
- Gnome.</td>
+ "pre">gnome-core</span></tt> per chi preferisce
+ Gnome, nel caso si potrebbe installare il log-in
+ manager <cite>gdm</cite> al posto di
+ <cite>kdm</cite>.</td>
</tr>
</tbody>
</table>
<div class="section" id="apt-configurazione">
<h2><a class="toc-backref" href=
- "#id13">1.7 Apt configurazione</a></h2>
+ "#id17">1.7 Apt configurazione</a></h2>
<p>Vediamo i due file principali di apt:</p>
<div class="section" id="sources-list">
<h3><a class="toc-backref" href=
- "#id14">1.7.1 sources.list</a></h3>
+ "#id18">1.7.1 sources.list</a></h3>
<p>Questo file contiene i sorgenti da cui <em>apt</em>
preleva i pacchetti da installare tramite <em>dpkg</em>,
<ul class="simple">
<li><tt class="docutils literal"><span class=
- "pre">deb</span></tt> per pacchetti Debian binari</li>
+ "pre">deb</span></tt> per pacchetti Debian binari,
+ pronti per l'installazione.</li>
<li><tt class="docutils literal"><span class=
"pre">deb-src</span></tt> per i pacchetti sorgenti
# esempio di accesso a un CDROM:
# cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official i386 kde-CD Binary-1 20090$
-# Archivio principale debian via http su piffa.net,
-# non funziona al difuori dell'aula dei corsi
-deb http://debian.piffa.net/debian/ Lenny main
-# deb http://debian.piffa.net/debian/ Lenny non-free contrib
+# ftp.it.debian.org viene rediretto su un mirror interno
+# quando vi trovate nella rete interna piffa.net
+deb http://ftp.it.debian.org/debian/ lenny main
+# Sono disponibili anche i rami non-free contrib
+# deb http://ftp.it.debian.org/debian/ lenny non-free contrib
+# Sono disponibili anche le release unstable e testing
+# deb http://ftp.it.debian.org/debian/ testing main non-free contrib
+# deb http://ftp.it.debian.org/debian/ sid main non-free contrib
-# Mirror da kernel.org da usare a casa:
-deb http://mirrors.eu.kernel.org/debian/ Lenny main
+# Sorgenti dei pacchetti:
+# deb-src http://ftp.bononia.it/debian/ lenny main
+
+# Mirror da kernel.org europa da usare a casa:
+deb http://mirrors.eu.kernel.org/debian/ lenny main
# Security dal sito principale
-deb http://security.debian.org/ Lenny/updates main
-deb-src http://security.debian.org/ Lenny/updates main
+deb http://security.debian.org/ lenny/updates main
+# deb-src http://security.debian.org/ lenny/updates main
-# Debian volatile per le cose soggette a cambiamenti non legati
-# a dinamiche di sicurezza
+# Debian volatile per i pacchetti soggetti a frequanti cambiamenti
+# non legati a dinamiche di sicurezza
deb http://volatile.debian.org/debian-volatile Lenny/volatile main
-deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
+# deb-src http://volatile.debian.org/debian-volatile Lenny/volatile main
-# Esempio di accesso a un filesystem locale contenente i pacchetti:
-# deb file:/mnt/mirror Sid main non-free contrib
+# Esempio di accesso a un file system locale contenente i pacchetti:
+# Potete scaricarei in aula con debmirror da debian.piffa.net
+# un mirror locale da usare poi a casa anche senza internet
+# deb file:/mnt/mirror sid main non-free contrib
</pre>
</div>
<div class="section" id="etc-apt-apt-conf">
<h3><a class="toc-backref" href=
- "#id15">1.7.2 /etc/apt/apt.conf</a></h3>
+ "#id19">1.7.2 /etc/apt/apt.conf</a></h3>
<p>Questo file contiene le opzioni di apt, come ad
esempio il proxy:</p>
<pre class="literal-block">
-Acquire::http::Proxy "http://10.10.208.254:3128"
+Acquire::http::Proxy "http://10.10.208.248:3128";
</pre>
<p>Si tenga conto che se si imposta un proxy per apt sul
proprio portatile e tornati a casa propria si vuole
- scaricare nuovi pacchetti si dovra' disabilitare il
- proxy.</p>
+ scaricare nuovi pacchetti si dovra' disabilitare il proxy
+ commentando la riga con ";" (''punto-e-virgola''). Su un
+ portatile vi conviene tracciare il mirror <tt class=
+ "docutils literal"><span class=
+ "pre">ftp.it.debian.org</span></tt> senza impostare il
+ proxy: in aula verra' rediretto al mirror locale e a casa
+ vi appoggerete al mirror ufficiale.</p>
+
+ <p>E' consigliabile impostare il proxy per apt anche in
+ presenza di un proxy-http <em>trasparente</em>.</p>
</div>
</div>
</div>
<div class="section" id="squid">
<h1><a class="toc-backref" href=
- "#id16">2 Squid</a></h1>
- </div>
-
- <div class="section" id="apache">
- <h1><a class="toc-backref" href=
- "#id17">3 Apache</a></h1>
-
- <p>Apache HTTP Server, o più comunemente Apache, e' il nome
- dato alla piattaforma server Web modulare più diffusa (ma
- anche al gruppo di lavoro open source che ha creato,
- sviluppato e aggiornato il software server), in grado di
- operare da sistemi operativi UNIX-Linux e Microsoft.</p>
+ "#id20">2 Squid</a></h1>
+
+ <p>Squid e' un proxy cache http (ma puo' anche gestire i
+ protocolli FTP e https) robusto e strutturato, grazie alla
+ sua flessibilita' puo' essere utilizzato sia in piccole reti
+ locali che in scenari piu' complessi. E' molto semplice
+ configurarlo per la semplice <em>condivisione della
+ navigazione internet</em> all'interno di una rete locale, per
+ poi poter sucessivamente implementare la autenticazione degli
+ utenti, il filtraggio dei contenuti (Squid e' una
+ applicazione che si muove nel 4' livello del modello TCP/IP a
+ differenza di un <em>ipfilter</em> limitato al 2'), il
+ bilanciamento del carico tra piu' server proxy.</p>
+
+ <p>Se il server Squid e' in grado di accedere a internet
+ puor' permette la navigazione web a una rete basata su
+ indirizzi IP privati (es una 192.168.0.0/24). E se la rete
+ privata deve solo navigare in internet, non serve introdurre
+ nella rete un NAT (si veda la sezione sui firewall) per
+ condividere la connessione: basta il solo Squid. Per altro
+ non servira' neanche un servizio DNS accessibile dai clients
+ dato che sara' il solo Squid a risolvere i nomi di dominio
+ per i suoi client http.</p>
+
+ <p>Inoltre Squid svolge la funzione di <em>anonymizer</em>:
+ nasconde i client http alla rete internet: e' solo il server
+ proxy ad accedere ai server web frequentati dai client:
+ questi non sono percepiti ed esposti all'esterno della rete
+ locale ma si relazionano solo con Squid. Dal punto di vista
+ della sicurezza della rete locale questo e' preferibile ad un
+ approccio alla navigazione basato su NAT.</p>
+
+ <p>Squid ascolta di default sulla porta <tt class=
+ "docutils literal"><span class="pre">3128</span></tt>, per
+ quanto in genere la porta preferita per i servizi di caching
+ http sia la <tt class="docutils literal"><span class=
+ "pre">8080</span></tt>. Per utilizzarlo subito anche per apt
+ si aggiunga ad <tt class="docutils literal"><span class=
+ "pre">/etc/apt/apt.conf</span></tt></p>
+ <pre class="literal-block">
+Acquire::http::Proxy "10.10.208.254:3128";
+</pre>
- <p>Un server web e' un processo, e per estensione il computer
- su cui è in esecuzione, che si occupa di fornire, su
- richiesta del browser, una pagina web (spesso scritta in
- HTML). Le informazioni inviate dal server web viaggiano in
- rete trasportate dal protocollo HTTP. L'insieme di server web
- dà vita al World Wide Web, uno dei servizi più
- utilizzati di Internet.</p>
+ <p>Per installare Squid si usi il pacchetto:</p>
+ <pre class="literal-block">
+squid3
+</pre>
- <div class="section" id="pacchetti-da-installare">
+ <div class="section" id="configurazione-squid-conf">
<h2><a class="toc-backref" href=
- "#id18">3.1 Pacchetti da
- installare::</a></h2>
+ "#id21">2.1 Configurazione:
+ squid.conf</a></h2>
- <blockquote>
- apache2 apache2-doc
- </blockquote>
+ <p>egue un estratto delle direttive principali viste in
+ aula presenti nel file di configurazione <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/squid3/squid.conf</span></tt> .</p>
- <p>Con la release 2.0 di Apache viene automaticamente resa
- disponibile anche la versione SSL (Secure Socket Layer,
- cpnnessioni criptate ) del web server.</p>
- </div>
+ <div class="section" id="cache-dir">
+ <h3><a class="toc-backref" href=
+ "#id22">2.1.1 Cache_dir</a></h3>
+
+ <p>Cache dir serve per impostare caratteristiche
+ fondamentali della cache creata sul supporto di storaggio
+ quali dimensione e percorso nel file-system. Essendo la
+ dimensione di default della cache pari a ~``100 MB`` e'
+ altamente consigliabili aumentare questo parametro se si
+ vuole godere dei vantaggi della funzione di cache per
+ piu' clients.</p>
+
+ <p>Per stabilire il dimensionamento della cache si tenga
+ conto dello spazio disponibile, dimensioni tipiche e
+ massime degli oggetti che si vuole tenere in cache (un
+ solo file .iso occupa circa <tt class=
+ "docutils literal"><span class="pre">700</span>
+ <span class="pre">MB</span></tt>, il pacchetto
+ Openoffice.org circa 150 MB, un pacchetto Debian circa 20
+ MB), e in fine del numero dei client.</p>
+
+ <p>Si presti poi attenzione alla natura dei dati che
+ saranno salvati nella cache: sono tutti dati facilmente
+ sostituibili (gli originali sono on-line) la cui perdita
+ causerebbe solo la necessita' di ripopolare la cache.
+ Questo rende la cache di Squid un possibile candidato ad
+ un RAID stirpe (livello 0) a ad un file system che
+ prediliga le performance a scapito della consistenza, con
+ vantaggi sia per le prestazioni (e la velocita' di
+ navigazione e' uno dei motivi per cui si installa Squid)
+ che per l'utilizzo estensivo dello spazio di
+ storaggio.</p>
+
+ <p>Questo fino al momento in cui per voi non sia piu'
+ importante garantire la disponibilita' del servizio: se
+ il RAID stripe dovesse rompersi gli utenti non potrebbero
+ piu' navigare, cosa che per natura dello stripe e' piu'
+ probabile rispetto ad un filesytem normale.</p>
+
+ <div class="section" id="opzioni-del-file-system">
+ <h4><a class="toc-backref" href=
+ "#id23">2.1.1.1 Opzioni del file
+ system</a></h4>
+
+ <p>I dati che compongono la cache vengono salvati sul
+ filesytem del server dietro richiesta dei client http
+ degli utenti della rete locale. Come per i servizi di
+ file sharing o per la posta elettronica non c'e' motivo
+ che il filesystem su cui sono ospitati questi dati
+ abbiano i privilegi di eseguibilita' o suid (in genere
+ si possono anche usare opzioni come noatime per rendere
+ i file-systems piu' veloci, scegliere di utilizzare un
+ journal dipende dalla dimesione della cache dalle
+ preferenze: affidabilita' oppure prestazioni):</p>
+
+ <p>/etc/fstab</p>
+ <pre class="literal-block">
+...
+# Filesystem per Squid http cache
+/dev/md3/ /var/spool/squid/ ext2,noexec,nosuid,noatime 0 3
+</pre>
+ </div>
+ </div>
- <div class="section" id="configurazione-di-apache">
- <h2><a class="toc-backref" href=
- "#id19">3.2 Configurazione di
- Apache</a></h2>
+ <div class="section" id="configurazioni-di-cache-dir">
+ <h3><a class="toc-backref" href=
+ "#id24">2.1.2 Configurazioni di
+ Cache_dir</a></h3>
- <p>I file di configurazione di apache si trovano nella
- cartella: <tt class="docutils literal"><span class=
- "pre">/etc/apache2</span></tt> e sono strutturati come
- descritto nel file <tt class=
- "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
- . Sostanzialmente lo schema e' il seguente:</p>
+ <p>Ora possiamo impostare la cache nel file di
+ configurazione <tt class="docutils literal"><span class=
+ "pre">/etc/squid3/squid.conf</span></tt>:</p>
+ <pre class="literal-block">
+#TAG: cache_dir (riga 1628)
+# Usage:
+#
+# cache_dir Type Directory-Name Fs-specific-data [options]
+#
+# You can specify multiple cache_dir lines to spread the
+# cache among different disk partitions.
+# ...
+#Default:
+# cache_dir ufs /var/spool/squid3 100 16 256
+cache_dir aufs /var/spool/squid3 300 24 256
+# | | | | secondo livello di directory
+# | | | directory primo livello
+# | | dimensione in MB
+# | path della cache
+# algoritmo
+</pre>
- <dl class="docutils">
- <dt>apache2.conf</dt>
+ <p>Se si modifica la struttura della cache di Squid, ad
+ esempio variando il numero delle directory, puo' essere
+ opportuno cancellare e rigenerare la cache. Tipicamente
+ e' consigliabile cancellare (se si ha ridotto il numero
+ delle directory) la vecchia cache e poi generare una
+ nuova struttura. Se si vuole star nel sicuro ogni volta
+ che si modifica l'impostazione delle directory si svuoti
+ la vecchia cache e se ne generi una nuova:</p>
+ <pre class="literal-block">
+# /etc/init.d/squid3 stop
+# rm -r /var/spool/squid3/??
+# squid3 -z
+# /etc/init.d/squid3 start
+</pre>
+ </div>
- <dd>
- <p class="first">File di configurazione principale del
- servizio.</p>
+ <div class="section" id="tag-maximum-object-size">
+ <h3><a class="toc-backref" href=
+ "#id25">2.1.3 TAG:
+ maximum_object_size</a></h3>
- <p class="last">httpd.conf e' il vecchio file di
- configurazione di Apache1, presente per motivi di
- retrocompatibilita' e' generalemente vuoto.</p>
- </dd>
+ <p>Questa direttiva imposta la dimensione massima degli
+ oggetti che vengono salvati sul supporto di storaggio,
+ oggetti di dimensioni superiori saranno comunque
+ scaricati ma non tenuti in cache.</p>
- <dt>ports.conf</dt>
+ <p>TAG: maximum_object_size (1760):</p>
+ <pre class="literal-block">
+# TAG: maximum_object_size (1760)
+# Objects larger than this size will NOT be saved on disk. The
+# value is specified in kilobytes, and the default is 4MB. If
+# you wish to get a high BYTES hit ratio, you should probably
+# increase this (one 32 MB object hit counts for 3200 10KB
+# hits). If you wish to increase speed more than your want to
+# save bandwidth you should leave this low.
+#
+# NOTE: if using the LFUDA replacement policy you should increase
+# this value to maximize the byte hit rate improvement of LFUDA!
+# See replacement_policy below for a discussion of this policy.
+#
+#Default:
+# maximum_object_size 4096 KB
+maximum_object_size 150 MB
+</pre>
+ </div>
- <dd>In questo file vengono specificate le porte sulle
- quali resta in ascolto il server web. Si noti che
- utilizzando dei virtual hosts generalmente viene
- specificata per questi la porta su cui ascoltare nel file
- di configurazione del virtual host, ad es: <tt class=
- "docutils literal"><span class=
- "pre"><VirtualHost</span> <span class=
- "pre">*:80></span></tt></dd>
+ <div class="section" id="tag-cache-mem">
+ <h3><a class="toc-backref" href=
+ "#id26">2.1.4 TAG: cache_mem</a></h3>
+
+ <p><strong>Cache_mem</strong> imposta quanta memoria RAM
+ venga dedicata alla cache di Squid. Si consideri non solo
+ quanta RAM sia disponibile sul sistema, ma anche quale
+ sia l'utilizzo tipico di questo: altri servizi
+ fondamentali necessitano di molta memoria?</p>
+
+ <p>Questo parametro per altro influisce sulle prestazioni
+ e sul degrado dei supporti di storaggio (sopratutto se
+ magnetici). Ad esempio se si stanno utilizzando dischi
+ rigidi esterni USB per la cache sara' preferibile cercare
+ di usare quanta piu' RAM possibile per evitare il
+ sovraccarico computazionale dovuto alla gestione dello
+ stack USB, fenomeno evidente sui sistemi embedded come
+ NAS.</p>
+
+ <p>Se si stesse pensando di usare dell'hardware
+ <em>embedded</em> a basse prestazioni / consumo per
+ realizzare un server gateway / NAT / Squid si tenga
+ presente che Squid e' relativamente esoso di risorse
+ rispetto agli altri servizi: avra' bisogno di <tt class=
+ "docutils literal"><span class="pre">~25MB</span></tt>
+ (MegaByte) di RAM e <em>~150MHZ di CPU ARM</em> per
+ servire decorosamente una decina di client http su una
+ rete ethernet 10/100. In questo caso non fate scendere
+ <tt class="docutils literal"><span class=
+ "pre">cache_mem</span></tt> sotto i <tt class=
+ "docutils literal"><span class="pre">2/4</span>
+ <span class="pre">MB</span></tt> pena un accesso continuo
+ al supporto di storaggio.</p>
- <dt>sites-available</dt>
+ <p>Se invece si disponesse di una macchina dedicata a
+ Squid con gigabytes di RAM non si esiti a dedicarne buona
+ parte a <em>cache_mem</em>.</p>
- <dd>In questa cartella vengono raccolti i file di
- configurazione dei virtual host disponibili.</dd>
+ <p>TAG: cache_mem (1566):</p>
+ <pre class="literal-block">
+# 'cache_mem' specifies the ideal amount of memory to be used
+# for:
+# * In-Transit objects
+# * Hot Objects
+# * Negative-Cached objects
+#Default:
+# cache_mem 8 M
+cache_mem 100 M
+</pre>
+ </div>
+
+ <div class="section" id="tag-minimum-object-size">
+ <h3><a class="toc-backref" href=
+ "#id27">2.1.5 TAG:
+ minimum_object_size</a></h3>
+
+ <p>Questo parametro imposta la dimensione minima degli
+ oggetti salvati nella cache. Settato a <tt class=
+ "docutils literal"><span class="pre">0</span></tt> o a
+ valori molto piccoli puo' influire negativamente sulla
+ frammentazione del filesytem e consumare un numero
+ elevato di <em>inode</em> (cosa non piu' importante con
+ ext4 o altri filesytem).</p>
+
+ <p>In scenari con connessioni molto veloci ( >~10Mb),
+ pochi client (una decina) e server poco performanti nella
+ velocita' di accesso ai filesystem ( ~20MB/s, per quanto
+ il limte sia piuttosto il <em>seek-time</em> ) tenere in
+ cache i file piu' piccoli finisce per aumentare la
+ latenza della navigazione.</p>
+
+ <p>TAG: minimum_object_size:</p>
+ <pre class="literal-block">
+# TAG: minimum_object_size (bytes)
+# Objects smaller than this size will NOT be saved on disk. The
+# value is specified in kilobytes, and the default is 0 KB, which
+# means there is no minimum.
+#
+#Default:
+# minimum_object_size 0 KB
+minimum_object_size 0 KB
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id=
+ "negoziazione-degli-accesi-al-servizio">
+ <h2><a class="toc-backref" href=
+ "#id28">2.2 Negoziazione degli accesi al
+ servizio</a></h2>
+
+ <p>Squid fa parte di quei servizi suscettibili di diventare
+ un open relay, sara' quindi necessario prestare attenzione
+ a delimitare la rete che puo' accedere al servizio.</p>
+
+ <dl class="docutils">
+ <dt>Open Relay:</dt>
+
+ <dd>Un servizio a cui possono accedere tutti
+ indiscriminatamente. La cosa puo' andare bene per servizi
+ come i server web, che aspirano per loro natura al
+ maggior numero possibile di utenti, ma non a servizi come
+ i proxy http oppure ai server di posta elettronica
+ (adibiti ai soli utenti della rete locale).</dd>
+ </dl>
+
+ <p>Generalmente non volete che il vostro proxy http venga
+ usato da persone sconosciute ed esterne alla vostra rete,
+ le quali sostanzialmente <em>navigherebbero sotto
+ l'identita' del vostro proxy</em> (probabilmente per
+ visionare materiali che non vorrebbero fossero ricondotti
+ direttamente a loro) generando traffico e consumando banda
+ della vostra connessione a internet. Tenere Squid in
+ modalita' <em>Open relay</em> e' al giorno d'oggi un buon
+ modo per essere inseriti in una <em>black list</em>.</p>
+
+ <p>Per poter limitare gli accessi a Squid dal punto di
+ vista dell'applicazione (quarto livello TCP/IP) si
+ identifichera' inizialmente l'entita' <em>rete locale</em>
+ (es: <tt class="docutils literal"><span class=
+ "pre">localnet</span></tt>) con una ACL di tipo
+ <em>src</em> (indirizzi IP sorgenti) indicando la
+ <em>classe / range di IP</em> della nostra rete.</p>
+
+ <blockquote>
+ Dopodiche l'accesso (<tt class=
+ "docutils literal"><span class=
+ "pre">http_access</span></tt>) si concedera'
+ (<em>allow</em>) a questa entita' (es: <tt class=
+ "docutils literal"><span class=
+ "pre">localnet</span></tt>) negando chiunque altro.
+ </blockquote>
+
+ <p>Per maggiori dettagli sulla sintassi utilizzabile per
+ esprimere i range di IP: <a class="reference external"
+ href="http://www.visolve.com/squid/squid24s1/access_controls.php">
+ http://www.visolve.com/squid/squid24s1/access_controls.php</a></p>
+
+ <p>E' poi sempre possibile tenere il proxy in ascolto su un
+ solo indirizzo IP, nel caso si disponga di piu' device di
+ rete, oppure settare un IP firewall per limitare il
+ traffico in base al protocollo IP.</p>
+
+ <div class="section" id="acl-e-http-access">
+ <h3><a class="toc-backref" href=
+ "#id29">2.2.1 ACL e http access</a></h3>
+
+ <p>Si proceda a creare una <tt class=
+ "docutils literal"><span class="pre">ACL</span></tt> di
+ tipo <tt class="docutils literal"><span class=
+ "pre">src</span></tt> per identificare la nostra rete
+ locale, poi si abiliti l'accesso a questa con la
+ direttiva <tt class="docutils literal"><span class=
+ "pre">http_access</span></tt>. Tutto quanto non e'
+ espressamente autorizzato viene poi negato da un
+ <tt class="docutils literal"><span class=
+ "pre">http_access</span> <span class="pre">deny</span>
+ <span class="pre">all</span></tt> finale.</p>
+ <pre class="literal-block">
+# TAG: acl
+# Defining an Access List
+#
+# Every access list definition must begin with an aclname and acltype,
+# followed by either type-specific arguments or a quoted filename that
+# they are read from.
+# ...
+# ***** ACL TYPES AVAILABLE *****
+#
+# acl aclname src ip-address/netmask ... # clients IP address
+# riga 588
+
+# Example rule allowing access from your local networks.
+# Adapt to list your (internal) IP networks from where browsing
+# should be allowed
+#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
+#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
+#acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
+#
+acl localnet src 10.10.208.0/24
+
+# Riga 606
+# TAG: http_access
+# Allowing or Denying access based on defined access lists
+#
+# Access to the HTTP port:
+# http_access allow|deny [!]aclname ...
+#
+# NOTE on default values:
+#
+# If there are no "access" lines present, the default is to deny
+# the request.
+
+# Riga 643
+# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
+
+# Example rule allowing access from your local networks.
+# Adapt localnet in the ACL section to list your (internal) IP networks
+# from where browsing should be allowed
+#http_access allow localnet
+http_access allow localnet
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="testare-squid">
+ <h2><a class="toc-backref" href=
+ "#id30">2.3 Testare Squid</a></h2>
+
+ <p>Dopo aver configurato squid e' fondamentale testarne il
+ corretto funzionamento per assicurarsi di non aver creato
+ un <em>open-relay</em>. Per fare dei test significativi
+ serve utilizzare degli host remoti: ci si connetta via ssh
+ a questi e si usi <tt class="docutils literal"><span class=
+ "pre">wget</span></tt> da riga di comando.</p>
+
+ <div class="section" id="client-wgetrc">
+ <h3><a class="toc-backref" href=
+ "#id31">2.3.1 Client: ~/.wgetrc</a></h3>
+
+ <p>Nel file <tt class="docutils literal"><span class=
+ "pre">.wgetrc</span></tt> (si noti il punto iniziale: e'
+ un file nascosto) si puo' impostare il proxy per wget. Si
+ utilizzi l'indirizzo IP del server che si vuole testare,
+ e si seguano i log <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/squid3/access.log</span></tt> sul
+ server.</p>
+
+ <p>Da notare che la prova va' fatta su una macchina della
+ rete che si vuole testare, non da <em>localhost</em>. Per
+ altro se si utilizzasse <em>direttamente</em> <tt class=
+ "docutils literal"><span class=
+ "pre">localhost</span></tt> non si testerebbe la
+ <em>ACL</em> predisposta, dato che si si rientrerebbe
+ nella ACL (pre-configurata di default) <tt class=
+ "docutils literal"><span class=
+ "pre">localhost</span></tt>.</p>
+
+ <dl class="docutils">
+ <dt>.wgetrc</dt>
+
+ <dd>http_proxy=10.10.208.178:3128</dd>
+ </dl>
+
+ <p>Si proceda a scaricare dal client scelto con un
+ wget:</p>
+ <pre class="literal-block">
+wget http://www.google.it
+</pre>
+ </div>
+
+ <div class="section" id="server-access-log">
+ <h3><a class="toc-backref" href=
+ "#id32">2.3.2 Server:
+ access.log</a></h3>
+
+ <p>Si puo' controllare il corretto funzionamento del
+ server seguendo i log di accesso a Squid:</p>
+ <pre class="literal-block">
+# tail -f /var/log/squid3/access.log
+</pre>
+
+ <p>In oltre e' possibile configurare diversi
+ <em>analizzatori di log</em> come <tt class=
+ "docutils literal"><span class=
+ "pre">Webalizer</span></tt> per studiare i log di
+ Squid.</p>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="tiny-proxy">
+ <h1><a class="toc-backref" href=
+ "#id33">3 Tiny proxy</a></h1>
+
+ <p>Se avete l'esigenza di un proxy server per la condivisione
+ della connessione ad internet ma non avete la necessita' o le
+ risorse di un <em>caching</em> proxy come Squid potete
+ considerare <strong>tinyproxy</strong>, questo e' molto piu'
+ leggero (utilizza circa ~2MB di RAM e ovviamente non deve
+ accedere continuamente ad un file system per lo storaggio
+ della cache) e risulta piu' semplice nella
+ configurazione.</p>
+
+ <p>TinyProxy puo' essere utilizzato come sostituto di
+ emergenza in una rete in cui Squid e' momentaneamente non
+ disponibile.</p>
+
+ <p>File di configurazione: <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/tinyproxy/tinyproxy.conf</span></tt></p>
+ <pre class="literal-block">
+# Porta su cui ascoltare
+Port 3128
+# IP su cui ascoltare
+Listen 10.10.208.160
+# Negoziazione accessi
+Allow 10.10.208.0/24
+</pre>
+ </div>
+
+ <div class="section" id="apache">
+ <h1><a class="toc-backref" href=
+ "#id34">4 Apache</a></h1>
+
+ <p>Apache HTTP Server, o piu' comunemente Apache (<em>a
+ patchy NCSA web server</em> ), e' il server web modulare piu'
+ diffuso e strutturato disponibile con licenza libera, in
+ grado di operare da sistemi operativi UNIX/Linux e
+ Microsoft.</p>
+
+ <p>Un server web e' un processo, e per estensione il computer
+ su cui e' in esecuzione, che si occupa di fornire, su
+ richiesta del browser, una pagina web (spesso scritta in
+ HTML). Le informazioni inviate dal server web viaggiano in
+ rete trasportate dal protocollo HTTP. L'insieme di server web
+ da' vita al World Wide Web, uno dei servizi piu' utilizzati
+ di Internet.</p>
+
+ <div class="section" id="pacchetti-da-installare">
+ <h2><a class="toc-backref" href=
+ "#id35">4.1 Pacchetti da
+ installare::</a></h2>
+
+ <blockquote>
+ apache2 apache2-doc
+ </blockquote>
+
+ <p>Con la release 2.0 di Apache viene automaticamente resa
+ disponibile anche la versione SSL (Secure Socket Layer,
+ connessioni criptate ) del web server senza che ci sia la
+ necessita' di installare altri pacchetti.</p>
+ </div>
+
+ <div class="section" id="configurazione-di-apache">
+ <h2><a class="toc-backref" href=
+ "#id36">4.2 Configurazione di
+ Apache</a></h2>
+
+ <p>I file di configurazione di apache si trovano nella
+ cartella: <tt class="docutils literal"><span class=
+ "pre">/etc/apache2</span></tt> e sono strutturati come
+ descritto nel file <tt class=
+ "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
+ . Sostanzialmente lo schema e' il seguente:</p>
+
+ <dl class="docutils">
+ <dt>apache2.conf</dt>
+
+ <dd>
+ <p class="first">File di configurazione principale del
+ servizio.</p>
+
+ <p class="last">httpd.conf e' il vecchio file di
+ configurazione di Apache1, presente per motivi di
+ retrocompatibilita' e' generalmente vuoto.</p>
+ </dd>
+
+ <dt>ports.conf</dt>
+
+ <dd>In questo file vengono specificate le porte sulle
+ quali resta in ascolto il server web. Si noti che
+ utilizzando dei virtual hosts generalmente viene
+ specificata per questi la porta su cui ascoltare nel file
+ di configurazione del virtual host, ad es: <tt class=
+ "docutils literal"><span class=
+ "pre"><VirtualHost</span> <span class=
+ "pre">*:80></span></tt></dd>
+
+ <dt>sites-available</dt>
+
+ <dd>In questa cartella vengono raccolti i file di
+ configurazione dei virtual host disponibili.</dd>
<dt>sites-enabled</dt>
<div class="section" id="apache-conf">
<h2><a class="toc-backref" href=
- "#id20">3.3 apache.conf</a></h2>
+ "#id37">4.3 apache.conf</a></h2>
<p>File di configurazione del servizio Apache, contiene le
impostazioni generiche (ad esempio utilizzo della RAM e
<dd>Numero di secondi da aspettare prima di chiudere la
connessione con il client. Questo parametro serve a
liberare le risorse di sistema nel caso che un client,
- magar a causa di una connessione particolarmente lenta o
- instabili, tenga attivo indefinitivamente un processo di
+ magari a causa di una connessione particolarmente lenta o
+ instabili, tenga attivo indefinitamente un processo di
apache.</dd>
<dt>KeepAlive</dt>
<dd>L'estensione keep-alive (http 1.0) congiuntamente
alle connessioni persistenti (http 1.1) permettono al
server di rispondere a piu' richieste dei client mediante
- la stessa connessione. Il protocoll http per sua natura
- e' senza stato (<em>statelessi</em> ), quindi ogni
- risorsa richiesta (per pagine web si pensi ad esempio
- alle immagini) dal client necessita di una connessione
+ la stessa connessione. Il protocollo http per sua natura
+ e' senza stato (<em>stateless</em> ), quindi ogni risorsa
+ richiesta (per pagine web si pensi ad esempio alle
+ immagini) dal client necessita di una connessione
autonoma. Keep-alive permette di ottimizzare la
connessione anche fino al 50% a seconda delle situazioni
e contenuti.</dd>
attribuire le risorse di sistema disponibili al server
Apache. Tenere questi parametri bassi serve a limitare il
rischio di Denial of Service per il server, nel caso
- offra altri servizi. I settagi di default sono come
+ offra altri servizi. I settagli di default sono come
sempre abbastanza conservativi, se si conta di usare il
proprio Apache per servire un sito web con molti
visitatori sara' necessario aumentare sensibilmente le
<div class="section" id="installazione-di-php">
<h2><a class="toc-backref" href=
- "#id21">3.4 Installazione di PHP</a></h2>
+ "#id38">4.4 Installazione di PHP</a></h2>
<p>Pacchetti da installare: <tt class=
"docutils literal"><span class="pre">php5</span>
<div class="section" id="test-del-modulo-php">
<h3><a class="toc-backref" href=
- "#id22">3.4.1 Test del modulo
+ "#id39">4.4.1 Test del modulo
php</a></h3>
<p>Creare nella cartella <tt class=
"docutils literal"><span class="pre">/var/www</span></tt>
(o altra cartella visibile) un file con estensione *.php
(es <tt class="docutils literal"><span class=
- "pre">/var/ww/info.php</span></tt> contenete codice php
+ "pre">/var/www/info.php</span></tt> contenete codice php
eseguibile dall'interprete, ad es:</p>
<pre class="literal-block">
<?php phpinfo() ; ?>
<p>Questa funzione di php generera' la tipica pagina con
le impostazioni attuali per PHP. Richiamando la pagina
(es: <tt class="docutils literal"><span class=
- "pre">http://localhost/info.php</span></tt> ) verra
+ "pre">http://localhost/info.php</span></tt> ) verra'
generata dall'interprete PHP la pagina HTML e resa
- disponibile tramite Apache ai utclient HTTP, a prova del
- correto funzionamento del modulo di PHP e della sua
- integrazione con il serv web Apache. In caso contrario se
- il client http proporra di scaricare la pagina invece che
- visualizzarla nel browser: non funziona l'interprete di
- php o sono mal configurati i MIME-type. prima di tutto
- assicurarsi di aver fatoo ripartire Apache.</p>
+ disponibile tramite Apache ai client HTTP, a prova del
+ corretto funzionamento del modulo di PHP e della sua
+ integrazione con il server web Apache. In caso contrario
+ se il client http proporra' di scaricare la pagina invece
+ che visualizzarla nel browser: non funziona l'interprete
+ di php o sono mal configurati i MIME-type. prima di tutto
+ assicurarsi di aver fatto ripartire Apache.</p>
</div>
<div class="section" id=
- "installazione-del-supporto-per-mysql">
+ "installazione-del-supporto-per-mysql-a-php">
<h3><a class="toc-backref" href=
- "#id23">3.4.2 Installazione del supporto
- per Mysql</a></h3>
+ "#id40">4.4.2 Installazione del supporto
+ per Mysql a PHP</a></h3>
<p>Installare i pacchetti:</p>
<pre class="literal-block">
<div class="section" id="phpmyadmin">
<h3><a class="toc-backref" href=
- "#id24">3.4.3 phpmyadmin</a></h3>
+ "#id41">4.4.3 phpmyadmin</a></h3>
- <p>L'interfaccia web Phpmyadmin non richede
+ <p>L'interfaccia web Phpmyadmin non richiede
necessariamente la presenza di un database Mysql locale,
- puo' infatti essere utilizzata per gestire databases
+ puo' infatti essere utilizzata per gestire database
remoti (il suo file di configurazione: <tt class=
"docutils literal"><span class=
"pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
</div>
<div class="section" id=
- "installazione-del-supporto-per-postgresql">
+ "installazione-del-supporto-per-postgresql-a-php">
<h3><a class="toc-backref" href=
- "#id25">3.4.4 Installazione del supporto
- per Postgresql</a></h3>
+ "#id42">4.4.4 Installazione del supporto
+ per Postgresql a PHP</a></h3>
<p>Installare i pacchetti:</p>
<pre class="literal-block">
<div class="section" id="phppgadmin">
<h3><a class="toc-backref" href=
- "#id26">3.4.5 phppgadmin</a></h3>
+ "#id43">4.4.5 phppgadmin</a></h3>
<p>L'interfaccia web Phppgadmin per il database server
- PostgreSQL non richede necessariamente la presenza di un
+ PostgreSQL non richiede necessariamente la presenza di un
database locale, puo' infatti essere utilizzata per
- gestire databases remoti (il suo file di configurazione:
+ gestire database remoti (il suo file di configurazione:
<tt class="docutils literal"><span class=
"pre">/etc/phppgadmin/config.inc.php</span></tt> ). Nel
caso si voglia installare localmente Mysql si utilizzi il
<div class="section" id="virtual-hosts">
<h2><a class="toc-backref" href=
- "#id27">3.5 Virtual hosts</a></h2>
+ "#id44">4.5 Virtual hosts</a></h2>
<blockquote>
<ul class="simple">
<p>I virtual host permettono di avere piu' siti internet
disponibili tramite lo stesso server web, eventualmente
- mappati su un solo indirizzo ip. Sono generalemente di due
+ mappati su un solo indirizzo IP. Sono generalmente di due
tipi:</p>
<blockquote>
<ul class="simple">
- <li>Basati su <em>indirizzi ip</em>. Se si ha la
- possibilita' di avere piu' indirizzi ip dedicati per i
+ <li>Basati su <em>indirizzi IP</em>. Se si ha la
+ possibilita' di avere piu' indirizzi IP dedicati per i
diversi siti che si vuole servire. ES: <tt class=
"docutils literal"><span class=
"pre"><VirtualHost</span> <span class=
sito.</li>
<li>Basati su <em>nomi di dominio</em> che puntano allo
- stesso ip. Soluzione piu' economica e diffusa che si
+ stesso IP. Soluzione piu' economica e diffusa che si
basa sulle funzionalita' di http 1.1 .</li>
</ul>
</blockquote>
<div class="section" id="gestione-dns">
<h3><a class="toc-backref" href=
- "#id28">3.5.1 Gestione DNS</a></h3>
+ "#id45">4.5.1 Gestione DNS</a></h3>
<p>Prima di tutto per poter impostare i virtual hosts
dovete avere un server DNS che risolva i vostri nomi di
- dominio sull'indirizzo ip del server. Questo si puo'
+ dominio sull'indirizzo IP del server. Questo si puo'
ottenere in vari modi, ad es:</p>
<blockquote>
<dl class="docutils">
- <dt><em>Bind</em> (DNS server)</dt>
+ <dt><tt class="docutils literal"><span class=
+ "pre">/etc/hosts</span></tt></dt>
- <dd>Impostare i campi A nelle proprie zone gestite
- dal server dns Bind. Ad es: <tt class=
+ <dd>Per prove sul proprio sistema potete impostare i
+ nomi dei vostri virtual server nel file /etc/hosts
+ .</dd>
+
+ <dt><em>Dnsmasq</em> (DNS server)</dt>
+
+ <dd>Utilizzabile al livello della rete locale per
+ fare dei test, utilizzando direttive come: <tt class=
"docutils literal"><span class=
- "pre">papo</span>
- <span class=
- "pre">A</span>
- <span class="pre">212.22.136.248</span></tt></dd>
+ "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
<dt><em>Servizio DNS dinamico on line</em>.</dt>
<dd>Utilizzare un servizio come ad es: <a class=
"reference external" href=
"https://www.dyndns.com/">https://www.dyndns.com/</a>
- per mappare nomi di dominio sul proprio indirizzo ip,
- comodo ad esempio se si dispone di un indirzzo ip
+ per mappare nomi di dominio sul proprio indirizzo IP,
+ comodo ad esempio se si dispone di un indirizzo IP
pubblico (anche se dinamico) per la propria
connessione ad internet.</dd>
- <dt><em>Dnsmasq</em> (DNS server)</dt>
+ <dt><em>Bind</em> (DNS server)</dt>
- <dd>Utilizzabile a livello locale per fare dei test,
- utilizzando direttive come: <tt class=
+ <dd>Impostare i campi A nelle proprie zone gestite
+ dal server DNS Bind. Ad es: <tt class=
"docutils literal"><span class=
- "pre">address=/davide.piffa.net/10.10.208.178</span></tt></dd>
-
- <dt><tt class="docutils literal"><span class=
- "pre">/etc/hosts</span></tt></dt>
-
- <dd>Per prove <em>strettamente a livello locale</em>
- potete impostare i nomi dei vostri virtual server nel
- file /etc/hosts .</dd>
+ "pre">papo</span>
+ <span class=
+ "pre">A</span>
+ <span class="pre">212.22.136.248</span></tt></dd>
</dl>
</blockquote>
- <pre class="literal-block">
-# dig 177.piffa.net
+ </div>
-; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
-;; global options: printcmd
-;; Got answer:
-;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
-;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
+ <div class="section" id="eseguire-una-query-dns-con-dig">
+ <h3><a class="toc-backref" href=
+ "#id46">4.5.2 Eseguire una query DNS con
+ <tt class="docutils literal"><span class=
+ "pre">dig</span></tt>::</a></h3>
-;; QUESTION SECTION:
-;177.piffa.net. IN A
+ <p>Per testare la corretta risoluzione dei vostri nomi di
+ dominio sui relaivi indirizzi IP si usi dig (o altre
+ utlity, vedere la sezione relativa i DNS). Dig e'
+ contenuto nel pacchetto <tt class=
+ "docutils literal"><span class=
+ "pre">dnsutils</span></tt>.</p>
-;; ANSWER SECTION:
-177.piffa.net. 0 IN A 10.10.208.177
+ <blockquote>
+ <p># dig 177.piffa.net</p>
-;; Query time: 12 msec
-;; SERVER: 10.10.208.254#53(10.10.208.254)
-;; WHEN: Wed May 6 12:27:08 2009
-;; MSG SIZE rcvd: 47
-</pre>
+ <p>; <<>> DiG 9.5.1-P1 <<>>
+ 177.piffa.net ;; global options: printcmd ;; Got
+ answer: ;; ->>HEADER<<- opcode: QUERY,
+ status: NOERROR, id: 38036 ;; flags: qr aa rd ra;
+ QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>
- <p>La parte interessante e' <tt class=
- "docutils literal"><span class=
+ <p>;; QUESTION SECTION: ;177.piffa.net. IN A</p>
+
+ <p>;; ANSWER SECTION: 177.piffa.net. 0 IN A
+ 10.10.208.177</p>
+
+ <p>;; SERVER: 10.10.208.248#53(10.10.28.248)</p>
+ </blockquote>
+
+ <p>La parte interessante e' l'<em>ANSWER SECTION</em>:
+ <tt class="docutils literal"><span class=
"pre">177.piffa.net.</span>
<span class=
"pre">0</span>
, nel nostro Apache (che risponde all'ip 10.10.208.177 )
dovra' essere disponibile un virtual host che corrisponde
al nome <tt class="docutils literal"><span class=
- "pre">177.piffa.net</span></tt> .</p>
+ "pre">177.piffa.net</span></tt> (<tt class=
+ "docutils literal"><span class=
+ "pre">ServerName</span></tt>) .</p>
+
+ <p>Il server DNS utilizzato dal sistema e' evidenziato
+ dalla stringa: <tt class="docutils literal"><span class=
+ "pre">;;</span> <span class="pre">SERVER:</span>
+ <span class=
+ "pre">10.10.28.248#53(10.10.28.248)</span></tt> che
+ dovrebbe corrispondere a quanto impostato nel vostro
+ <tt class="docutils literal"><span class=
+ "pre">/etc/resolv.conf</span></tt>. Se il vostro browser
+ web utilizza un proxy http sara questo a risolvere i nomi
+ di dominio, tipicamente potete disabilitare l'uso del
+ proxy per determinati domini nella sezione di
+ configurazione del browser.</p>
</div>
- <div class="section" id="virtual-host">
+ <div class="section" id="id3">
<h3><a class="toc-backref" href=
- "#id29">3.5.2 Virtual host</a></h3>
+ "#id47">4.5.3 Virtual hosts</a></h3>
<p>Esempio di Virtual host:</p>
<pre class="literal-block">
"pre"><VirtualHost</span> <span class=
"pre">\*:80</span> <span class="pre">></span></tt>
La prima riga indica l'inizio della stanza relativa al
- nostro virtual host, che ascolotera' su qualunque
- indirizzo ip (nel caso il server abbia piu' indirizzi
+ nostro virtual host, che ascoltera' su qualunque
+ indirizzo IP (nel caso il server abbia piu' indirizzi
dai quali e' raggiungibile) sulla porta <tt class=
"docutils literal"><span class=
"pre">80</span></tt>.</li>
<li><tt class="docutils literal"><span class=
"pre">Server/name</span></tt> precisa quale sara' il
nome di dominio a cui verra' associato questo sito
- rispetto ad altri eventualmenti presenti sullo stesso
+ rispetto ad altri eventualmente presenti sullo stesso
server web.</li>
<li><tt class="docutils literal"><span class=
<p>Quelle che abbiamo appena visto sono le direttive
essenziali per definire un sito virtuale, potrebbe essere
- utile aggiungene altre:</p>
+ utile aggiungere altre:</p>
<ul>
<li>
<dd>
<p class="first last">Livello di importanza degli
- eventi loggati= warning <em>attenzione</em> .</p>
+ eventi loggati: warning <em>attenzione</em> .</p>
</dd>
</dl>
</li>
<div class="section" id="negoziazione-accessi">
<h2><a class="toc-backref" href=
- "#id30">3.6 Negoziazione accessi</a></h2>
+ "#id48">4.6 Negoziazione accessi</a></h2>
<p>Tipicamente quando si installa un server web il proprio
desiderio e' di dare accesso ai materiali disponibili al
- maggior numero di visitatori possibile. Talvolta pero' puo
- essere utile o necessario limitare gli accessi, ad esempio
- per escludere un <em>bot</em> indesiderato che scansiona
- ininterottamente le nostre pagine o per creare una <em>Area
- Riservata</em> i cui materiali non devono essere
+ maggior numero di visitatori possibile. Talvolta pero' puo'
+ essere utile poter limitare questi accessi, ad esempio per
+ escludere un <em>bot</em> indesiderato che scansiona
+ ininterrottamente le nostre pagine o per creare una
+ <em>Area Riservata</em> i cui materiali non devono essere
disponibile a tutti.</p>
<div class="section" id="limiti-su-base-ip">
<h3><a class="toc-backref" href=
- "#id31">3.6.1 Limiti su base ip</a></h3>
+ "#id49">4.6.1 Limiti su base IP</a></h3>
- <p>La forma piu' semplice di restrizine degli accessi e'
+ <p>La forma piu' semplice di restrizione degli accessi e'
su base degli indirizzi IP dei client: tipicamente i siti
web sono settati per dare accesso a chiunque:</p>
<pre class="literal-block">
<VirtualHost *:80 >
# ...
<Directory "/var/www/177.piffa.net">
- Order allow,deny
- Allow from all
+ Order allow,deny
+ Allow from all
</Directory>
</VirtualHost>
</pre>
questo modo:</p>
<pre class="literal-block">
<VirtualHost *:80 >
+ # ...
<Directory "/var/www/177.piffa.net">
- Order allow,deny
- Allow from all
- Deny from 192.168.0.1
+ Order allow,deny
+ Allow from all
+ Deny from 192.168.0.1
</Directory>
</VirtualHost>
</pre>
directory <tt class="docutils literal"><span class=
"pre">/limitata</span></tt> Si tenga pero' conto che e'
relativamente facile per un malintenzionato cambiare il
- propio indirizzo ip, oppure collegarsi da un altra zona.
+ proprio indirizzo IP, oppure collegarsi da un altra zona.
Meno facile e' accedere ad una classe privata trovandosi
- all'esterno di questa, ma e' comunque possibile mandare
- delle richieste <tt class="docutils literal"><span class=
- "pre">GET</span></tt> per cercare di mandare in Denial Of
- Service il webserver.</p>
- </div>
+ all'esterno di questa, ma ci sono comunque soluzioni piu'
+ eleganti.</p>
- <div class="section" id="user-authentication">
- <h3><a class="toc-backref" href=
- "#id32">3.6.2 User
- Authentication</a></h3>
-
- <p>A volte conviene negoziare gli accessi ad un area di
- un sito tramite autenticazione basata sull'accopiata
- <em>nome utente / password</em>. Questo puo' venire utile
- per creare una area download <em>intranet</em>, alla
- quale possano accedere solo gli utenti previsti a
- prescindere dagli indirizzi IP dei loro client. Per
- quanto esistano soluzioni piu' granulari e sofisticate
- per ottenere questo, <em>mod-auth</em> puo'essere
- sufficente. E mod auth non richiede l'installazione di
- software aggiuntivi.</p>
-
- <p>link: <a class="reference external" href=
- "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
+ <ul class="simple">
+ <li>Mod_access: <a class="reference external" href=
+ "http://httpd.apache.org/docs/2.0/mod/mod_access.html">http://httpd.apache.org/docs/2.0/mod/mod_access.html</a></li>
+
+ <li>mod_authz_hosti(Available in Apache 2.1 and later):
+ <a class="reference external" href=
+ "http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html">
+ http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html</a></li>
+ </ul>
</div>
</div>
- <div class="section" id="definire-la-cartella">
+ <div class="section" id="user-authentication">
<h2><a class="toc-backref" href=
- "#id33">3.7 Definire la cartella</a></h2>
+ "#id50">4.7 User Authentication</a></h2>
+
+ <p>Si puo' negoziare gli accessi ad un area del sito
+ tramite autenticazione basata su <em>nome utente /
+ password</em>. Questo puo' venire utile per creare una area
+ download <em>intranet</em>, alla quale possano accedere
+ solo gli utenti previsti a prescindere dagli indirizzi IP
+ dei loro client.</p>
+
+ <p>Tramite il modulo di Apache <em>mod-auth</em> e'
+ possibile implementare questo paradigma, per quanto
+ esistano soluzioni piu' granulari e sofisticate, che
+ richiedono pero' l'implementazione di interpreti di
+ linguaggi di programmazione, criptazione delle passwords,
+ gestione degli utenti ed eventualmente delle sessioni. Mod
+ auth non richiede l'installazione di niente di tutto
+ questo.</p>
+
+ <p>link: <a class="reference external" href=
+ "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
+
+ <div class="section" id="definire-la-cartella">
+ <h3><a class="toc-backref" href=
+ "#id51">4.7.1 Definire la
+ cartella</a></h3>
- <p>Decidere quale sara' il <em>path</em> della cartella da
- sottoporre ad autentizazione:(e creiamo la cartella):</p>
+ <p>Decidere quale sara' il <em>path</em> della cartella
+ da sottoporre ad autenticazione:</p>
- <blockquote>
- mkdir /var/www/177.piffa.net/privata
- </blockquote>
- </div>
+ <blockquote>
+ <tt class="docutils literal"><span class=
+ "pre">mkdir</span> <span class=
+ "pre">/var/www/177.piffa.net/privata</span></tt>
+ </blockquote>
+ </div>
- <div class="section" id=
- "creazione-del-database-delle-passwords">
- <h2><a class="toc-backref" href=
- "#id34">3.8 Creazione del database delle
- passwords</a></h2>
-
- <p>Un modo semplice per gestire una database di <em>user-id
- / passwords</em> e' appoggiarsi all'utility <tt class=
- "docutils literal"><span class="pre">htpasswd</span></tt>
- di Apache. Questa crea un file in cui un <em>crypt</em>
- delle password viene associato agli utenti.</p>
-
- <p>Si dovra' decidere dove tenere questo file, la cosa
- importante e' che non sia disopnibile nel sito web, non
- deve essere scaricabile dai visitatori. Deve essere cioe'
- all'esterno della <em>DocumentRoot</em>: un buon posto
- potrebbe essere la /home dell'utente:</p>
- <pre class="literal-block">
+ <div class="section" id=
+ "creazione-del-database-delle-passwords">
+ <h3><a class="toc-backref" href=
+ "#id52">4.7.2 Creazione del database
+ delle passwords</a></h3>
+
+ <p>Un modo semplice per gestire una database di
+ <em>user-id / passwords</em> e' utilizzare l'utility
+ <tt class="docutils literal"><span class=
+ "pre">htpasswd</span></tt> di Apache. Questa crea un file
+ in cui un <em>crypt</em> delle password viene associato
+ agli utenti.</p>
+
+ <p>Si dovra' decidere dove tenere questo file, la cosa
+ importante e' che non sia visibile nel sito web: non deve
+ essere scaricabile dai visitatori. Deve essere cioe'
+ all'esterno della <em>DocumentRoot</em>: un buon posto
+ potrebbe essere la /home dell'utente.</p>
+
+ <p>Creiamo (con il <em>flag</em> <tt class=
+ "docutils literal"><span class="pre">-c</span></tt>) il
+ file <tt class="docutils literal"><span class=
+ "pre">/home/utente/passwords</span></tt> con l'utente
+ <tt class="docutils literal"><span class=
+ "pre">luca</span></tt>:</p>
+ <pre class="literal-block">
htpasswd -c /home/utente/passwords luca
</pre>
- <p>Creiamo (con il <em>flag</em> <tt class=
- "docutils literal"><span class="pre">-c</span></tt>) il
- file <tt class="docutils literal"><span class=
- "pre">/home/utente/passwords</span></tt> con l'utente
- <tt class="docutils literal"><span class=
- "pre">luca</span></tt>.</p>
- </div>
+ <p><tt class="docutils literal"><span class=
+ "pre">htpasswd</span></tt> ci chiedera' la password da
+ associare all'utente <tt class=
+ "docutils literal"><span class="pre">luca</span></tt>.
+ Per successive modifiche della password o aggiunta di
+ nuovi utenti non sara' necessario usare il flag
+ <tt class="docutils literal"><span class=
+ "pre">-c</span></tt>.</p>
+ </div>
- <div class="section" id="id3">
- <h2><a class="toc-backref" href=
- "#id35">3.9 Configurazione di
- Apache</a></h2>
+ <div class="section" id="id4">
+ <h3><a class="toc-backref" href=
+ "#id53">4.7.3 Configurazione di
+ Apache</a></h3>
+
+ <p>Ora possiamo passare alla configurazione vera e
+ propria di Apache, ma con una novita': andremo a inserire
+ la voce in un <tt class="docutils literal"><span class=
+ "pre">.htaccess</span></tt> invece che modificare
+ (tramite una direttiva <tt class=
+ "docutils literal"><span class=
+ "pre"><Directory></span></tt> ) il file di
+ impostazione del virtual-host.</p>
+
+ <p>Questo per motivi pratici: solo l'utente <em>root</em>
+ puo' modificare l'impostazione del virtual host nel file
+ <tt class="docutils literal"><span class=
+ "pre">/etc/apache2/sites-enabled/177.piffa.net</span></tt>,
+ ma spesso il motivo per cui creiamo i virtual hosts e'
+ ospitare i siti di altri utenti, che possono solo
+ pubblicare (generalmente tramite <em>FTP</em>) i loro
+ documenti nella loro <em>DocumentRoot</em>, senza poter
+ quindi modificare in alcun modo la configurazione del
+ virtual host.</p>
+
+ <p>Dando agli utenti la possibilita' di modificare
+ (<em>AllowOverride</em>) autonomamente alcuni parametri
+ (in questo caso solo l'<em>AuthConfig</em>) relativi al
+ funzionamento del loro spazio web ci togliera'
+ l'incombenza di dover intervenire continuamente sui vari
+ virtual host.</p>
+
+ <p>Abilitiamo l'AllowOverride nel file di configurazione
+ del virtual host per la sola directory <tt class=
+ "docutils literal"><span class=
+ "pre">privata</span></tt>:</p>
+ <pre class="literal-block">
+<VirtualHost *:80 >
+ ServerName 177.piffa.net
+ DocumentRoot /var/www/177.piffa.net/
+ ServerAdmin webmaster@177.piffa.net
+ <Directory "/var/www/177.piffa.net/privata">
+ AllowOverride AuthConfig
+ </Directory>
+</VirtualHost>
+</pre>
- <p>Ora possiamo passare alla ocnfigurazione vera e propria
- di Apache, ma con una novita': andremo a inserire la voce
- in un .htaccess.</p>
+ <p>Per rendere il cambiamento effettivo sara' necessario
+ fare un restart / reload di Apache.</p>
- <p>/var/www/177.piffa.net/privata/.htaccess</p>
- <pre class="literal-block">
-# Questo file viene incluso
-# nella configurazione del sito web
+ <p>Ora sara' possibile, anche per l'utente di sistema,
+ creare un file <tt class="docutils literal"><span class=
+ "pre">.htaccess</span></tt> che sara' onorato da
+ Apache.</p>
+
+ <p>/var/www/177.piffa.net/privata/.htaccess</p>
+ <pre class="literal-block">
# Messaggio visualizzato al prompt per l'autenticazione
AuthName "Area privata soggetta ad autentizazione"
# tipo di autenticazione da usarsi
AuthType Basic
-# File generato precedentemente con htpasswd
+# File precedentemente generato con htpasswd
AuthUserFile /home/utente/passwords
# Negoziazione degli accessi
require valid-user
</pre>
- <p>Si noti che non e' necessario fare ripartire Apache per
- onorare i cambiamenti (un utente non avrebbe la
- possibilita' di farlo!).</p>
+ <p>Si noti che non e' necessario fare ripartire Apache
+ per onorare i cambiamenti (un utente non avrebbe la
+ possibilita' di farlo!).</p>
+
+ <dl class="docutils">
+ <dt>Oltre a <tt class="docutils literal"><span class=
+ "pre">valid-users</span></tt> si potrebbe scegliere di
+ usare la formula <tt class=
+ "docutils literal"><span class="pre">users</span></tt>
+ che permette di elencare esplicitamente gli
+ utenti::</dt>
+
+ <dd>require user pippo pluto</dd>
+ </dl>
+
+ <p>L'utente <em>paperino</em> che fosse comunque presente
+ nel file generato da htpasswd non potrebbe accedere alla
+ risorsa.</p>
+
+ <dl class="docutils">
+ <dt>Nel caso ci fossero molti utenti conviene gestirli
+ tramite <em>gruppi</em>::</dt>
+
+ <dd>require group staff studenti</dd>
+ </dl>
+
+ <p>I gruppi vengono definiti in un file in modo simile a
+ <tt class="docutils literal"><span class=
+ "pre">/etc/groups</span></tt> per gli utenti di
+ sistema:</p>
+ <pre class="literal-block">
+staff:andrea sara
+studenti: lucap federico luca
+</pre>
+
+ <p>da richiamare tramite la direttiva <tt class=
+ "docutils literal"><span class=
+ "pre">AuthGroupFile</span></tt>.</p>
+ </div>
</div>
<div class="section" id="cavets">
<h2><a class="toc-backref" href=
- "#id36">3.10 Cavets</a></h2>
+ "#id54">4.8 Cavets</a></h2>
<p>Problemi di cache:</p>
<div class="section" id="domain-name-system">
<h1><a class="toc-backref" href=
- "#id37">4 Domain Name System</a></h1>
+ "#id55">5 Domain Name System</a></h1>
- <p>Domain Name System (spesso indicato con DNS) è un
+ <p>Domain Name System (spesso indicato con DNS) e' un
servizio utilizzato per la risoluzione di nomi di host in
- indirizzi IP e viceversa. Il servizio è realizzato tramite
- un database distribuito, costituito dai server DNS.</p>
+ indirizzi IP e viceversa. Il servizio e' realizzato tramite
+ un sistema <strong>gerarchico</strong> (quindi una struttura
+ ad albero, simile ai <em>file system</em>)
+ <strong>distribuito</strong> (ogni server DNS facente parte
+ del sistema puo' mantenere solo una parte delle informazioni,
+ ad esempio per la sua sola <em>zona</em>), costituito dai
+ server DNS.</p>
+
+ <p>I DNS sono un servizio <em>core</em> (fondamentale) per la
+ rete internet come per qualunque rete locale. Ad esempio
+ durante la navigazione web un client vorrebbe vedere
+ l'<em>URL</em> <tt class="docutils literal"><span class=
+ "pre">http://ww.piffa.net/</span></tt>, quindi per potersi
+ connettere via <em>http</em> al server web deve prima
+ ottenere l'indirizzo IP del <em>server http</em>
+ corrispondente a <em>www.piffa.net</em>. Se il DNS gli
+ fornisce un IP sbagliato l'utente non potra' raggiungere il
+ servizio: di fatto e' come se il serve http fosse spento.</p>
+
+ <p>Stessa cosa vale per gli altri servizi, come la posta
+ elettronica, ssh, ecc. : <em>prima si deve effettuare una
+ query DNS</em>.</p>
+
+ <p>Potrebbe verificarsi uno scenario simile a questo: i
+ vostri server per i siti web funzionano correttamente come i
+ siti ospitati, stessa cosa per i vostri server di posta, IMAP
+ e POP3, e tutto il resto. Ma se poi un errore nella
+ configurazione del DNS non rende raggiungibile l'intero
+ <em>sito</em>: per l'utente finale e' come se nulla
+ funzionasse.</p>
+
+ <p>Infatti quando si parla di un intervento della Polizia
+ Postale per l'<em>oscuramento</em> di un sito dal punto di
+ vista pratico questo si traduce generalmente nella rimozione
+ o mistificazione del record DNS relativo a quel dominio (la
+ <em>PP</em> ha facolta' di chiedere un simile intervento ai
+ principali provider internet che forniscono connettivita'
+ agli utenti italiani, oltre che poter agire direttamente sul
+ NIC italiano per i domini della TLD <em>.it</em>)</p>
+
+ <p>L'operazione di convertire un nome in un indirizzo e'
+ detta risoluzione DNS, convertire un indirizzo IP in nome e'
+ detto risoluzione inversa.</p>
- <p>Il nome DNS denota anche il protocollo che regola il
- funzionamento del servizio, i programmi che lo implementano,
- i server su cui questi girano, l'insieme di questi server che
- cooperano per fornire il servizio.</p>
+ <blockquote>
+ Un <em>Registar</em> e' un operatore che ha la facolta'
+ (accreditamento da parte dell ICANN) di registrare i domini
+ di secondo livello per gli utenti finali, dietro compenso
+ di una modica cifra (una decina di euro) che vale come
+ contributo su base annuale per il mantenimento
+ dell'infrastruttura.
+ </blockquote>
- <p>I nomi DNS, o "nomi di dominio", sono una delle
- caratteristiche più visibili di Internet.</p>
+ <div class="section" id="risoluzione-inversa">
+ <h2><a class="toc-backref" href=
+ "#id56">5.1 Risoluzione Inversa</a></h2>
- <p>C'è confusione in merito alla definizione dell'acronimo:
- la S spesso viene interpretata come service, ma la
- definizione corretta è system.</p>
+ <p>Per la risoluzione inversa sono invece i provider di
+ connettivita' a gestire i DNS: se volete impostare il
+ <em>PTR</em> associato al vostro indirizzo IP dovete
+ contattare il vostro provider (tipo <em>telecom</em> per
+ una connessione ADSL) e <em>non il Registar del vostro
+ dominio</em>.</p>
- <p>L'operazione di convertire un nome in un indirizzo è
- detta risoluzione DNS, convertire un indirizzo IP in nome è
- detto risoluzione inversa.</p>
+ <p>Ad esempio all'IP <tt class=
+ "docutils literal"><span class=
+ "pre">212.22.136.248</span></tt> era associato un PTR
+ <tt class="docutils literal"><span class=
+ "pre">bender.piffa.net</span></tt>, corrispondente al
+ record <tt class="docutils literal"><span class=
+ "pre">212</span></tt> facente parte della zona <tt class=
+ "docutils literal"><span class=
+ "pre">136.22.212.in-addr.arpa</span></tt> gestito dal
+ provider Tiscali/Nextra proprietario della classe C
+ <tt class="docutils literal"><span class=
+ "pre">212.22.136.0</span></tt>. Se avete un solo IP
+ conviene lasciare al fornitore la gestire del PTR, ma se
+ avete a disposizione un'itera classe potete chiedere sempre
+ al vostro provider che vi <em>deleghi</em> la gestione
+ della zona tramite i vostri DNS.</p>
+
+ <p>Per alcuni servizi, ad esempio la spedizione della posta
+ elettronica, e' richiedeiesto che venga impostata
+ correttamente l'associazione tra il PTR dell'indirizzo IP
+ usato dal server di postai e il record A RR al quale questo
+ punta( RFC1912 sezione 2.1, paragrafo 2).</p>
+
+ <p>Si veda:</p>
+
+ <ul class="simple">
+ <li><a class="reference external" href=
+ "http://www.faqs.org/rfcs/rfc1912.html">http://www.faqs.org/rfcs/rfc1912.html</a>
+ 2.1 Inconsistent, Missing, or Bad Data</li>
+
+ <li><a class="reference external" href=
+ "http://www.ietf.org/rfc/rfc2505.txt">http://www.ietf.org/rfc/rfc2505.txt</a></li>
+ </ul>
+ </div>
<div class="section" id="nomi-di-dominio">
<h2><a class="toc-backref" href=
- "#id38">4.1 Nomi di dominio</a></h2>
-
- <p>Un nome a dominio è costituito da una serie di stringhe
- separate da punti, ad esempio it.wikipedia.org. A
- differenza degli indirizzi IP, dove la parte più
- importante del numero è la prima partendo da sinistra, in
- un nome DNS la parte più importante è la prima partendo
- da destra. Questa è detta dominio di primo livello (o TLD,
- Top Level Domain), per esempio .org o .it.</p>
-
- <p>Un dominio di secondo livello consiste in due parti, per
- esempio wikipedia.org, e così via. Ogni ulteriore elemento
- specifica un'ulteriore suddivisione. Quando un dominio di
- secondo livello viene registrato all'assegnatario, questo
- è autorizzato a usare i nomi di dominio relativi ai
- successivi livelli come it.wikipedia.org (dominio di terzo
- livello) e altri come some.other.stuff.wikipedia.org
- (dominio di quinto livello) e così via.</p>
+ "#id57">5.2 Nomi di dominio</a></h2>
+
+ <p>Un nome a dominio e' costituito da una serie di stringhe
+ separate da punti, ad esempio bender.piffa.net. I nomi di
+ dominio si leggono da destra verso sinistra: <em>TLD</em> o
+ dominio di primo livello <tt class=
+ "docutils literal"><span class="pre">net</span></tt>,
+ secondo livello <tt class="docutils literal"><span class=
+ "pre">piffa</span></tt>, terzo livello <tt class=
+ "docutils literal"><span class="pre">bender</span></tt>. Il
+ dominio di primo livello (o TLD, Top Level Domain,
+ pronunciato <em>tilde</em> in Italia), per esempio .net o
+ .it sono limitati e decisi direttamente dall'ente
+ assegnatario ICANN ( Internet Corporation for Assigned
+ Names and Numbers).</p>
+
+ <p>L'utente finale potra' chiedere l'assegnazione (pagando
+ un contributo al Register preferito per il mantenimento
+ delle spese dell'infrastruttura) di un dominio di
+ <em>secondo</em> livello (es <tt class=
+ "docutils literal"><span class="pre">piffa</span></tt>) di
+ una delle varie TLD disponibili (noi italiani diciamo
+ <em>tildi</em>), sempre che non sia gia' stato assegnato a
+ qualcun altro.</p>
+
+ <p>Ottenuto il secondo livello sara' l'utente a gestirlo:
+ potra' in stanziare domini di terzo livello (es <tt class=
+ "docutils literal"><span class="pre">bender</span></tt>) e
+ anche oltre (es www.andrea.bender.piffa.net). Tali records
+ saranno mantenuti dall'utente, sotto la sua responsbilita':
+ se il proprio server DNS non fosse raggiungibile o
+ risultasse mal configurato gli utenti non potrebbero
+ risolvere / raggiungere i siti di loro interesse.</p>
+
+ <p>Tipicamente si ha almeno un server DNS secondario per
+ garantire la sussistenza del servizio in caso di guasto del
+ DNS principale. I secondari <em>replicano</em> i dati
+ presenti nei DNS principali.</p>
</div>
<div class="section" id="tipologie-di-record">
<h2><a class="toc-backref" href=
- "#id39">4.2 Tipologie di record</a></h2>
+ "#id58">5.3 Tipologie di record</a></h2>
<p>Ad un nome DNS possono corrispondere diversi tipi di
informazioni. Per questo motivo, esistono diversi tipi di
<ul class="simple">
<li>Record A - Indica la corrispondenza tra un nome ed
- uno (o più) indirizzi IP (per la precisione indirizzi
+ uno (o piu') indirizzi IP (per la precisione indirizzi
IPv4, ovvero la versione attualmente in uso).</li>
<li>Record MX - (Mail eXchange) indica a quali server
<li>Record CNAME - Sono usati per creare un alias, ovvero
per fare in modo che lo stesso calcolatore sia noto con
- più nomi. Uno degli utilizzi di questo tipo di record
- consiste nell'attribuire ad un host che offre più
+ piu' nomi. Uno degli utilizzi di questo tipo di record
+ consiste nell'attribuire ad un host che offre piu'
servizi un nome per ciascun servizio. In questo modo, i
servizi possono poi essere spostati su altri host senza
dover riconfigurare i client, ma modificando solo il
<div class="section" id="utilizzo">
<h2><a class="toc-backref" href=
- "#id40">4.3 Utilizzo</a></h2>
+ "#id59">5.4 Utilizzo</a></h2>
<p>I computer vengono identificati in rete grazie agli
indirizzi <em>IP</em>, questi pero' non sono comodi per gli
utenti come riferimento per i vari server. Ad esempio
- sarebbe scomodoriferirsi al motore di ricerca Goggle con
+ sarebbe scomodo riferirsi al motore di ricerca Goggle con
uno dei suoi IP: <tt class="docutils literal"><span class=
"pre">74.125.43.104</span></tt>, e' preferibile usare il
nome di dominio <em>www.google.com</em>:</p>
<div class="section" id="risoluzione-dei-nomi-di-dominio">
<h2><a class="toc-backref" href=
- "#id41">4.4 Risoluzione dei nomi di
+ "#id60">5.5 Risoluzione dei nomi di
dominio</a></h2>
<p>Ci sono vari strumenti per interrogare i server DNS e
<div class="section" id="dig">
<h2><a class="toc-backref" href=
- "#id42">4.5 Dig</a></h2>
+ "#id61">5.6 Dig</a></h2>
<p>Vediamo alcune opzioni utili nell'utilizzo di <tt class=
"docutils literal"><span class="pre">dig</span></tt> per
- l'inerrogazione dei DNS Server:</p>
+ l'interrogazione dei DNS Server:</p>
<pre class="literal-block">
$ dig www.google.it
<dl class="docutils">
<dt>$ dig</dt>
- <dd>(semza opzioni o oggetti) Fornisce l'elenco dei
- <em>root servers</em> utilizzati. I root server sono i
+ <dd>(senza opzioni o oggetti) Fornisce l'elenco dei
+ <em>root server</em> utilizzati. I root server sono i
server che mantengono le informazioni sui domini di primo
livello (TLD) e sono quindi il punto di partenza per
scorrere nella directory dei DNS per recuperare le
<p>...</p>
</blockquote>
- </div>
- </div>
- <div class="section" id="dnsmasq">
- <h1><a class="toc-backref" href=
- "#id43">5 DNSmasq</a></h1>
+ <dl class="docutils">
+ <dt>dig @nome_dns</dt>
- <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
- forwarder e un server DHCP caratterizzato dalla facilita' di
- configurazione, dalla leggerezza e dalla possibilita' di
- modificare rapidamente i record DNS serviti alla rete. Puo'
- essere anche utilizzato come <cite>server per il boot da rete
- <http://www.debian-administration.org/articles/478>_</cite>
- .</p>
+ <dd>Permette di fare una query ad un server dns
+ particolare. Es: <tt class=
+ "docutils literal"><span class="pre">dig</span>
+ <span class="pre">@151.99.25.1</span> <span class=
+ "pre">www.google.it</span></tt></dd>
- <p>Dnsmasq e' un interessante alternativa all'uso del server
- DNS Bind in modalita' cache-only (non autoritativo)
- accompagnato dal server DHCPD. I vantaggi sono:</p>
+ <dt>dig MX www.google.it</dt>
- <ul class="simple">
- <li>Leggerezza: puo' essere fatto girare su una macchina
- relativamente debole in caso di bisogno.</li>
+ <dd>Chiede un campo in particolare, in questo caso il
+ campo MX</dd>
- <li>Rapidita' di configurazione (in particolare per servire
- dei record A / MX alla rete, modificando al volo i valori
- originali ospitati sul server DNS Publico).</li>
+ <dt>dig ANY www.google.it</dt>
- <li>Ben integrato con connssioni PPP (utile se dovete
- rendere disponibile rapidamente una connessione a internet
- a una rete in difficolta').</li>
- </ul>
+ <dd>Chiede tutti i campi, non solo i campi
+ <em>a</em></dd>
- <p>Tutto cio' rende Dnsmasq una soluzione valida in
- particolare quando si deve intervenire in una rete
- pre-esistente in cui il server principale e' in crisi: si
- potra' utilizzare Dnsmasq anche su una macchina piu' debole e
+ <dt>dig -x 74.125.43.104</dt>
+
+ <dd>Effettua una richiesta inversa: dall'IP al PTR
+ associato.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="resolv-conf">
+ <h2><a class="toc-backref" href=
+ "#id62">5.7 resolv.conf</a></h2>
+
+ <p>Il file <tt class="docutils literal"><span class=
+ "pre">/etc/resolv.conf</span></tt> contiene le impostazioni
+ sul dns usato dal sistema, in genere anche altre
+ applicazioni che devono effettuare query DNS leggono
+ resolv.conf per conoscere l'ubicazione del DNS.</p>
+
+ <p>/etc/resolv.conf:</p>
+
+ <blockquote>
+ <ul class="simple">
+ <li><tt class="docutils literal"><span class=
+ "pre">nameserver</span></tt>: indica il nameserver da
+ utilizzare, indicato con l'indirizzo IP.</li>
+
+ <li><tt class="docutils literal"><span class=
+ "pre">domain</span></tt>: indica il nome di dominio
+ della rete attuale, vedi voce successiva.</li>
+
+ <li><tt class="docutils literal"><span class=
+ "pre">search</span></tt>: nome di dominio usato dalla
+ rete sul quale cercare gli hosts. Ad esempio se
+ impostato su <tt class="docutils literal"><span class=
+ "pre">piffa.net</span></tt> pingando l' host <tt class=
+ "docutils literal"><span class="pre">bender</span></tt>
+ viene automaticamente fatto un tentativo di ricerca per
+ <tt class="docutils literal"><span class=
+ "pre">bender.piffa.net</span></tt>.</li>
+ </ul>
+ </blockquote>
+
+ <p>Predisponendo l'infrastruttura di rete della vostra LAN
+ e' consigliabile impostare sempre almeno un DNS cache sul
+ vostro server locale per i vari client. In questo modo in
+ caso di malfunzionamento del DNS o necessita' di
+ intervenire / sostituire i DNS non sara' piu' necessario
+ dover reimpostare ogni singolo client della LAN: bastera'
+ intervenire sul server DNS cache, ad esempio per utilizzare
+ un nuovo forwarder, o modificare al volo un record DNS. La
+ modifica, anche detta <em>mascheramento</em>, di un record
+ come il <em>server smtp</em> o un <em>MX</em> potrebbe
+ tirarvi rapidamente fuori dai guai nel caso di un problema
+ improvviso con la posta elettronica o qualunque altro
+ servizio che possiate reindirizzare col DNS.</p>
+
+ <p>Utilizzare un server DHCP e una DNS cache come
+ <tt class="docutils literal"><span class=
+ "pre">Dnsmasq</span></tt> possono permettervi di risolvere
+ al volo molte delle problematiche relative alla
+ configurazione della vostra LAN: ad esempio dover
+ intervenire manualmente su decine di client per modificare
+ le impostazioni di SMTP | gateway | DNS | proxy.</p>
+
+ <p>Si veda anche la pagina man di resolv.conf.</p>
+
+ <div class="warning">
+ <p class="first admonition-title">Avvertenza</p>
+
+ <p class="last">Attenzione: se si usa un client DHCP, ppp
+ (ADSL compresa) o simile questo file potrebbe' essere
+ riscritto automaticamente in base a quanto ottenuto dal
+ DHCP. Si veda la documentazione del pacchetto <tt class=
+ "docutils literal"><span class=
+ "pre">resolvconf</span></tt>.</p>
+ </div>
+ </div>
+
+ <div class="section" id="etc-hosts">
+ <h2><a class="toc-backref" href=
+ "#id63">5.8 /etc/hosts</a></h2>
+
+ <p>Tabella statica per l'associazione tra IP e nomi di
+ dominio:</p>
+ <pre class="literal-block">
+# cat /etc/hosts
+</pre>
+
+ <blockquote>
+ 127.0.0.1 localhost.localdomain localhost 10.10.208.162
+ daniela daniela.piffa.net 10.10.208.254 mirror
+ mirror.piffa.net 91.191.138.15 thepiratebay.org
+ 192.168.0.11 chrome chrome.mydomain.com
+ </blockquote>
+
+ <p>Il contenuto del file e' un associazione tra un
+ <em>IP</em> e stringhe di testo (anche piu' di una per IP)
+ es: <tt class="docutils literal"><span class=
+ "pre">mirror</span></tt> o veri e propi nomi di dominio
+ <tt class="docutils literal"><span class=
+ "pre">mirror.piffa.net</span></tt>. Si puo inserire un nome
+ semplice come <em>casa</em> per riferirsi ad un host che si
+ ha necessita' di contattare spesso, oppure mappare un nome
+ di dominio completo su un indirizzo IP.</p>
+
+ <p>Il problema e' la gestione di questo file su molti
+ hosts: quando gli host cambiano IP si devono aggiornare
+ manualmente i records, operazione in se' non
+ particolarmente gravosa ma che andra' fatta per ogni client
+ della vostra LAN. Un metodo semplice per distribuire questo
+ file e' utilizzare <tt class=
+ "docutils literal"><span class="pre">Dnsmasq</span></tt>:
+ questo infatti legge e onora il file <tt class=
+ "docutils literal"><span class="pre">hosts</span></tt> che
+ avete prodotto e lo rende disponibile ai clients tramite le
+ query DNS.</p>
+
+ <p>Dnsmasq lavora come un server DNS, i vostri client lo
+ interrogheranno per tradurre nomi di host e domini in
+ indirizzi IP, risolvendo il problema della
+ <em>distribuzione</em> del file <tt class=
+ "docutils literal"><span class="pre">hosts</span></tt> tra
+ molteplici clients. Infatti il servizio DNS indica appunto
+ una <em>directory distribuita</em> per la risoluzione dei
+ nomi di dominio, risolvendo i problemi dell'aggiornamento e
+ diffusione dei continui cambiamenti di questa.</p>
+
+ <p>Modificare la risoluzione di un nome di dominio
+ esistente (ad esempio riconducendola a un IP interno) e' un
+ modo drastico e funzionale per <em>annullarlo</em>
+ rendendolo non disponibile alla propria rete locale. Ad
+ esempio aggiungere al file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/hosts</span></tt>:</p>
+ <pre class="literal-block">
+127.0.0.1 www.facebook.com
+</pre>
+
+ <p>Impedira' agli utenti della LAN di raggiungere
+ <em>facebook</em>, ora reindirizzato a <tt class=
+ "docutils literal"><span class=
+ "pre">localhost</span></tt>.</p>
+
+ <p>Oppure si potrebbe ricondurre l'indirizzo IP di un
+ server HTTP pubblico usato per i downloads (ad esempio un
+ mirror della propia distribuzione come <tt class=
+ "docutils literal"><span class=
+ "pre">ftp.it.debian.org</span></tt>) a un equivalente
+ mirror creato all'interno della rete locale, riducendo il
+ traffico verso l'esterno e aumentando notevolmente la
+ velocita' di scaricamento.</p>
+ </div>
+
+ <div class="section" id="hostname">
+ <h2><a class="toc-backref" href=
+ "#id64">5.9 Hostname</a></h2>
+
+ <p>Ogni computer ha un <em>proprio nome</em> visualizzabile
+ (e modificabile) con il comando <tt class=
+ "docutils literal"><span class="pre">hostname</span></tt>.
+ Quando utilizzate a una shell su un host in genere
+ l'hostname compare nel prompt della shell.</p>
+
+ <p>Per visualizzare il nome dell'host su cui si sta
+ operando si digiti semplicemnte <tt class=
+ "docutils literal"><span class="pre">hostname</span></tt>,
+ lo stesso comando con un oggetto modifica temporaneamente
+ il nome dell'host. Per modificare in modo permanente il
+ nome del computer si modifichi il contenuto del file
+ <tt class="docutils literal"><span class=
+ "pre">/etc/hostname</span></tt>.</p>
+
+ <p>Si faccia attenzione a non aver un hostname puramente
+ numerico: ad es. <tt class="docutils literal"><span class=
+ "pre">161</span></tt>. E' opportuno che il nome sia
+ comunque un alfanumerico: <tt class=
+ "docutils literal"><span class="pre">host-161</span></tt> o
+ simile.</p>
+
+ <div class="section" id="fqdn">
+ <h3><a class="toc-backref" href=
+ "#id65">5.9.1 FQDN</a></h3>
+
+ <p>Per semplicita' gli host sono generalemente
+ raggiungibili dall'esterno mappando il loro IP su un nome
+ di dominio FQDN: fully qualified domain name, composto
+ generalmente da <em>hostname</em>.``domain-name``, ad es.
+ <em>bender</em>.``piffa.net``.</p>
+
+ <p>Alcuni servizi internet fanno affidamento sul PTR
+ dell'IP del server per cercare una conferma che il
+ <em>servizio</em> sia veramente chi afferma di essere (ad
+ esempio STMP).</p>
+
+ <p>Non e' automatico che un servizio, ad esempio un
+ server di posta, si qualifichi leggendo il contenuto del
+ file <tt class="docutils literal"><span class=
+ "pre">hostname</span></tt> aggiungendo come suffisso il
+ dominio della rete di cui fa parte l' host: a volte
+ questo parametro puo' essere specificato nel file di
+ configurazione del servizio:</p>
+ <pre class="literal-block">
+* Squid (HTTP proxy): ``visible_hostname``
+
+* Postfix (SMTP server): ``myhostname``
+</pre>
+
+ <p>I motivi sono diversi, senza entrare nel dettaglio dei
+ vari protocolli si pensi comunque che un host ha sempre
+ un solo nome, ma puo' avere un numero variabile di
+ <em>device di rete</em> sia fisici che virtuali con
+ relativi <em>indirizzi IP</em>, e piu' servizi in ascolto
+ sui vari IP.</p>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="dnsmasq">
+ <h1><a class="toc-backref" href=
+ "#id66">6 DNSmasq</a></h1>
+
+ <p>Dnsmasq puo' svolgere le funzioni di un DNS cache /
+ forwarder, server DHCP, e' caratterizzato dalla facilita' di
+ configurazione, limitato uso di risorse, adattabilita' a
+ connessioni <em>dinamiche</em> come ADSL o altre punto a
+ punto (anche via cellulari) per condividere rapidamente la
+ rete (cosa molto utile se ci dovesse trovare a ridare
+ connettetivita' a una rete momentaneamente sprovvista), dalla
+ possibilita' di modificare rapidamente i record DNS serviti
+ alla rete anche grazie alla distribuzione del file <tt class=
+ "docutils literal"><span class="pre">/etc/hosts</span></tt>
+ locale. Puo' essere anche utilizzato come <cite>server per il
+ boot da rete
+ <http://www.debian-administration.org/articles/478>_</cite>
+ .</p>
+
+ <p>Dnsmasq e' un interessante alternativa all'uso del server
+ DNS Bind in modalita' <em>forwarding e cache-only</em> (non
+ autoritativo) accompagnato dal server DHCPd. I vantaggi
+ sono:</p>
+
+ <ul class="simple">
+ <li>Leggerezza: puo' essere fatto girare su una macchina
+ relativamente debole in caso di bisogno.</li>
+
+ <li>Rapidita' di configurazione (in particolare per servire
+ dei record A / MX alla rete, modificando al volo i valori
+ originali ospitati sul server DNS pubblico).</li>
+
+ <li>Ben integrato con connessioni PPP : e' ingrado di
+ rilevare i cambiamenti dei dns suggeriti e impostarli come
+ forwarders (utile se dovete rendere disponibile rapidamente
+ una connessione a internet a una rete in difficolta').</li>
+ </ul>
+
+ <p>Tutto cio' rende Dnsmasq una soluzione valida in
+ particolare quando si deve intervenire in una rete
+ pre-esistente in cui il server principale e' in crisi: si
+ potra' utilizzare Dnsmasq anche su una macchina piu' debole e
<em>mascherare</em> i servizi al momento non disponibili.
Molto utile per scopi didattici, sopratutto per testare
server SMTP impostando al volo i campi MX per nomi di dominio
fittizi.</p>
+
+ <div class="section" id="configurazione">
+ <h2><a class="toc-backref" href=
+ "#id67">6.1 Configurazione</a></h2>
+
+ <p>Vediamo alcune direttive di basi del file di
+ configurazione <tt class="docutils literal"><span class=
+ "pre">/etc/dnsmasq.conf</span></tt> utili per la
+ configurazione sia del DNS cache che per il DHCP
+ server:</p>
+
+ <dl class="docutils">
+ <dt>domain-needed</dt>
+
+ <dd>Non inoltrare query ai server DNS esterni per nomi
+ semplici (es andrea, portatile, pippo) che verranno
+ risolti solo in locale o causeranno direttamente una
+ risposta <em>not found</em> .</dd>
+
+ <dt>bogus-priv</dt>
+
+ <dd>Simile alla voce precedente ma per i reverse
+ look-up.</dd>
+
+ <dt>domain</dt>
+
+ <dd>Nome di dominio della rete da passare ai client.</dd>
+
+ <dt>expand_hosts</dt>
+
+ <dd>Aggiunge il <tt class="docutils literal"><span class=
+ "pre">nome</span> <span class="pre">host</span></tt> (
+ <tt class="docutils literal"><span class=
+ "pre">/etc/hostname</span></tt>) dei client al nome di
+ dominio per qualificarli in rete, senza bisogno di dover
+ comporre a un elenco statico di record nel file
+ <tt class="docutils literal"><span class=
+ "pre">/etc/hosts</span></tt> o nello stesso file di
+ configurazione di dnsmasq. Es: se un vostro client si
+ chiama <tt class="docutils literal"><span class=
+ "pre">chrome</span></tt> e il vostro dominio <tt class=
+ "docutils literal"><span class=
+ "pre">piffa.net</span></tt> dnsmasq rendera' disponibile
+ il campo <em>A</em> per il dominio <tt class=
+ "docutils literal"><span class=
+ "pre">chrome.piffa.net</span></tt> diretto all'ip che
+ verra' assegnato al client.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="dhcp">
+ <h2><a class="toc-backref" href=
+ "#id68">6.2 DHCP</a></h2>
+
+ <p>Per attivare il demone DHCP di Dnsmasq basta aggiungere
+ al file di configurazione il <em>range</em> degli IP che si
+ vuole assegnare ai client con il <em>lease time</em> (tempo
+ di rilascio: quanto a lungo saranno validi gli IP
+ assegnati) espresso in ore.</p>
+
+ <p>Si faccia <em>attenzione</em>: in una rete puo' essere
+ presente <strong>un solo server DHCP</strong>, o per meglio
+ dire qualunque server DHCP ascolta sul broadcast <tt class=
+ "docutils literal"><span class=
+ "pre">255.255.255.255</span></tt> e potrebbe rispondere a
+ un pacchetto di richiesta DHCP. Quindi non fate partire
+ inavvertitamente un server DHCP in una rete gia' servita e
+ <strong>non vi azzardate ad andare in giro con un portatile
+ con un server DHCP attivo</strong> nelle reti altrui.
+ Questo vale anche per i laboratori di informatica dei corsi
+ di reti: non fate partire il vostro server DHCP se siete
+ collegati alla rete interna!</p>
+
+ <p>/etc/dnsmasq.conf (riga 118):</p>
+ <pre class="literal-block">
+dhcp-range=192.168.0.20,192.168.0.50,24h
+</pre>
+ </div>
+
+ <div class="section" id="dns-cache">
+ <h2><a class="toc-backref" href=
+ "#id69">6.3 DNS cache</a></h2>
+
+ <p>Dnsmasq lavora di default come cache dns: inserire al
+ file <tt class="docutils literal"><span class=
+ "pre">/etc/resolv.conf</span></tt> il nameserver localhost
+ in cima alla lista dei <em>nameserver</em> disponibili.</p>
+
+ <blockquote>
+ nameserver 127.0.0.1
+ </blockquote>
+
+ <p>Questo pero' potrebbe essere problematico se un altro
+ servizio, ad esempio il DHCP client, riscrive il contenuto
+ del file <tt class="docutils literal"><span class=
+ "pre">/etc/resolv.conf</span></tt>. Per superare il
+ problema si aggiunga (riga 20) al file di configurazione
+ <tt class="docutils literal"><span class=
+ "pre">/etc/dhcp3/dhclient.conf</span></tt></p>
+ <pre class="literal-block">
+prepend domain-name-servers 127.0.0.1;
+</pre>
+
+ <p>Oppure potrebbe essere il nostro <em>PPP client</em>
+ (per la connessione ADSL) a intervenire sul file <tt class=
+ "docutils literal"><span class=
+ "pre">//etc/resolv.conf</span></tt>, si modifichi quindi
+ <tt class="docutils literal"><span class=
+ "pre">/etc/ppp/peers/dsl-provider</span></tt> commentando
+ <tt class="docutils literal"><span class=
+ "pre">usepeerdns</span></tt>. Se la vostra connessione ad
+ internet e' ADSL raramente dovreste aver bisogno di
+ cambiare i DNS una volta impostati (a meno che non usiate
+ un portatile!).</p>
+ </div>
</div>
- <div class="section" id="samba">
+ <div class="section" id="bind-dns-autoritativo">
<h1><a class="toc-backref" href=
- "#id44">6 Samba</a></h1>
+ "#id70">7 Bind : DNS Autoritativo</a></h1>
- <p>Samba e' un progetto libero che fornisce servizi di
- condivisione di file e stampanti a client SMB/CIFS.</p>
+ <p>Le soluzioni viste possono bastare per la rete locale o
+ per fare delle prove, ma prima o poi verra' il momento in cui
+ si e' chiamati a gestire dei domini su internet: lo standard
+ e' da sempre <em>Bind</em> ( demone <em>named</em>), ora alla
+ versione 9.</p>
- <p>Samba e' liberamente disponibile, al contrario di altre
- implementazioni SMB/CIFS, e permette di ottenere
- interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
+ <p>Installare i pacchetti:</p>
+ <pre class="literal-block">
+bind9
+</pre>
- <p>Samba e' un software che puo girare su piattaforme che non
- siano Microsoft Windows, per esempio, UNIX, Linux, IBM System
- 390, OpenVMS e altri sistemi operativi. Samba utilizza il
- protocollo TCP/IP utilizzando i servizi offerti sul server
- ospite. Quando correttamente configurato, permette di
- interagire con client o server Microsoft Windows come se
- fosse un file e print server Microsoft agendo da Primary
- Domain Controller (PDC) o come Backup Domain Controller, puo'
- inoltre prendere parte ad un dominio Active Directory.</p>
+ <div class="section" id="id5">
+ <h2><a class="toc-backref" href=
+ "#id71">7.1 DNS cache</a></h2>
+
+ <p>Bind appena installato funzionera' come DNS cache: si
+ faccia un test con un <tt class=
+ "docutils literal"><span class="pre">dig</span>
+ <span class="pre">@localhost</span></tt> . Bind a
+ differenza di Dnsmasq e' autonomo: non ha bisogno di
+ forwardare (inoltrare) le query a un DNS esterno: queste
+ verranno risolte direttamente da Bind partendo dai <em>DNS
+ root servers</em>.</p>
+
+ <p>E' comunque possibile impostare dei DNS forwarders,
+ tipicamente i DNS server forniti dal proprio provider, per
+ velocizzare le query:</p>
+
+ <p>/etc/bind/named.conf.options (riga 13):</p>
+ <pre class="literal-block">
+forwarders {
+ 10.10.208.254;
+ };
+</pre>
- <div class="section" id="pacchetti">
+ <p>Nel caso si voglia usare Bind solo come server DNS cache
+ per la propria LAN senza ospitare delle zone DNS pubbliche
+ sara' il caso di limitare gli accessi al server alla sola
+ LAN:</p>
+
+ <p>/etc/bind/named.conf.options (riga 19):</p>
+ <pre class="literal-block">
+// Se il proprio server ha IP 10.10.208.254
+// sulla rete LAN privata:
+listen-on { 10.10.208.254; }
+</pre>
+
+ <p>E non si lasci il server in ascolto su uno degli
+ eventuali indirizzi IP pubblici.</p>
+
+ <p>Se questo non fosse possibile si puo' sempre lavorare su
+ una <em>acl</em>:</p>
+
+ <p>/etc/bind/named.conf</p>
+ <pre class="literal-block">
+acl "localnet" {
+ 10.10.208.0/24 ; 127.0.0.0/8 ;
+ } ;
+</pre>
+
+ <p>Per poi aggiungere all'interno della stanza options la
+ direttiva che abilita' l'entita' <tt class=
+ "docutils literal"><span class=
+ "pre">localnet</span></tt>:</p>
+
+ <p>/etc/bind/named.conf.options</p>
+ <pre class="literal-block">
+allow-query {"localnet" ;} ;
+</pre>
+ </div>
+
+ <div class="section" id="ospitare-una-zona">
<h2><a class="toc-backref" href=
- "#id45">6.1 Pacchetti</a></h2>
+ "#id72">7.2 Ospitare una zona</a></h2>
- <p>Pacchetti da installare per utilizzare Samba in
- modalita' client <a class="footnote-reference" href="#id5"
- id="id4" name="id4">[2]</a></p>
+ <p>Se avete acquistato un nome di dominio e vi serve un
+ software DNS per gestirlo Bind e' la scelta piu' diffusa.
+ Ora vedremo come configurare una <em>zona</em> (come
+ piffa.net) in modo che Bind sia autoritativoper questa,
+ rispondendo alle query DNS di tutta la rete internet.</p>
+
+ <div class="section" id="named-conf-local">
+ <h3><a class="toc-backref" href=
+ "#id73">7.2.1 named.conf.local</a></h3>
+
+ <p>Prima di tutti impostiamo il server bind per gestire
+ la zona, per non fare confusione e' opportuno inserire le
+ propie zone DNS nel file <tt class=
+ "docutils literal"><span class=
+ "pre">named.conf.local</span></tt> e non in <tt class=
+ "docutils literal"><span class=
+ "pre">named.conf</span></tt>.</p>
+
+ <p>named.conf.local:</p>
+ <pre class="literal-block">
+/
+// Do any local configuration here
+//
+
+// Consider adding the 1918 zones here, if they are not used in your
+// organization
+//include "/etc/bind/zones.rfc1918";
+
+zone "piffa.net" {
+ type master;
+ file "/etc/bind/pz/piffa.net";
+ }
+</pre>
+
+ <dl class="docutils">
+ <dt>type master</dt>
+
+ <dd>Il nostro server DNS sara' il principale, al quale
+ poi potremo affiancare dei DNS secondari nel caso
+ questo non sia disponibile.</dd>
+
+ <dt>file "/etc/bind/pz/piffa.net"</dt>
+
+ <dd>Dove verranno inserite le informazioni vere e
+ propie di questa zona.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="configurazione-della-zona">
+ <h3><a class="toc-backref" href=
+ "#id74">7.2.2 Configurazione della
+ zona</a></h3>
+
+ <p>Ora dovremo preparare il file contenente i record DNS
+ della zona <em>piffa.net</em>, come abbiamo indicato
+ prima questi saranno contenuti nel file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/pz/piffa.net</span></tt> . Tenere le zone
+ dentro una sottocartella e' buona abitudine, usare
+ <tt class="docutils literal"><span class=
+ "pre">pz</span></tt> per queste e' una vecchia
+ abitudine.</p>
+
+ <p>piffa.net:</p>
+ <pre class="literal-block">
+; Zona per il dominio di secondo livello piffa.net
+
+$TTL 3D ; 3 days
+@ IN SOA ns1.piffa.net. hostmaster.piffa.net. (
+ 200905245 ; serial
+ 8H ; refresh (8 hours)
+ 2H ; retry (2 hours)
+ 4W ; expire (4 weeks)
+ 1D ; minimum (1 day)
+ )
+;
+ NS ns1
+ NS ns2
+ A 94.23.63.105
+ MX 10 smtp
+ TXT "Piffanet main site"
+;
+ns1 A 94.23.63.105
+ns2 A 65.98.21.97
+zoo A 94.23.63.105
+smtp A 94.23.63.105
+test.piffa.net. A 94.23.63.105
+*.piffa.net. A 94.23.63.105 ; *catch all domain
+www CNAME zoo
+ftp CNAME zoo
+</pre>
+
+ <p>All'interno di questo file si possono inserire dei
+ commenti con il carattere <tt class=
+ "docutils literal"><span class="pre">;</span></tt>
+ (punto-e-virgola), si faccia attenzione alla rigida
+ sintassi: apertura e chiusura delle parentesi tonde nella
+ parte <tt class="docutils literal"><span class=
+ "pre">IN</span> <span class="pre">SOA</span></tt>, uso
+ del <tt class="docutils literal"><span class=
+ "pre">punto</span></tt> finale per precisare un nome di
+ dominio specifico (<em>FQDN</em>: Fully-qualified Domain
+ Name) come <tt class="docutils literal"><span class=
+ "pre">test.piffa.net.</span></tt> a differenza degli
+ altri domini di terzo livello come <tt class=
+ "docutils literal"><span class=
+ "pre">pop,imap,smtp</span></tt> .</p>
+
+ <p>La zona inizia con una direttiva <tt class=
+ "docutils literal"><span class="pre">$TTL</span>
+ <span class="pre">3D</span></tt> (RFC 2308) che indica la
+ durata (in questo caso tre giorni) che ogni record
+ dovrebbe avrebbe nella cache degli altri serber DNS.
+ Questo valore dovrebbe essere superiore a un giorno, se
+ non modificate spesso i valori dei vostri record DNS e'
+ consigliabile settarlo a 2/3 settimane in modo da
+ limitare la frequenza delle query al propio server.
+ Questo parametro puo' essere modificato per singoli
+ record:</p>
+ <pre class="literal-block">
+$TTL 3D ; 3 giorni: default se non specificato altrimenti
+rapido 5h IN A 94.23.63.105 ; usa un TTL di 5 ore
+lento 3w IN A 94.23.63.105 ; usa un TTL di 3 settimane
+normale IN A 94.23.63.105 ; usa il TTL di default: 3 giorni
+</pre>
+
+ <p>Segue poi il nome della zona, indicato con la
+ <tt class="docutils literal"><span class=
+ "pre">@</span></tt> per richiamare la zona originale
+ precisata nel file <tt class=
+ "docutils literal"><span class=
+ "pre">named.conf.options</span></tt> . Segue il campo
+ <tt class="docutils literal"><span class=
+ "pre">SOA</span></tt>.</p>
+
+ <div class="section" id="soa-start-of-authority-record">
+ <h4><a class="toc-backref" href=
+ "#id75">7.2.2.1 SOA: Start of
+ Authority Record</a></h4>
+
+ <p>Il record SOA puo' comparire solo una volta in una
+ zona, contiene informazioni relative all'autorita' del
+ server DNS.</p>
+
+ <dl class="docutils">
+ <dt>ns1.piffa.net. name-server</dt>
+
+ <dd>primary master DNS di questo dominio.</dd>
+
+ <dt>hostmaster.piffa.net. email-addr</dt>
+
+ <dd>email-addr: indirizzo email della persona
+ responsabile di questa zona, il primo punto viene
+ tradotto in una <em>chiocciola</em> <tt class=
+ "docutils literal"><span class="pre">@</span></tt>
+ dato che questo carattere ha un'altro utilizzo
+ all'interno di questo file. Il referente della zona
+ <strong>deve</strong> essere un email valido e
+ controllato, come consuetudine si usa <tt class=
+ "docutils literal"><span class=
+ "pre">hostmaster@dominio.tilde</span></tt> .</dd>
+
+ <dt>200905245 serial number</dt>
+
+ <dd>Questo valore serve per indicare quando e' stato
+ modificato questo file di configurazione, secondo il
+ formato <tt class="docutils literal"><span class=
+ "pre">yyyymmddss</span></tt>: <tt class=
+ "docutils literal"><span class="pre">yyyy</span></tt>
+ = anno, ''mm'' = mese, ''dd'' = giorno, ''ss'' =
+ seriale. Il seriale che deve essere sempre
+ specificato anche per una cifra, va incrementato di
+ una unita' nel caso vengano fatte piu' modifiche
+ <em>nello stesso giorno</em>.</dd>
+
+ <dt>8H refresh</dt>
+
+ <dd>Indica ai DNS secondari quanto tempo attendere
+ per cercare di aggiornare i loro dati con il DNS
+ master.</dd>
+
+ <dt>2H retry</dt>
+
+ <dd>Intervallo di tempo per il DNS slave (secondario)
+ da aspettare prima di cercare di ricontattare il
+ <em>master</em> in caso di problemi col
+ <em>refresh</em>.</dd>
+
+ <dt>4W expire</dt>
+
+ <dd>Indica quando i dati dei dns secondarinon sono
+ piu' autoritativi in caso di impossibilita' degli
+ <em>slaves</em> di ri-aggiornarsi con il
+ <em>master</em>. Consigliato un valore di 2/4
+ settimane.</dd>
+
+ <dt>1D minimum</dt>
+
+ <dd>Questo valore indicava il TTL fino alla versione
+ 8 di Bind, da Bind 9 e secondo la RFC2308 indica la
+ durata del <em>negative caching</em>, quanto i
+ resolvers (ad esempio un server dns cache) puo'
+ mantenere un record <em>negativo</em> (che non indica
+ la corrispondenza tra un nome di dominio e un ip, ma
+ la non esistenza del record). Nell'uso per il
+ negative caching viene fissato un valore massimo di 3
+ ore dalla RFC 2308.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="altri-campi">
+ <h4><a class="toc-backref" href=
+ "#id76">7.2.2.2 Altri campi:</a></h4>
+
+ <p>All'interno della zona possono essere utilizati vari
+ tipi di records (RR):</p>
+
+ <dl class="docutils">
+ <dt>TXT</dt>
+
+ <dd>Informazioni testuali associate ad un record</dd>
+
+ <dt>NS</dt>
+
+ <dd>Name Server della zona. Non deve essere un
+ cname.</dd>
+
+ <dt>A</dt>
+
+ <dd>Indirizzo ipv4 da associare al record</dd>
+
+ <dt>AAA</dt>
+
+ <dd>Indirizzo ipv6 da associare al record</dd>
+
+ <dt>CNAME</dt>
+
+ <dd>Canonical Name: un alias per un host: ad esempio
+ per il dominio piffa.net possiamo settare degli alias
+ come <tt class="docutils literal"><span class=
+ "pre">www.piffa.net,</span> <span class=
+ "pre">http.piffa.net,</span> <span class=
+ "pre">virtual.piffa.net,</span> <span class=
+ "pre">ftp.piffa.net,</span> <span class=
+ "pre">imap.piffa.net</span></tt>. Comodo quando
+ diversi alias sono sempre riferiti allo stesso
+ ip.</dd>
+
+ <dt>MX</dt>
+
+ <dd>Mail Exchanger: server di posta che si occupera'
+ della posta elettronica per questo dominio.E'
+ opportuno avere almeno un server di posta di back-up,
+ per indicare la priorita' di un MX rispettoad un
+ altro si usa un valore di 2 cifre: il valore piu'
+ basso indica priorita' piu' bassa. Es: <tt class=
+ "docutils literal"><span class=
+ "pre">MX</span> <span class=
+ "pre">10</span> <span class=
+ "pre">smtp.piffa.net.</span></tt> per il server SMTP
+ principale e <tt class=
+ "docutils literal"><span class="pre">MX</span>
+ <span class="pre">40</span> <span class=
+ "pre">smtp2.piffa.net</span></tt> per il secondario.
+ Non deve essere un cname.</dd>
+
+ <dt>PTR</dt>
+
+ <dd>Reverse look-up, usato per la mappatura inversa
+ di un indirizzo ip a una stringa identificativa
+ dell'host. Si noti che per poter modificare questi
+ record si deve avere <em>in gestione</em> la <em>zona
+ IP</em>, se cosi' non fosse si dovra' chiedere al
+ propio provider la modifica di questo record per il
+ propio ip. Links: <a class="reference external" href=
+ "http://www.zytrax.com/books/dns/ch3/">http://www.zytrax.com/books/dns/ch3/</a></dd>
+ </dl>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="dns-slave">
+ <h2><a class="toc-backref" href=
+ "#id77">7.3 DNS slave</a></h2>
+
+ <p>Data l'importanza del servizio DNS e' necessario avere
+ ridondanza per i server DNS che ospitano i vostri dati: in
+ caso di indisponibilita' del server <em>master</em> (nel
+ caso fosse il solo a tenere i dati questo comporterebbe la
+ <em>scomparsa</em> di tutti i servizi / host da esso
+ seviti!) il client potrebbe contattare uno degli
+ <em>slave</em>.</p>
+
+ <p>Gli slave recuperano i dati dei recordos RR direttamente
+ dal master e non sara' quindi necessario dover mantenere
+ manualmente il file di configurazione della zona sugli
+ slaves, ogni volta che aggiorneremo il master questi dati
+ si propaghera' agli slaves automaticamente.</p>
+
+ <p>Per attivare uno <em>slave</em> per la nostra zona di
+ esempio <tt class="docutils literal"><span class=
+ "pre">piffa.net</span></tt> si inserisca nel file
+ <tt class="docutils literal"><span class=
+ "pre">named.conf.local</span></tt> dello slave server:</p>
<pre class="literal-block">
-samba-client
+zone "piffa.net" {
+ type slave;
+ file "/etc/bind/pz/piffa.net";
+ masters { 192.168.0.1; };
+ };
</pre>
- <p>Pacchetti da installare per utilizzare Samba in
- modalita' server:</p>
+ <p>Facendo ripartire Bind il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/pz/piffa.net</span></tt> viene creato
+ automaticamente.</p>
+
+ <p>Segue un estratto di <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/syslog</span></tt> al <tt class=
+ "docutils literal"><span class="pre">restart</span></tt> di
+ <tt class="docutils literal"><span class=
+ "pre">bind9</span></tt> sullo slave:</p>
<pre class="literal-block">
-samba smbfs smbclient
+... slave named[2256]: zone piffa.net/IN: loaded serial 200905245
+... slave named[2256]: running
+... slave named[2256]: zone piffa.net/IN: sending notifies (serial 200905245)
+... slave named[2256]: client 192.168.0.1#1464: received notify for zone 'piffa.net'
+... slave named[2256]: zone piffa.net/IN: notify from 192.168.0.1#1464: zone is up to date
</pre>
- <table class="docutils footnote" frame="void" id="id5"
- rules="none">
- <colgroup>
- <col class="label">
- <col>
- </colgroup>
+ <div class="warning">
+ <p class="first admonition-title">Avvertenza</p>
+
+ <p class="last">Bind9 (versione 9.3 presente in Debian
+ Lenny) richiede una esplicita autorizzazione alla
+ notifica per lo stesso server slave, che in fase di avvio
+ interroghera' (inviando un notify) se' stesso per
+ valutare se i dati relativi alla zona di cui e' slave
+ sono aggiornati. Si aggiunga quindi al file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/named.conf.options</span></tt> dello
+ slave: <tt class="docutils literal"><span class=
+ "pre">allow-notify</span> <span class="pre">{</span>
+ <span class="pre">192.168.0.1;</span> <span class=
+ "pre">};</span></tt> all'interno della stanza <tt class=
+ "docutils literal"><span class="pre">options</span></tt>,
+ in cui l'inidirizzo IP inserito e' quello dello stesso
+ slave server.</p>
+ </div>
+ </div>
+
+ <div class="section" id="aggiornamento-dinamico-nsupdate">
+ <h2><a class="toc-backref" href=
+ "#id78">7.4 Aggiornamento dinamico:
+ nsupdate</a></h2>
+
+ <p>Dalla versione 8 di Bind e' dsponibile l'utility
+ <tt class="docutils literal"><span class=
+ "pre">nsupdate</span></tt> (disponibile nel pacchetto
+ <tt class="docutils literal"><span class=
+ "pre">dnsutils</span></tt>) per aggiornare automaticamente
+ i record di una zona secondo il paradigma client / server (
+ RFC2136 ) . Posto che abbiate a disposizione un server DNS
+ Bind on-line su un indirizzo IP fisso e un zona da gestire
+ (che potrebbe essere anche solo la delega di un dominio di
+ terzo livello come <em>casa.miodominio.net</em>) sara'
+ possibile aggiornare automaticamente i record che tirano a
+ degli indirizzi IP <em>pubblici ma dnamici</em>, come
+ quelli spesso messi a disposizione dei provider per le
+ connessioni ad internet residenziali, in modo da poter
+ rendere sempre raggiungibile la vostra workstation a casa
+ anche dopo un aggiornamento dell'ip dinamico associato alla
+ connessione.</p>
+
+ <p>L'auenticazione del client nsupdate che avra' la
+ possibilita' di aggiornare il server DNS master avviene
+ tramite <em>Transaction signatures</em> (TSIG, RFC2845)
+ usando un algoritmo di criptazione dati asimmetrico
+ <em>HMAC-MD5</em> : generata una coppia di chiavi sul
+ client / nsupdate con l'utility si dovra' trasferire la
+ chiave pubblica sul server <em>master</em>, che verra'
+ configurato per onorare gli aggiornamenti (eliminazione e
+ inserimento di record RR) autenticati dalla chiave
+ privata.</p>
+
+ <div class="section" id="configurazione-client-nsupdate">
+ <h3><a class="toc-backref" href=
+ "#id79">7.4.1 Configurazione client
+ (nsupdate)</a></h3>
+
+ <p>Sul client, sul quale non deve essere necessariamente
+ installato un server DNS Bind ma la sola utility
+ <tt class="docutils literal"><span class=
+ "pre">nsupdate</span></tt>, generiamo la coppia di chiavi
+ con l'utility <tt class="docutils literal"><span class=
+ "pre">dnssec-keygen</span></tt> installabile tramite il
+ pacchetto <tt class="docutils literal"><span class=
+ "pre">bind9utils</span></tt>:</p>
+ <pre class="literal-block">
+dnssec-keygen -a HMAC-MD5 -b 512 -n USER home.piffa.net.
+</pre>
+
+ <p>Otterremo le due chiavi <tt class=
+ "docutils literal"><span class=
+ "pre">Khome.piffa.net.+157+04331.key</span>
+ <span class=
+ "pre">Khome.piffa.net.+157+04331.private</span></tt>, la
+ chiave pubblica dovra' essere resa noto al server master
+ che ricevera' l'update dei records.</p>
+ </div>
+
+ <div class="section" id=
+ "configurazione-server-riconoscimento-chiave">
+ <h3><a class="toc-backref" href=
+ "#id80">7.4.2 Configurazione server:
+ riconoscimento chiave</a></h3>
+
+ <dl class="docutils">
+ <dt>Per rendere nota al server la chiave pubblica
+ generata sul client si aggiunga quindi al file
+ <tt class="docutils literal"><span class=
+ "pre">/etc/bind/named.conf</span></tt> sul
+ server::</dt>
+
+ <dd>
+ <dl class="first last docutils">
+ <dt>key home.piffa.net. {</dt>
+
+ <dd>algorithm HMAC-MD5; secret
+ "txfAkNTScANEu2V73mCeiDpXNc3pmf+7ONOoKnTKQKIZMzierSmeHjK5
+ Z8ntnByt/PJwv26jCIsVh8n+xzVsRw=="; };</dd>
+ </dl>
+ </dd>
+ </dl>
+
+ <div class="note">
+ <p class="first admonition-title">Nota</p>
+
+ <p class="last">La parte <tt class=
+ "docutils literal"><span class=
+ "pre">secret</span></tt>, che potete leggere
+ direttamente nel file *.key della chiave genearta, e'
+ scritto <em>tutto sulla stessa riga</em> senza ritorni
+ a capo.</p>
+ </div>
+ </div>
+
+ <div class="section" id="server-gestione-dell-intera-zona">
+ <h3><a class="toc-backref" href=
+ "#id81">7.4.3 Server: gestione
+ dell'intera zona</a></h3>
+
+ <p>Sul server modifichiamo il file di configurazione
+ <tt class="docutils literal"><span class=
+ "pre">named.conf.local</span></tt> della zona della quale
+ vogliamo concedere l'aggiornamento al client:</p>
+ <pre class="literal-block">
+zone "piffa.net" {
+ type master;
+ file "/etc/bind/pz/piffa.net" ;
+ allow-update {
+ key home.piffa.net;
+ };
+};
+</pre>
+
+ <dl class="docutils">
+ <dt>Sara' necessario assicurarsi che il demone di Bind
+ sia in grado di modificare il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/bind/pz/piffa.net</span></tt>: dato che
+ questo file ora sara' gestito da lui si proceda a
+ cedergli la propieta' del file::</dt>
+
+ <dd>chown bind /etc/bind/pz/piffa.net</dd>
+ </dl>
+
+ <p>Altro problema che si potrebbe porre: gli orologi di
+ sistema dei due host devono essere sincronizzati per
+ poter valutare l'opportunita' di un aggiornamento: si
+ consigla di installare su entrambi l'utility <tt class=
+ "docutils literal"><span class="pre">ntpdate</span></tt>
+ e di eseguirla facendo riferimento ai time server di
+ Debian:</p>
+ <pre class="literal-block">
+apt-get install ntpdate
+ntpdate-debian
+</pre>
+
+ <p>Ora possiamo provare dal client a effettuare
+ l'iserimento di un record per testarne il
+ funzionamento:</p>
+ <pre class="literal-block">
+# nsupdate -k Khome.piffa.net.+157+04331.private -v
+> server ns1.piffa.net
+> update add home.piffa.net. 86400 A 192.168.0.2
+> show
+Outgoing update query:
+;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
+;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
+;; UPDATE SECTION:
+home.piffa.net. 86400 IN A 192.168.0.1
+
+
+> send
+</pre>
+
+ <p>Per comprendere meglio l'uso dell'utility <tt class=
+ "docutils literal"><span class="pre">nsupdate</span></tt>
+ si consiglia la lettura della relativa pagina man. Nella
+ prima riga viene invocato il comando <tt class=
+ "docutils literal"><span class="pre">nsupdate</span></tt>
+ impostando col flag <tt class=
+ "docutils literal"><span class="pre">-k</span></tt> la
+ chiave privata generata precedentemente, con <tt class=
+ "docutils literal"><span class="pre">server</span></tt>
+ si imposta quale server NS autoritario della zona (che
+ abbiamo precedentemente configurato per ricevere gli
+ aggiornamenti) vogliamo contattare. Alla riga sucessiva
+ <tt class="docutils literal"><span class=
+ "pre">update</span></tt> viene aggiunto un record
+ <tt class="docutils literal"><span class=
+ "pre">A</span></tt> per la il dominio <tt class=
+ "docutils literal"><span class=
+ "pre">home.piffa.net</span></tt> indirizzato all'IP
+ <tt class="docutils literal"><span class=
+ "pre">192.168.0.2</span></tt>, poi <tt class=
+ "docutils literal"><span class="pre">show</span></tt>
+ mostra quanto ci si prepara a comunicare al server con il
+ finale <tt class="docutils literal"><span class=
+ "pre">send</span></tt> .</p>
+
+ <p>Si noti che in questo modo <em>l'intera zona</em>
+ piffa.net e suscettibile di essere modificata dal client,
+ che potra' eliminare e inserire qualunque record. E'
+ possibile gestire in modo piu' granulare la zona, ad
+ esempio concedendo al client i privilegi per gestire solo
+ una parte della zona o i tipo di record da gestire.</p>
+ </div>
+
+ <div class="section" id=
+ "automatizzare-l-aggiornamento-dinamico">
+ <h3><a class="toc-backref" href=
+ "#id82">7.4.4 Automatizzare
+ l'aggiornamento dinamico</a></h3>
+
+ <p>Nsupdate risulta comodo per tenere aggiornati i record
+ DNS degli host connessi ad internet con indirizzi IP
+ dinamici (pubblici) assegnati dal provider. Il client
+ deve essere in grado di contattare autonomamente il
+ server DNS per comunicare un cambiamento del suo ip.
+ Vediamo innanzi tutto un primo script per nsupdate:</p>
+ <pre class="literal-block">
+#!/bin/bash
+# Diamo al demone ppp un po' di tempo per negoziare la connessione
+# prima di leggere l'IP ottenuto
+sleep 15
+IPADDR=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
+
+nsupdate -k /root/dns/Khome.piffa.net.+157+04331.private <<-EOF
+ server 192.168.0.254
+ zone home.piffa.net.
+ update delete home.piffa.net. A
+ update delete home.piffa.net. MX
+ update add home.piffa.net. 432000 A $IPADDR
+ update add home.piffa.net. 432000 MX 10 home.piffa.net.
+ show
+ send
+ EOF
+</pre>
+
+ <p>Questo script legge il valore del device di rete
+ <tt class="docutils literal"><span class=
+ "pre">ppp0</span></tt> creato dal <cite>pppoe</cite> di
+ una connessione ADSL per ottenere l'indirizzo IP ottenuto
+ dal provider (prima di farlo aspetta 15 secondi per dare
+ il tempo al <tt class="docutils literal"><span class=
+ "pre">pppoe</span></tt> di negoziare la
+ connessione).Vengono poi eliminati gli esistenti valori
+ <tt class="docutils literal"><span class=
+ "pre">A</span></tt> e <tt class=
+ "docutils literal"><span class="pre">MX</span></tt> per
+ <tt class="docutils literal"><span class=
+ "pre">home.piffa.net</span></tt> (si noti il punto finale
+ dopo <em>net</em>) e inseriti quelli attuali.</p>
+
+ <p>Resta da decidere quando richiamare questo script:
+ l'evento che causa l'assegnazione del nuovo IP in questo
+ caso e una nuova connessione <tt class=
+ "docutils literal"><span class="pre">pppoe</span></tt>,
+ quindi sarebbe consigliabile inserire lo script nelle
+ routine comprese in <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/ppp/ip-up.d</span></tt> (si veda la
+ documentazione di ppp), nel caso questo non desse i
+ risultati sperati (per problemi di connessione) come via
+ estrema si consideri di mettere lo script nella routine
+ del demone <tt class="docutils literal"><span class=
+ "pre">cron</span></tt> in modo che venga eseguito
+ periodicamente (ad esempio ogni giorno).</p>
+ </div>
+ </div>
+
+ <div class="section" id="link-suggeriti">
+ <h2><a class="toc-backref" href=
+ "#id83">7.5 Link suggeriti:</a></h2>
+
+ <ul class="simple">
+ <li>DNS for Rocket Scientists <a class=
+ "reference external" href=
+ "http://www.zytrax.com/books/dns/">http://www.zytrax.com/books/dns/</a></li>
+
+ <li>DNS HOWTO <a class="reference external" href=
+ "http://www.langfeldt.net/DNS-HOWTO/BIND-9/">http://www.langfeldt.net/DNS-HOWTO/BIND-9/</a></li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="section" id="samba">
+ <h1><a class="toc-backref" href=
+ "#id84">8 Samba</a></h1>
+
+ <p>Samba e' un progetto libero che fornisce servizi di
+ condivisione di file e stampanti a client SMB/CIFS.</p>
+
+ <p>Samba e' liberamente disponibile, al contrario di altre
+ implementazioni SMB/CIFS, e permette di ottenere
+ interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
+
+ <p>Samba e' un software che puo' girare su piattaforme che
+ non siano Microsoft Windows, per esempio, UNIX, Linux, IBM
+ System 390, OpenVMS e altri sistemi operativi. Samba utilizza
+ il protocollo TCP/IP utilizzando i servizi offerti sul server
+ ospite. Quando correttamente configurato, permette di
+ interagire con client o server Microsoft Windows come se
+ fosse un file e print server Microsoft agendo da Primary
+ Domain Controller (PDC) o come Backup Domain Controller, puo'
+ inoltre prendere parte ad un dominio Active Directory.</p>
+
+ <div class="section" id="pacchetti">
+ <h2><a class="toc-backref" href=
+ "#id85">8.1 Pacchetti</a></h2>
+
+ <p>Pacchetti da installare per utilizzare Samba in
+ modalita' client <a class="footnote-reference" href="#id7"
+ id="id6" name="id6">[2]</a></p>
+ <pre class="literal-block">
+samba-client
+</pre>
+
+ <p>Pacchetti da installare per utilizzare Samba in
+ modalita' server:</p>
+ <pre class="literal-block">
+samba smbfs smbclient
+</pre>
+
+ <table class="docutils footnote" frame="void" id="id7"
+ rules="none">
+ <colgroup>
+ <col class="label">
+ <col>
+ </colgroup>
+
+ <tbody valign="top">
+ <tr>
+ <td class="label"><a class="fn-backref" href=
+ "#id6">[2]</a></td>
+
+ <td>Anche se nato per i sistemi Windows, Samba puo'
+ essere usato anche per montare cartelle sotto
+ GNU/Linux come alternativa a NFS. Per la condivisione
+ di stampanti sarebbe invece opportuno intervenire
+ direttamente su <tt class=
+ "docutils literal"><span class=
+ "pre">CUPS</span></tt>.</td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p>Durante la prima installazione viene chiesto il nome del
+ gruppo di appartenenza, il default per Windows e'
+ <tt class="docutils literal"><span class=
+ "pre">WORKGROUP</span></tt>. In aula usiamo invece
+ <tt class="docutils literal"><span class=
+ "pre">208</span></tt> .</p>
+
+ <p>Per riconfigurare Samba si usi il comando:</p>
+ <pre class="literal-block">
+dpkg-reconfigure samba-common
+</pre>
+ </div>
+
+ <div class="section" id="passwords-e-autenticazione">
+ <h2><a class="toc-backref" href=
+ "#id86">8.2 Passwords e
+ autenticazione</a></h2>
+
+ <p>Per poter configurare Samba in modo che usi un sistema
+ di negoziazione degli accessi alle cartelle condivise
+ basato su accoppiate <em>nome utente / password</em>
+ bisogna distinguere tra 3 livelli di password (e
+ generalmente volete usare <em>sempre la stessa
+ password</em> per ognuno di questi) e delle differenze tra
+ le modalita' di <em>autenticazione</em> (e quindi anche di
+ criptaggio delle passwords) usate da sistemi GNU/Linux e
+ Windows:</p>
+
+ <dl class="docutils">
+ <dt>1 Sistema *Unix ( GNU/Linux )</dt>
+
+ <dd>E' la password dell'<em>utente di sistema</em> che
+ viene usata sul sistema operativo su cui gira il software
+ Samba. E' importante tenere conto anche delle
+ <em>user-id</em> e <em>group-id</em> degli utenti che
+ dovranno fisicamente scrivere sui file system. Se un
+ utente non puo' scrivere in una certa posizione del file
+ system (ad esempio nella cartella <tt class=
+ "docutils literal"><span class=
+ "pre">/mnt/condivisione</span></tt> che sara' stata
+ necessariamente creata inizialmente dall'utente
+ <tt class="docutils literal"><span class=
+ "pre">root</span></tt>) per mancanza dei privilegi di
+ scrittura allora neanche Samba potra' farlo nel momento
+ in mette a disposizione la risorsa all'utente. Se si
+ montano file-system dedicati per le condivisioni
+ controllare i permessi e proprieta' dei <em>punti di
+ mount*</em>. Queste passwords sono salvate nel solito
+ file /etc/shadow (richiamato da /etc/passwd).</dd>
+
+ <dt>2 Password per l'applicativo Samba</dt>
+
+ <dd>Samba deve essere compatibile con Windows e quindi
+ utilizzare un sistema di criptazione delle password
+ diverso da /etc/shadow . Le password per Samba possono
+ essere gestite ad esempio col comando <tt class=
+ "docutils literal"><span class=
+ "pre">smbpasswd</span></tt> e vengono generalmente
+ salvate all'interno di <tt class=
+ "docutils literal"><span class=
+ "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
+
+ <dt>3 Password per Windows.</dt>
+
+ <dd>Gli utenti Windows effettuano il log-in alla partenza
+ della sessione di Windows. Se si avra' l'accortezza di
+ usare sempre la <em>stessa password</em> data
+ precedentemente anche a Windows (o viceversa impostare la
+ password per GNU/Linux / Samba uguale a quella di
+ Windows) l'utente potra' accedere automaticamente alle
+ condivisioni a lui disponibili.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="creazione-utenti">
+ <h2><a class="toc-backref" href=
+ "#id87">8.3 Creazione Utenti</a></h2>
+
+ <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
+ attenzione a <em>non dargli una shell di sistema</em>. Gli
+ utenti Windows che accedono al server solo per le
+ condivisioni non hanno bisogno di poter eseguire comandi
+ sul server!</p>
+
+ <p>Creazione di un utente denominato sambo:</p>
+ <pre class="literal-block">
+adduser --shell /bin/false sambo
+</pre>
+
+ <p>Nel file <tt class="docutils literal"><span class=
+ "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
+ <pre class="literal-block">
+sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
+</pre>
+
+ <p>Aggiunta dell'utente al database delle password per
+ Samba e generazione della sua password:</p>
+ <pre class="literal-block">
+smbpasswd -a sambo
+</pre>
+
+ <p>Se successivamente si vorra' modificare la password di
+ un utente gia' esistente si usi:</p>
+ <pre class="literal-block">
+smbpasswd sambo
+</pre>
+
+ <p>La password sotto Windows verra' modificata sul sistema
+ Windows.</p>
+ </div>
+
+ <div class="section" id="creare-la-condivisione">
+ <h2><a class="toc-backref" href=
+ "#id88">8.4 Creare la
+ condivisione</a></h2>
+
+ <p>La condivisione altro non e' che una cartella sul server
+ che viene resa disponibile ai client negoziando l'accesso
+ in base a una autenticazione basata su <em>user-name /
+ password</em>. E' per altro possibile permettere l'accesso
+ a una risorsa a chiunque indiscriminatamente (a tutti i
+ <tt class="docutils literal"><span class=
+ "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
+ punto di vista della sicurezza. Si decida se la cartella
+ condivisa debba risiedere nella <em>home</em> di un utente
+ (nel caso quest'ultimo ne sia l'unico fruitore) o in una
+ cartella in /mnt/ (nel caso piu' utenti accedano a questa).
+ Nel secondo caso si potranno gestire gli accessi sotto
+ GNU/Linux tramite i gruppi.</p>
+
+ <p>Creazione della risorsa sambo_share nella home
+ dell'utente sambo:</p>
+ <pre class="literal-block">
+# mkdir /home/sambo/sambo_share
+# chown sambo:sambo /home/sambo/sambo_share/
+</pre>
+
+ <div class="section" id=
+ "sicurezza-permessi-di-esecuzione-sul-server">
+ <h3><a class="toc-backref" href=
+ "#id89">8.4.1 Sicurezza: permessi di
+ esecuzione sul server</a></h3>
+
+ <p>Bisognerebbe notare sul server i permessi di
+ esecuzione del file-system che ospita la cartella da
+ condividere. Se i file che saranno contenuti nella
+ condivisione saranno da usarsi sotto Windows non c'e'
+ motivo che questi siano eseguibili sotto GNU/Linux. Si
+ potrebbe avere quindi, ipotizzando una condivisione in
+ <tt class="docutils literal"><span class=
+ "pre">/mnt/share</span></tt> che risieda su di un file
+ system dedicato:</p>
+
+ <p><tt class="docutils literal"><span class=
+ "pre">/etc/fstab</span></tt></p>
+
+ <blockquote>
+ /dev/hda10 /mnt/share ext3 rw,
+ <strong>nosuid,noexec</strong> 0 3
+ </blockquote>
+
+ <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
+ possibilita' di eseguire programmi con credenziali
+ diverse.</p>
+ </div>
+ </div>
+
+ <div class="section" id=
+ "configurazione-dell-applicativo-samba-vero-e-proprio">
+ <h2><a class="toc-backref" href=
+ "#id90">8.5 Configurazione
+ dell'applicativo Samba vero e proprio.</a></h2>
+
+ <p>Avendo preparato gli utenti (ancora una volta: non si
+ dia una shell completa a un utente che serve solo per Samba
+ o la posta elettronica) e la cartella sul file system si
+ puo' procedere a configurare la condivisione su Samba.</p>
+
+ <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
+ vim si usi 235gg ):</p>
+ <pre class="literal-block">
+[sambo_share]
+ # Percorso della cartella condivisa
+ path = /home/sambo/sambo_share
+ # Se gli utenti possono scrivere / modificare file
+ writable = yes
+ # Negoziazione degli accessi su base utenti / passwords
+ valid users = sambo
+
+ # #######################################
+ # Altri parametri opzionali di interesse
+ # Se posso vedere la condivisione da esplora risorse
+ # anche se non ho i privilegi per accedervi.
+ browseable = yes
+ # Commento indicativo della risorsa
+ comment = Condivisione per Sambo
+</pre>
+
+ <p>Dopo aver salvato il file si puo' fare un primo
+ controllo tramite l'utility <tt class=
+ "docutils literal"><span class="pre">testparm</span></tt> ,
+ che controlla la sintassi del file di configurazione di
+ Samba. Se questo non rileva problemi si puo' procedere a un
+ <tt class="docutils literal"><span class="pre">#</span>
+ <span class="pre">/etc/init.d/samba</span> <span class=
+ "pre">restart</span></tt> .</p>
+
+ <div class="section" id="creazione-di-un-gruppo">
+ <h3><a class="toc-backref" href=
+ "#id91">8.5.1 Creazione di un
+ gruppo</a></h3>
+
+ <p>Se si deve condividere una risorsa con un numero
+ consistente di utenti e' consigliabile lavorare in
+ termini termini di gruppi piuttosto che elencare la lista
+ degli utenti in <tt class="docutils literal"><span class=
+ "pre">valid</span> <span class=
+ "pre">users</span></tt>.</p>
+
+ <p>Dopo aver creato il gruppo del quale volete facciano
+ parte i vostri utenti (<tt class=
+ "docutils literal"><span class="pre">addgroup</span>
+ <span class="pre">nome_gruppo</span></tt>), inserite i
+ vostri utenti nel gruppo (<tt class=
+ "docutils literal"><span class="pre">adduser</span>
+ <span class="pre">nome_utente</span> <span class=
+ "pre">nome_gruppo</span></tt>) e modificate la direttiva
+ <tt class="docutils literal"><span class=
+ "pre">valid</span> <span class="pre">users</span></tt> in
+ <tt class="docutils literal"><span class=
+ "pre">smb.conf</span></tt> per riferirsi ad un gruppo
+ piuttosto che a degli utenti. Per riferirsi a un gruppo
+ si usi il carattere <tt class=
+ "docutils literal"><span class="pre">@</span>
+ <span class="pre">chicciola</span></tt> col <tt class=
+ "docutils literal"><span class=
+ "pre">nome_del_gruppo</span></tt>:</p>
+ <pre class="literal-block">
+# Negoziazione degli accessi su base gruppo
+valid users = @nome_gruppo
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="testare-il-servizio">
+ <h2><a class="toc-backref" href=
+ "#id92">8.6 Testare il Servizio</a></h2>
+
+ <p>Come testare il servizio</p>
+
+ <p>es:</p>
+ <pre class="literal-block">
+smbclient -U sambo -L localhost
+</pre>
+
+ <p>Questo comando permette di esplorare la risorsa
+ qualificandosi come utente, in questo modo potete testare
+ il corretto funzionamento dell'autenticazione. Si provi
+ inizialmente a sbagliare la password deliberatamente, poi a
+ inserirla correttamente: dovrebbero essere visibili le
+ risorse disponibili al solo utente sambo: la suo /home e la
+ cartella samba_share:</p>
+ <pre class="literal-block">
+Sharename Type Comment
+--------- ---- -------
+sambo_share Disk Condivisione per Sambo
+print$ Disk Printer Drivers
+IPC$ IPC IPC Service (base server)
+sambo Disk Home Directories
+</pre>
+
+ <p>In particolare l'ultima voce relativa alla home
+ directory dell'utente dovrebbe essere visibile solo agli
+ utenti autenticati.</p>
+
+ <p>In alternativa e' possibile montare realmente la
+ condivisone anche su GNU/Linux tramite un client per samba
+ e testarne il corretto funzionamento:</p>
+ <pre class="literal-block">
+mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="server-di-posta-postfix">
+ <h1><a class="toc-backref" href=
+ "#id93">9 Server di posta: Postfix</a></h1>
+
+ <p>Il server di posta che prenderemo in considerazione e'
+ Postfix, a seguire un estratto di un file di configurazione
+ <em>semplice</em> con l'abilitazione delle <em>Maildir</em>
+ nelle <tt class="docutils literal"><span class=
+ "pre">/home</span></tt> degli utenti per la consegna della
+ posta:</p>
+
+ <p><tt class="docutils literal"><span class=
+ "pre">/etc/postfix/main.cf</span></tt>:</p>
+ <pre class="literal-block">
+# ...segue dalla riga ~30
+myhostname = 162.piffa.net
+alias_maps = hash:/etc/aliases
+alias_database = hash:/etc/aliases
+myorigin = 162.piffa.net
+mydestination = 162.piffa.net, localhost
+# Se non avete un ip pubblico e statico, con un adeguato record PTR
+# dovrete usare un realy host per l'invio della posta
+relayhost = smtp.piffa.net
+
+mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
+# Se dovete inviare la posta per i client della vostra LAN privata:
+# mynetworks = 127.0.0.0/8 192.168.0.0/24 [::ffff:127.0.0.0]/104 [::1]/128
+# E si faccia BEN ATTENZIONE a non diventare un open realay smtp
+
+
+# Per effettuare lo storaggio della posta nelle home directory degli utenti
+# in una Maildir invece che nella Mailbox in /var/mail/nome_utente
+# si disabiliti procmail
+#mailbox_command = procmail -a "$EXTENSION"
+
+# cartella_i abiliti lo storaggio della posta nella Maildir/ (si noti lo slash)
+# all'interno della home dell'utente:
+home_mailbox = Maildir/
+mailbox_size_limit = 0
+recipient_delimiter = +
+inet_interfaces = all
+</pre>
+
+ <dl class="docutils">
+ <dt>E' disponibile un file di configurazione di esempio ben
+ piu' articolato e commentato::</dt>
+
+ <dd>/usr/share/postfix/main.cf.dist .</dd>
+ </dl>
+
+ <div class="section" id="test-del-server-smtp">
+ <h2><a class="toc-backref" href=
+ "#id94">9.1 Test del server smtp</a></h2>
+
+ <p>Per testare il corretto funzionamento del server di
+ posta si puo' procedere in vari modi.</p>
+
+ <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"><span class="pre">/var/mail/</span></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"><span class="pre">mail</span></tt> non
+ fosse disponibile si installi il pacchetto <tt class=
+ "docutils literal"><span class=
+ "pre">mailx</span></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"><span class="pre">punto</span>
+ <span class="pre">+</span> <span class=
+ "pre">Invio</span></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"><span class="pre">.muttrc</span></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"><span class=
+ "pre">/home/nome_utente/Maildir</span> <span class=
+ "pre">come</span> <span class=
+ "pre">mailbox</span></tt>, invece del default
+ <tt class="docutils literal"><span class=
+ "pre">/var/mail/nome_utente</span></tt>.</dd>
+
+ <dt>set editor="vim"</dt>
+
+ <dd>Utilizzare <tt class=
+ "docutils literal"><span class="pre">vim</span></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"><span class=
+ "pre">squirrelmail</span></tt> . Ci sono tanti altri
+ client web disponibili: questo e' particolarmente
+ semplice. Naturalmente dovrete aver installato:
+ <tt class="docutils literal"><span class=
+ "pre">php5</span> <span class="pre">apache2</span></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"><span class="pre">postgrey</span></tt>
+ e aggiungere il file di configurazione di Postfix
+ <tt class="docutils literal"><span class=
+ "pre">/etc/postfix/main.cf</span></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"><span class=
+ "pre">/var/log/syslog</span></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"><span class=
+ "pre">/var/log/syslog</span></tt> di default oltre che i
+ dedicati <tt class="docutils literal"><span class=
+ "pre">/var/log/mail</span></tt> .</p>
+
+ <p>Una utility semplice per analizzare l'attivita' del
+ propio server smtp potrebbe essere <tt class=
+ "docutils literal"><span class=
+ "pre">pflogsumm</span></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"><span class=
+ "pre">/var/log/mail.log.0</span></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://iptables-tutorial.frozentux.net/iptables-tutorial.html">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.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>link: <a class="reference external" href=
+ "http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES">
+ http://iptables-tutorial.frozentux.net/iptables-tutorial.html#TRAVERSINGOFTABLES</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"><span class="pre">at</span> <span class=
+ "pre">now</span> <span class="pre">+5</span> <span class=
+ "pre">min</span></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"><span class=
+ "pre">iptables</span></tt> serve per interagire con il
+ framework <tt class="docutils literal"><span class=
+ "pre">Netfilter</span></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"><span class="pre">ifconfig</span></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"><span class=
+ "pre">ACCEPT</span></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"><span class=
+ "pre">up</span></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"><span class=
+ "pre">interfaces</span></tt>.</p>
+
+ <p>Nel nostro caso avremo per una possibile scheda
+ <tt class="docutils literal"><span class=
+ "pre">eth0</span></tt>:</p>
+
+ <p><tt class="docutils literal"><span class=
+ "pre">/etc/network/interfaces</span></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"><span class=
+ "pre">~/firewall</span></tt> nella home directory
+ dell'utente <tt class="docutils literal"><span class=
+ "pre">root</span></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"><span class=
+ "pre">eth0</span></tt> scheda di rete principale sulla
+ rete privata interna 192.168.0.0/24</li>
+
+ <li><tt class="docutils literal"><span class=
+ "pre">eth1</span></tt> scheda di rete secondaria per la
+ connessione ad internet</li>
+
+ <li><tt class="docutils literal"><span class=
+ "pre">ppp0</span></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"><span class=
+ "pre">ICMP</span></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 -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>
+ <span class="pre">SNAT</span> <span class=
+ "pre">--to-source</span> <span class=
+ "pre">proprio_ip_pubblico</span> <span class=
+ "pre">)</span> <span class="pre">legge</span>
+ <span class="pre">l'indirizzo</span> <span class=
+ "pre">ip</span> <span class="pre">del</span> <span class=
+ "pre">device</span> <span class="pre">``ppp0</span></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>
+
+ <div class="section" id="ftp-server">
+ <h1><a class="toc-backref" href=
+ "#id127">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"><span class="pre">ftp</span></tt> al
+ posto di <tt class="docutils literal"><span class=
+ "pre">bash</span></tt> in <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/passwd</span></tt>)</li>
+
+ <li>Rendere il filesytem su cui scrive il demone FTP
+ <tt class="docutils literal"><span class=
+ "pre">noexec</span></tt> e <tt class=
+ "docutils literal"><span class="pre">nosuid</span></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=
+ "#id128">11.1 Pacchetti</a></h2>
- <tbody valign="top">
- <tr>
- <td class="label"><a class="fn-backref" href=
- "#id4">[2]</a></td>
+ <p>Per installare il demone vero e propio si usi il
+ pacchetto <tt class="docutils literal"><span class=
+ "pre">vsftpd</span></tt> , mentre per aver un client da cui
+ fare qualche test sono dipsonibili:</p>
- <td>Anche se nato per i sistemi Windows, Samba puo'
- essere usato anche per montare cartelle sotto
- GNU/Linux come alternativa a NFS. Per la condivisione
- di stampanti sarebbe invece opportuno intervenire
- direttamente su <tt class=
- "docutils literal"><span class=
- "pre">CUPS</span></tt>.</td>
- </tr>
- </tbody>
- </table>
+ <ul class="simple">
+ <li><tt class="docutils literal"><span class=
+ "pre">ftp</span></tt> (pacchetto da installare) e' il
+ solito client a riga di comando</li>
- <p>Durante la prima installazione viene chiesto il nome del
- gruppo di appartenenza, il default per Windows e'
- <tt class="docutils literal"><span class=
- "pre">WORKGROUP</span></tt>. In aula usiamo invece
- <tt class="docutils literal"><span class=
- "pre">208</span></tt> .</p>
+ <li><tt class="docutils literal"><span class=
+ "pre">gftp</span></tt> e' un client grafico simile al
+ classico <em>WSftp</em></li>
- <p>Per riconfigurare Samba si usi il comando:</p>
- <pre class="literal-block">
-dpkg-reconfigure samba-common
-</pre>
+ <li>Normalmente i file mananager com Konqueror possono
+ lavarorare come client FTP</li>
+ </ul>
</div>
- <div class="section" id="passwords-e-autenticazione">
+ <div class="section" id="sessioni-ftp">
<h2><a class="toc-backref" href=
- "#id46">6.2 Passwords e
- autenticazione</a></h2>
+ "#id129">11.2 Sessioni ftp</a></h2>
- <p>Per poter configurare Samba in modo che usi un sistema
- di negoziazione degli accessi alle cartelle condivise
- basato su accoppiate <em>nome utente / password</em>
- bisogna distinguere tra 3 livelli di password (e
- generalmente volete usare <em>sempre la stessa
- password</em> per ognuno di questi) e delle differenze tra
- le modalita' di <em>autenticazione</em> (e quindi anche di
- criptaggio delle passwords) usate da sistemi GNU/Linux e
- Windows:</p>
+ <p>Vediamo alcuni dei comandi di base per gestire una
+ sessione ftp a riga di comando:</p>
<dl class="docutils">
- <dt>1 Sistema *Unix ( GNU/Linux )</dt>
+ <dt>ftp nome_host</dt>
- <dd>E' la password dell'<em>utente di sistema</em> che
- viene usata sul sistema operativo su cui gira il software
- Samba. E' importante tenere conto anche delle
- <em>user-id</em> e <em>group-id</em> degli utenti che
- dovranno fisicamente scrivere sui file system. Se un
- utente non puo' scrivere in una certa posizione del file
- system (ad esempio nella cartella <tt class=
- "docutils literal"><span class=
- "pre">/mnt/condivisione</span></tt> che sara' stata
- necessariamente creata inizialmente dall'utente
- <tt class="docutils literal"><span class=
- "pre">root</span></tt>) per mancanza dei privilegi di
- scrittura allora neanche Samba potra' farlo nel momento
- in mette a disposizione la risorsa all'utente. Se si
- montano file-system dedicati per le condivisioni
- controllare i permessi e propieta' dei <em>punti di
- mount*</em>. Queste passwords sono salvate nel solito
- file /etc/shadow (richiamato da /etc/passwd).</dd>
+ <dd>stabilire la connessione all'host, poi verra' chiesta
+ la password dell'utente. Se avete sbagliato utente: user
+ .</dd>
- <dt>2 Password per l'applicativo Samba</dt>
+ <dt>help</dt>
- <dd>Samba deve essere compatibile con Windows e quindi
- utilizzare un sistema di criptazione delle password
- diverso da /etc/shadow . Le password per Samba possono
- essere gestite ad esempio col comando <tt class=
- "docutils literal"><span class=
- "pre">smbpasswd</span></tt> e vengono generalmente
- salvate all'interno di <tt class=
- "docutils literal"><span class=
- "pre">/var/lib/samba/passdb.tdb</span></tt> .</dd>
+ <dd>Lista dei comandi disponibili.</dd>
- <dt>3 Password per Windows.</dt>
+ <dt>help [nome_comando]</dt>
- <dd>Gli utenti Windows effettuano il log-in alla partenza
- della sessione di Windows. Se si avra' l'accortezza di
- usare sempre la <em>stessa password</em> data
- precedentemente anche a Windows (o viceversa impostare la
- password per GNU/Linux / Samba uguale a quella di
- Windows) l'utente potra' accedere automaticamente alle
- condivisioni a lui disponibili.</dd>
- </dl>
- </div>
+ <dd>Cosa fa quel comando.</dd>
- <div class="section" id="creazione-utenti">
- <h2><a class="toc-backref" href=
- "#id47">6.3 Creazione Utenti</a></h2>
+ <dt>put</dt>
- <p>Creiamo per primo l'utente sotto GNU/Linux, facendo
- attenzione a <em>non dargli una shell di sistema</em>. Gli
- utenti Windows che accedono al server solo per le
- condivisioni non hanno bisogno di poter eseguire comandi
- sul server!</p>
+ <dd>Per caricare un file.</dd>
- <p>Creazione di un utente denominato sambo:</p>
- <pre class="literal-block">
-adduser --shell /bin/false sambo
-</pre>
+ <dt>get</dt>
- <p>Nel file <tt class="docutils literal"><span class=
- "pre">/etc/passwd</span></tt> avremo qualcosa come:</p>
- <pre class="literal-block">
-sambo:x:1001:1001:Sambo utente Samba,,,:/home/sambo:/bin/false
-</pre>
+ <dd>Per scaricare un file.</dd>
- <p>Aggiunta dell'utente al database delle password per
- Samba e generazione della sua password:</p>
- <pre class="literal-block">
-smbpasswd -a sambo
-</pre>
+ <dt>ls</dt>
- <p>Se successivamente si vorra' modificare la password di
- un utente gia' esistente si usi:</p>
- <pre class="literal-block">
-smbpasswd sambo
-</pre>
+ <dd>Lista dei file disponibili.</dd>
- <p>La password sotto Windows verra' modificata sul sistema
- Windows.</p>
- </div>
+ <dt>cd</dt>
- <div class="section" id="creare-la-condivisione">
- <h2><a class="toc-backref" href=
- "#id48">6.4 Creare la
- condivisione</a></h2>
+ <dd>Spostarsi in un altra directory.</dd>
- <p>La condivisione altro non e' che una cartella sul server
- che viene resa disponibile ai client negoziando l'accesso
- in base a una autenticazione basata su <em>user-name /
- password</em>. E' per altro possibile permettere l'accesso
- a una risorsa a chiunque indiscriminatamente (a tutti i
- <tt class="docutils literal"><span class=
- "pre">guest</span></tt>) ma la cosa e' sconsigliabile dal
- punto di vista della sicurezza. Si decida se la cartella
- condivisa debba risiedere nella <em>home</em> di un utente
- (nel caso quest'ultimo ne sia l'unico fruitore) o in una
- cartella in /mnt/ (nel caso piu' utenti accedano a questa).
- Nel secondo caso si potranno gestire gli accessi sotto
- GNU/Linux tramite i gruppi.</p>
+ <dt>lcd</dt>
- <p>Creazione della risorsa sambo_share nella home
- dell'utente sambo:</p>
- <pre class="literal-block">
-# mkdir /home/sambo/sambo_share
-# chown sambo:sambo /home/sambo/sambo_share/
-</pre>
+ <dd>Cambio directory in LOCALE.</dd>
- <div class="section" id=
- "sicurezza-permessi-di-esecuzione-sul-server">
- <h3><a class="toc-backref" href=
- "#id49">6.4.1 Sicurezza: permessi di
- esecuzione sul server</a></h3>
+ <dt>mput/mget</dt>
- <p>Bisognerebbe notare sul server i permessi di
- esecuzione del file-system che ospita la cartella da
- condividere. Se i file che saranno contenuti nella
- condivisione saranno da usarsi sotto Windows non c'e'
- motivo che questi siano eseguibili sotto GNU/Linux. Si
- potrebbe avere quindi, ipotizzando una condivisione in
- <tt class="docutils literal"><span class=
- "pre">/mnt/share</span></tt> che risieda su di un file
- system dedicato:</p>
+ <dd>Per lavorare su file multipli.</dd>
- <p><tt class="docutils literal"><span class=
- "pre">/etc/fstab</span></tt></p>
+ <dt>prompt</dt>
- <blockquote>
- /dev/hda10 /mnt/share ext3 rw,
- <strong>nosuid,noexec</strong> 0 3
- </blockquote>
+ <dd>
+ <dl class="first last docutils">
+ <dt>Per uscire dalla modalita' interattiva</dt>
- <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
- possibilita' di eseguire programmi con credenziali
- diverse.</p>
- </div>
+ <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-dell-applicativo-samba-vero-e-proprio">
+ <div class="section" id="configurazione-iniziale">
<h2><a class="toc-backref" href=
- "#id50">6.5 Configurazione
- dell'applicativo Samba vero e proprio.</a></h2>
+ "#id130">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"><span class=
+ "pre">anonymous</span></tt> (la passwords in genere e' come
+ consuetudine il propio indirizzo email), la cui
+ <em>home</em> directory sara' <tt class=
+ "docutils literal"><span class="pre">/home/ftp/</span></tt>
+ (<tt class="docutils literal"><span class=
+ "pre">/srv/ftp</span></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>
- <p>Avendo preparato gli utenti (ancora una volta: non si
- dia una shell completa a un utente che serve solo per Samba
- o la posta elettronica) e la cartella sul file system si
- puo' procedere a configurare la condivisione su Samba.</p>
+ <div class="section" id="abilitare-gli-utenti-locali">
+ <h2><a class="toc-backref" href=
+ "#id131">11.4 Abilitare gli utenti
+ locali</a></h2>
- <p>/etc/samba/smb.conf riga ~235 , Share Definitions (in
- vim si usi 235gg ):</p>
+ <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"><span class=
+ "pre">/etc/vsftpd.conf</span></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">
-[sambo_share]
- # Percorso della cartella condivisa
- path = /home/sambo/sambo_share
- # Se gli utenti possono scrivere / modificare file
- writable = yes
- # Negoziazione degli accessi su base utenti / passwords
- valid users = sambo
+# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
+anonymous_enable=NO
+# Disabilitiamo l'utente anonimo
- # #######################################
- # Altri parametri opzionali di interesse
- # Se posso vedere la condivisione da esplora risorse
- # anche se non ho i privilegi per accedervi.
- browseable = yes
- # Commento indicativo della risorsa
- comment = Condivisione per Sambo
+# 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>Dopo aver salvato il file si puo' fare un primo
- controllo tramite l'utility <tt class=
- "docutils literal"><span class="pre">testparm</span></tt> ,
- che controlla la sintassi del file di configurazione di
- Samba. Se questo non rileva problemi si puo' procedere a un
- <tt class="docutils literal"><span class="pre">#</span>
- <span class="pre">/etc/init.d/samba</span> <span class=
- "pre">restart</span></tt> .</p>
+ <p>Per abilitare i cambiamenti si proceda a riavviare il
+ server: <tt class="docutils literal"><span class=
+ "pre">/etc/init.d/vsftpd</span> <span class=
+ "pre">restart</span></tt> e si monitorizzi il file di log
+ <tt class="docutils literal"><span class="pre">tail</span>
+ <span class="pre">-f</span> <span class=
+ "pre">/var/log/vsftpd.log</span></tt> per controllarne il
+ funzionamento (e anche <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/syslog</span></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"><span class=
+ "pre">ls</span></tt>) ottenendo un errore <tt class=
+ "docutils literal"><span class="pre">500</span>
+ <span class="pre">Illegal</span> <span class=
+ "pre">PORT</span> <span class="pre">command?</span>
+ <span class="pre">FTP</span> <span class=
+ "pre">error</span></tt> abilitare la modalita' passiva col
+ comando ftp <tt class="docutils literal"><span class=
+ "pre">passive</span></tt>.</p>
</div>
- <div class="section" id="testare-il-servizio">
+ <div class="section" id="jail-chroot">
<h2><a class="toc-backref" href=
- "#id51">6.6 Testare il Servizio</a></h2>
+ "#id132">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"><span class="pre">/etc</span></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>Come testare il servizio</p>
+ <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>
- <p>es:</p>
+ <div class="section" id="permessi-sul-filesystem">
+ <h2><a class="toc-backref" href=
+ "#id133">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"><span class="pre">/home/</span></tt>
+ directory quindi avremo in <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/fstab</span></tt>:</p>
<pre class="literal-block">
-smbclient -U sambo -L localhost
+/dev/mapper/store-homes /home ext3 rw,nosuid,noexec 0 2
</pre>
+ </div>
- <p>Questo comando permette di esplorare la risorsa
- qualificandosi come utente, in questo modo potete testare
- il corretto funzionamento dell'autenticazione. Si provi
- inizialmente a sbagliare la password deliberatamente, poi a
- inserirla correttamente: dovrebbero essere visibili le
- risorse disponibili al solo utente sambo: la suo /home e la
- cartella samba_share:</p>
+ <div class="section" id="shell-dell-utente">
+ <h2><a class="toc-backref" href=
+ "#id134">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>
+ <span class="pre">/bin/false</span></tt> in fase di
+ creazione degli utenti:</p>
<pre class="literal-block">
-Sharename Type Comment
---------- ---- -------
-sambo_share Disk Condivisione per Sambo
-print$ Disk Printer Drivers
-IPC$ IPC IPC Service (base server)
-sambo Disk Home Directories
+# adduser --shell /bin/false nome_utente
</pre>
- <p>In particolare l'ultima voce relativa alla home
- directory dell'utente dovrebbe essere visibile solo agli
- utenti autenticati.</p>
+ <p>Oppure correggiendo manualmente il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/passwd</span></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>In alternativa e' possibile montare realmente la
- condivisone anche su GNU/Linux tramite un client per samba
- e testarne il corretto funzionamento:</p>
+ <p>Sui sistemi DEbian REcenti sara' necessario aggiungere
+ <tt class="docutils literal"><span class=
+ "pre">/bin/false</span></tt> all'elenco delle shell
+ valide.</p>
+
+ <p><tt class="docutils literal"><span class=
+ "pre">/etc/shells</span></tt></p>
<pre class="literal-block">
-mount -t smbfs //localhost/sambo_share /mnt/sambo_mount/ --verbose -o user=sambo
+...
+/bin/false
</pre>
</div>
- </div>
- <div class="section" id="note">
- <h1><a class="toc-backref" href=
- "#id52">7 NOTE</a></h1>
+ <div class="section" id="altre-opzioni">
+ <h2><a class="toc-backref" href=
+ "#id135">11.8 Altre opzioni</a></h2>
- <ul class="simple">
- <li>controllare apache</li>
- </ul>
+ <dl class="docutils">
+ <dt>xferlog_enable=YES</dt>
+
+ <dd>Verra' tenuto un file di log <tt class=
+ "docutils literal"><span class=
+ "pre">/var/log/vsftpd.log</span></tt> degli upload e
+ download sul server.</dd>
- <p>sintassi: in <tt class="docutils literal"><span class=
- "pre">monospace</span></tt> :</p>
+ <dt>hide_ids=YES</dt>
- <ul class="simple">
- <li>nomi di files</li>
+ <dd>Nasconde le userid e groupid mascherandole con
+ <tt class="docutils literal"><span class=
+ "pre">ftp</span></tt> .</dd>
- <li>comandi</li>
+ <dt>anon_root=/home/ftp</dt>
- <li>pacchetti</li>
- </ul>
+ <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>
</div>
</div>
</body>