<?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>apache &#8211; SMsoft &#8211; informatica e dintorni</title>
	<atom:link href="https://blog.smsoft.it/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.smsoft.it</link>
	<description>consigli settimanali su MacOS, GNU/Linux ed Open Source</description>
	<lastBuildDate>Mon, 22 Jun 2026 14:13:28 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=87166</generator>
	<item>
		<title>Debian 13: come configurare al meglio Let’s Encrypt per avere un certificato HTTPS</title>
		<link>https://blog.smsoft.it/2026/03/03/debian-13-come-configurare-al-meglio-lets-encrypt/</link>
					<comments>https://blog.smsoft.it/2026/03/03/debian-13-come-configurare-al-meglio-lets-encrypt/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 03 Mar 2026 09:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[certbot]]></category>
		<category><![CDATA[Let’s Encrypt]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6974</guid>

					<description><![CDATA[Let&#8217;s Encrypt permette di generare un certificato HTTPS valido per rimuovere gli avvisi di sito &#8220;Non sicuro&#8221; del browser. Su debian viene utilizzato certbot insieme al plugin Apache python3-certbot-apache; Certbot modifica l&#8217;host virtuale di Apache, installa il certificato e configura il rinnovo automatico del certificato. Vediamo come procedere. Innanzitutto ci assicuriamo che il sistema sia ... <a title="Debian 13: come configurare al meglio Let’s Encrypt per avere un certificato HTTPS" class="read-more" href="https://blog.smsoft.it/2026/03/03/debian-13-come-configurare-al-meglio-lets-encrypt/" aria-label="Per saperne di più su Debian 13: come configurare al meglio Let’s Encrypt per avere un certificato HTTPS">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Let&#8217;s Encrypt</strong> permette di generare un certificato <strong>HTTPS</strong> valido per rimuovere gli avvisi di sito &#8220;Non sicuro&#8221; del browser. Su debian viene utilizzato <strong>certbot</strong> insieme al plugin Apache <strong>python3-certbot-apache;</strong> Certbot modifica l&#8217;host virtuale di Apache, installa il certificato e configura il rinnovo automatico del certificato. </p>



<p class="wp-block-paragraph">Vediamo come procedere. Innanzitutto ci assicuriamo che il sistema sia aggiornato:</p>



<pre class="wp-block-code"><code>apt update &amp;&amp; apt upgrade</code></pre>



<p class="wp-block-paragraph">Passiamo poi all&#8217;installazione dei pacchetti che servono:</p>



<pre class="wp-block-code"><code>apt install certbot python3-certbot-apache</code></pre>



<p class="wp-block-paragraph">Procediamo ora con l&#8217;emissione di un certificato. Innanzitutto bisogna assicurarsi che il sito sia raggiungibile sulla porta 80 e che anche la porta 443 sia aperta sul firewall, poi eseguiamo:</p>



<pre class="wp-block-code"><code>certbot --apache --agree-tos --non-interactive --no-eff-email --redirect --key-type ecdsa --email admin@example.com -d example.com</code></pre>



<p class="wp-block-paragraph">dove <strong>admin@example.com</strong> ed <strong>example.com </strong>saranno una email di riferimento ed il sito per cui generare il certificato.</p>



<p class="wp-block-paragraph">I vari flag significano:</p>



<pre class="wp-block-code"><code>--apache: Utilizza il plugin di installazione di Apache per modificare l'host virtuale corrispondente.
--agree-tos: Accetta il contratto di abbonamento di Let's Encrypt per questo account.
--non-interactive: Impedisce al comando di interrompersi in caso di richieste relative all'account o al programma di installazione.
--no-eff-email: Rifiuta la condivisione facoltativa dell'email con l'Electronic Frontier Foundation.
--redirect: Aggiunge un reindirizzamento permanente da HTTP a HTTPS nella configurazione di Apache.
--key-type ecdsa: Richiede una chiave di certificato ECDSA in modo che Debian 11, 12 e 13 utilizzino lo stesso tipo di chiave.
--email: Imposta l'indirizzo email dell'account Let's Encrypt per il rinnovo e le notifiche di sicurezza.</code></pre>



<p class="wp-block-paragraph">Se tutto è andato a buon fine possiamo procedere con la verifica del certificato:</p>



<pre class="wp-block-code"><code>certbot certificates</code></pre>



<p class="wp-block-paragraph">Se abbiamo più nomi a dominio su cui abilitare il certificato HTTPS, possiamo digitare:</p>



<pre class="wp-block-code"><code>certbot --apache --agree-tos --non-interactive --no-eff-email --redirect --key-type ecdsa --email admin@example.com -d example.com -d www.example.com -d blog.example.com</code></pre>



<p class="wp-block-paragraph">Se invece non abbiamo un elenco o vogliamo farci chiedere come gestire l&#8217;emissione del certificato, possiamo digitare semplicemente:</p>



<pre class="wp-block-code"><code>certbot --apache</code></pre>



<p class="wp-block-paragraph">a cui seguiranno una serie di domande, a partire dalla scelta dei domini per cui emettere i certificati.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">A questo punto resta solo da gestire il <strong>rinnovo automatico dei certificati</strong>. Possiamo digitare:</p>



<pre class="wp-block-code"><code>systemctl is-enabled certbot.timer<br>systemctl is-active certbot.timer</code></pre>



<p class="wp-block-paragraph">e se vogliamo fare un test di rinnovo senza effettivamente farlo, digitiamo:</p>



<pre class="wp-block-code"><code>certbot renew --dry-run</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Se vogliamo verificare che il certificato sia stato correttamente emesso e sia configurato correttamente, possiamo usare il servizio, es:</p>



<p class="wp-block-paragraph"><a href="https://www.ssllabs.com/ssltest/analyze.html?d=example.com" target="_blank" rel="noopener">https://www.ssllabs.com/ssltest/analyze.html?d=example.com</a></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Qualora sia necessario <strong>aggiungere un nuovo dominio al certificato</strong>, possiamo digitare:</p>



<pre class="wp-block-code"><code>certbot --apache</code></pre>



<p class="wp-block-paragraph">scegliere i nomi a dominio per cui generare il certificato e poi espandere (premendo il pulsante <strong>E</strong>) il certificato corrente.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/03/03/debian-13-come-configurare-al-meglio-lets-encrypt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apache/PHP e l&#8217;header Content-Length sparito</title>
		<link>https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/</link>
					<comments>https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 09:30:00 +0000</pubDate>
				<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Content-Length]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6684</guid>

					<description><![CDATA[Facendo alcuni test su degli script PHP è risultato che l&#8217;header Content-Length, seppur impostato, non veniva restituito da Apache. Dopo alcune ricerche è emerso che dalla versione 2.4.59, per gli script CGI-like (come PHP) non possono più restituire l&#8217;header Content-Length per motivi di sicurezza (rif CVE-2024-24795). Per ambienti sicuri è possibile ripristinare il precedente funzionamento ... <a title="Apache/PHP e l&#8217;header Content-Length sparito" class="read-more" href="https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/" aria-label="Per saperne di più su Apache/PHP e l&#8217;header Content-Length sparito">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Facendo alcuni test su degli script <strong>PHP</strong> è risultato che l&#8217;header <strong>Content-Length</strong>, seppur impostato, non veniva restituito da <strong>Apache</strong>.</p>



<p class="wp-block-paragraph">Dopo alcune ricerche è emerso che dalla versione 2.4.59, per gli script CGI-like (come PHP) non possono più restituire l&#8217;header <strong>Content-Length</strong> per motivi di sicurezza (rif <a href="https://www.cve.org/CVERecord?id=CVE-2024-24795" target="_blank" rel="noreferrer noopener">CVE-2024-24795</a>).</p>



<p class="wp-block-paragraph">Per ambienti sicuri è possibile ripristinare il precedente funzionamento tramite una nuova direttiva di apache chiamata <a href="https://httpd.apache.org/docs/current/env.html#cgilike" target="_blank" rel="noreferrer noopener">ap_trust_cgilike_cl</a>.</p>



<p class="wp-block-paragraph">Per impostarla, creiamo un file chiamato <strong>/etc/apache2/conf-available/fix-cgi.conf</strong> con all&#8217;interno:</p>



<pre class="wp-block-code"><code>SetEnv ap_trust_cgilike_cl 1</code></pre>



<p class="wp-block-paragraph">e poi abilitiamolo con:</p>



<pre class="wp-block-code"><code>a2enconf fix-cgi
systemctl reload apache2</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2025/03/25/apache-php-e-lheader-content-length-sparito/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apache: Abilitare/Disabilitare mod_cache per Virtual Host</title>
		<link>https://blog.smsoft.it/2024/12/10/apache-abilitare-disabilitare-mod_cache-per-virtual-host/</link>
					<comments>https://blog.smsoft.it/2024/12/10/apache-abilitare-disabilitare-mod_cache-per-virtual-host/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 10 Dec 2024 09:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_cache]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6559</guid>

					<description><![CDATA[Con il web server apache2 possibile abilitare/disabilitare la cache per le risorse statiche, questo velocizza le risposte soprattutto se la cache viene mantenuta in RAM. Per abilitare la cache basta digitare: e poi modificare il file /etc/apache2/mods-enabled/cache_disk.conf come segue: Per abilitare la cache in modo globale bisogna inserire nel file /etc/apache2/mods-enabled/cache_disk.conf la direttiva: e successivamente ... <a title="Apache: Abilitare/Disabilitare mod_cache per Virtual Host" class="read-more" href="https://blog.smsoft.it/2024/12/10/apache-abilitare-disabilitare-mod_cache-per-virtual-host/" aria-label="Per saperne di più su Apache: Abilitare/Disabilitare mod_cache per Virtual Host">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Con il web server apache2 possibile abilitare/disabilitare la cache per le risorse statiche, questo velocizza le risposte soprattutto se la cache viene mantenuta in RAM.</p>



<p class="wp-block-paragraph">Per abilitare la cache basta digitare:</p>



<pre class="wp-block-code"><code>a2enmod cache_disk</code></pre>



<p class="wp-block-paragraph">e poi modificare il file <strong>/etc/apache2/mods-enabled/cache_disk.conf</strong> come segue:</p>



<pre class="wp-block-code"><code>    CacheIgnoreNoLastMod On
    CacheIgnoreCacheControl On
    CacheLastModifiedFactor 0.5
    CacheLock on
    CacheLockPath "/tmp/mod_cache-lock"
    CacheLockMaxAge 5

    CacheHeader on
    CacheDefaultExpire 180

    CacheDisable /server-status

    CacheRoot /var/cache/apache2/mod_cache_disk
    # CacheEnable disk /  # &lt;-- importante, leggi dopo....
    CacheDirLevels 2
    CacheDirLength 1</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Per abilitare la cache in modo globale bisogna inserire nel file <strong>/etc/apache2/mods-enabled/cache_disk.conf</strong> la direttiva:</p>



<pre class="wp-block-code"><code>CacheEnable disk /</code></pre>



<p class="wp-block-paragraph">e successivamente si potrà disabilitare la cache per singolo virtual host inserendo, nel file di configurazione dello stesso, la direttiva:</p>



<pre class="wp-block-code"><code>CacheDisable "/" </code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Se invece preferiamo lavorare al contrario, bisogna <strong>commentare</strong> nel file <strong>/etc/apache2/mods-enabled/cache_disk.conf</strong> la direttiva:</p>



<pre class="wp-block-code"><code># CacheEnable disk /</code></pre>



<p class="wp-block-paragraph">e poi abilitare manualmente la cache per singolo virtual host inserendo, nel file di configurazione dello stesso, la direttiva:</p>



<pre class="wp-block-code"><code>CacheEnable disk /</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/12/10/apache-abilitare-disabilitare-mod_cache-per-virtual-host/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Angular: codice di rewrite per Apache</title>
		<link>https://blog.smsoft.it/2024/07/16/angular-codice-di-rewrite-per-apache/</link>
					<comments>https://blog.smsoft.it/2024/07/16/angular-codice-di-rewrite-per-apache/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 16 Jul 2024 08:30:00 +0000</pubDate>
				<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[rewrite]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6376</guid>

					<description><![CDATA[Le applicazioni scritte in angular hanno l&#8217;entry point nel file index.html che poi gestisce anche il routing per le pagine interne. Dopo un po&#8217; di prove, questo il codice di rewrite che meglio funziona per gestire il redirect su Apache: enjoy!]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Le applicazioni scritte in angular hanno l&#8217;entry point nel file index.html che poi gestisce anche il routing per le pagine interne. Dopo un po&#8217; di prove, questo il codice di rewrite che meglio funziona per gestire il redirect su Apache:</p>



<pre class="wp-block-code"><code>      DirectoryIndex index.html
      ErrorDocument 404 /index.html
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.html$ - &#91;L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.html &#91;L,R=301]</code></pre>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2024/07/16/angular-codice-di-rewrite-per-apache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>apachectl status: 113: www-browser: not found</title>
		<link>https://blog.smsoft.it/2023/08/08/apachectl-status-113-www-browser-not-found/</link>
					<comments>https://blog.smsoft.it/2023/08/08/apachectl-status-113-www-browser-not-found/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 08 Aug 2023 08:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apachectl]]></category>
		<category><![CDATA[fullstatus]]></category>
		<category><![CDATA[status]]></category>
		<category><![CDATA[w3m]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=6029</guid>

					<description><![CDATA[Se provando a recuperare lo status di apache da CLI viene fuori questo messaggio: /usr/sbin/apachectl: 113: www-browser: not found 'www-browser -dump http://localhost:80/server-status' failed. Maybe you need to install a package providing www-browser or you need to adjust the APACHE_LYNX variable in /etc/apache2/envvars significa che manca un browser testuale per poter visualizzare i dati prodotti dal ... <a title="apachectl status: 113: www-browser: not found" class="read-more" href="https://blog.smsoft.it/2023/08/08/apachectl-status-113-www-browser-not-found/" aria-label="Per saperne di più su apachectl status: 113: www-browser: not found">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Se provando a recuperare lo status di apache da CLI viene fuori questo messaggio:</p>



<pre class="wp-block-preformatted">/usr/sbin/apachectl: 113: www-browser: not found
'www-browser -dump http://localhost:80/server-status' failed.
Maybe you need to install a package providing www-browser or you
need to adjust the APACHE_LYNX variable in /etc/apache2/envvars</pre>



<p class="wp-block-paragraph">significa che manca un browser testuale per poter visualizzare i dati prodotti dal comando.</p>



<p class="wp-block-paragraph">Installiamo un browser testuale (preferisco w3m perché ha qualche funzionalità in più del classico lynx)</p>



<pre class="wp-block-code"><code>apt install w3m</code></pre>



<p class="wp-block-paragraph">Bene, ora riproviamo con:</p>



<pre class="wp-block-code"><code>apachectl status</code></pre>



<p class="wp-block-paragraph">oppure</p>



<pre class="wp-block-code"><code>apachectl fullstatus</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2023/08/08/apachectl-status-113-www-browser-not-found/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Impostare il corretto locale per PHP</title>
		<link>https://blog.smsoft.it/2023/05/23/impostare-il-corretto-locale-per-php/</link>
					<comments>https://blog.smsoft.it/2023/05/23/impostare-il-corretto-locale-per-php/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 23 May 2023 08:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Html e PHP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[locale]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=5932</guid>

					<description><![CDATA[Il &#8220;locale&#8221; serve per definire la lingua da utilizzare per le varie funzionalità di sistema. Su Debian è possibile abilitare/disabilitare/rendere di default una lingua tramite dpkg-reconfigure: dpkg-reconfigure locales Tramite l&#8217;interfaccia curses mostrata, sarà possibile abilitare/disabilitare le lingue da usare e poi definire quella di default. Solitamente per la ligua italiana si sceglie it_IT.UTF-8. Dopo aver ... <a title="Impostare il corretto locale per PHP" class="read-more" href="https://blog.smsoft.it/2023/05/23/impostare-il-corretto-locale-per-php/" aria-label="Per saperne di più su Impostare il corretto locale per PHP">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Il &#8220;locale&#8221; serve per definire la lingua da utilizzare per le varie funzionalità di sistema.</p>



<p class="wp-block-paragraph">Su <strong>Debian</strong> è possibile abilitare/disabilitare/rendere di default una lingua tramite dpkg-reconfigure:</p>



<pre class="wp-block-preformatted">dpkg-reconfigure locales</pre>



<p class="wp-block-paragraph">Tramite l&#8217;interfaccia curses mostrata, sarà possibile abilitare/disabilitare le lingue da usare e poi definire quella di default.</p>



<p class="wp-block-paragraph">Solitamente per la ligua italiana si sceglie <strong>it_IT.UTF-8</strong>.</p>



<p class="wp-block-paragraph">Dopo aver fatto questo, sarà possibile inserire all&#8217;inizio del nostro script PHP la riga:</p>



<pre class="wp-block-code"><code>setlocale(LC_TIME, 'it_IT.utf8');</code></pre>



<p class="wp-block-paragraph">e poi stampare le date in italiano, es:</p>



<pre class="wp-block-code"><code>echo strftime("%a %d %b %Y");</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2023/05/23/impostare-il-corretto-locale-per-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fail2ban e proxy: integrazione con htaccess per bloccare IP tramite apache</title>
		<link>https://blog.smsoft.it/2022/11/22/fail2ban-e-proxy-integrazione-con-htaccess-per-bloccare-ip-tramite-apache/</link>
					<comments>https://blog.smsoft.it/2022/11/22/fail2ban-e-proxy-integrazione-con-htaccess-per-bloccare-ip-tramite-apache/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 22 Nov 2022 09:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[fail2ban]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=5692</guid>

					<description><![CDATA[Se il nostro server web si trova dietro un proxy, è possibile che l&#8217;IP sorgente non sia quello reale del visitatore finale, ma sia quello del proxy e quindi avremo l&#8217;IP reale in qualche header tipo X-Forwarded-For; intanto potremo configurare apache per loggare l&#8217;IP in modo corretto, usando il modulo remoteip o rpaf in modo ... <a title="Fail2ban e proxy: integrazione con htaccess per bloccare IP tramite apache" class="read-more" href="https://blog.smsoft.it/2022/11/22/fail2ban-e-proxy-integrazione-con-htaccess-per-bloccare-ip-tramite-apache/" aria-label="Per saperne di più su Fail2ban e proxy: integrazione con htaccess per bloccare IP tramite apache">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Se il nostro server web si trova dietro un <strong>proxy</strong>, è possibile che l&#8217;IP sorgente non sia quello reale del visitatore finale, ma sia quello del proxy e quindi avremo l&#8217;IP reale in qualche header tipo  <strong>X-Forwarded-For</strong>; intanto potremo configurare apache per loggare l&#8217;IP in modo corretto, usando il modulo <strong>remoteip</strong> o <strong>rpaf</strong> in modo da avere nei log di accesso il corretto IP del visitatore finale, ma se volessimo bloccare tale IP con file2ban non sarebbe possibile direttamente, perché ricordo che l&#8217;IP sorgente delle richieste non è quello del visitatore finale, bensì quello del proxy.</p>



<p class="wp-block-paragraph">In questo caso possiamo limitare i danni (nel senso di bloccare le richieste per taluni IP), creando una regola nel file <strong>.htaccess</strong> posizionato nella nostra <strong>webroot</strong> che vada a bloccare le richieste se l&#8217;IP viene identificato da qualche regola di <strong>fail2ban</strong>.</p>



<p class="wp-block-paragraph">Ipotizziamo che la webroot sia <strong>/var/www/web1/htdocs</strong>  e che vogliamo usare la cartella <strong>blockedip</strong> per contenere i riferimenti per gli IP bloccati.</p>



<p class="wp-block-paragraph">Scriviamo all&#8217;inizio del nel nostro file <strong>.htaccess</strong> le seguenti direttive (le prime due righe non servono ma le lascio perché a qualcuno possono essere utili per farci altro):</p>



<pre class="wp-block-code"><code>RewriteCond %{DOCUMENT_ROOT}/blockedip/%{REMOTE_ADDR} -f
RewriteRule . - F]
RewriteCond %{DOCUMENT_ROOT}/blockedip/%{HTTP:X-FORWARDED-FOR} -f
RewriteRule . - F]</code></pre>



<p class="wp-block-paragraph">Dopo aver fatto la classica configurazione di <strong>fail2ban</strong> in coppia con <strong>nftables</strong>, bisognerà aprire il file <strong>/etc/fail2ban/action.d/nftables.conf</strong> e scrivere, sotto la direttiva <strong>actionban</strong>, la riga:</p>



<pre class="wp-block-code"><code>touch /var/www/web1/htdocs/blockedip/&lt;ip&gt;</code></pre>



<p class="wp-block-paragraph">e sotto la direttiva <strong>actionunban</strong>, la riga:</p>



<pre class="wp-block-code"><code>rm /var/www/web1/htdocs/blockedip/&lt;ip&gt;</code></pre>



<p class="wp-block-paragraph">Bene, ora riavviamo <strong>fail2ban</strong> e non appena ci saranno IP bloccati, li troverete riepilogati nella cartella <strong>/var/www/web1/htdocs</strong> e la regola di rewrite nel file <strong>.htaccess</strong> provvederà a bloccare le richieste per tali IP.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2022/11/22/fail2ban-e-proxy-integrazione-con-htaccess-per-bloccare-ip-tramite-apache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apache Log: quante volte è stato scaricato un file</title>
		<link>https://blog.smsoft.it/2022/06/07/apache-log-quante-volte-e-stato-scaricato-un-file/</link>
					<comments>https://blog.smsoft.it/2022/06/07/apache-log-quante-volte-e-stato-scaricato-un-file/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 07 Jun 2022 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Logs]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=5535</guid>

					<description><![CDATA[Il nostro file access.log contiene tutti i dati di accesso effettuati ai contenuti del virtualhost. Se volessimo sapere quante volte è stato scaricato un file chiamato pippo.pdf, possiamo eseguire il seguente comando: zgrep -e "pippo.pdf" /var/log/apache2/access.log* &#124;grep ' 200 ' &#124;grep 'GET /' &#124; awk -F\: '{print $2}' &#124; awk -F[ '{print $2}' &#124; sed ... <a title="Apache Log: quante volte è stato scaricato un file" class="read-more" href="https://blog.smsoft.it/2022/06/07/apache-log-quante-volte-e-stato-scaricato-un-file/" aria-label="Per saperne di più su Apache Log: quante volte è stato scaricato un file">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Il nostro file <strong>access.log</strong> contiene tutti i dati di accesso effettuati ai contenuti del virtualhost. Se volessimo sapere quante volte è stato scaricato un file chiamato <strong>pippo.pdf</strong>, possiamo eseguire il seguente comando:</p>



<pre class="wp-block-preformatted">zgrep -e "pippo.pdf" /var/log/apache2/access.log* |grep ' 200 ' |grep 'GET /' | awk -F\: '{print $2}' | awk -F[ '{print $2}' | sed "s/\//\ /g" | date -f - +%Y%m%d | sort | uniq -c</pre>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2022/06/07/apache-log-quante-volte-e-stato-scaricato-un-file/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apache: Come verificare se alle richieste viene risposto con dati in cache</title>
		<link>https://blog.smsoft.it/2022/01/04/apache-come-verificare-se-alle-richieste-viene-risposto-con-dati-in-cache/</link>
					<comments>https://blog.smsoft.it/2022/01/04/apache-come-verificare-se-alle-richieste-viene-risposto-con-dati-in-cache/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 04 Jan 2022 09:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cache hit]]></category>
		<category><![CDATA[cache_disk]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=5279</guid>

					<description><![CDATA[Dopo aver abilitato il modulo di caching di Apache per servire copia in cache alle richieste, piuttosto che ripetere continuamente le richieste, è possibile capire dal file di log di Apache se alla pagina richiamata viene risposto con informazioni in cache o meno. Per fare questo bisogna modificare le stringhe di LogFormat che trovate in ... <a title="Apache: Come verificare se alle richieste viene risposto con dati in cache" class="read-more" href="https://blog.smsoft.it/2022/01/04/apache-come-verificare-se-alle-richieste-viene-risposto-con-dati-in-cache/" aria-label="Per saperne di più su Apache: Come verificare se alle richieste viene risposto con dati in cache">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Dopo aver abilitato il modulo di <strong>caching di Apache</strong> per servire copia in cache alle richieste, piuttosto che ripetere continuamente le richieste, è possibile capire dal file di log di Apache se alla pagina richiamata viene risposto con informazioni in cache o meno.</p>



<p class="wp-block-paragraph">Per fare questo bisogna modificare le stringhe di <strong>LogFormat</strong> che trovate in <strong>/etc/apache/apache.conf</strong> (su Debian), aggiungendo alla fine il parametro <strong>%{cache-status}e</strong>, ovvero avere qualcosa di questo tipo:</p>



<pre class="wp-block-preformatted">LogFormat "%v:%p %h %l %u %t \"%r\" %&gt;s %O \"%{Referer}i\" \"%{User-Agent}i\" %{cache-status}e" vhost_combined<br>LogFormat "%h %l %u %t \"%r\" %&gt;s %O \"%{Referer}i\" \"%{User-Agent}i\" %{cache-status}e" combined<br>LogFormat "%h %l %u %t \"%r\" %&gt;s %O %{cache-status}e" common</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Fatto questo, dopo aver riavviato Apache, se andremo a controllare i logs, noteremo al termine di ogni riga un nuovo parametro che potrà indicarci con &#8220;<strong>cache hit</strong> che la pagina è stata servita con contenuti in cache oppure con altra informazione utile a capire se il contenuti verrà messo in cache oppure è escluso dal salvataggio in cache per qualche motivo.</p>



<p class="wp-block-paragraph"><strong>Nota:</strong> piccola nota finale, cosa che spesso mi chiedono. Ma se volessi escludere un file php dalla cache? </p>



<p class="wp-block-paragraph">E&#8217; possibile farlo in due modi, indicando l&#8217;url da escludere nel file /etc/apache2/mods-enabled/cache_disk.conf, es:</p>



<pre class="wp-block-preformatted">CacheDisable /import.php</pre>



<p class="wp-block-paragraph">oppure inserendo come header del file qualcosa di questo tipo:</p>



<pre class="wp-block-code"><code>header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2022/01/04/apache-come-verificare-se-alle-richieste-viene-risposto-con-dati-in-cache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>HTTPS, migliore impostazione per apache o nginx</title>
		<link>https://blog.smsoft.it/2021/11/09/https-migliore-impostazione-per-apache-o-nginx/</link>
					<comments>https://blog.smsoft.it/2021/11/09/https-migliore-impostazione-per-apache-o-nginx/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 09 Nov 2021 09:30:00 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[tls]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=5193</guid>

					<description><![CDATA[Ormai l&#8217;uso di un certificato HTTPS per il proprio sito web è diventata una funzionalità di base, i browser invogliano i visitatori a navigare solo su siti protetti da certificati HTTPS. Per l&#8217;installazione possiamo affidarci a let&#8217;s encrypt oppure a qualcuna delle azienda commerciali più note. Oggi volevo però parlarvi della configurazione e non dell&#8217;installazione. ... <a title="HTTPS, migliore impostazione per apache o nginx" class="read-more" href="https://blog.smsoft.it/2021/11/09/https-migliore-impostazione-per-apache-o-nginx/" aria-label="Per saperne di più su HTTPS, migliore impostazione per apache o nginx">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ormai l&#8217;uso di un certificato HTTPS per il proprio sito web è diventata una funzionalità di base, i browser invogliano i visitatori a navigare solo su siti protetti da certificati HTTPS.</p>



<p class="wp-block-paragraph">Per l&#8217;installazione possiamo affidarci a let&#8217;s encrypt oppure a qualcuna delle azienda commerciali più note.</p>



<p class="wp-block-paragraph">Oggi volevo però parlarvi della configurazione e non dell&#8217;installazione. Una volta installato il certificato, se non ben configurato, si avranno comunque potenziali problemi di sicurezza.</p>



<p class="wp-block-paragraph">Innanzitutto consiglio <a href="https://www.ssllabs.com/ssltest/analyze.html" target="_blank" rel="noreferrer noopener">https://www.ssllabs.com/ssltest/analyze.html</a> per verificare la situazione del certificato HTTPS del proprio sito.</p>



<p class="wp-block-paragraph">Per quanto riguarda invece la configurazione, consiglio di dare un&#8217;occhiata a <a rel="noreferrer noopener" href="https://ssl-config.mozilla.org/" target="_blank">https://ssl-config.mozilla.org/</a>. Dal portale si sceglie il tipo di server web, quanto la configurazione deve essere compatibile con i vecchi browser e si possono specificare la versione di server web e di openssl.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2021/11/09/https-migliore-impostazione-per-apache-o-nginx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
