<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://kerlinux.org/w/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://kerlinux.org/w/index.php?feed=atom&amp;target=SLiX&amp;title=Sp%C3%A9cial%3AContributions%2FSLiX</id>
		<title>Wiki - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="http://kerlinux.org/w/index.php?feed=atom&amp;target=SLiX&amp;title=Sp%C3%A9cial%3AContributions%2FSLiX"/>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Sp%C3%A9cial:Contributions/SLiX"/>
		<updated>2026-04-14T12:12:45Z</updated>
		<subtitle>De Wiki.</subtitle>
		<generator>MediaWiki 1.16.0</generator>

	<entry>
		<id>http://kerlinux.org/wiki/Ampache</id>
		<title>Ampache</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Ampache"/>
				<updated>2014-06-13T10:04:08Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Requêtes SQL utiles==&lt;br /&gt;
&lt;br /&gt;
Quelques requêtes SQL pratiques pour automatiser la génération de rapports.&lt;br /&gt;
&lt;br /&gt;
===Liste des albums===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select from_unixtime(s.addition_time) AS Date,&lt;br /&gt;
       s.year, concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album,&lt;br /&gt;
       GROUP_CONCAT(DISTINCT ar.name) As Artiste&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
group by al.name&lt;br /&gt;
order by al.name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste des derniers albums===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select DATE_FORMAT(FROM_UNIXTIME(s.addition_time), '%d/%m/%Y'),&lt;br /&gt;
       GROUP_CONCAT(DISTINCT concat(IFNULL(concat(ar.prefix, ' '), ''), ar.name)) As Artiste,&lt;br /&gt;
       s.year as Annee,&lt;br /&gt;
       /* ou concat('- ', s.year, ' -') as Annee, */&lt;br /&gt;
       concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
group by al.name&lt;br /&gt;
order by s.addition_time desc&lt;br /&gt;
limit 50;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste des albums sans pochette===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album,&lt;br /&gt;
       GROUP_CONCAT(DISTINCT ar.name) As Artiste,&lt;br /&gt;
	   s.year&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
left join album_data ad on al.id=ad.album_id&lt;br /&gt;
where ad.album_id is NULL&lt;br /&gt;
group by al.name&lt;br /&gt;
order by al.name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Amélioration ==&lt;br /&gt;
&lt;br /&gt;
=== Longueur des chemins de fichiers ===&lt;br /&gt;
&lt;br /&gt;
Pour permettre la prise en compte des fichiers dont le chemin complet dépasse 255 caractères, il est nécessaire de changer le type de champs dans la base de données (varchar(255) -&amp;gt; text), testé sur la version 3.5.4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
drop index file on song;&lt;br /&gt;
alter table song modify file text CHARACTER SET utf8;&lt;br /&gt;
create index file on song (file(10));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Ampache</id>
		<title>Ampache</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Ampache"/>
				<updated>2014-06-13T09:26:59Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Bug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Requêtes SQL utiles==&lt;br /&gt;
&lt;br /&gt;
Quelques requêtes SQL pratiques pour automatiser la génération de rapports.&lt;br /&gt;
&lt;br /&gt;
===Liste des albums===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select from_unixtime(s.addition_time) AS Date,&lt;br /&gt;
       s.year, concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album,&lt;br /&gt;
       GROUP_CONCAT(DISTINCT ar.name) As Artiste&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
group by al.name&lt;br /&gt;
order by al.name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste des derniers albums===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select DATE_FORMAT(FROM_UNIXTIME(s.addition_time), '%d/%m/%Y'),&lt;br /&gt;
       GROUP_CONCAT(DISTINCT concat(IFNULL(concat(ar.prefix, ' '), ''), ar.name)) As Artiste,&lt;br /&gt;
       s.year as Annee,&lt;br /&gt;
       /* ou concat('- ', s.year, ' -') as Annee, */&lt;br /&gt;
       concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
group by al.name&lt;br /&gt;
order by s.addition_time desc&lt;br /&gt;
limit 50;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste des albums sans pochette===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album,&lt;br /&gt;
       GROUP_CONCAT(DISTINCT ar.name) As Artiste,&lt;br /&gt;
	   s.year&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
left join album_data ad on al.id=ad.album_id&lt;br /&gt;
where ad.album_id is NULL&lt;br /&gt;
group by al.name&lt;br /&gt;
order by al.name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Amélioration ==&lt;br /&gt;
&lt;br /&gt;
=== Longueur des chemins de fichiers ===&lt;br /&gt;
&lt;br /&gt;
Pour permettre la prise en compte des fichiers dont le chemin complet dépasse 255 caractères, il est nécessaire de changer le type de champs dans la base de données (varchar(255) -&amp;gt; text), testé sur la version 3.5.4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
drop index file on song;&lt;br /&gt;
alter table song modify file text CHARACTER SET utf8;&lt;br /&gt;
create index file on song (file(10));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
=== Mise à jour 3.6 build #14 ===&lt;br /&gt;
&lt;br /&gt;
Si la mise à jour de la base de données ne fonctionne pas entre les version 3.6 build #13 et 3.6 build #14, il faut modifier la base de la façon suivante, puis relancer la mise à jour:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE `session` CHANGE `id` `id` VARCHAR(255) NOT NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Ampache</id>
		<title>Ampache</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Ampache"/>
				<updated>2014-06-13T09:26:49Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Requêtes SQL utiles==&lt;br /&gt;
&lt;br /&gt;
Quelques requêtes SQL pratiques pour automatiser la génération de rapports.&lt;br /&gt;
&lt;br /&gt;
===Liste des albums===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select from_unixtime(s.addition_time) AS Date,&lt;br /&gt;
       s.year, concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album,&lt;br /&gt;
       GROUP_CONCAT(DISTINCT ar.name) As Artiste&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
group by al.name&lt;br /&gt;
order by al.name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste des derniers albums===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select DATE_FORMAT(FROM_UNIXTIME(s.addition_time), '%d/%m/%Y'),&lt;br /&gt;
       GROUP_CONCAT(DISTINCT concat(IFNULL(concat(ar.prefix, ' '), ''), ar.name)) As Artiste,&lt;br /&gt;
       s.year as Annee,&lt;br /&gt;
       /* ou concat('- ', s.year, ' -') as Annee, */&lt;br /&gt;
       concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
group by al.name&lt;br /&gt;
order by s.addition_time desc&lt;br /&gt;
limit 50;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste des albums sans pochette===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;select concat(IFNULL(concat(al.prefix, ' '), ''), al.name) AS Album,&lt;br /&gt;
       GROUP_CONCAT(DISTINCT ar.name) As Artiste,&lt;br /&gt;
	   s.year&lt;br /&gt;
from album al&lt;br /&gt;
join song s on s.album=al.id&lt;br /&gt;
join artist ar on s.artist=ar.id and al.name != 'Unknown (Orphaned)'&lt;br /&gt;
left join album_data ad on al.id=ad.album_id&lt;br /&gt;
where ad.album_id is NULL&lt;br /&gt;
group by al.name&lt;br /&gt;
order by al.name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Amélioration ==&lt;br /&gt;
&lt;br /&gt;
=== Longueur des chemins de fichiers ===&lt;br /&gt;
&lt;br /&gt;
Pour permettre la prise en compte des fichiers dont le chemin complet dépasse 255 caractères, il est nécessaire de changer le type de champs dans la base de données (varchar(255) -&amp;gt; text), testé sur la version 3.5.4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
drop index file on song;&lt;br /&gt;
alter table song modify file text CHARACTER SET utf8;&lt;br /&gt;
create index file on song (file(10));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bug ==&lt;br /&gt;
&lt;br /&gt;
=== Mise à jour 3.6 build #14 ===&lt;br /&gt;
&lt;br /&gt;
Si la mise à jour de la base de données ne fonctionne pas entre les version 3.6 build #13 et 3.6 build #14, il faut modifier la base de la façon suivante, puis relancer la mise à jour:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE `session` CHANGE `id` `id` VARCHAR(255) NOT NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-05-16T12:53:35Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress login avec authentification HTTP ====&lt;br /&gt;
&lt;br /&gt;
Si vous protégez /wp-admin et /wp-login.php avec en plus de l'authentification HTTP, il est possible d'identifier au premier essai les tentatives automatisées car celles-ci vont produirent un code 401 avecméthode POST:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+401\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-05-16T12:53:21Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress login derrière authentification HTTP ====&lt;br /&gt;
&lt;br /&gt;
Si vous protégez /wp-admin et /wp-login.php avec en plus de l'authentification HTTP, il est possible d'identifier au premier essai les tentatives automatisées car celles-ci vont produirent un code 401 avecméthode POST:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+401\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Tmux</id>
		<title>Tmux</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Tmux"/>
				<updated>2013-05-16T12:49:30Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : A protégé « Tmux » ([edit=sysop] (infini) [move=sysop] (infini)) [protection en cascade]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://tmux.sourceforge.net/ Tmux] est un multiplexeur de terminal. Il permet de découper un terminal en plusieurs sessions de travail avec des fenêtres et panneaux, tout en permettant de les détacher. C'est une sorte de super [http://www.gnu.org/software/screen/ Screen]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Quelques éléments de configuration, à mettre dans ~/.tmux.conf&lt;br /&gt;
&lt;br /&gt;
=== Couleurs des bordures ===&lt;br /&gt;
Pour que toutes les bordures soient vertes, et que celle du panneau actif soit épaisse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set pane divider&lt;br /&gt;
#set -g pane-border-bg black&lt;br /&gt;
set -g pane-border-fg green&lt;br /&gt;
set -g pane-active-border-bg green&lt;br /&gt;
set -g pane-active-border-fg green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-05-16T12:48:42Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : A protégé « Varnish » ([edit=sysop] (infini) [move=sysop] (infini)) [protection en cascade]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site avec vlogger ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''':&lt;br /&gt;
&lt;br /&gt;
 # vi /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
* Il ne reste plus qu'à consulter les logs dans les sous-répertoires de /var/log/varnish !&lt;br /&gt;
&lt;br /&gt;
== Commandes utiles ==&lt;br /&gt;
&lt;br /&gt;
=== varnishlog ===&lt;br /&gt;
&lt;br /&gt;
* Afficher les URLs &amp;quot;backend&amp;quot; et &amp;quot;client&amp;quot; en temps réél:&lt;br /&gt;
 $ varnishlog | awk '/xURL/ { url=$4 } /Host: / { printf(&amp;quot;%s http://%s%s\n&amp;quot;, $3, $5, url); }'&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-04-10T15:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* varnishlog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site avec vlogger ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''':&lt;br /&gt;
&lt;br /&gt;
 # vi /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
* Il ne reste plus qu'à consulter les logs dans les sous-répertoires de /var/log/varnish !&lt;br /&gt;
&lt;br /&gt;
== Commandes utiles ==&lt;br /&gt;
&lt;br /&gt;
=== varnishlog ===&lt;br /&gt;
&lt;br /&gt;
* Afficher les URLs &amp;quot;backend&amp;quot; et &amp;quot;client&amp;quot; en temps réél:&lt;br /&gt;
 $ varnishlog | awk '/xURL/ { url=$4 } /Host: / { printf(&amp;quot;%s http://%s%s\n&amp;quot;, $3, $5, url); }'&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-04-10T15:22:13Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* varnishlog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site avec vlogger ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''':&lt;br /&gt;
&lt;br /&gt;
 # vi /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
* Il ne reste plus qu'à consulter les logs dans les sous-répertoires de /var/log/varnish !&lt;br /&gt;
&lt;br /&gt;
== Commandes utiles ==&lt;br /&gt;
&lt;br /&gt;
=== varnishlog ===&lt;br /&gt;
&lt;br /&gt;
* Afficher les URLs &amp;quot;backend&amp;quot; et &amp;quot;client&amp;quot; en temps réél:&lt;br /&gt;
 $ varnishlog | awk '/xURL/ { url=$NF } /Host: / { printf(&amp;quot;%s http://%s%s\n&amp;quot;, $3, $5, url); }'&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-04-10T15:22:05Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site avec vlogger ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''':&lt;br /&gt;
&lt;br /&gt;
 # vi /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
* Il ne reste plus qu'à consulter les logs dans les sous-répertoires de /var/log/varnish !&lt;br /&gt;
&lt;br /&gt;
== Commandes utiles ==&lt;br /&gt;
&lt;br /&gt;
=== varnishlog ===&lt;br /&gt;
&lt;br /&gt;
* Afficher les URLs &amp;quot;backend&amp;quot; et &amp;quot;client&amp;quot; en temps réél:&lt;br /&gt;
$ varnishlog | awk '/xURL/ { url=$NF } /Host: / { printf(&amp;quot;%s http://%s%s\n&amp;quot;, $3, $5, url); }'&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-19T11:00:46Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Varnishncsa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site avec vlogger ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''':&lt;br /&gt;
&lt;br /&gt;
 # vi /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
* Il ne reste plus qu'à consulter les logs dans les sous-répertoires de /var/log/varnish !&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-19T10:59:09Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Séparer les logs par site */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''':&lt;br /&gt;
&lt;br /&gt;
 # vi /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # chmod 755 /usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
* Il ne reste plus qu'à consulter les logs dans les sous-répertoires de /var/log/varnish !&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-19T10:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Séparer les logs par site */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''' contenant le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
* Il ne reste plus qu'à consulter les logs dans les sous-répertoires de /var/log/varnish !&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-19T10:56:36Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Varnishd ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varnishncsa ==&lt;br /&gt;
&lt;br /&gt;
=== Séparer les logs par site ===&lt;br /&gt;
&lt;br /&gt;
Voici une méthode permettant de générer un fichier de logs par site à partir d'un seul démon ''varnishncsa'' grâce à ''vlogger'':&lt;br /&gt;
&lt;br /&gt;
* Installer vlogger (exemple Debian et compagnie):&lt;br /&gt;
 # apt-get install vlogger&lt;br /&gt;
&lt;br /&gt;
* Modifier le format de log afin d'avoir le contenu de l'en-tête ''Host'' en début de ligne:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/init.d/varnishncsa''':&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \&lt;br /&gt;
devient&lt;br /&gt;
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \&lt;br /&gt;
     --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} -F &amp;quot;${LOG_FORMAT}&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/default/varnishncsa''', ajouter:&lt;br /&gt;
 LOG_FORMAT=&amp;quot;%{Host}i %h %l %u %t \&amp;quot;%m %U%q %H\&amp;quot; %s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Puis redémarrer le service ''varnishncsa'':&lt;br /&gt;
 # service varnishncsa restart&lt;br /&gt;
&lt;br /&gt;
* Créer un script '''/usr/local/sbin/varnishncsa_vlogger.sh''' contenant le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TAIL=&amp;quot;tail -F -n0 /var/log/varnish/varnishncsa.log&amp;quot;&lt;br /&gt;
VLOGGER=&amp;quot;vlogger -u varnishlog -g varnishlog -a -t access-%Y-%m-%d.log -s access.log /var/log/varnish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
exec $TAIL | ( $VLOGGER; pkill -P $$ )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Activer ce script via ''init'':&lt;br /&gt;
Dans '''/etc/inittab''', ajouter à la fin:&lt;br /&gt;
 vl:23:respawn:/usr/local/sbin/varnishncsa_vlogger.sh&lt;br /&gt;
&lt;br /&gt;
Recharger ''init'':&lt;br /&gt;
 # init q&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Tmux</id>
		<title>Tmux</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Tmux"/>
				<updated>2013-03-18T16:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : Page créée avec « {| align=&amp;quot;right&amp;quot; | __TOC__ |} [http://tmux.sourceforge.net/ Tmux] est un multiplexeur de terminal. Il permet de découper un terminal en plusieurs sessions de travail avec de... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://tmux.sourceforge.net/ Tmux] est un multiplexeur de terminal. Il permet de découper un terminal en plusieurs sessions de travail avec des fenêtres et panneaux, tout en permettant de les détacher. C'est une sorte de super [http://www.gnu.org/software/screen/ Screen]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Quelques éléments de configuration, à mettre dans ~/.tmux.conf&lt;br /&gt;
&lt;br /&gt;
=== Couleurs des bordures ===&lt;br /&gt;
Pour que toutes les bordures soient vertes, et que celle du panneau actif soit épaisse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set pane divider&lt;br /&gt;
#set -g pane-border-bg black&lt;br /&gt;
set -g pane-border-fg green&lt;br /&gt;
set -g pane-active-border-bg green&lt;br /&gt;
set -g pane-active-border-fg green&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T16:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (PHP, HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T16:14:30Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Gérer la méthode BAN avec en-tête pour Regexp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/regexp_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T16:13:55Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Gérer la méthode BAN avec en-tête pour Regexp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/motif_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T16:13:46Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Gérer la méthode BAN avec en-tête pour Regexp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/motif_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T16:13:00Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Gérer la méthode BAN avec en-tête pour RegExp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour Regexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/motif_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T16:12:46Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode BAN avec en-tête pour RegExp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (req.http.x-ban-regexp) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url ~ &amp;quot; + req.http.x-ban-regexp);&lt;br /&gt;
            unset req.http.x-ban-regexp;&lt;br /&gt;
        } else {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
        }&lt;br /&gt;
        error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; -H &amp;quot;X-Ban-Regexp: ^/motif_a_bannir.*&amp;quot; http://varnish-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T16:05:39Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Gérer les méthodes PURGE et BAN ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot; || req.request == &amp;quot;BAN&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
            return (lookup);&lt;br /&gt;
&lt;br /&gt;
        } elsif (req.request == &amp;quot;BAN&amp;quot;) {&lt;br /&gt;
            ban (&amp;quot;req.http.host == &amp;quot; + req.http.host + &amp;quot; &amp;amp;&amp;amp; req.url == &amp;quot; + req.url);&lt;br /&gt;
            error 200 &amp;quot;Ban added&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilisation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -X PURGE -H &amp;quot;Host: site-ou-purger&amp;quot; http://varnish-server/url_a_purger.html&lt;br /&gt;
$ curl -X BAN -H &amp;quot;Host: site-ou-bannir&amp;quot; http://varnish-server/url_a_bannir.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:57:59Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Nettoyage de l'en-tête Host ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # Suppression des points finaux (.) et ports superflus (ex: kerlinux.org.:80 -&amp;gt; kerlinux.org)&lt;br /&gt;
    set req.http.host = regsub(req.http.host, &amp;quot;\.*(:\d+)*$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP.&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:55:21Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP.&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:53:50Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Créer une URL de test ===&lt;br /&gt;
Pour pouvoir tester facilement que Varnish est disponible, il est possible de créer une page d'erreur spéciale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.url == &amp;quot;/varnish-status&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Varnish UP.&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:38:04Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Normaliser l'en-tête Accept-Encoding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;sdch&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;sdch&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:35:00Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la méthode PURGE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
acl purge {&lt;br /&gt;
    &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    &amp;quot;192.168.0.0&amp;quot;/24;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
   if (req.request == &amp;quot;PURGE&amp;quot;)  {&lt;br /&gt;
        if (!client.ip ~ purge) {&lt;br /&gt;
            error 405 &amp;quot;Not allowed.&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        return(lookup);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_hit {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        purge;&lt;br /&gt;
        error 200 &amp;quot;Purged&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub vcl_miss {&lt;br /&gt;
    if (req.request == &amp;quot;PURGE&amp;quot;) {&lt;br /&gt;
        error 200 &amp;quot;Not in cache&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:23:07Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Supprimer certains cookies entrants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:23:01Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Supprimer certains cookies entrant */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrants ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:22:45Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supprimer certains cookies entrant ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.Cookie) {&lt;br /&gt;
        # Suppression des cookies &amp;quot;__utm?&amp;quot; de suivi des utilisateurs (Google Analytics)&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *__utm.=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Suppression du cookie nommé exactement &amp;quot;MYCOOKIE&amp;quot;&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;(^|; ) *MYCOOKIE=[^;]*;? *&amp;quot;, &amp;quot;\1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Nettoyage de début et fin de valeur de Cookie&lt;br /&gt;
        set req.http.Cookie = regsuball(req.http.Cookie, &amp;quot;^[; ]+|[; ]+$&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        # Si finalement, il n'y a plus de cookie, suppression de l'en-tête&lt;br /&gt;
        if (req.http.Cookie ~ &amp;quot;^\s*$&amp;quot;) {&lt;br /&gt;
            remove req.http.Cookie;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:12:53Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer la gestion des ESI ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    set req.http.Surrogate-Capability = &amp;quot;abc=ESI/1.0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub sub_fetch {&lt;br /&gt;
    if (beresp.http.Surrogate-Control ~ &amp;quot;ESI/1.0&amp;quot;) {&lt;br /&gt;
        unset beresp.http.Surrogate-Control;&lt;br /&gt;
        set beresp.do_esi = true;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:11:01Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Varnish</id>
		<title>Varnish</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Varnish"/>
				<updated>2013-03-01T15:10:30Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : Page créée avec « {| align=&amp;quot;right&amp;quot; | __TOC__ |} [https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoi... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[https://www.varnish-cache.org/ Varnish] est un cache HTTP. Il permet d'améliorer les performances de sites Web dynamiques en gardant en mémoire (ou sur un stockage persistent) des versions statiques d'objets générés (HTML, CSS, JS, images, ...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemples de VCL ==&lt;br /&gt;
&lt;br /&gt;
La configuration des règles de Varnish se fait grâce à un langage appelé VCL, dont voici quelques exemples d'utilisations.&lt;br /&gt;
&lt;br /&gt;
=== Gérer l'en-tête X-Forwarded-For ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vcl_recv {&lt;br /&gt;
    if (req.restarts == 0) {&lt;br /&gt;
        if (req.http.x-forwarded-for) {&lt;br /&gt;
            set req.http.X-Forwarded-For = req.http.X-Forwarded-For + &amp;quot;, &amp;quot; + client.ip;&lt;br /&gt;
        } else {&lt;br /&gt;
            set req.http.X-Forwarded-For = client.ip;&lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normaliser l'en-tête Accept-Encoding ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vcl_rec {&lt;br /&gt;
    if (req.http.Accept-Encoding) {&lt;br /&gt;
        if (req.url ~ &amp;quot;\.(pdf|jpeg|jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$&amp;quot;) {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.User-Agent ~ &amp;quot;MSIE 6&amp;quot;) {&lt;br /&gt;
            unset req.http.Accept-Encoding;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;gzip&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;gzip&amp;quot;;&lt;br /&gt;
        } elsif (req.http.Accept-Encoding ~ &amp;quot;deflate&amp;quot;) {&lt;br /&gt;
            set req.http.Accept-Encoding = &amp;quot;deflate&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            remove req.http.Accept-Encoding;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-25T09:06:54Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Multi-jours */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T13:30:39Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Règles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier:''&lt;br /&gt;
 # touch /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
 # touch /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Il faut ensuite créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* ''Ce motif simple fonctionne correctement car Fail2ban cherche après la date/heure trouvée et les espaces suivants.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut enfin créer des règles permettant utilisant le dernier filtre sur les fichiers d'enregistrement quotidien. Ce sont ces règles qui vont bannir les adresses IP (ici avec ''iptables'' sur tous les ports):&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, les adresses IP ayant eu sur les 7 derniers jours, 5 jours avec au moins 1 échec.''&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T13:30:16Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Règles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier:''&lt;br /&gt;
 # touch /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
 # touch /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Il faut ensuite créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* ''Ce motif simple fonctionne correctement car Fail2ban cherche après la date/heure trouvée et les espaces suivants.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut enfin créer des règles permettant utilisant le dernier filtre sur les fichiers d'enregistrement quotidien. Ce sont ces règles qui vont bannir les adresses IP (ici avec iptables sur tous les ports):&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, les adresses IP ayant eu sur les 7 derniers jours, 5 jours avec au moins 1 échec.''&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T13:28:38Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Filtre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier:''&lt;br /&gt;
 # touch /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
 # touch /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Il faut ensuite créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* ''Ce motif simple fonctionne correctement car Fail2ban cherche après la date/heure trouvée et les espaces suivants.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, les adresses IP ayant eu sur les 7 derniers jours, 5 jours avec au moins 1 échec.''&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T13:27:09Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Filtre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier:''&lt;br /&gt;
 # touch /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
 # touch /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Il faut ensuite créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, les adresses IP ayant eu sur les 7 derniers jours, 5 jours avec au moins 1 échec.''&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T13:26:24Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Règles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier:''&lt;br /&gt;
 # touch /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
 # touch /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, les adresses IP ayant eu sur les 7 derniers jours, 5 jours avec au moins 1 échec.''&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T11:32:45Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier.''&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, les adresses IP ayant eu sur les 7 derniers jours, 5 jours avec au moins 1 échec.''&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* http://www.fail2ban.org/wiki/index.php/MANUAL_0_8&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T11:24:48Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Règles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier.''&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, les adresses IP ayant eu sur les 7 derniers jours, 5 jours avec au moins 1 échec.''&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T11:17:24Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Multi-jours */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit une configuration qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier.''&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, une adresse IP ayant échouée 5 fois sur les 7 derniers jours.''&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T11:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Analyse des fichiers d'enregistrement quotidien */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit un système qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier.''&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/filter.d/daily-record.conf''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, une adresse IP ayant échouée 5 fois sur les 7 derniers jours.''&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T11:16:20Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Règles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit un système qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans '''/etc/fail2ban/jail.local''':&lt;br /&gt;
* Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier.''&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&lt;br /&gt;
Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, une adresse IP ayant échouée 5 fois sur les 7 derniers jours.''&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T11:13:53Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Multi-jours */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit un système qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.''&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&lt;br /&gt;
Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier.''&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&lt;br /&gt;
Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, une adresse IP ayant échouée 5 fois sur les 7 derniers jours.''&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T11:13:09Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Multi-jours */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit un système qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Action =====&lt;br /&gt;
Il faut commencer par définir une action permettant d'enregistrer dans un fichier, une seule fois par jour, chaque adresse IP ayant fait une tentative.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Fail2ban doit pouvoir trouver un motif correspondant à une date plus l'heure, d'où l'utilisation de &amp;quot;%Y/%m/%d 00:00:00&amp;quot; comme début de ligne.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Il faut ensuite définir des règles utilisant cette action:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&lt;br /&gt;
Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Les filtres sont les mêmes que pour les autres règles de ces services''&lt;br /&gt;
* ''Le démarrage des actions et donc l'exécution des &amp;quot;actionstart&amp;quot; ne semble pas forcément fait avant l'ouverture des fichier de logs. Il est donc préférable de créer manuellement le fichier.''&lt;br /&gt;
&lt;br /&gt;
==== Analyse des fichiers d'enregistrement quotidien ====&lt;br /&gt;
&lt;br /&gt;
===== Filtre =====&lt;br /&gt;
Maintenant, il faut créer un filtre permettant de trouver les adresse IP dans les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Règles =====&lt;br /&gt;
Et enfin, créer des règles permettant utilisant ce filtre sur les fichiers d'enregistrement quotidien:&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&lt;br /&gt;
Pour SSH:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour Apache HTTPd / Wordpress login:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* ''Ces valeurs permettent de bannir pour 1 mois, une adresse IP ayant échouée 5 fois sur les 7 derniers jours.''&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T10:28:39Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : /* Multi-jours */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de base de Fail2ban ne permet pas de réagir facilement face à certains comportements. Par exemple, comment bloquer ceux qui ne font qu'une ou deux tentatives par jour ?&lt;br /&gt;
&lt;br /&gt;
Cette section décrit un système qui permet de les détecter et de les bannir.&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SSH ====&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Apache Wordpress login ====&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-13T10:23:56Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multi-jours ===&lt;br /&gt;
&lt;br /&gt;
==== Enregistrement quotidien ====&lt;br /&gt;
Dans /etc/fail2ban/action.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
actionstart = touch &amp;lt;logfile&amp;gt;&lt;br /&gt;
actionstop =&lt;br /&gt;
actioncheck =&lt;br /&gt;
actionban = DATE=`date --date=&amp;quot;@&amp;lt;time&amp;gt;&amp;quot; +%%Y/%%m/%%d`&lt;br /&gt;
            if ! grep -q &amp;quot;^$DATE 00:00:00 &amp;lt;ip&amp;gt;$&amp;quot; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            then&lt;br /&gt;
                 echo &amp;quot;$DATE 00:00:00 &amp;lt;ip&amp;gt;&amp;quot; &amp;gt;&amp;gt; &amp;lt;logfile&amp;gt;&lt;br /&gt;
            fi                                                                                                                                                                                                     &lt;br /&gt;
actionunban =&lt;br /&gt;
&lt;br /&gt;
[Init]&lt;br /&gt;
logfile = ???&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/daily-record.conf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SSH ====&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[ssh-daily-record]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action = daily-record[logfile=/var/run/fail2ban/ssh-daily.log]&lt;br /&gt;
bantime = 0&lt;br /&gt;
&lt;br /&gt;
[ssh-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=ssh-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/ssh-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Apache Wordpress login ====&lt;br /&gt;
Dans /etc/fail2ban/jail.local:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login-daily-record]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = apache-wp-login&lt;br /&gt;
logpath  = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 1&lt;br /&gt;
action   = daily-record[logfile=/var/run/fail2ban/apache-wp-login-daily.log]&lt;br /&gt;
bantime  = 0&lt;br /&gt;
&lt;br /&gt;
[apache-wp-login-daily-ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = daily-record&lt;br /&gt;
action   = iptables-allports[name=wp-login-daily,protocol=all]&lt;br /&gt;
logpath  = /var/run/fail2ban/apache-wp-login-daily.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
findtime = 604800&lt;br /&gt;
bantime  = 2592000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-03T13:13:34Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
[http://www.fail2ban.org/ Fail2ban] est un outil permettant de surveiller des fichiers journaux et de déclencher des actions sur la récurrence de certains événements. L'utilisation classique consiste à surveiller les échecs d'authentification (ex: SSH, HTTP, ...) et de bannir (via IPtables) l'adresse IP pendant une période définie.&lt;br /&gt;
&lt;br /&gt;
== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-03T13:07:58Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wordpress commentaires ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-comments.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-comments-post.php\s+HTTP/1\..&amp;quot;\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-comments]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-comments&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	<entry>
		<id>http://kerlinux.org/wiki/Fail2ban</id>
		<title>Fail2ban</title>
		<link rel="alternate" type="text/html" href="http://kerlinux.org/wiki/Fail2ban"/>
				<updated>2013-02-03T13:03:38Z</updated>
		
		<summary type="html">&lt;p&gt;SLiX : A protégé « Fail2ban » ([edit=sysop] (infini) [move=sysop] (infini))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configurations ==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de configuration (testés sous Debian GNU/Linux 6.0 &amp;quot;squeeze&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTPd ===&lt;br /&gt;
==== Wordpress login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-wp-login.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/wp-login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-wp-login]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-wp-login&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ampache login ====&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/apache-ampache-www.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;.*] &amp;quot;POST\s+/ampache/login.php\s+HTTP/1\..&amp;quot;\s+200\s+&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[apache-ampache-www]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = http,https&lt;br /&gt;
filter  = apache-ampache-www&lt;br /&gt;
logpath = /var/log/apache*/access*.log&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fail2ban ===&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban week ====&lt;br /&gt;
&lt;br /&gt;
Fail2ban peut bien sûr surveiller ses journaux, ce qui permet de faire ce genre de règles: bannir sur tous les ports et pendant une semaine les adresses IP bannies plusieurs fois par jour.&lt;br /&gt;
&lt;br /&gt;
Dans /etc/fail2ban/filter.d/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = fail2ban.actions:\s+WARNING\s+\[(?:.*)\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex = fail2ban.actions:\s+WARNING\s+\[fail2ban\]\s+Ban\s+&amp;lt;HOST&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et dans /etc/fail2ban/jail.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[fail2ban]&lt;br /&gt;
enabled  = true&lt;br /&gt;
filter   = fail2ban&lt;br /&gt;
action   = iptables-allports[name=fail2ban,protocol=all]&lt;br /&gt;
logpath  = /var/log/fail2ban.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
# Find-time: 1 day&lt;br /&gt;
findtime = 86400&lt;br /&gt;
# Ban-time: 1 week&lt;br /&gt;
bantime = 604800&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Applications]]&lt;/div&gt;</summary>
		<author><name>SLiX</name></author>	</entry>

	</feed>