<html lang="it">
<head>
<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 6 November 2007), see www.w3.org">
+ "HTML Tidy for Linux/x86 (vers 7 December 2008), see www.w3.org">
<meta http-equiv="Content-Type" content=
"text/html; charset=iso-8859-1">
<meta name="generator" content=
"Docutils 0.5: http://docutils.sourceforge.net/">
- <title>Servizi passo a passo</title>
+ <title>Servizi di rete passo a passo</title>
<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.
+ 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.
+ */
- Default cascading style sheet for the HTML output of Docutils.
+ body {
+ font: 100% sans-serif;
+ background: #ffffff;
+ color: black;
+ margin: 2em;
+ padding: 0em 2em;
+ }
- See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
- customize this style sheet.
- */
+ p.topic-title {
+ font-weight: bold;
+ }
- /* used to remove borders from tables and images */
- .borderless, table.borderless td, table.borderless th {
- border: 0 }
+ table.docinfo {
+ text-align: left;
+ margin: 2em 0em;
+ }
- 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 }
+ a[href] {
+ color: #436976;
+ background-color: transparent;
+ }
- .first {
- /* Override more specific margin styles with "! important". */
- margin-top: 0 ! important }
+ a.toc-backref {
+ 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;
+ 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;
+ }
- .last, .with-subtitle {
- margin-bottom: 0 ! important }
+ p.rubric {
+ font-weight: bold;
+ font-style: italic;
+ }
- .hidden {
- display: none }
+ h1.title {
+ color: #003a6b;
+ font-size: 250%;
+ margin-bottom: 0em;
+ }
- a.toc-backref {
- text-decoration: none ;
- color: black }
+ h2.subtitle {
+ 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;
+ }
- blockquote.epigraph {
- margin: 2em 5em ; }
+ table.docutils {
+ text-align: left;
+ border: 1px solid gray;
+ border-collapse: collapse;
+ width: 100%;
+ margin: 1.5em 0em;
+ }
- dl.docutils dd {
- margin-bottom: 0.5em }
+ table.docutils caption {
+ font-style: italic;
+ }
- /* Uncomment (and remove this text!) to get bold-faced definition list terms
- dl.docutils dt {
- font-weight: bold }
- */
+ table.docutils td, table.docutils th {
+ padding: 0.25em 0.5em;
+ }
- 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 }
- */
+ table.docutils th {
+ background-color: #dddddd;
+ }
- div.dedication {
- margin: 2em 5em ;
- text-align: center ;
- font-style: italic }
+ 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;
+ }
- div.dedication p.topic-title {
- font-weight: bold ;
- font-style: normal }
+ p.sidebar-title {
+ margin-bottom: 0em;
+ color: #003a6b;
+ border-bottom: 1px solid #aaa;
+ font-weight: bold;
+ }
- div.figure {
- margin-left: 2em ;
- margin-right: 2em }
+ p.sidebar-subtitle {
+ margin-top: 0em;
+ font-style: italic;
+ color: #003a6b;
+ }
- div.footer, div.header {
- clear: both;
- font-size: smaller }
+ </style>
+</head>
- div.line-block {
- display: block ;
- margin-top: 1em ;
- margin-bottom: 1em }
+<body>
+ <div class="document" id="servizi-di-rete-passo-a-passo">
+ <h1 class="title">Servizi di rete passo a passo</h1>
- div.line-block div.line-block {
- margin-top: 0 ;
- margin-bottom: 0 ;
- margin-left: 1.5em }
+ <h2 class="subtitle" id=
+ "appunti-sulla-installazione-e-configurazione-dei-servizi">
+ Appunti sulla installazione e configurazione dei servizi</h2>
- div.sidebar {
- margin: 0 0 0.5em 1em ;
- border: medium outset ;
- padding: 1em ;
- background-color: #ffffee ;
- width: 40% ;
- float: right ;
- clear: right }
+ <blockquote>
+ <table class="docutils field-list" frame="void" rules="none">
+ <col class="field-name">
+ <col class="field-body">
- div.sidebar p.rubric {
- font-family: sans-serif ;
- font-size: medium }
+ <tbody valign="top">
+ <tr class="field">
+ <th class="field-name">Author:</th>
- div.system-messages {
- margin: 5em }
+ <td class="field-body">Andrea Manni</td>
+ </tr>
- div.system-messages h1 {
- color: red }
+ <tr class="field">
+ <th class="field-name">Copyright:</th>
- div.system-message {
- border: medium outset ;
- padding: 1em }
+ <td class="field-body">GFDL</td>
+ </tr>
- div.system-message p.system-message-title {
- color: red ;
- font-weight: bold }
+ <tr class="field">
+ <th class="field-name">Version:</th>
- div.topic {
- margin: 2em }
+ <td class="field-body">0.7</td>
+ </tr>
+ </tbody>
+ </table>
+ </blockquote>
- h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
- h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
- margin-top: 0.4em }
+ <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>
- h1.title {
- text-align: center }
+ <div class="contents topic" id="indice-degli-argomenti">
+ <p class="topic-title first">Indice degli argomenti</p>
- h2.subtitle {
- text-align: center }
+ <ul class="auto-toc simple">
+ <li>
+ <a class="reference internal" href=
+ "#configurazione-sistema" id="id6" name=
+ "id6">1 Configurazione sistema</a>
- hr.docutils {
- width: 75% }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#solo-per-uso-interno" id="id7" name=
+ "id7">1.1 Solo per uso
+ interno</a></li>
- img.align-left {
- clear: left }
+ <li>
+ <a class="reference internal" href="#rete" id="id8"
+ name="id8">1.2 Rete</a>
- img.align-right {
- clear: right }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#interfaces" id="id9" name=
+ "id9">1.2.1 interfaces</a></li>
+ </ul>
+ </li>
- ol.simple, ul.simple {
- margin-bottom: 1em }
+ <li><a class="reference internal" href=
+ "#bash-completion" id="id10" name=
+ "id10">1.3 Bash completion</a></li>
- ol.arabic {
- list-style: decimal }
+ <li><a class="reference internal" href="#vim" id="id11"
+ name="id11">1.4 Vim</a></li>
- ol.loweralpha {
- list-style: lower-alpha }
+ <li><a class="reference internal" href="#vnc" id="id12"
+ name="id12">1.5 VNC</a></li>
- ol.upperalpha {
- list-style: upper-alpha }
+ <li><a class="reference internal" href=
+ "#lista-dei-pacchetti-di-base" id="id13" name=
+ "id13">1.6 Lista dei pacchetti di
+ base</a></li>
- ol.lowerroman {
- list-style: lower-roman }
+ <li>
+ <a class="reference internal" href=
+ "#apt-configurazione" id="id14" name=
+ "id14">1.7 Apt configurazione</a>
- ol.upperroman {
- list-style: upper-roman }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#sources-list" id="id15" name=
+ "id15">1.7.1 sources.list</a></li>
- p.attribution {
- text-align: right ;
- margin-left: 50% }
+ <li><a class="reference internal" href=
+ "#etc-apt-apt-conf" id="id16" name=
+ "id16">1.7.2 /etc/apt/apt.conf</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
- p.caption {
- font-style: italic }
+ <li>
+ <a class="reference internal" href="#squid" id="id17"
+ name="id17">2 Squid</a>
- p.credits {
- font-style: italic ;
- font-size: smaller }
+ <ul class="auto-toc">
+ <li>
+ <a class="reference internal" href=
+ "#configurazione-squid-conf" id="id18" name=
+ "id18">2.1 Configurazione:
+ squid.conf</a>
- p.label {
- white-space: nowrap }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#cache-dir"
+ id="id19" name=
+ "id19">2.1.1 Cache_dir</a></li>
- p.rubric {
- font-weight: bold ;
- font-size: larger ;
- color: maroon ;
- text-align: center }
+ <li><a class="reference internal" href=
+ "#tag-maximum-object-size" id="id20" name=
+ "id20">2.1.2 TAG:
+ maximum_object_size</a></li>
- p.sidebar-title {
- font-family: sans-serif ;
- font-weight: bold ;
- font-size: larger }
+ <li><a class="reference internal" href=
+ "#tag-cache-mem" id="id21" name=
+ "id21">2.1.3 TAG:
+ cache_mem</a></li>
- p.sidebar-subtitle {
- font-family: sans-serif ;
- font-weight: bold }
+ <li><a class="reference internal" href=
+ "#tag-minimum-object-size" id="id22" name=
+ "id22">2.1.4 TAG:
+ minimum_object_size</a></li>
+ </ul>
+ </li>
- p.topic-title {
- font-weight: bold }
+ <li>
+ <a class="reference internal" href=
+ "#negoziazione-degli-accesi-al-servizio" id="id23"
+ name="id23">2.2 Negoziazione degli
+ accesi al servizio</a>
- pre.address {
- margin-bottom: 0 ;
- margin-top: 0 ;
- font-family: serif ;
- font-size: 100% }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#acl-e-http-access" id="id24" name=
+ "id24">2.2.1 ACL e http
+ access</a></li>
+ </ul>
+ </li>
- pre.literal-block, pre.doctest-block {
- margin-left: 2em ;
- margin-right: 2em }
+ <li>
+ <a class="reference internal" href="#testare-squid"
+ id="id25" name="id25">2.3 Testare
+ Squid</a>
- span.classifier {
- font-family: sans-serif ;
- font-style: oblique }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#client-wgetrc" id="id26" name=
+ "id26">2.3.1 Client:
+ ~/.wgetrc</a></li>
- span.classifier-delimiter {
- font-family: sans-serif ;
- font-weight: bold }
+ <li><a class="reference internal" href=
+ "#server-access-log" id="id27" name=
+ "id27">2.3.2 Server:
+ access.log</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
- span.interpreted {
- font-family: sans-serif }
+ <li>
+ <a class="reference internal" href="#apache" id="id28"
+ name="id28">3 Apache</a>
- span.option {
- white-space: nowrap }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#pacchetti-da-installare" id="id29" name=
+ "id29">3.1 Pacchetti da
+ installare::</a></li>
- span.pre {
- white-space: pre }
+ <li><a class="reference internal" href=
+ "#configurazione-di-apache" id="id30" name=
+ "id30">3.2 Configurazione di
+ Apache</a></li>
- span.problematic {
- color: red }
+ <li><a class="reference internal" href="#apache-conf"
+ id="id31" name=
+ "id31">3.3 apache.conf</a></li>
- span.section-subtitle {
- /* font-size relative to parent (h1..h6 element) */
- font-size: 80% }
+ <li>
+ <a class="reference internal" href=
+ "#installazione-di-php" id="id32" name=
+ "id32">3.4 Installazione di PHP</a>
- table.citation {
- border-left: solid 1px gray;
- margin-left: 1px }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#test-del-modulo-php" id="id33" name=
+ "id33">3.4.1 Test del modulo
+ php</a></li>
- table.docinfo {
- margin: 2em 4em }
+ <li><a class="reference internal" href=
+ "#installazione-del-supporto-per-mysql" id="id34"
+ name="id34">3.4.2 Installazione
+ del supporto per Mysql</a></li>
- table.docutils {
- margin-top: 0.5em ;
- margin-bottom: 0.5em }
+ <li><a class="reference internal" href=
+ "#phpmyadmin" id="id35" name=
+ "id35">3.4.3 phpmyadmin</a></li>
- table.footnote {
- border-left: solid 1px black;
- margin-left: 1px }
+ <li><a class="reference internal" href=
+ "#installazione-del-supporto-per-postgresql" id=
+ "id36" name=
+ "id36">3.4.4 Installazione del
+ supporto per Postgresql</a></li>
- table.docutils td, table.docutils th,
- table.docinfo td, table.docinfo th {
- padding-left: 0.5em ;
- padding-right: 0.5em ;
- vertical-align: top }
+ <li><a class="reference internal" href=
+ "#phppgadmin" id="id37" name=
+ "id37">3.4.5 phppgadmin</a></li>
+ </ul>
+ </li>
- table.docutils th.field-name, table.docinfo th.docinfo-name {
- font-weight: bold ;
- text-align: left ;
- white-space: nowrap ;
- padding-left: 0 }
+ <li>
+ <a class="reference internal" href="#virtual-hosts"
+ id="id38" name="id38">3.5 Virtual
+ hosts</a>
- h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
- h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
- font-size: 100% }
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#gestione-dns" id="id39" name=
+ "id39">3.5.1 Gestione DNS</a></li>
- ul.auto-toc {
- list-style-type: none }
+ <li><a class="reference internal" href=
+ "#virtual-host" id="id40" name=
+ "id40">3.5.2 Virtual host</a></li>
+ </ul>
+ </li>
- </style>
-</head>
+ <li>
+ <a class="reference internal" href=
+ "#negoziazione-accessi" id="id41" name=
+ "id41">3.6 Negoziazione accessi</a>
-<body>
- <div class="document" id="servizi-passo-a-passo">
- <h1 class="title">Servizi passo a passo</h1>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#limiti-su-base-ip" id="id42" name=
+ "id42">3.6.1 Limiti su base
+ ip</a></li>
+ </ul>
+ </li>
- <h2 class="subtitle" id=
- "appunti-sulla-installazione-e-configurazione-dei-servizi">
- Appunti sulla installazione e configurazione dei servizi</h2>
+ <li>
+ <a class="reference internal" href=
+ "#user-authentication" id="id43" name=
+ "id43">3.7 User Authentication</a>
- <blockquote>
- <table class="docutils field-list" frame="void" rules="none">
- <col class="field-name">
- <col class="field-body">
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#definire-la-cartella" id="id44" name=
+ "id44">3.7.1 Definire la
+ cartella</a></li>
- <tbody valign="top">
- <tr class="field">
- <th class="field-name">Author:</th>
+ <li><a class="reference internal" href=
+ "#creazione-del-database-delle-passwords" id="id45"
+ name="id45">3.7.2 Creazione del
+ database delle passwords</a></li>
+
+ <li><a class="reference internal" href="#id3" id=
+ "id46" name=
+ "id46">3.7.3 Configurazione di
+ Apache</a></li>
+ </ul>
+ </li>
- <td class="field-body">Andrea Manni</td>
- </tr>
+ <li><a class="reference internal" href="#cavets" id=
+ "id47" name="id47">3.8 Cavets</a></li>
+ </ul>
+ </li>
- <tr class="field">
- <th class="field-name">Copyright:</th>
+ <li>
+ <a class="reference internal" href="#domain-name-system"
+ id="id48" name="id48">4 Domain Name
+ System</a>
- <td class="field-body">GFDL</td>
- </tr>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#nomi-di-dominio" id="id49" name=
+ "id49">4.1 Nomi di dominio</a></li>
- <tr class="field">
- <th class="field-name">Version:</th>
+ <li><a class="reference internal" href=
+ "#tipologie-di-record" id="id50" name=
+ "id50">4.2 Tipologie di
+ record</a></li>
- <td class="field-body">0.2</td>
- </tr>
- </tbody>
- </table>
- </blockquote>
+ <li><a class="reference internal" href="#utilizzo" id=
+ "id51" name=
+ "id51">4.3 Utilizzo</a></li>
- <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 tipiche 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>
+ <li><a class="reference internal" href=
+ "#risoluzione-dei-nomi-di-dominio" id="id52" name=
+ "id52">4.4 Risoluzione dei nomi di
+ dominio</a></li>
- <div class="contents topic" id="indice">
- <p class="topic-title first">Indice</p>
+ <li><a class="reference internal" href="#dig" id="id53"
+ name="id53">4.5 Dig</a></li>
+
+ <li><a class="reference internal" href="#resolv-conf"
+ id="id54" name=
+ "id54">4.6 resolv.conf</a></li>
+
+ <li><a class="reference internal" href="#etc-hosts" id=
+ "id55" name=
+ "id55">4.7 /etc/hosts</a></li>
+
+ <li><a class="reference internal" href="#hostname" id=
+ "id56" name=
+ "id56">4.8 Hostname</a></li>
+ </ul>
+ </li>
- <ul class="simple">
<li>
- <a class="reference internal" href=
- "#configurazione-sistema" id="id5" name=
- "id5">Configurazione sistema</a>
+ <a class="reference internal" href="#dnsmasq" id="id57"
+ name="id57">5 DNSmasq</a>
- <ul>
+ <ul class="auto-toc">
<li><a class="reference internal" href=
- "#solo-per-uso-interno" id="id6" name="id6">Solo per
- uso interno</a></li>
+ "#configurazione" id="id58" name=
+ "id58">5.1 Configurazione</a></li>
- <li><a class="reference internal" href="#rete" id="id7"
- name="id7">Rete</a></li>
+ <li><a class="reference internal" href="#dhcp" id=
+ "id59" name="id59">5.2 DHCP</a></li>
- <li><a class="reference internal" href=
- "#bash-completion" id="id8" name="id8">Bash
- completion</a></li>
+ <li><a class="reference internal" href="#dns-cache" id=
+ "id60" name="id60">5.3 DNS
+ cache</a></li>
+
+ <li><a class="reference internal" href="#dhcpd" id=
+ "id61" name="id61">5.4 DHCPd</a></li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href="#samba" id="id62"
+ name="id62">6 Samba</a>
- <li><a class="reference internal" href="#vim" id="id9"
- name="id9">Vim</a></li>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#pacchetti" id=
+ "id63" name=
+ "id63">6.1 Pacchetti</a></li>
- <li><a class="reference internal" href="#vnc" id="id10"
- name="id10">VNC</a></li>
+ <li><a class="reference internal" href=
+ "#passwords-e-autenticazione" id="id64" name=
+ "id64">6.2 Passwords e
+ autenticazione</a></li>
<li><a class="reference internal" href=
- "#lista-dei-pacchetti-di-base" id="id11" name=
- "id11">Lista dei pacchetti di base</a></li>
+ "#creazione-utenti" id="id65" name=
+ "id65">6.3 Creazione Utenti</a></li>
<li>
<a class="reference internal" href=
- "#apt-configurazione" id="id12" name="id12">Apt
- configurazione</a>
+ "#creare-la-condivisione" id="id66" name=
+ "id66">6.4 Creare la
+ condivisione</a>
- <ul>
+ <ul class="auto-toc">
<li><a class="reference internal" href=
- "#sources-list" id="id13" name=
- "id13">sources.list</a></li>
+ "#sicurezza-permessi-di-esecuzione-sul-server" id=
+ "id67" name=
+ "id67">6.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="id68" name=
+ "id68">6.5 Configurazione
+ dell'applicativo Samba vero e proprio.</a></li>
+
+ <li><a class="reference internal" href=
+ "#testare-il-servizio" id="id69" name=
+ "id69">6.6 Testare il
+ Servizio</a></li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href=
+ "#server-di-posta-postfix" id="id70" name=
+ "id70">7 Server di posta: Postfix</a>
+
+ <ul class="auto-toc">
+ <li>
+ <a class="reference internal" href="#imap-e-pop" id=
+ "id71" name="id71">7.1 Imap e
+ pop</a>
+ <ul class="auto-toc">
<li><a class="reference internal" href=
- "#etc-apt-apt-conf" id="id14" name=
- "id14">/etc/apt/apt.conf</a></li>
+ "#web-client" id="id72" name=
+ "id72">7.1.1 Web client</a></li>
</ul>
</li>
</ul>
</li>
- <li><a class="reference internal" href="#servizi" id="id15"
- name="id15">Servizi</a></li>
+ <li>
+ <a class="reference internal" href="#firewall" id="id73"
+ name="id73">8 Firewall</a>
- <li><a class="reference internal" href="#squid" id="id16"
- name="id16">Squid</a></li>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href="#links" id=
+ "id74" name="id74">8.1 Links</a></li>
- <li><a class="reference internal" href="#apache" id="id17"
- name="id17">Apache</a></li>
+ <li><a class="reference internal" href="#ipfilter" id=
+ "id75" name=
+ "id75">8.2 Ipfilter</a></li>
- <li><a class="reference internal" href="#dnsmasq" id="id18"
- name="id18">DNSmasq</a></li>
+ <li>
+ <a class="reference internal" href=
+ "#progettazione-di-un-firewall" id="id76" name=
+ "id76">8.3 Progettazione di un
+ firewall</a>
- <li>
- <a class="reference internal" href="#samba" id="id19"
- name="id19">Samba</a>
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#collocazione" id="id77" name=
+ "id77">8.3.1 Collocazione</a></li>
+
+ <li><a class="reference internal" href=
+ "#policy-di-default" id="id78" name=
+ "id78">8.3.2 Policy di
+ default</a></li>
+
+ <li><a class="reference internal" href="#hardware"
+ id="id79" name=
+ "id79">8.3.3 Hardware</a></li>
+ </ul>
+ </li>
- <ul>
<li><a class="reference internal" href=
- "#creazione-utenti" id="id20" name="id20">Creazione
- Utenti</a></li>
+ "#percorso-dei-pacchetti-tra-tabelle-e-catene" id=
+ "id80" name="id80">8.4 Percorso dei
+ pacchetti tra tabelle e catene</a></li>
+
+ <li>
+ <a class="reference internal" href=
+ "#concetti-di-base" id="id81" name=
+ "id81">8.5 Concetti di base</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#tabelle-catene-regole" id="id82" name=
+ "id82">8.5.1 Tabelle, catene,
+ regole</a></li>
+
+ <li><a class="reference internal" href="#match" id=
+ "id83" name=
+ "id83">8.5.2 Match</a></li>
+
+ <li><a class="reference internal" href="#targets"
+ id="id84" name=
+ "id84">8.5.3 Targets</a></li>
+ </ul>
+ </li>
<li><a class="reference internal" href=
- "#creare-la-condivisione" id="id21" name="id21">Creare
- la condivisione</a></li>
+ "#tabella-filter" id="id85" name=
+ "id85">8.6 Tabella Filter</a></li>
<li><a class="reference internal" href=
- "#configurazione-dell-applicativo-samba-vero-e-proprio"
- id="id22" name="id22">Configurazione dell'applicativo
- Samba vero e proprio.</a></li>
+ "#flush-automatico-per-macchine-remote" id="id86" name=
+ "id86">8.7 Flush automatico per
+ macchine remote</a></li>
<li><a class="reference internal" href=
- "#testare-il-servizio" id="id23" name="id23">Testare il
- Servizio</a></li>
+ "#gestione-regole-rules" id="id87" name=
+ "id87">8.8 Gestione regole
+ (rules)</a></li>
+
+ <li>
+ <a class="reference internal" href=
+ "#salvataggio-regole" id="id88" name=
+ "id88">8.9 Salvataggio regole</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#iptables-save" id="id89" name=
+ "id89">8.9.1 Iptables-save</a></li>
+
+ <li><a class="reference internal" href=
+ "#iptables-restore" id="id90" name=
+ "id90">8.9.2 Iptables-restore</a></li>
+ </ul>
+ </li>
+
+ <li>
+ <a class="reference internal" href="#esempi" id=
+ "id91" name="id91">8.10 Esempi</a>
+
+ <ul class="auto-toc">
+ <li><a class="reference internal" href=
+ "#bloccare-i-ping-dall-esterno" id="id92" name=
+ "id92">8.10.1 Bloccare i ping
+ dall'esterno</a></li>
+
+ <li><a class="reference internal" href=
+ "#masquerading-snat" id="id93" name=
+ "id93">8.10.2 Masquerading
+ (sNAT)</a></li>
+
+ <li><a class="reference internal" href=
+ "#brute-force" id="id94" name=
+ "id94">8.10.3 Brute force</a></li>
+ </ul>
+ </li>
</ul>
</li>
- <li><a class="reference internal" href="#note" id="id24"
- name="id24">NOTE</a></li>
+ <li><a class="reference internal" href="#note" id="id95"
+ name="id95">9 NOTE</a></li>
</ul>
</div>
"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="#id5">Configurazione
- sistema</a></h1>
+ <h1><a class="toc-backref" href=
+ "#id6">1 Configurazione sistema</a></h1>
<div class="section" id="solo-per-uso-interno">
- <h2><a class="toc-backref" href="#id6">Solo per uso
- interno</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id7">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>Qui riportati per comodita' degli studenti (e del
+ docente che non sara' <strong>mai piu'</strong> costretto a
+ ripeterli continuamente! ). Gli altri lettori potranno
+ tenerli presenti per cercare di comprendere gli esempi nel
+ testo. Ad esempio: quando leggerete <tt class=
+ "docutils literal"><span class=
+ "pre">10.10.208.254:3128</span></tt> saprete che si tratta
+ del nostro <em>proxy http</em>, stara' quindi a voi
+ sostituire i dati con gli <em>ip</em> della vostra
+ rete.</p>
</div>
<div class="section" id="rete">
- <h2><a class="toc-backref" href="#id7">Rete</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id8">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%">
+ <col width="42%">
+ <col width="58%">
</colgroup>
<tbody valign="top">
<td>10.10.208.250 persistente</td>
</tr>
+
+ <tr>
+ <td>proxy http</td>
+
+ <td>10.10.208.254:3128</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 ;) .
+ Questo in attesa che si sappia se sara' nuovamente
+ utilizzabile il vecchio server Bender.</p>
+
+ <div class="section" id="interfaces">
+ <h3><a class="toc-backref" href=
+ "#id9">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)
+# (network, broadcast and gateway sono optional)
+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 propia 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 schda
+ 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>
+ </div>
</div>
<div class="section" id="bash-completion">
- <h2><a class="toc-backref" href="#id8">Bash
- completion</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id10">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
+ scrivendo un termine) permette di comporre automaticamente
+ i nomi dei comandi e i percorsi dei file, sopratutto la
+ composizione automatica dei percorsi dei file e' di grande
+ importanza.</p>
+
+ <p>Bash_completion permette di integrare il completamento
+ automatico con i nomi dei pacchetti e oggetti dei comandi:
+ 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
+ automaticamente sia la parola <tt class=
+ "docutils literal"><span class="pre">install</span></tt>
+ che il nome del pacchetto <tt class=
+ "docutils literal"><span class=
+ "pre">xtightvncviewer</span></tt>.</p>
<p>Abilitare /etc/bash_completion nel file <tt class=
"docutils literal"><span class=
- "pre">/etc/bash.bashrc</span></tt> oppure <tt class=
- "docutils literal"><span class=
- "pre">~/.bashrc</span></tt></p>
+ "pre">/etc/bash.bashrc</span></tt> oppure includerlo nel
+ proprio <tt class="docutils literal"><span class=
+ "pre">~/.bashrc</span></tt> (che sarebbe il file
+ <em>nascosto</em>, quindi con un punto all'inizio del nome
+ del file, di configurazione della shell bash per ogni
+ utente, presente nella propria <em>home
+ directory</em>):</p>
+ <pre class="literal-block">
+echo ". /etc/bash_completion" >> ~/.bashrc
+</pre>
+
+ <p>Esempio di ~/.bahsrc</p>
<pre class="literal-block">
+# ~/.bashrc: executed by bash(1) for non-login shells.
+
+export PS1='\h:\w\$ '
+umask 022
+
+# Decommentare le seguenti righr per abilitare la colorazione dei
+# nomi dei file:
+ export LS_OPTIONS='--color=auto'
+ eval "`dircolors`"
+ alias ls='ls $LS_OPTIONS'
+ alias ll='ls $LS_OPTIONS -l'
+ alias l='ls $LS_OPTIONS -lA'
+
+# Some more alias to avoid making mistakes:
+# alias rm='rm -i'
+# alias cp='cp -i'
+# alias mv='mv -i'
+
+# questo abilita bash completion
. /etc/bash_completion
</pre>
<p>Il file <tt class="docutils literal"><span class=
- "pre">/etc/bash_completion</span></tt> deve essere ,ente
+ "pre">/etc/bash_completion</span></tt> deve essere presente
nel sistema, in caso contrario installare il pacchetto:
<tt class="docutils literal"><span class=
- "pre">bash-completion</span></tt></p>
+ "pre">bash-completion</span></tt>. Generalmente l'utente
+ <tt class="docutils literal"><span class=
+ "pre">root</span></tt> ha un file <tt class=
+ "docutils literal"><span class="pre">.bashrc</span></tt>
+ preimpostato analogo a quello citato sopra, a differenza
+ dei normali utenti di sistema.</p>
+
+ <p>Links:</p>
+
+ <ul class="simple">
+ <li><a class="reference external" href=
+ "http://www.debian-administration.org/articles/316">An
+ introduction to bash completion</a></li>
+
+ <li><a class="reference external" href=
+ "http://www.caliban.org/bash/">Working more productively
+ with bash 2.x/3.x</a></li>
+ </ul>
</div>
<div class="section" id="vim">
- <h2><a class="toc-backref" href="#id9">Vim</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id11">1.4 Vim</a></h2>
- <p>Sara' opportuno installare la versione completa
- dell'editor vim tramite il pacchetto vim e modificare il
- file di configurazione generale <tt class=
- "docutils literal"><span class=
- "pre">/etc/vim/vimrc</span></tt></p>
+ <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>
<pre class="literal-block">
-" 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
+ # 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
</pre>
</div>
<div class="section" id="vnc">
- <h2><a class="toc-backref" href="#id10">VNC</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id12">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>
- che deve essere reso eseguibile 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.</p>
+ 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>
<p>Procedura:</p>
<pre class="literal-block">
</pre>
<p>Si noti che non e' possibile lanciare un applicativo sul
- server grafico di un utente da una shell in cui si e'
- loggati come altro utente, anchee se root. E' quindi
+ server grafico di un utente da una shell in cui si sta
+ lavorando come altro utente, anche se root. E' quindi
necessario essere l'utente di sistema che si e' loggato
inizialmente nella sessione grafica per poter lanciare lo
- script guarda.sh .</p>
+ script guarda.sh da una shell.</p>
<p>Controllare con <tt class=
"docutils literal"><span class="pre">whoami</span></tt> di
</div>
<div class="section" id="lista-dei-pacchetti-di-base">
- <h2><a class="toc-backref" href="#id11">Lista dei pacchetti
- di base</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id13">1.6 Lista dei pacchetti di
+ base</a></h2>
<p>I pacchetti installati generalmente <a class=
"footnote-reference" href="#id2" id="id1" name=
<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></td>
+ "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
+ <tt class="docutils literal"><span class=
+ "pre">gdm</span></tt> per il l'ambiente grafico
+ Gnome.</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="apt-configurazione">
- <h2><a class="toc-backref" href="#id12">Apt
- configurazione</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id14">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=
- "#id13">sources.list</a></h3>
+ "#id15">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>,
<div class="section" id="etc-apt-apt-conf">
<h3><a class="toc-backref" href=
- "#id14">/etc/apt/apt.conf</a></h3>
+ "#id16">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.254: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>
</div>
</div>
</div>
- <div class="section" id="servizi">
- <h1><a class="toc-backref" href="#id15">Servizi</a></h1>
- </div>
-
<div class="section" id="squid">
- <h1><a class="toc-backref" href="#id16">Squid</a></h1>
+ <h1><a class="toc-backref" href=
+ "#id17">2 Squid</a></h1>
+
+ <p>Squid e' un proxy cache http (ma anche FTP e https)
+ robusto e strutturato, puo' essere usato sia in reti
+ relativamente piccole grazie alla semplicita' di
+ configurazione che in scenari piu' complessi grazie alla
+ possibilita' di gestirne in modo granulare le risorse
+ partendo dalle configurazioni piu' semplici per la semplice
+ <em>condivisione della navigazione</em> internet, la gestione
+ degli accessi, 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') nel l
+ bilanciamento del carico tra piu' hosts.</p>
+
+ <dl class="docutils">
+ <dt>Inoltre svolge la funzione di <em>anonymizer</em>:</dt>
+
+ <dd>nasconde i client http alla rete internet: risulta solo
+ il server proxy nei log dei server web frequentati dagli
+ utenti di Squid.</dd>
+ </dl>
+
+ <p>Cosa a volte sottovalutata, squid permette la navigazione
+ web a una rete basata su <em>indirizzi ip privati</em> (es
+ una 192.168.0.0/24). E se la rete privata deve <em>solo
+ navigare</em> in internet, non serve un <em>NAT</em> od
+ altro, basta il solo Squid. Per altro non servira' neanche un
+ servizio DNS dato che <em>sara' il solo squid a risolvere i
+ nomi di dominio</em> per i suoi client http.</p>
+
+ <p>Squid ascolta di default sulla porta 3128, per impostare
+ <em>apt</em> per utilizzarlo 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>Per installare Squid si usino i pacchetti:</p>
+ <pre class="literal-block">
+squid3
+</pre>
+
+ <div class="section" id="configurazione-squid-conf">
+ <h2><a class="toc-backref" href=
+ "#id18">2.1 Configurazione:
+ squid.conf</a></h2>
+
+ <p>Segue 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>
+
+ <div class="section" id="cache-dir">
+ <h3><a class="toc-backref" href=
+ "#id19">2.1.1 Cache_dir</a></h3>
+
+ <p>Cache dir serve per impostare dimensione e percorso
+ della cache creata sul supporto di storaggio. Essendo la
+ dimensione di default della cache pari a <tt class=
+ "docutils literal"><span class="pre">~100</span>
+ <span class="pre">MB</span></tt> e' altamente
+ consigliabili aumentare questo parametro se si vuole
+ poter utilizzare la funzione di <em>cache</em> http del
+ software.</p>
+
+ <p>La dimensione ovviamente dipendera' dallo spazio
+ disponibile, dimensioni tipiche e massime degli oggetti
+ che si vuole tenere in cache (un solo file <em>.iso e'
+ circa ``700 MB``, il pacchetto *Openoffice.org</em> cira
+ <tt class="docutils literal"><span class="pre">150</span>
+ <span class="pre">MB</span></tt>, un pacchetto debian
+ circa <tt class="docutils literal"><span class=
+ "pre">20</span> <span class="pre">MB</span></tt>), numero
+ dei client.</p>
+
+ <p>Si presti poi attenzione alla natura dei dati che
+ saranno salvati nella cache: sono tutti dati facilmenti
+ sostituibili (gli originali sono <em>on-line</em>) la cui
+ perdita non arreca danni permanenti. Questo rende la
+ cache di Squid un possibile candidato ad un <em>RAID
+ stripe</em> (livello 0), 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. Questo fino al
+ momento in cui per voi non sia piu' importante
+ <em>garantire la disponibilita' del servizio</em> (se il
+ RAID stripe dovesse rompersi gli utenti non potrebbero
+ piu' navigare, cosa che per natura dello stripe e'
+ maggiormente probabile rispetto ad un <em>mirror</em> o a
+ un filesytem <em>normale</em>) con un RAID mirror o
+ 5.</p>
+
+ <p>Altra considerazione: i dati del proxy vengono slavati
+ sul filesytem del server dietro richiesta di utenti
+ esterni talvolta sconosciuti. 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 abbia i
+ privilegi di eseguibilita' o suid (in genere si puo'
+ anche usare <em>noatime</em> per renderlo piu' veloce,
+ che si usi o meno il journal dipende dalle preferenze:
+ affidabilita' oppure prestazioni):</p>
+
+ <p>/etc/fstab</p>
+ <pre class="literal-block">
+...
+# Filesystem per Squid http cache
+/dev/md3/ /var/spool/squid/ ext3,noexec,nosuid,noatime 0 3
+</pre>
+
+ <p>Ora possiamo impostare la cache direttamente nel file
+ <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
+# algoritmo
+# path della cache
+# dimensione in MB
+# directory primo livello
+# secondo livello di directory
+</pre>
+
+ <p>Se si modifica la struttura del filesytem della cache
+ di Squid, ad esempio variando il numero delle directory,
+ puo' essere opportuno rigenerare la struttura della cache
+ di squid (per lo meno se si <em>aumenta</em> il numero
+ delle directory di primo o secondo livello). Tipicamente
+ e' consigliabile cancellare (se si ha <em>ridotto</em> il
+ numero delle diectory) la vecchia cache e poi generare
+ una nuova struttura. Se si vuole <em>star nel sicuro</em>
+ ogni volta che si modifica l'impostazione delle directory
+ <em>si svuoti la vecchia cache e se ne generi una
+ nuova</em></p>
+ <pre class="literal-block">
+# /etc/init.d/squid3 stop
+# rm -r /var/spool/squid3/??
+# squid3 -z
+# /etc/init.d/squid3 start
+</pre>
+ </div>
+
+ <div class="section" id="tag-maximum-object-size">
+ <h3><a class="toc-backref" href=
+ "#id20">2.1.2 TAG:
+ maximum_object_size</a></h3>
+
+ <p>Questa direttiva imposta la dimensione massima degli
+ oggetti che vengono slvati sul supporto di storaggio,
+ oggetti di dimensioni superiori saranno comunque
+ scaricati ma non tenuti in cache.</p>
+
+ <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>
+
+ <div class="section" id="tag-cache-mem">
+ <h3><a class="toc-backref" href=
+ "#id21">2.1.3 TAG: cache_mem</a></h3>
+
+ <p><em>Cache_mem</em> imposta quanta memoria RAM venga
+ utilizzata per la cache di Squid. Questo dipendera' dalla
+ RAM disponibile sul sistema, e da quanta di questa volete
+ mettere a disposizione di Squid (altri servizi
+ iimportanti girano sulla stessa macchina?). Questo
+ paramentro influisce sulle prestazioni e sul degrado dei
+ supporti di storaggio (sopratutto se magnetici).</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:
+ avra' bisogno di una macchina con <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>
+
+ <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>
+
+ <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=
+ "#id22">2.1.4 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
+ deframmentazione del filesytem e consumare un numero
+ elevato di <em>inode</em> (cosa non piu' importante con
+ ext4 o altri filesytem).</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=
+ "#id23">2.2 Negoziazione degli accesi al
+ servizio</a></h2>
+
+ <p>Squid e' uno di quei servizi soggetto a problemi di tipo
+ <em>open relay</em> , si deve quindi limitare 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 (che
+ permetterebbero l'invio di SPAM).</dd>
+ </dl>
+
+ <p>Generalmente non volete che il vostro proxy http venga
+ usato da persone sconosciute le quali sostanzialmente
+ <em>navigherebbero sotto l'identita' del vostro proxy</em>
+ (probabilmente per visionare materiali che non vorrebbero
+ fossero ricondotti direttamente a loro, per motivi che sta
+ a voi prendere in considerazione) consumando traffico e
+ 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> (indirizi 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>
+
+ <div class="section" id="acl-e-http-access">
+ <h3><a class="toc-backref" href=
+ "#id24">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 lostra 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=
+ "#id25">2.3 Testare Squid</a></h2>
+
+ <p>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 per poi utilizzare <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=
+ "#id26">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
+ utililizzi 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=
+ "#id27">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="apache">
+ <h1><a class="toc-backref" href=
+ "#id28">3 Apache</a></h1>
+
+ <p>Apache HTTP Server, o piu' comunemente Apache, e' il nome
+ dato alla piattaforma server Web modulare piu' 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>
+
+ <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
+ dà 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=
+ "#id29">3.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,
+ cpnnessioni criptate ) del web server.</p>
+ </div>
+
+ <div class="section" id="configurazione-di-apache">
+ <h2><a class="toc-backref" href=
+ "#id30">3.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' generalemente 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>
+
+ <dd>In questa cartella sono contenuti dei link simbolici
+ ai files in ../sites-available : se il link e' presente
+ in questa cartella il virtual host e' abilitato.</dd>
+
+ <dt>mods-available</dt>
+
+ <dd>Stesso metodo per i moduli: in questa cartella ci
+ sono i moduli veri e propri che verranno poi abilitati
+ grazie all'esistenza di link simbolici nella cartella
+ mods-enabled .</dd>
+
+ <dt>mods-enabled</dt>
+
+ <dd>Moduli abilitati, effettivamente caricati.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="apache-conf">
+ <h2><a class="toc-backref" href=
+ "#id31">3.3 apache.conf</a></h2>
+
+ <p>File di configurazione del servizio Apache, contiene le
+ impostazioni generiche (ad esempio utilizzo della RAM e
+ risorse di sistema) dell'intero servizio. Nella
+ configurazione di default per Debian non viene definito un
+ vero e proprio sito di default ma solo dei virtual
+ hosts.</p>
+
+ <p>Guardiamo alcune direttive interessanti:</p>
+
+ <dl class="docutils">
+ <dt>Timeout</dt>
+
+ <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
+ 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
+ autonoma. Keep-alive permette di ottimizzare la
+ connessione anche fino al 50% a seconda delle situazioni
+ e contenuti.</dd>
+
+ <dt>Server-Pool Size Regulation</dt>
+
+ <dd>Questi parametri (StartServers, MinSpareServers, ecc.
+ Tutti spiegati nel manuale di apache) servono per
+ 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
+ sempre abbastanza conservativi, se si conta di usare il
+ proprio Apache per servire un sito web con molti
+ visitatori sara' necessario aumentare sensibilmente le
+ impostazioni di base.</dd>
+
+ <dt>AccessFileName</dt>
+
+ <dd>Il nome del file che viene onorato per modificare le
+ impostazioni per una singola directory, legato alla
+ direttiva AllowOverride .</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="installazione-di-php">
+ <h2><a class="toc-backref" href=
+ "#id32">3.4 Installazione di PHP</a></h2>
+
+ <p>Pacchetti da installare: <tt class=
+ "docutils literal"><span class="pre">php5</span>
+ <span class="pre">php-pear</span></tt></p>
+
+ <div class="section" id="test-del-modulo-php">
+ <h3><a class="toc-backref" href=
+ "#id33">3.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
+ eseguibile dall'interprete, ad es:</p>
+ <pre class="literal-block">
+<?php phpinfo() ; ?>
+</pre>
+
+ <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
+ 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>
+ </div>
+
+ <div class="section" id=
+ "installazione-del-supporto-per-mysql">
+ <h3><a class="toc-backref" href=
+ "#id34">3.4.2 Installazione del supporto
+ per Mysql</a></h3>
+
+ <p>Installare i pacchetti:</p>
+ <pre class="literal-block">
+php5-mysql phpmyadmin
+</pre>
+
+ <p>Controllare tramite la pagina php.info che sia
+ abilitato il supporto per Mysql (ripartito Apache,
+ ricaricare la pagina e cercare con CTRL+f <tt class=
+ "docutils literal"><span class=
+ "pre">mysql</span></tt>).</p>
+ </div>
+
+ <div class="section" id="phpmyadmin">
+ <h3><a class="toc-backref" href=
+ "#id35">3.4.3 phpmyadmin</a></h3>
+
+ <p>L'interfaccia web Phpmyadmin non richede
+ necessariamente la presenza di un database Mysql locale,
+ puo' infatti essere utilizzata per gestire databases
+ remoti (il suo file di configurazione: <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
+ caso si voglia installare localmente Mysql si utilizzi il
+ pacchetto <tt class="docutils literal"><span class=
+ "pre">mysql-server</span></tt> .</p>
+
+ <p>Phpmyadmin dovrebbe essere disponibile all'URL:
+ <tt class="docutils literal"><span class=
+ "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
+ non fosse controllare che sia incluso il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/phpmyadmin/apache.conf</span></tt> in
+ <tt class="docutils literal"><span class=
+ "pre">/etc/apache2/conf.d/</span></tt> .</p>
+ </div>
+
+ <div class="section" id=
+ "installazione-del-supporto-per-postgresql">
+ <h3><a class="toc-backref" href=
+ "#id36">3.4.4 Installazione del supporto
+ per Postgresql</a></h3>
+
+ <p>Installare i pacchetti:</p>
+ <pre class="literal-block">
+php5-pgsql phppgadmin
+</pre>
+
+ <p>Controllare tramite la pagina php.info che sia
+ abilitato il supporto per PostgreSQL (ripartito Apache,
+ ricaricare la pagina e cercare con CTRL+f <tt class=
+ "docutils literal"><span class=
+ "pre">pgsql</span></tt>).</p>
+ </div>
+
+ <div class="section" id="phppgadmin">
+ <h3><a class="toc-backref" href=
+ "#id37">3.4.5 phppgadmin</a></h3>
+
+ <p>L'interfaccia web Phppgadmin per il database server
+ PostgreSQL non richede necessariamente la presenza di un
+ database locale, puo' infatti essere utilizzata per
+ gestire databases 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
+ pacchetto <tt class="docutils literal"><span class=
+ "pre">postgresql</span></tt> .</p>
+
+ <p>Phpmyadmin dovrebbe essere disponibile all'URL:
+ <tt class="docutils literal"><span class=
+ "pre">http://localhost/phppgadmin/</span></tt>, se cosi
+ non fosse controllare che sia incluso il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/phppgadmin/apache.conf</span></tt> in
+ <tt class="docutils literal"><span class=
+ "pre">/etc/apache2/conf.d/</span></tt> .</p>
+ </div>
+ </div>
+
+ <div class="section" id="virtual-hosts">
+ <h2><a class="toc-backref" href=
+ "#id38">3.5 Virtual hosts</a></h2>
+
+ <blockquote>
+ <ul class="simple">
+ <li><a class="reference external" href=
+ "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
+
+ <li><a class="reference external" href=
+ "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
+ http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
+ </ul>
+ </blockquote>
+
+ <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
+ 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
+ diversi siti che si vuole servire. ES: <tt class=
+ "docutils literal"><span class=
+ "pre"><VirtualHost</span> <span class=
+ "pre">192.168.0.2:80></span></tt> . Soluzione
+ dispendiosa, si tende ad usarla solo se servono
+ certificati di sicurezza (SSL ) dedicati per ogni
+ sito.</li>
+
+ <li>Basati su <em>nomi di dominio</em> che puntano allo
+ stesso ip. Soluzione piu' economica e diffusa che si
+ basa sulle funzionalita' di http 1.1 .</li>
+ </ul>
+ </blockquote>
+
+ <p>Prenderemo in esame la gestione di virtual hosts basati
+ su nomi di dominio.</p>
+
+ <div class="section" id="gestione-dns">
+ <h3><a class="toc-backref" href=
+ "#id39">3.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'
+ ottenere in vari modi, ad es:</p>
+
+ <blockquote>
+ <dl class="docutils">
+ <dt><em>Bind</em> (DNS server)</dt>
+
+ <dd>Impostare i campi A nelle proprie zone gestite
+ dal server dns Bind. Ad es: <tt class=
+ "docutils literal"><span class=
+ "pre">papo</span>
+ <span class=
+ "pre">A</span>
+ <span class="pre">212.22.136.248</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
+ pubblico (anche se dinamico) per la propria
+ connessione ad internet.</dd>
+
+ <dt><em>Dnsmasq</em> (DNS server)</dt>
+
+ <dd>Utilizzabile a livello locale per fare dei test,
+ utilizzando direttive come: <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>
+ </dl>
+ </blockquote>
+ <pre class="literal-block">
+# dig 177.piffa.net
+
+; <<>> 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
+
+;; QUESTION SECTION:
+;177.piffa.net. IN A
+
+;; ANSWER SECTION:
+177.piffa.net. 0 IN A 10.10.208.177
+
+;; 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>La parte interessante e' <tt class=
+ "docutils literal"><span class=
+ "pre">177.piffa.net.</span>
+ <span class=
+ "pre">0</span>
+ <span class="pre">IN</span>
+ <span class=
+ "pre">A</span>
+ <span class="pre">10.10.208.177</span></tt> . Il nome di
+ dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
+ , 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>
+ </div>
+
+ <div class="section" id="virtual-host">
+ <h3><a class="toc-backref" href=
+ "#id40">3.5.2 Virtual host</a></h3>
+
+ <p>Esempio di Virtual host:</p>
+ <pre class="literal-block">
+<VirtualHost *:80 >
+ ServerName 177.piffa.net
+ DocumentRoot /var/www/177.piffa.net/
+ ServerAdmin webmaster@177.piffa.net
+</VirtualHost>
+</pre>
+
+ <ol class="arabic simple">
+ <li><tt class="docutils literal"><span class=
+ "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
+ 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
+ server web.</li>
+
+ <li><tt class="docutils literal"><span class=
+ "pre">DocumentRoot</span></tt> : il path della
+ directory che contiene le pagine del sito.</li>
+
+ <li><tt class="docutils literal"><span class=
+ "pre">ServerAdmin</span></tt>: l'indirizzo del
+ webmaster, in modo da poterlo contattare in caso di
+ problemi col sito.</li>
+
+ <li><tt class="docutils literal"><span class=
+ "pre"></VirtualHost></span></tt>: <em>tag</em> di
+ chiusura della stanza di definizione del virtual
+ host.</li>
+ </ol>
+
+ <p>Quelle che abbiamo appena visto sono le direttive
+ essenziali per definire un sito virtuale, potrebbe essere
+ utile aggiungene altre:</p>
+
+ <ul>
+ <li>
+ <dl class="first docutils">
+ <dt><tt class="docutils literal"><span class=
+ "pre">ErrorLog</span> <span class=
+ "pre">/var/log/apache2/177.piffa.net/error.log</span></tt></dt>
+
+ <dd>
+ <p class="first last">Log degli errori separato
+ dai restanti siti web ospitati dal server.</p>
+ </dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="first docutils">
+ <dt><tt class="docutils literal"><span class=
+ "pre">LogLevel</span> <span class=
+ "pre">warn</span></tt></dt>
+
+ <dd>
+ <p class="first last">Livello di importanza degli
+ eventi loggati= warning <em>attenzione</em> .</p>
+ </dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="first docutils">
+ <dt><tt class="docutils literal"><span class=
+ "pre">CustomLog</span> <span class=
+ "pre">/var/log/apache2/177.piffa.net/access.log</span>
+ <span class="pre">combined</span></tt></dt>
+
+ <dd>
+ <p class="first last">Log di accesso separati
+ dagli altri siti, utile anche qua per statistiche
+ di accesso per il solo sito virtuale.</p>
+ </dd>
+ </dl>
+ </li>
+ </ul>
+
+ <p>Potrebbe essere utile modificare le impostazioni di
+ una intera directory, ad esempio per abilitare
+ l'<tt class="docutils literal"><span class=
+ "pre">AuthConfig</span></tt>:</p>
+ <pre class="literal-block">
+<Directory "/var/www/miosito.net/privata">
+ AllowOverride AuthConfig
+ Options ExecCGI Indexes MultiViews FollowSymLinks
+ Order allow,deny
+ Allow from all
+</Directory>
+</pre>
+
+ <p><tt class="docutils literal"><span class=
+ "pre">AllowOverride</span> <span class=
+ "pre">AuthConfig</span></tt> ora vale per l'intera
+ directory, come le altre opzioni.</p>
+ </div>
+ </div>
+
+ <div class="section" id="negoziazione-accessi">
+ <h2><a class="toc-backref" href=
+ "#id41">3.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
+ disponibile a tutti.</p>
+
+ <div class="section" id="limiti-su-base-ip">
+ <h3><a class="toc-backref" href=
+ "#id42">3.6.1 Limiti su base ip</a></h3>
+
+ <p>La forma piu' semplice di restrizine 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
+ </Directory>
+</VirtualHost>
+</pre>
+
+ <p>Potremmo negare l'accesso a uno o piu' indirizzi IP in
+ 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
+ </Directory>
+</VirtualHost>
+</pre>
+
+ <p>Ora l'IP 192.168.0.1 non potra' piu' accedere ai
+ materiali dell'intero sito virtuale, oppure potremmo
+ lavorare su una sola directory:</p>
+ <pre class="literal-block">
+<Directory "/var/www/miosito.net/limitata">
+ Order allow,deny
+ Allow from 192.168.0.0./24
+ Deny from all
+</Directory>
+</pre>
+
+ <p>In questo modo solo la classe IP <tt class=
+ "docutils literal"><span class=
+ "pre">192.168.0.0/24</span></tt> potra' accedere alla
+ 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.
+ 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>
+ </div>
+
+ <div class="section" id="user-authentication">
+ <h2><a class="toc-backref" href=
+ "#id43">3.7 User Authentication</a></h2>
+
+ <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>
+
+ <div class="section" id="definire-la-cartella">
+ <h3><a class="toc-backref" href=
+ "#id44">3.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>
+
+ <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">
+ <h3><a class="toc-backref" href=
+ "#id45">3.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><tt class="docutils literal"><span class=
+ "pre">htpasswd</span></tt> ci chedera' la password da
+ associare all'utente <tt class=
+ "docutils literal"><span class="pre">luca</span></tt>.
+ Per sucessive 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">
+ <h3><a class="toc-backref" href=
+ "#id46">3.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 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
+ funzionamenteo del loro spazio web ci togliera'
+ l'incombenza di dover intervenire suii 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>Per rendere il cambiamento effettivo sara' necessario
+ fare un restart / reload di Apache.</p>
+
+ <p>Ora sara' possibile, anche per l'utente di sistema,
+ creare un fie <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">
+# Questo file viene incluso
+# nella configurazione del sito web
+# 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
+AuthUserFile /home/utente/passwords
+
+# Negoziazione degli accessi
+# valid users permette l'accesso agli utenti specificati
+# nel file generato da htpasswd
+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>
+ </div>
+ </div>
+
+ <div class="section" id="cavets">
+ <h2><a class="toc-backref" href=
+ "#id47">3.8 Cavets</a></h2>
+
+ <p>Problemi di cache:</p>
+
+ <blockquote>
+ <ul class="simple">
+ <li>Proxy: nei settaggi del browser specificare di non
+ utilizzare un server proxy http per il sito web locale
+ (o per gli altri che si stanno monitorando). Se si ha
+ il controllo del proxy server: stopparlo, ricaricare la
+ pagina (operazione che fallira'), far ripartire il
+ proxy, ricaricare la pagina.</li>
+
+ <li>Provare con un altro browser, o cercare di svuotare
+ la cache chiudere/riaprire l'applicativo. Provare a
+ fermare Apache, ricaricare la pagina (operazione che
+ fallira'), far ripartire Apache, ricaricare la
+ pagina.</li>
+ </ul>
+ </blockquote>
+ </div>
</div>
- <div class="section" id="apache">
- <h1><a class="toc-backref" href="#id17">Apache</a></h1>
- </div>
+ <div class="section" id="domain-name-system">
+ <h1><a class="toc-backref" href=
+ "#id48">4 Domain Name System</a></h1>
+
+ <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 e' realizzato tramite
+ un database distribuito, costituito dai server DNS.</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>
+
+ <p>I nomi DNS, o "nomi di dominio", sono una delle
+ caratteristiche piu' visibili di Internet.</p>
+
+ <p>C'e' confusione in merito alla definizione dell'acronimo:
+ la S spesso viene interpretata come service, ma la
+ definizione corretta e' system.</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>
+
+ <div class="section" id="nomi-di-dominio">
+ <h2><a class="toc-backref" href=
+ "#id49">4.1 Nomi di dominio</a></h2>
+
+ <p>Un nome a dominio e' costituito da una serie di stringhe
+ separate da punti, ad esempio it.wikipedia.org. A
+ differenza degli indirizzi IP, dove la parte piu'
+ importante del numero e' la prima partendo da sinistra, in
+ un nome DNS la parte piu' importante e' la prima partendo
+ da destra. Questa e' 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 cosi' via. Ogni ulteriore elemento
+ specifica un'ulteriore suddivisione. Quando un dominio di
+ secondo livello viene registrato all'assegnatario, questo
+ e' 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 cosi' via.</p>
+ </div>
+
+ <div class="section" id="tipologie-di-record">
+ <h2><a class="toc-backref" href=
+ "#id50">4.2 Tipologie di record</a></h2>
+
+ <p>Ad un nome DNS possono corrispondere diversi tipi di
+ informazioni. Per questo motivo, esistono diversi tipi di
+ record DNS. Ogni voce del database DNS deve essere
+ caratterizzata da un tipo. I principali tipi sono:</p>
+
+ <ul class="simple">
+ <li>Record A - Indica la corrispondenza tra un nome ed
+ 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
+ debba essere inviata la posta elettronica per un certo
+ dominio.</li>
+
+ <li>Record CNAME - Sono usati per creare un alias, ovvero
+ per fare in modo che lo stesso calcolatore sia noto con
+ 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
+ DNS.</li>
+
+ <li>Record PTR - Il DNS viene utilizzato anche per
+ realizzare la risoluzione inversa, ovvero per far
+ corrispondere ad un indirizzo IP il corrispondente nome a
+ dominio. Per questo si usano i record di tipo "PTR" (e
+ una apposita zona dello spazio dei nomi
+ in-addr.arpa).</li>
+
+ <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
+
+ <li>Record SRV - Identificano il server per un
+ determinato servizio all'interno di un dominio. Possono
+ essere considerati una generalizzazione dei record
+ MX.</li>
+
+ <li>Record TXT - Associano campi di testo arbitrari ad un
+ dominio. Questi campi possono contenere una descrizione
+ informativa oppure essere utilizzati per realizzare
+ servizi.</li>
+ </ul>
+
+ <p>Vi sono anche tipi di record "di servizio", necessari al
+ funzionamento del database distribuito: * Record NS -
+ Utilizzato per indicare quali siano i server DNS
+ autoritativi per un certo dominio, ovvero per delegarne la
+ gestione. * Record SOA - (Start of Authority) usato per la
+ gestione delle zone DNS.</p>
+ </div>
+
+ <div class="section" id="utilizzo">
+ <h2><a class="toc-backref" href=
+ "#id51">4.3 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
+ 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>
+ <pre class="literal-block">
+ping -c 1 www.google.com
+PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
+</pre>
+ </div>
+
+ <div class="section" id="risoluzione-dei-nomi-di-dominio">
+ <h2><a class="toc-backref" href=
+ "#id52">4.4 Risoluzione dei nomi di
+ dominio</a></h2>
+
+ <p>Ci sono vari strumenti per interrogare i server DNS e
+ ottenere l'indirizzo IP associato al nome di dominio che ci
+ interessa:</p>
+ <pre class="literal-block">
+$ host www.piffa.net
+www.piffa.net is an alias for piffa.net.
+piffa.net has address 65.98.21.97
+piffa.net mail is handled by 10 65.98.21.97
+
+
+$ nslookup www.piffa.net
+Server: 192.168.0.10
+Address: 192.168.0.10#53
+
+Non-authoritative answer:
+www.piffa.net canonical name = piffa.net.
+Name: piffa.net
+Address: 65.98.21.97
+
+
+$ dig www.piffa.net
+
+; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
+;; global options: +cmd
+;; Got answer:
+;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
+;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
+
+;; QUESTION SECTION:
+;www.piffa.net. IN A
+
+;; ANSWER SECTION:
+www.piffa.net. 3489 IN CNAME piffa.net.
+piffa.net. 3489 IN A 65.98.21.97
+
+;; AUTHORITY SECTION:
+piffa.net. 86289 IN NS ns2.mydomain.com.
+piffa.net. 86289 IN NS ns1.mydomain.com.
+piffa.net. 86289 IN NS ns4.mydomain.com.
+piffa.net. 86289 IN NS ns3.mydomain.com.
+
+;; ADDITIONAL SECTION:
+ns1.mydomain.com. 96208 IN A 64.94.117.193
+ns2.mydomain.com. 96208 IN A 64.94.31.67
+ns3.mydomain.com. 96208 IN A 66.150.161.137
+ns4.mydomain.com. 96208 IN A 63.251.83.74
+
+;; Query time: 1 msec
+;; SERVER: 192.168.0.10#53(192.168.0.10)
+;; WHEN: Sun May 10 21:23:11 2009
+;; MSG SIZE rcvd: 209
+</pre>
+
+ <p>Lo strumento piu' esaustivo e' <tt class=
+ "docutils literal"><span class="pre">dig</span></tt>,
+ installabile con il pacchetto <tt class=
+ "docutils literal"><span class="pre">dnsutils</span></tt>
+ .</p>
+ </div>
+
+ <div class="section" id="dig">
+ <h2><a class="toc-backref" href=
+ "#id53">4.5 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>
+ <pre class="literal-block">
+$ dig www.google.it
+
+; <<>> DiG 9.6.0-P1 <<>> www.google.it
+;; global options: +cmd
+;; Got answer:
+;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18816
+;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 7, ADDITIONAL: 0
+
+;; QUESTION SECTION:
+;www.google.it. IN A
+
+;; ANSWER SECTION:
+www.google.it. 250683 IN CNAME www.google.com.
+www.google.com. 334819 IN CNAME www.l.google.com.
+www.l.google.com. 186 IN A 74.125.43.103
+www.l.google.com. 186 IN A 74.125.43.104
+www.l.google.com. 186 IN A 74.125.43.147
+www.l.google.com. 186 IN A 74.125.43.99
+
+;; AUTHORITY SECTION:
+l.google.com. 80856 IN NS f.l.google.com.
+l.google.com. 80856 IN NS d.l.google.com.
+l.google.com. 80856 IN NS b.l.google.com.
+l.google.com. 80856 IN NS c.l.google.com.
+l.google.com. 80856 IN NS a.l.google.com.
+l.google.com. 80856 IN NS e.l.google.com.
+l.google.com. 80856 IN NS g.l.google.com.
+
+;; Query time: 1 msec
+;; SERVER: 192.168.0.10#53(192.168.0.10)
+;; WHEN: Sun May 10 21:34:47 2009
+;; MSG SIZE rcvd: 255
+</pre>
+
+ <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
+ 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
+ informazioni (tipicamente un campo <tt class=
+ "docutils literal"><span class="pre">A</span></tt> per un
+ indirizzo IP) che ci servono per raggiungere un certo
+ servizio.</dd>
+ </dl>
+
+ <p>$ dig</p>
+
+ <blockquote>
+ <p>...</p>
+
+ <p>;; ANSWER SECTION: . 192032 IN NS C.ROOT-SERVERS.NET.
+ . 192032 IN NS E.ROOT-SERVERS.NET. . 192032 IN NS
+ B.ROOT-SERVERS.NET. . 192032 IN NS L.ROOT-SERVERS.NET. .
+ 192032 IN NS A.ROOT-SERVERS.NET. . 192032 IN NS
+ F.ROOT-SERVERS.NET. . 192032 IN NS H.ROOT-SERVERS.NET. .
+ 192032 IN NS G.ROOT-SERVERS.NET. . 192032 IN NS
+ K.ROOT-SERVERS.NET. . 192032 IN NS M.ROOT-SERVERS.NET. .
+ 192032 IN NS I.ROOT-SERVERS.NET. . 192032 IN NS
+ J.ROOT-SERVERS.NET. . 192032 IN NS
+ D.ROOT-SERVERS.NET.</p>
+
+ <p>...</p>
+ </blockquote>
+
+ <dl class="docutils">
+ <dt>dig @nome_dns</dt>
+
+ <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>
+
+ <dt>dig MX www.google.it</dt>
+
+ <dd>Chiede un campo in particolare, in questo caso il
+ campo MX</dd>
+
+ <dt>dig ANY www.google.it</dt>
+
+ <dd>Chiede tutti i campi, non solo i campi
+ <em>a</em></dd>
+
+ <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=
+ "#id54">4.6 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 sucessiva.</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>Si veda anche la pagina man di resolv.conf.</p>
+
+ <p>Attenzione: se si usa un client DHCP o simile questo
+ file potra' essere riscritto automaticamente in base a
+ quanto ottenuto dal DHCP. Si veda la documentazione del
+ pacchtto <tt class="docutils literal"><span class=
+ "pre">resolvconf</span></tt>.</p>
+ </div>
+
+ <div class="section" id="etc-hosts">
+ <h2><a class="toc-backref" href=
+ "#id55">4.7 /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 e' un associazione tra un <em>IP</em> e
+ stringhe di testo (anche piu' di una es: <tt class=
+ "docutils literal"><span class="pre">mirror</span></tt> e
+ <tt class="docutils literal"><span class=
+ "pre">mirror.piffa.net</span></tt>), un record per
+ riga.</p>
+
+ <p>Il problema e' la gestione di questo file: quando gli
+ host cambiano IP si devono aggiornare i records, e c'e' poi
+ il problema di distribuire questo file tra i vari hosts
+ della propia 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>
+ locale e lo <em>distribuisce</em> ai clients.</p>
+
+ <p>Modificare (riconducendola a un ip interno, cosi'
+ annullandola) la risoluzione di un nome di dominio e' un
+ modo drastico e funzionale per <em>annullarlo</em>
+ rendendolo indisponibile alla propia 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 i``localhost``.</p>
+ </div>
+
+ <div class="section" id="hostname">
+ <h2><a class="toc-backref" href=
+ "#id56">4.8 Hostname</a></h2>
+
+ <p>Ogni computer ha un <em>propio nome</em> visualizzabile
+ (e modificabile) con il comando <tt class=
+ "docutils literal"><span class=
+ "pre">hostname</span></tt>.</p>
+
+ <p>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>Tipicamente si vuole mantenere una correlazione tra il
+ nome dell'host, o meglio la stringa con cui il server si
+ qualifica all'esterno, e il <em>PTR</em> dell'ip. Nel caso
+ di <em>servizi virtuali</em> ci sara' un <em>nome
+ server</em> principale associato al <em>PTR</em> condiviso.
+ Non e' automatico che un servizio, ad esempio un server di
+ posta, si qualifichi leggendo il contenuto di questo file e
+ magari aggiungendo come suffisso il dominio 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: ``visible_hostname``
+
+* Postfix: ``myhostname``
+</pre>
+ </div>
+ </div>
+
+ <div class="section" id="dnsmasq">
+ <h1><a class="toc-backref" href=
+ "#id57">5 DNSmasq</a></h1>
+
+ <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>
+
+ <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>
+
+ <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 Publico).</li>
+
+ <li>Ben integrato con connssioni PPP (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=
+ "#id58">5.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>
- <div class="section" id="dnsmasq">
- <h1><a class="toc-backref" href="#id18">DNSmasq</a></h1>
+ <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=
+ "#id59">5.2 DHCP</a></h2>
+
+ <p>Per attivare il demone DHCP di dnsmaq 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' esseere
+ 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 richesta 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=
+ "#id60">5.3 DNS cache</a></h2>
+
+ <p>Aggiungere al file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/resolv.conif</span></tt> il nameserver localhost
+ in cima alla lista dei <em>nameserver</em> disponibili.
+ Dnsmasq usera' la propia cache e in caso non abbia
+ disponibile il <em>record DNS</em> richiesto fara' partire
+ una query al primo DNS:</p>
+ <pre class="literal-block">
+nameserver 127.0.0.1
+</pre>
+
+ <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 class="section" id="dhcpd">
+ <h2><a class="toc-backref" href=
+ "#id61">5.4 DHCPd</a></h2>
+
+ <p>Dnsmasq puo' lavorare anche come DHCP server per la
+ vostra LAN.</p>
+ </div>
</div>
<div class="section" id="samba">
- <h1><a class="toc-backref" href="#id19">Samba</a></h1>
+ <h1><a class="toc-backref" href=
+ "#id62">6 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
- interoperabilità tra Linux, Unix, Mac OS X e
- Windows.</p>
+ interoperabilita' tra Linux, Unix, Mac OS X e Windows.</p>
- <p>Samba e' un software che può 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
+ <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, può
+ Domain Controller (PDC) o come Backup Domain Controller, puo'
inoltre prendere parte ad un dominio Active Directory.</p>
- <p>Pacchetti da installare per utilizzare Samba in modalita'
- client <a class="footnote-reference" href="#id4" id="id3"
- name="id3">[2]</a></p>
- <pre class="literal-block">
+ <div class="section" id="pacchetti">
+ <h2><a class="toc-backref" href=
+ "#id63">6.1 Pacchetti</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>
+ <pre class="literal-block">
samba-client
</pre>
- <p>Pacchetti da installare per utilizzare Samba in modalita'
- server:</p>
- <pre class="literal-block">
+ <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="id4" rules=
- "none">
- <colgroup>
- <col class="label">
- <col>
- </colgroup>
+ <table class="docutils footnote" frame="void" id="id5"
+ rules="none">
+ <colgroup>
+ <col class="label">
+ <col>
+ </colgroup>
- <tbody valign="top">
- <tr>
- <td class="label"><a class="fn-backref" href=
- "#id3">[2]</a></td>
-
- <td>Anche se nato per le 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>
+ <tbody valign="top">
+ <tr>
+ <td class="label"><a class="fn-backref" href=
+ "#id4">[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>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>Se necessario per riconfigurare Samba si usi il
- comando:</p>
- <pre class="literal-block">
+ <p>Per riconfigurare Samba si usi il comando:</p>
+ <pre class="literal-block">
dpkg-reconfigure samba-common
</pre>
+ </div>
- <p>Quando si utilizza Samba bisogna tener conto di 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 autenticazione (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'utente di sistema 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 di privilegi 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>
-
- <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.a 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 stessa password 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 class="section" id="passwords-e-autenticazione">
+ <h2><a class="toc-backref" href=
+ "#id64">6.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 propieta' 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="#id20">Creazione
- Utenti</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id65">6.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
<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
+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>
-
- <blockquote>
- smbpasswd -a sambo
- </blockquote>
+ <pre class="literal-block">
+smbpasswd -a sambo
+</pre>
<p>Se successivamente si vorra' modificare la password di
un utente gia' esistente si usi:</p>
-
- <blockquote>
- smbpasswd sambo
- </blockquote>
+ <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="#id21">Creare la
+ <h2><a class="toc-backref" href=
+ "#id66">6.4 Creare la
condivisione</a></h2>
<p>La condivisione altro non e' che una cartella sul server
- che viene resa disponibile sui client negoziando l'accesso
- in base all'autenticazione tramite user-name / password. Si
- decida se fisicamente debba risiedere nella home 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 gestiscano gli accessi sotto
+ 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
# chown sambo:sambo /home/sambo/sambo_share/
</pre>
- <p>Bisognerebbe notare i permessi di esecuzione del
- file-system che ospita la cartella. 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 /mnt/share che consista in un file system
- dedicato:</p>
+ <div class="section" id=
+ "sicurezza-permessi-di-esecuzione-sul-server">
+ <h3><a class="toc-backref" href=
+ "#id67">6.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>In /etc/fstab</p>
- <pre class="literal-block">
-/dev/hda10 /mnt/share ext3 rw,nosuid,noexec 0 3
-</pre>
+ <p><tt class="docutils literal"><span class=
+ "pre">/etc/fstab</span></tt></p>
- <p>Si noti anche l'uso di <em>nosuid</em> per evitare la
- possibilita' di eseguire programmi con credenziali diverse
- da quelle originali.</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="#id22">Configurazione
+ <h2><a class="toc-backref" href=
+ "#id68">6.5 Configurazione
dell'applicativo Samba vero e proprio.</a></h2>
<p>Avendo preparato gli utenti (ancora una volta: non si
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.
</pre>
<p>Dopo aver salvato il file si puo' fare un primo
- controllo tramite l'utility testparm , che controlla la
- sintassi del file di configurazione di Samba. Se questo non
- rileva problemi si puo' procedere a un /etc/samba#
- /etc/init.d/samba restart .</p>
+ 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>
<div class="section" id="testare-il-servizio">
- <h2><a class="toc-backref" href="#id23">Testare il
- Servizio</a></h2>
+ <h2><a class="toc-backref" href=
+ "#id69">6.6 Testare il Servizio</a></h2>
<p>Come testare il servizio</p>
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 testare il corretto funzionamento:</p>
+ 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=
+ "#id70">7 Server di posta: Postfix</a></h1>
+
+ <p>Il server di posta che prenderemo in considerazione e'
+ Postfix, a seguire un estratto di un file do configurazione
+ <em>semplie</em> con l'abilizazione 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
+
+# Per effettuare lo storaggio della posta nelle home directory degli utenti
+# in una Maildir invece che la Mailbox in /var/mail/utente
+# si disabiliti procmail
+#mailbox_command = procmail -a "$EXTENSION"
+
+# Storaggio della posta nella _cartella_ Maildir/ (si noti lo slash)
+# nella home dell'utente:
+home_mailbox = Maildir/
+mailbox_size_limit = 0
+recipient_delimiter = +
+inet_interfaces = all
+</pre>
+
+ <div class="section" id="imap-e-pop">
+ <h2><a class="toc-backref" href=
+ "#id71">7.1 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 generalemtne volete mettere a loro disposizione un
+ server <em>POP3</em> o ancora meglio <em>IMAP</em>. Oppure
+ entrambi.</p>
+
+ <dl class="docutils">
+ <dt>Pacchetti da installare</dt>
+
+ <dd>courier-imap courier-pop</dd>
+ </dl>
+
+ <p>i noti che IMAP necessita delle Maildir, non funziona
+ con le Mailbox in <tt class="docutils literal"><span class=
+ "pre">/var/mail/</span></tt> .</p>
+
+ <div class="section" id="web-client">
+ <h3><a class="toc-backref" href=
+ "#id72">7.1.1 Web client</a></h3>
+
+ <p>Per mettere a disposizione degli utenti un client web
+ per gestire la propia 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. Naturalemte 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 ./
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" id="firewall">
+ <h1><a class="toc-backref" href=
+ "#id73">8 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 può anche svolgere
+ funzioni di collegamento tra due o piu' tronconi di rete.
+ Usualmente la rete viene divisa in due sottoreti: 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
+ sottorete 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 è 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 realtà un firewall può essere realizzato con un
+ normale computer (con almeno due schede di rete e software
+ apposito), può essere una funzione inclusa in un router o
+ può 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 funzionalità principale in sostanza è 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 capacità 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=
+ "#id74">8.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=
+ "#id75">8.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
+ rtichiederebbe 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>inestazioni</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=
+ "#id76">8.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=
+ "#id77">8.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=
+ "#id78">8.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=
+ "#id79">8.3.3 Hardware</a></h3>
+
+ <p>Sostanzialmente potremmo distinquere 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, efficenza,
+ 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=
+ "#id80">8.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=
+ "#id81">8.5 Concetti di base</a></h2>
+
+ <div class="section" id="tabelle-catene-regole">
+ <h3><a class="toc-backref" href=
+ "#id82">8.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 attività 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 è composta da un
+ elenco di regole (rules) che identificano pacchetti di
+ rete secono 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=
+ "#id83">8.5.2 Match</a></h3>
+
+ <p>I Match di una regola (rule) servono a testare un
+ pacchetto per valutare se corrisponda a certe
+ caratteriscttiche. 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
+ sottorete)</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=
+ "#id84">8.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 pachetto 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 è
+ 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 è una secondaria, il pacchetto torna ad
+ attraversare la catena madre da punto in cui aveva
+ fatto il salto nella secondaria. Se il RETURN è 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 è 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=
+ "#id85">8.6 Tabella Filter</a></h2>
+
+ <p>E' quella implicita e predefinita (-t filter) Riguarda
+ le attività 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=
+ "#id86">8.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 situazioe
+ precedente.</p>
+
+ <p><em>Veramnete</em>, prima di lavorare sul firewall di
+ una macchina remota inpostate 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=
+ "#id87">8.8 Gestione regole
+ (rules)</a></h2>
+
+ <p>Il comando iptables viene usato per ogni attivitÃ
+ 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=
+ "#id88">8.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> ch gestisce il firewall di
+ Linux al livello del kernel. Questo comporta, in modo
+ analogo a quando avvene col comando <tt class=
+ "docutils literal"><span class="pre">ifconfig</span></tt>,
+ che i cambiameti impostati siano in <em>tempo reale,
+ RAM</em>, non persistenti nel sistema: al boot sucessivo
+ 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
+ # Seguno 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=
+ "#id89">8.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=
+ "#id90">8.9.2 Iptables-restore</a></h3>
+
+ <p>Per ripristinare un set di regole prcedentemente
+ 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=
+ "#id91">8.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=
+ "#id92">8.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=
+ "#id93">8.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">propio_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>
+ </div>
+
+ <div class="section" id="brute-force">
+ <h3><a class="toc-backref" href=
+ "#id94">8.10.3 Brute force</a></h3>
+
+ <dl class="docutils">
+ <dt>Per limitare attacchi di tipo brute force su
+ SSH::</dt>
+
+ <dd>
+ <p class="first">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</p>
+
+ <p class="last">iptables -A INPUT -i ppp0 -p tcp -m
+ tcp --dport 22 -m state --state NEW -m recent --set
+ --name DEFAULT --rsource</p>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ </div>
+
<div class="section" id="note">
- <h1><a class="toc-backref" href="#id24">NOTE</a></h1>
+ <h1><a class="toc-backref" href=
+ "#id95">9 NOTE</a></h1>
<ul class="simple">
- <li>controllato fino alla riga 289</li>
-
- <li>definizioni degli applicativi prese direttamente da
- wikipedia</li>
+ <li>controllare apache</li>
</ul>
<p>sintassi: in <tt class="docutils literal"><span class=