<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>monkey#6 &#187; howto</title>
	<atom:link href="http://www.lghinelli.it/blog/tag/howto/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lghinelli.it/blog</link>
	<description>anca la prescia la vo e su témp</description>
	<lastBuildDate>Mon, 28 Nov 2011 13:41:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>iptables, rapida guida per chiudersi fuori da un server</title>
		<link>http://www.lghinelli.it/blog/2010/iptables-rapida-guida-per-chiudersi-fuori-da-un-server/</link>
		<comments>http://www.lghinelli.it/blog/2010/iptables-rapida-guida-per-chiudersi-fuori-da-un-server/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 15:39:26 +0000</pubDate>
		<dc:creator>lghinelli</dc:creator>
				<category><![CDATA[system administration]]></category>
		<category><![CDATA[estremamente tecnico]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sicurezza]]></category>

		<guid isPermaLink="false">http://www.lghinelli.it/blog/?p=492</guid>
		<description><![CDATA[1 2 3 iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP Fatto, vi siete chiusi fuori dal server e anche molti software ora non stanno più funzionando. Voi ( e i cattivi) non potete più entrare perchè iptables è un firewall (porta tagliafuoco) e quindi sta scartando (-j [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox"><table><tr id="p49227"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p492code27"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-j</span> DROP
iptables <span style="color: #660033;">-A</span> OUTPUT <span style="color: #660033;">-j</span> DROP
iptables <span style="color: #660033;">-A</span> FORWARD <span style="color: #660033;">-j</span> DROP</pre></td></tr></table></div>

<p>Fatto, <strong>vi siete chiusi fuori</strong> dal server e anche molti software ora non stanno più funzionando.</p>
<p>Voi ( e i cattivi) non potete più entrare perchè <span class="evidence">iptables è un firewall</span> (<a href="http://www.wordreference.com/enit/firewall">porta tagliafuoco</a>) e quindi sta scartando (<em>-j DROP</em>) <strong>tutte</strong> le richieste che arrivano al server e i software non funzionano più perchè iptables elimina anche i messaggi che passano per l&#8217;interfaccia di loopback (lo) che viene usata dai programmi per <strong>comunicare tra loro</strong>.</p>
<p>Iptables <span class="evidence">divide le sue regole in <strong>3 tabelle</strong></span> (tables), ognuna dedicata ad un utilizzo diverso:</p>
<ul>
  <lI>nat</li>
<li>mangle</li>
<li>filter</li>
</ul>
<p><span class="evidence">Ogni tabella ha delle <strong>chains</strong> (elenchi di regole) predefinite</span>.<br />
Per un <strong>utilizzo minimo</strong> ci basta la tabella <strong>mangle</strong> e 3 delle sue chains:</p>
<ul>
<li><span class="evidence"><strong>INPUT</strong></span>: dedicata hai pacchetti destinati all&#8217;<strong>host locale</strong></li>
<li><span class="evidence"><strong>OUTPUT</strong></span>: per i <strong>pacchetti uscenti</strong></li>
<li><span class="evidence"><strong>FORWARD</strong></span>: pacchetti destinati ad <strong>altri host</strong></lI>
</ul>
<p>.<br />
Naturalmente per mettere in produzione un firewall è meglio (molto meglio, essenziale) <strong>capire come funziona</strong> iptables e come i pacchetti attraversano tabelle e chains, non  mi dilungo, leggetelo <a href="http://www.linuxtopia.org/Linux_Firewall_iptables/c951.html">qui</a> o in un qualunque altro sito dell&#8217;elenco che propone google.</p>
<p>Per farla breve, comunque, un pacchetto entra in una chain e si scorre l&#8217;elenco di regole contenute dalla prima all&#8217;ultima,<strong>applicandole immediatamente</strong>.<br />
Di conseguenza un pacchetto che incontra un <em>DROP</em> viene scartato ed <strong>esce dalla chain</strong>.</p>
<p>Prima cosa da imparare: l&#8217;ordine delle regole <strong>conta</strong>.<br />
Nel cattivo esempio di cui sopra non serve a niente aggiungere altre regole, <strong>siamo fuori e ci rimarremo</strong>.</p>
<p><span class="evidence">Cancelliamo</span> quindi le regole inserite sopra.<br />
Abbiamo <span class="evidence">3 sintassi</span> possibili:</p>
<ol>
<li>Le regole non sono ancora persistenti, vanno <strong>esplicitamente salvate</strong>, quindi riavviare la macchina.<br />
    Questo ci manda a ramengo l&#8217;uptime, ma noi perfortuna non ne siamo schiavi.</li>
<li>Eliminarle <strong>tutte insieme</strong>

<div class="wp_codebox"><table><tr id="p49228"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code28"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-F</span></pre></td></tr></table></div>

</li>
<li>Cancelliamo una regola alla volta:

<div class="wp_codebox"><table><tr id="p49229"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p492code29"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-D</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>regola<span style="color: #7a0874; font-weight: bold;">&#125;</span>
iptables <span style="color: #660033;">-D</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>CHAIN<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>numero di riga<span style="color: #7a0874; font-weight: bold;">&#40;</span>partendo da <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></td></tr></table></div>

<p>    <em>iptables -D</em> si può usare inserendo il numero di riga in cui appare la regola oppure riscrivendo la regola con la sintassi usata per aggiungerla (<em>-A</em> oppure <em>-I</em>)
  </li>
</ol>
<p>Verifichiamo di esserci liberati delle regole chiedendone la lista (<em>-L</em>):</p>
<ul>
<li>una <strong>elenco semplice</strong>

<div class="wp_codebox"><table><tr id="p49230"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code30"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-L</span></pre></td></tr></table></div>

</li>
<p>  <lI>più informazioni</p>

<div class="wp_codebox"><table><tr id="p49231"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code31"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-L</span> <span style="color: #660033;">-v</span></pre></td></tr></table></div>

</li>
<li> con <strong>numeri di linea</strong> (così magari usiamo con più tranquillità l&#8217;opzione <em>-D</em>)

<div class="wp_codebox"><table><tr id="p49232"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code32"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-L</span> <span style="color: #660033;">--line-numbers</span></pre></td></tr></table></div>

</li>
</ul>
<p>A questo punto possiamo prendere il tablet (non un iPad per favore) su cui abbiamo segnato i servizi offerti e le porte che usano per iniziare ad appendere le regole.<br />
Per semplicità userò negli esempi solo le chain <em>INPUT</em> e <em>OUTPUT</em>.</p>
<p>La nostra <strong>priorità</strong> è di <span class="evidence">consentire tutto il traffico sull&#8217;interfaccia di loopback (lo)</span>, quindi:</p>

<div class="wp_codebox"><table><tr id="p49233"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p492code33"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-i</span> lo <span style="color: #660033;">-j</span> ACCEPT
iptables <span style="color: #660033;">-A</span> OUTPUT <span style="color: #660033;">-i</span> lo <span style="color: #660033;">-j</span> ACCEPT</pre></td></tr></table></div>

<p>spiegazione:</p>
<blockquote><p><strong>iptables</strong>, appendi (<strong>-A</strong>) alla chain <strong>INPUT</strong> la regola che tutti i pacchetti che passano per l&#8217;interfaccia (<strong>-i lo</strong>) sono accettati (<strong>-j ACCEPT</strong>)</p></blockquote>
<p>Al primo posto dei servizi permessi c&#8217;è sicuramente ssh quindi vogliamo che siano <span class="evidence">possibili connessioni entranti e uscenti sulla porta 22</span> (default).</p>

<div class="wp_codebox"><table><tr id="p49234"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code34"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">--dport</span> <span style="color: #000000;">22</span> <span style="color: #660033;">-j</span> ACCEPT</pre></td></tr></table></div>

<p>Questa regola dice ad iptables di accettare le connessioni entranti dirette alla porta 22.<br />
Questa regola base può (e <strong>deve</strong>) essere migliorata  con ulteriori vincoli:</p>
<ul>
<li>accettare solo uno specifico protocollo, nel caso specifico tcp

<div class="wp_codebox"><table><tr id="p49235"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code35"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">-p</span> tcp</pre></td></tr></table></div>

</li>
<li>verificare lo stato della connessione. Nel caso di connessioni entranti dobbiamo accettare sia comunicazioni nuove che già attive (<em>NEW</em> ed <em>ESTABLISHED</em>)

<div class="wp_codebox"><table><tr id="p49236"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code36"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">-m</span> state <span style="color: #660033;">--state</span> NEW,ESTABLISHED</pre></td></tr></table></div>

<p>    attenzione, non di devono essere spazi intorno alla virgola.
  </li>
<li>potremmo poi voler accettare solo le connessioni dirette ad un solo IP

<div class="wp_codebox"><table><tr id="p49237"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code37"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">-d</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>indirizzo ip<span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></td></tr></table></div>

</li>
<li>oppure consentire l&#8217;accesso solo ad uno specifico IP/rete

<div class="wp_codebox"><table><tr id="p49238"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code38"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">-s</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>indirizzo ip<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>netmask<span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></td></tr></table></div>

<p>    per lasciare libera la connessione si può non specificare nulla oppure usare</p>

<div class="wp_codebox"><table><tr id="p49239"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code39"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">-s</span> <span style="color: #000000;">0</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">0</span></pre></td></tr></table></div>

</li>
<li>eventualmente si può anche specificare da che porta deve partire la connessione affinchè sia accettata

<div class="wp_codebox"><table><tr id="p49240"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code40"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">--sport</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>numero di porta<span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></td></tr></table></div>

<p>  per consentire un intervallo</p>

<div class="wp_codebox"><table><tr id="p49241"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p492code41"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">--sport</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>porta partenza<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<span style="color: #7a0874; font-weight: bold;">&#91;</span>porta base<span style="color: #7a0874; font-weight: bold;">&#93;</span>
es.
<span style="color: #660033;">--sport</span> <span style="color: #000000;">1024</span>:<span style="color: #000000;">65535</span></pre></td></tr></table></div>

</li>
</ul>
<p><span class="evidence">Una regola <strong>ragionevolmente restrittiva</strong></span> da cui partire diventa quindi:</p>

<div class="wp_codebox"><table><tr id="p49242"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code42"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">22</span> <span style="color: #660033;">-m</span> state <span style="color: #660033;">--state</span> NEW,ESTABLISHED <span style="color: #660033;">-j</span> ACCEPT</pre></td></tr></table></div>

<p>Siccome dopo diremo al firewall di scartare tutti i pacchetti entranti e uscenti che non siano altrimenti regolati dobbiamo anche dire ad iptables cosa fare delle risposte che richiede il client ssh:</p>

<div class="wp_codebox"><table><tr id="p49243"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code43"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> OUTPUT <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">-m</span> state <span style="color: #660033;">--state</span> ESTABLISHED <span style="color: #660033;">-j</span> ACCEPT</pre></td></tr></table></div>

<p>La sintassi è identica, cambia solo la chain a cui appenderlo e non sono specificate le porte della connessione.</p>
<p>A questo punto non rimane che reiterare la logica applicata per ssh per ogni servizio a cui vogliamo consentire l&#8217;accesso.</p>
<p>Finito l&#8217;elenco dei servizi blocchiamo tutto di nuovo:</p>

<div class="wp_codebox"><table><tr id="p49244"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p492code44"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-j</span> DROP
iptables <span style="color: #660033;">-A</span> OUTPUT <span style="color: #660033;">-j</span> DROP
iptables <span style="color: #660033;">-A</span> FORWARD <span style="color: #660033;">-j</span> DROP</pre></td></tr></table></div>

<p>A questo punto un port scanner tipo <a href="http://www.nmap.org">nmap</a> vi segnalerà solo la porta ssh disponibile e l&#8217;output di <em>iptables -L</em> dovrebbe essere:</p>

<div class="wp_codebox"><table><tr id="p49245"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code" id="p492code45"><pre class="bash" style="font-family:monospace;">Chain INPUT <span style="color: #7a0874; font-weight: bold;">&#40;</span>policy ACCEPT<span style="color: #7a0874; font-weight: bold;">&#41;</span>
target     prot opt <span style="color: #7a0874; font-weight: bold;">source</span>               destination         
ACCEPT     all  <span style="color: #660033;">--</span>  anywhere             anywhere            
ACCEPT     tcp  <span style="color: #660033;">--</span>  anywhere             anywhere            tcp dpt:<span style="color: #c20cb9; font-weight: bold;">ssh</span> state NEW,ESTABLISHED 
DROP       all  <span style="color: #660033;">--</span>  anywhere             anywhere            
&nbsp;
Chain FORWARD <span style="color: #7a0874; font-weight: bold;">&#40;</span>policy ACCEPT<span style="color: #7a0874; font-weight: bold;">&#41;</span>
target     prot opt <span style="color: #7a0874; font-weight: bold;">source</span>               destination         
DROP       all  <span style="color: #660033;">--</span>  anywhere             anywhere            
&nbsp;
Chain OUTPUT <span style="color: #7a0874; font-weight: bold;">&#40;</span>policy ACCEPT<span style="color: #7a0874; font-weight: bold;">&#41;</span>
target     prot opt <span style="color: #7a0874; font-weight: bold;">source</span>               destination         
ACCEPT     all  <span style="color: #660033;">--</span>  anywhere             anywhere            
ACCEPT     tcp  <span style="color: #660033;">--</span>  anywhere             anywhere            tcp spt:<span style="color: #c20cb9; font-weight: bold;">ssh</span> dpts:<span style="color: #c20cb9; font-weight: bold;">login</span>:<span style="color: #000000;">65535</span> state ESTABLISHED 
DROP       all  <span style="color: #660033;">--</span>  anywhere             anywhere</pre></td></tr></table></div>

<p>Il parametro <em>-A</em> appende una regola <strong>in fondo</strong> alla chain selezionata, volendo inserire una regola in una posizione specifica si usa:</p>

<div class="wp_codebox"><table><tr id="p49246"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code46"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-I</span> INPUT <span style="color: #000000;">3</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>regola<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Che ci consente di appendere <em>{regola}</em> alla terza posizione della chain (sempre partendo da 1).</p>
<p>Lavorando con i firewall è purtroppo <strong>molto facile fare errori</strong> che poi richiedono di loggarsi in locale sulla macchina per essere riparati.<br />
Siccome più spesso che no il server è a qualche chilometro dalla tastiera su cui stiamo lavorando la seconda semplice precauzione da prendere è di <span class="evidence">spegnere il firewall ogni 5 minuti</span></p>

<div class="wp_codebox"><table><tr id="p49247"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p492code47"><pre class="bash" style="font-family:monospace;">crontab <span style="color: #660033;">-e</span>
  <span style="color: #000000; font-weight: bold;">*/</span><span style="color: #000000;">5</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>service iptables stop <span style="color: #7a0874; font-weight: bold;">&#40;</span>centos<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #000000; font-weight: bold;">*/</span><span style="color: #000000;">5</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>iptables stop <span style="color: #7a0874; font-weight: bold;">&#40;</span>debian-like<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #000000; font-weight: bold;">*/</span><span style="color: #000000;">5</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>iptables <span style="color: #660033;">-F</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>per tutte le stagioni<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>Ovviamente la prima precauzione da prendere è <strong>provare la configurazione</strong> sul server di test.</p>
<h2>Riassunto dei comandi</h2>
<ul>
<li>visualizzare le regole

<div class="wp_codebox"><table><tr id="p49248"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code48"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-L</span> <span style="color: #660033;">-v</span> <span style="color: #660033;">--line-number</span></pre></td></tr></table></div>

</li>
<li>eliminare tutte le regole

<div class="wp_codebox"><table><tr id="p49249"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code49"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-F</span></pre></td></tr></table></div>

</li>
<li>eliminare una regola

<div class="wp_codebox"><table><tr id="p49250"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p492code50"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-D</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>chain<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>numero regola<span style="color: #7a0874; font-weight: bold;">&#93;</span>
iptables <span style="color: #660033;">-D</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>chain<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>sintassi regola<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

</li>
<li>appendere una] regola in fondo alla chain

<div class="wp_codebox"><table><tr id="p49251"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p492code51"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-A</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>chain<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>sintassi regola<span style="color: #7a0874; font-weight: bold;">&#125;</span>
es.
iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">22</span> <span style="color: #660033;">-m</span> state <span style="color: #660033;">--state</span> NEW,ESTABLISHED <span style="color: #660033;">-j</span> ACCEPT <span style="color: #7a0874; font-weight: bold;">&#40;</span>per <span style="color: #c20cb9; font-weight: bold;">ssh</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

</li>
<li>appendere una regola in posizione specifica

<div class="wp_codebox"><table><tr id="p49252"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p492code52"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-I</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>chain<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>numero riga<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>sintassi regola<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

</li>
</ul>
<p>Iptables ha molti più parametri di così.<br />
Per un firewall sicuro ci vuole molto più studio di questo semplice tutorial, si possono creare nuove chains e modificare i pacchetti prima del routing e dopo il routing; genericamente si può gestire <strong>ogni aspetto</strong> dei flussi entranti e uscenti.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lghinelli.it/blog/2010/iptables-rapida-guida-per-chiudersi-fuori-da-un-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Al grafico non far sapere&#8230;.</title>
		<link>http://www.lghinelli.it/blog/2009/al-grafico-non-far-sapere/</link>
		<comments>http://www.lghinelli.it/blog/2009/al-grafico-non-far-sapere/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 17:03:52 +0000</pubDate>
		<dc:creator>lghinelli</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.lghinelli.it/blog/?p=142</guid>
		<description><![CDATA[..che ci sono sistemi per l&#8217;embedding dei font nelle pagine web. Sto parlando del più famoso sIFR (ora alla terza versione) di Cufon e diversi altri (tra cui il recente Typekit), script grazie ai quali si può utilizzare qualunque carattere all&#8217;interno di una pagina html. In un mondo perfetto avremmo un ottimo supporto ai caratteri [...]]]></description>
			<content:encoded><![CDATA[<p>..che ci sono sistemi per l&#8217;<strong>embedding dei font</strong> nelle pagine web.<br />
Sto parlando del più famoso <a href="http://novemberborn.net/sifr3">sIFR</a> (ora alla terza versione) di <a href="http://wiki.github.com/sorccu/cufon">Cufon</a> e diversi altri (tra cui il recente <a href="http://typekit.com/">Typekit</a>), script grazie ai quali si può utilizzare qualunque carattere all&#8217;interno di una pagina html.</p>
<p>In un mondo perfetto avremmo un ottimo supporto ai caratteri anche nei browser, ma così non è, quindi ci teniamo la nostra <strong>manciata di font sempre uguali</strong> (qualcuno ha detto verdana?) e tiriamo avanti sopravvivendo al dispiacere di non poter godere di opere come quelle che per esempio ci elenca quotidianamente <a href="http://www.typojungle.net/">typojungle</a>.<br />
Siamo costretti a questo dal fatto che ogni computer può visualizzare solo i font che ha installati.</p>
<p>Alla terribile ingiustizia che chi può si gode l&#8217;<a href="http://www.mimeartist.com/helvetica/">Helvetica</a> mentre gli altri si beccano l&#8217;Arial purtroppo non c&#8217;è rimedio (tranne flash naturalmente), ma per <strong>piccoli pezzetti di testo</strong>, tipicamente i titoli si può supplire sostituendo la scritta in html con un analogo in flash (o un&#8217;immagine).</p>
<p><strong>sIFR</strong> fa la scelta di utilizzare il javascript per sostituire l&#8217;elemento indicato e tutti i suoi figli con un filmato in flash delle stesse dimensioni (quasi).<br />
sIFR3 risulta abbastanza semplice da aggiungere ad una pagina i passi riassunti brutalmente sono solo 4:</p>
<ol>
<li>Avere il file <em>.swf</em>: non richiede quasi preparazione, infatti basta aprire il<em> .fla</em> fornito nel pacchetto, cancellare il testo, impostare il font che si vuole utilizzare e pubblicare il filmato.</li>
<li>includere nella pagina il css <strong>sifr.css</strong>:

<div class="wp_codebox"><table><tr id="p14258"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p142code58"><pre class="javascript" style="font-family:monospace;">&nbsp;</pre></td></tr></table></div>

</li>
<li>includere nella pagina i file <strong>sifr.js</strong> e <strong>sifr-confg.js</strong>:

<div class="wp_codebox"><table><tr id="p14259"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p142code59"><pre class="js" style="font-family:monospace;">&lt;script src=&quot;/path/to/sifr.js&quot; type=&quot;text/javascript&quot;&gt;&lt;!--mce:0--&gt;&lt;/script&gt;
&lt;script src=&quot;/path/to/sifr-config.js&quot; type=&quot;text/javascript&quot;&gt;&lt;!--mce:1--&gt;&lt;/script&gt;</pre></td></tr></table></div>

</li>
<li>inserire nel sifr-config.js i filmati da attivare, dove attivarli e le impostazioni da usare (color, background ed altre amenità &#8220;simil css&#8221;.<br />
Una <strong>minima configurazione</strong> comprende:</p>

<div class="wp_codebox"><table><tr id="p14260"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p142code60"><pre class="javascript" style="font-family:monospace;">var strangeFont = { src: &quot;/path/to/strangefont.swf&quot; } //il path è relativo alla pagina che carica il filmato
sIFR.activate(strangeFont); // ci deve essere un solo &quot;activate&quot; per ogni sIFR, ma è possibile la sintassi sIFR.activate(font1,font2,font3,...,fontN)
sIFR.replace(strangeFont, {selector: 'h1'}); // .className per le classi #idValue per gli id</pre></td></tr></table></div>

</li>
</ol>
<p>Probabilmente seguendo questi 4 step la pagina ora fa un po&#8217; schifo, le cose migliorano molto dopo aver scoperto che <em>sIFR.replace()</em> consente una sintassi <strong>css-like</strong> ed infatti:</p>

<div class="wp_codebox"><table><tr id="p14261"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p142code61"><pre class="javascript" style="font-family:monospace;">sIFR.replace(strangeFont, {selector:'h1', css:['.sIFR-root{color:#ff0000; font-size:10px}']}</pre></td></tr></table></div>

<p>trasforma tutti gli <em>&lt;h1&gt;</em> della pagina in un bel colore rosso puro e corpo 10. <em>Attenzione</em>, non ho scritto il codice del colore a 6 cifre in quanto masochista, ma perchè flash non riconosce l&#8217;abbreviazione a 3 cifre come fanno i css.</p>
<p>Altre cose a cui fare stare attenti:</p>
<ul>
<li>se lo sfondo non è uniforme <em>sIFR.replace()</em> ci consente l&#8217;opzione <em>transparent:true</em></li>
<li>a <em>sIFR.replace()</em> possono essere aggiunti tutti gli stili che vogliamo, quindi è perfettamente valida la sintassi <em>css['sIFR-root{...}','.class{...}']</em> purchè i selettori siano tutti figli dell&#8217;elemento da sostituire. è comunque da tenere presente che questo sistema non è perfetto e quindi utilizzarlo può far venire mal di testa ed insoddisfazione. Molto meglio è utilizzare diversi <em>sIFR.replace()</em> con i selettori ordinati dal più particolare al più generale. Per esempio

<div class="wp_codebox"><table><tr id="p14262"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p142code62"><pre class="javascript" style="font-family:monospace;">sIFR.replace('ul#main li.selected');
sIFR.replace('ul#main li');
sIFR.replace('li.selected');
sIFR.replace('li');</pre></td></tr></table></div>

<p>In questo modo si dovrebbero avere meno mal di testa, ma non è vero, <strong>solo l&#8217;esperienza fa passare questo tipo di malesseri</strong>.</li>
<li>sIFR <strong>calcola l&#8217;ingombro</strong> del filmato flash in base all&#8217;ingombro che ha l&#8217;oggetto che deve sostituire, può capitare che il js di sIFR si esegua prima che l&#8217;ingombro venga assegnato (es. Safari carica in parallelo css e js) provocando uno strano aspetto alla pagina. Per verificare che il problema sia questo basta <strong>ridimensionare la finestra del browser</strong>, se va tutto a posto la questione è proprio questa.<br />
Per risolvere questo problema bisogna applicare qualche hack che ritardi l&#8217;esecuzione del js fino al momento giusto</li>
<li><strong>evitare</strong> di sostituire i link. sIFR non può sostituire direttamente i tag <em>&lt;a&gt;</em> quindi bisogna applicarlo ad un elemento padre. A mio parere il gioco non vale la candela</li>
</ul>
<p>In conclusione sIFR è sicuramente uno script<strong> ottimamente programmato</strong> a partire da un&#8217;<strong>idea intelligente</strong>, ma a me non piace.<br />
Per quanto io sia un amante della tipografia sostituire del testo con altri oggetti non è una soluzione è un hack per aggirare il problema e come tutti gli hack <strong>non conduce ad un risultato perfetto</strong>.<br />
Naturalmente a piccole dosi può produrre un risultato ottimo, ma il confine è così sottile che la differenza tra usarlo ed abusarlo è troppo facile da superare.</p>
<p>Per quel che riguarda gli altri sistemi di embedding dei font ancora non li ho provati e tantomeno messi in produzione.<br />
Non ho intenzione di provare Cufon perchè il testo sostituito non è selezionabile (in quanto immagine) e questo mi sembra un grosso sgarbo nei confronti dell&#8217;utente.</p>
<p><a href="http://typekit.com/">Typekit</a> invece che cos&#8217;è? <a href="http://www.bradcolbow.com/archive.php/?p=86">questo di bradcolbow.com</a> è un mirabile riassunto, quello che penso io è che potrebbe essere un buon sistema, vedremo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lghinelli.it/blog/2009/al-grafico-non-far-sapere/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jquery mousewheel</title>
		<link>http://www.lghinelli.it/blog/2009/jquery-mousewheel/</link>
		<comments>http://www.lghinelli.it/blog/2009/jquery-mousewheel/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 08:28:03 +0000</pubDate>
		<dc:creator>lghinelli</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.lghinelli.it/lgolb/?p=78</guid>
		<description><![CDATA[Firefox ed Opera usano per la rotella del mouse comportamenti diametralmente opposti. Questo da fastidio al mio javascript e costringe il plugin di jquery che uso per il supporto allo scorrimento non totalmente multibrowser. Non ho nulla contro il plugin il cui funzionamento è ineccepibile, ma si basa su un parametro che varia a seconda [...]]]></description>
			<content:encoded><![CDATA[<p>Firefox ed Opera usano per la rotella del mouse comportamenti diametralmente opposti. Questo da fastidio al mio javascript e costringe il <a title="jquery plugin mousewheel" href="http://plugins.jquery.com/project/mousewheel">plugin</a> di jquery che uso per il supporto allo scorrimento non totalmente multibrowser.</p>
<p>Non ho nulla contro il plugin il cui funzionamento è ineccepibile, ma si basa su un parametro che varia a seconda del browser rendendo necessario interpretare i risultati solo dopo aver sniffato il browser del navigatore.</p>
<p><a title="jquery plugin mousewheel" href="">Mousewheel</a> infatti all&#8217;attivazione dell&#8217;evento &#8220;rotella girata&#8221; restituisce una variabile delta contenente un signed int che ci dice di quanto è stata spostata la rotella e ce ne indica il verso grazie al segno.</p>
<p>Su firefox uno spostamento della rotella verso l&#8217;utente (per me giù) è positivo ed uno spostamento nell&#8217;altro verso (su) è negativo. In opera esattamente il contrario.</p>
<p>Ho scoperto ora il problema ed aggiornerò il post con la mia soluzione (quando l&#8217;avro almeno pensata) e con altre indicazioni sul comportamento negli altri browser.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lghinelli.it/blog/2009/jquery-mousewheel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>esistenza di un elemento con jquery</title>
		<link>http://www.lghinelli.it/blog/2008/esistenza-di-un-elemento-con-jquery/</link>
		<comments>http://www.lghinelli.it/blog/2008/esistenza-di-un-elemento-con-jquery/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 11:55:58 +0000</pubDate>
		<dc:creator>lghinelli</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.lghinelli.it/lgolb/?p=42</guid>
		<description><![CDATA[la chiamata di funzione $(parameters) restituisce sempre un oggetto perchè vuol dire: &#8220;hey js dammi un oggetto di tipo jquery che eventualmente contiene parameters&#8221; Che è ben diverso da &#8220;hey js trasformami parameters in un oggetto jquery e ridammelo&#8220;. quindi se a questo codice html: &#60;div&#62;&#60;p&#62;Lorem ipsum bla bla bla&#60;/p&#62;&#60;/div&#62; applicchiamo il jqueroso: var tmp [...]]]></description>
			<content:encoded><![CDATA[<p>la chiamata di funzione $(<em>parameters</em>) restituisce <strong>sempre</strong> un oggetto perchè vuol dire:</p>
<p>&#8220;<em>hey js dammi un oggetto di tipo jquery</em> <em>che eventualmente contiene parameters</em>&#8221;</p>
<p>Che è ben diverso da &#8220;<em>hey js trasformami parameters in un oggetto jquery e ridammelo</em>&#8220;.</p>
<p>quindi se a questo codice html:</p>
<p>&lt;div&gt;&lt;p&gt;Lorem ipsum bla bla bla&lt;/p&gt;&lt;/div&gt;</p>
<p>applicchiamo il jqueroso:</p>
<p>var tmp = $(&#8216;span&#8217;);</p>
<p>l&#8217;espressione if ($tmp) {//stuffs} risulterà sempre eseguita perchè tmp è un  oggetto jquery (un array) di lunghezza nulla, quindi un sistema per rendere efficace l&#8217;espressione potrebbe essere:</p>
<p>if ($tmp.length&gt;0) {//better stuffs}</p>
<p>Ci sono tanti altri sistemi, ad esempio prima di scoprire questo effettuavo il controllo sui valori di altri attributi con $(tmp).attr(), ma questo è più compatto e funziona sempre (dovrebbe).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lghinelli.it/blog/2008/esistenza-di-un-elemento-con-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

