<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Madhatter</id>
	<title>Lea Linux - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Madhatter"/>
	<link rel="alternate" type="text/html" href="https://lea-linux.org/documentations/Sp%C3%A9cial:Contributions/Madhatter"/>
	<updated>2026-04-26T08:24:36Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=11053</id>
		<title>ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=11053"/>
		<updated>2005-12-06T13:17:55Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* ProFTPD, MySQL et Quota */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Partager ses fichiers]]&lt;br /&gt;
= ProFTPD, MySQL et Quota =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;ProFTPD, MySQL et Quota&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:howto@espace.fr.to Space2d] &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Exemple d&#039;utilisation du support MySQL pour ProFTPD avec gestion des quotas&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de lire d&#039;abord le didactitiel de DuF : [http://lea-linux.org/reseau/partfic/proftpd.html  Introduction à proftpd]&lt;br /&gt;
&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Rmq : Ce document peut aussi convenir à la configuration du support PostGreSQL.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Au début, j&#039;utilisais le serveur ProFTPD avec la configuration d&#039;origine (ou presque), donc sur la base de l&#039;authentification unix. J&#039;ai eu besoin de modifier regulièrement les comptes FTP. Ajouter et supprimer les utlisateurs (compte linux) devient vite lourd. Je me suis donc penché sur le support MySQL de ProFTPD et je vous propose mes explications.&lt;br /&gt;
&lt;br /&gt;
Le fait d&#039;utiliser l&#039;authentification de ProFTPD par base de données vous permet, par exemple, de faire une page php de configuration ou d&#039;administrer facilement vos comptes ftp via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Soit vous installez ProFTPD à partir de package. (Soyez sur que le package va installer le support MySQL)&lt;br /&gt;
* Soit à partir des sources.&lt;br /&gt;
&lt;br /&gt;
=== Sous Debian (apt) ===&lt;br /&gt;
&lt;br /&gt;
Il suffit de taper en tant que &#039;&#039;&#039;root&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#apt-get install proftpd-mysql&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A partir des sources ===&lt;br /&gt;
&lt;br /&gt;
Téléchargez les sources en allant sur le [http://www.proftpd.org site de proftpd] pour obtenir la version la plus récente.&lt;br /&gt;
&lt;br /&gt;
Décompressez-les et lancez la compilation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;tar jxvf proftpd-&#039;&#039;version&#039;&#039;.tar.bz2&amp;lt;br /&amp;gt; cd proftpd-&#039;&#039;version&#039;&#039;&amp;lt;br /&amp;gt; ./configure\&amp;lt;br /&amp;gt; --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql\&amp;lt;br /&amp;gt; --with-includes=/usr/include/mysql\&amp;lt;br /&amp;gt; --with-libraries=/usr/lib&amp;lt;br /&amp;gt; make&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et en tant que &#039;&#039;&#039;root&#039;&#039;&#039; : &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Créer un groupe &#039;&#039;ftpgroup&#039;&#039; avec un GID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;groupadd -g 5500 ftpgroup&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explications :]]&lt;br /&gt;
* &#039;&#039;&#039;groupadd&#039;&#039;&#039; : invoque la commande d&#039;ajout de groupe.&lt;br /&gt;
* &#039;&#039;&#039;-g 5500&#039;&#039;&#039; : défini le GID (numéro identifiant) du groupe.&lt;br /&gt;
* &#039;&#039;&#039;ftpgroup&#039;&#039;&#039; : défini le nom du group.&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur &#039;&#039;ftpuser&#039;&#039; avec un UID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;useradd -u 5500 -s /bin/false -d /bin/null -c &amp;quot;proftpd user&amp;quot; -g ftpgroup ftpuser&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explications :]]&lt;br /&gt;
* &#039;&#039;&#039;useradd&#039;&#039;&#039; : invoque la commande d&#039;ajout d&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-u 5500&#039;&#039;&#039; : défini l&#039;UID (numéro identifiant) de l&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-s /bin/false&#039;&#039;&#039; : défini le shell utilisé pour cet utilisateur, en l&#039;occurence, aucun puisque la connection sur une console linux est désactivée pour cet utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-d /bin/null&#039;&#039;&#039; : défini le répertoire de l&#039;utilisateur, également inexistant.&lt;br /&gt;
* &#039;&#039;&#039;-c &amp;quot;proftp user&amp;quot;&#039;&#039;&#039; : commentaire.&lt;br /&gt;
* &#039;&#039;&#039;-g ftpgroup&#039;&#039;&#039; : ajoute l&#039;utilisateur &#039;&#039;ftpuser&#039;&#039; au group &#039;&#039;ftpgroup&#039;&#039; précédemment créé.&lt;br /&gt;
* &#039;&#039;&#039;ftpuser&#039;&#039;&#039; : défini le nom de l&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
Le groupe et l&#039;utilisateur ainsi créés serviront de lien entre les utilisateurs créés dans la base MySQL et le système d&#039;authentification/droits du système.&lt;br /&gt;
&lt;br /&gt;
=== La base de données ===&lt;br /&gt;
&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&lt;br /&gt;
* si vous n&#039;avez jamais modifié les utilisateurs de la base : &amp;lt;code&amp;gt;mysql -u root&amp;lt;/code&amp;gt;&lt;br /&gt;
* sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : proftpd) et les tables qu&#039;elle contient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; CREATE DATABASE `proftpd`;&amp;lt;br /&amp;gt; USE proftpd;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpgroup`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpgroup` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `groupname` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `members` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; KEY `groupname` (`groupname`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des groupes ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotalimits`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotalimits` (&amp;lt;br /&amp;gt; `name` varchar(30) default NULL,&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `par_session` enum(&#039;false&#039;,&#039;true&#039;) NOT NULL default &#039;false&#039;,&amp;lt;br /&amp;gt; `limit_type` enum(&#039;soft&#039;,&#039;hard&#039;) NOT NULL default &#039;soft&#039;,&amp;lt;br /&amp;gt; `bytes_up_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_limit` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotatotal`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotatotal` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `name` varchar(30) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `bytes_up_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_total` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des compteurs des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpuser`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpuser` (&amp;lt;br /&amp;gt; `id` int(10) unsigned NOT NULL auto_increment,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `userid` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `passwd` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `uid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `homedir` varchar(255) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `shell` varchar(16) NOT NULL default &#039;/bin/false&#039;,&amp;lt;br /&amp;gt; `count` int(11) NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `accessed` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `modified` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `LoginAllowed` enum(&#039;true&#039;,&#039;false&#039;) NOT NULL default &#039;true&#039;,&amp;lt;br /&amp;gt; PRIMARY KEY (`id`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des utlisateurs ProFTPD&#039;; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut créer un nouvel utilisateur (ex : proftpd) avec un mot de passe (ex : password) qui a seulement les droits de lire les données de la base proftpd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;GRANT USAGE ON proftpd.localhost TO &#039;&#039;&#039;proftpd&#039;&#039;&#039;@&#039;localhost&#039;&amp;lt;br /&amp;gt; IDENTIFIED BY &#039;&#039;&#039;password&#039;&#039;&#039; WITH GRANT OPTION;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Si votre serveur MySQL n&#039;est pas sur la même machine que ProFTPD remplacez localhost par le nom de la machine (du serveur MySQL) ou par *&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration de ProFTPD ===&lt;br /&gt;
&lt;br /&gt;
Editez le fichier &amp;lt;code&amp;gt;/etc/proftpd.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; # Configuration de base&amp;lt;br /&amp;gt; # =====================&amp;lt;br /&amp;gt; ServerName &amp;quot;Mon serveur FTP&amp;quot;&amp;lt;br /&amp;gt; ServerType standalone&amp;lt;br /&amp;gt; ServerIdent on &amp;quot;Bienvenue sur mon ftp. Veuillez-vous identifiez&amp;quot;&amp;lt;br /&amp;gt; DeferWelcome on&amp;lt;br /&amp;gt; ServerAdmin &amp;quot;ftp_admin@mydomain.com&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; MultilineRFC2228 on&amp;lt;br /&amp;gt; DefaultServer on&amp;lt;br /&amp;gt; ShowSymlinks on&amp;lt;br /&amp;gt; AllowOverwrite on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; TimeoutNoTransfer 600&amp;lt;br /&amp;gt; TimeoutStalled 600&amp;lt;br /&amp;gt; TimeoutIdle 1200&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ListOptions &amp;quot;-l&amp;quot;&amp;lt;br /&amp;gt; Defaultroot ~&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; DenyFilter \*.*/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Port 21&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # A configurer selon sa connection&amp;lt;br /&amp;gt; # ================================&amp;lt;br /&amp;gt; MaxInstances 6&amp;lt;br /&amp;gt; MaxLoginAttempts 3&amp;lt;br /&amp;gt; MaxClientsPerUser 10&amp;lt;br /&amp;gt; MaxClientsPerHost 2&amp;lt;br /&amp;gt; MaxHostsPerUser 4&amp;lt;br /&amp;gt; MaxClients 6 &amp;quot;Limite a 6 utilisateurs&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # ProFTPD est exécuté avec des droits réduits&amp;lt;br /&amp;gt; # ============================================&amp;lt;br /&amp;gt; User nobody&amp;lt;br /&amp;gt; Group nogroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Umask 022&amp;lt;br /&amp;gt; AllowStoreRestart on&amp;lt;br /&amp;gt; AllowRetrieveRestart on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod MySQL&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; # Les mots de passe sont cryptés dans la base avec la fct ENCRYPT (MySQL)&amp;lt;br /&amp;gt; SQLAuthTypes Plaintext Crypt&amp;lt;br /&amp;gt; SQLAuthenticate users* groups*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Modifiez cette ligne selon l&#039;utilisateur et le mot de passe définit plus tôt&amp;lt;br /&amp;gt; SQLConnectInfo &#039;&#039;proftpd@localhost proftpd password&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table usertable&amp;lt;br /&amp;gt; SQLUserInfo ftpuser userid passwd uid gid homedir shell&amp;lt;br /&amp;gt; SQLUserWhereClause &amp;quot;LoginAllowed = &#039;true&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table &amp;quot;grouptable&amp;quot;&amp;lt;br /&amp;gt; SQLGroupInfo ftpgroup groupname gid members&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Créer le repertoire home de l&#039;utilisateur si il n&#039;existe pas&amp;lt;br /&amp;gt; SQLHomedirOnDemand on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Met à jour les compteurs à chaque connection d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog PASS updatecount&amp;lt;br /&amp;gt; SQLNamedQuery updatecount UPDATE &amp;quot;count=count+1, accessed=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; #Met à jour les compteurs à chaque upload ou download d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog STOR,DELE modified&amp;lt;br /&amp;gt; SQLNamedQuery modified UPDATE &amp;quot;modified=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod quota&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; QuotaEngine on&amp;lt;br /&amp;gt; QuotaDirectoryTally on&amp;lt;br /&amp;gt; QuotaDisplayUnits Mb&amp;lt;br /&amp;gt; QuotaShowQuotas on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Définit les requêtes SQL pour que ProFTPd recupere les infos sur les quotas&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-limit SELECT &amp;quot;name, quota_type, par_session, limit_type, bytes_up_limit, bytes_down_limit, bytes_transfer_limit, files_up_limit, files_down_limit, files_transfer_limit FROM ftpquotalimits WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-tally SELECT &amp;quot;name, quota_type, bytes_up_total, bytes_down_total, bytes_transfer_total, files_up_total, files_down_total, files_transfer_total FROM ftpquotatotal WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery update-quota-tally UPDATE &amp;quot;bytes_up_total = bytes_up_total + %{0}, bytes_down_total = bytes_down_total + %{1}, bytes_transfer_total = bytes_transfer_total + %{2}, files_up_total = files_up_total + %{3}, files_down_total = files_down_total + %{4}, files_transfer_total = files_transfer_total + %{5} WHERE name = &#039;%{6}&#039; AND quota_type = &#039;%{7}&#039;&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery insert-quota-tally INSERT &amp;quot;%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; QuotaLimitTable sql:/get-quota-limit&amp;lt;br /&amp;gt; QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; RootLogin off&amp;lt;br /&amp;gt; RequireValidShell off&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Gestion des logs&amp;lt;br /&amp;gt; # ================&amp;lt;br /&amp;gt; # Enregistre les requêtes SQL dans /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; SQLLogFile /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; # Enregistre les authentifications&amp;lt;br /&amp;gt; LogFormat auth &amp;quot;%v [%P] %h %t \&amp;quot;%r\&amp;quot; %s&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/auth.log AUTH auth&amp;lt;br /&amp;gt; # Enregistre les accès aux fichiers&amp;lt;br /&amp;gt; LogFormat write &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %s %b&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/access.log WRITE,READ write&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Recupère le nom à partir de l&#039;ip de la machine de l&#039;utilisateur ( resolution DNS )&amp;lt;br /&amp;gt; IdentLookups on&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez redémarrer le serveur ProFTPd pour appliquer la configuration :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/proftpd restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que la configuration est faite, nous allons voir comment gérer les utilisateurs à travers la base de données.&lt;br /&gt;
&lt;br /&gt;
Je vous conseille d&#039;utiliser PHPMyAdmin pour ceux qui ne connaissent pas le langage SQL.&lt;br /&gt;
&lt;br /&gt;
=== Gestion des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur &#039;test&#039; avec un mot de passe &#039;pwd&#039;. Cet utilisateur a accès au repertoire &#039;/home/ftp/test&#039; avec les droits de l&#039;utilisateur (UID) 5500, et de groupe (GID) 5500, sans shell (&#039;/bin/false&#039;).&lt;br /&gt;
&lt;br /&gt;
La valeur &#039;LoginAllowed&#039; est mise à &#039;true&#039; pour autoriser la connection de cet utilisateur, à &#039;false&#039; pour l&#039;interdire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed` ) VALUES (&#039;&#039;, &#039;test&#039;, ENCRYPT(&#039;pwd&#039;), &#039;5500&#039;, &#039;5500&#039;, &#039;/home/ftp/test&#039;, &#039;/bin/false&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;true&#039; ); &amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;count&#039; représente le nombre d&#039;authentifications effectuées par cet utilisateur,&amp;lt;br /&amp;gt; &#039;accessed&#039; la date du dernier accès et&amp;lt;br /&amp;gt; &#039;modified&#039; la date de la dernière écriture.&lt;br /&gt;
&lt;br /&gt;
==== Suppression d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Suppression de l&#039;utilisateur &#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpuser` WHERE `userid`=&#039;test&#039;;&amp;lt;br /&amp;gt; DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des groupes ===&lt;br /&gt;
&lt;br /&gt;
==== Affecter un utilisateur à un groupe ====&lt;br /&gt;
&lt;br /&gt;
Affecte l&#039;utilisateur &#039;test&#039; au groupe &#039;group_test&#039; avec les droits de groupe (GID) du groupe 5500&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpgroup` ( `groupname` , `gid` , `members` ) VALUES (&#039;group_test&#039;, &#039;5500&#039;, &#039;test&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Enlever un utilisateur d&#039;un groupe ====&lt;br /&gt;
&lt;br /&gt;
Enlève l&#039;utilisateur &#039;test&#039; du groupe &#039;group_test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des quotas ===&lt;br /&gt;
&lt;br /&gt;
La table &#039;ftpquotalimits&#039; contient la description des quotas.&amp;lt;br /&amp;gt; La table &#039;ftpquotatotal&#039; contient les statistiques d&#039;utilisation correspondant aux règles des quotas défini dans la table &#039;ftpquotalimits&#039;. Cette table permet à ProFTPd de gérer les quotas.&lt;br /&gt;
&lt;br /&gt;
==== Ajouter une règles de quotas ====&lt;br /&gt;
&lt;br /&gt;
Exécuter la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpquotalimits` ( `name`, `quota_type`, `par_session`, `limit_type`, `bytes_up_limit`, `bytes_down_limit`, `bytes_transfer_limit`, `files_up_limit`, `files_down_limit`, `files_transfer_limit` )&amp;lt;br /&amp;gt; VALUES ( &#039;NOM&#039; , &#039;TYPE&#039;, &#039;SESSION&#039;, &#039;LIMIT_TYPE&#039;, &#039;B_UP&#039;, &#039;B_DOWN&#039;, &#039;B_TRANS&#039;, &#039;F_UP&#039;, &#039;F_DOWN&#039;, &#039;F_TRANS&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
où&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; : nom de l&#039;utilisateur, du groupe ou de la règle selon la valeur de &#039;&#039;&#039;quota_type&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;quota_type&#039;&#039;&#039; : &#039;user&#039; si le quota s&#039;applique à un utilisateur, &#039;group&#039; à un groupe, &#039;class&#039; à une classe (ici inutile), &#039;all&#039; à tous les utilisateurs.&lt;br /&gt;
* &#039;&#039;&#039;par_session&#039;&#039;&#039; : &#039;true&#039; si les quotas doivent être remis à zéro à chaque nouvelle session, &#039;false&#039; sinon. (&#039;false&#039; est conseillé).&lt;br /&gt;
* &#039;&#039;&#039;limit_type&#039;&#039;&#039; : &#039;soft&#039; pour une mesure logicielle de la taille, &#039;hard&#039; pour une mesure hardware.&lt;br /&gt;
* &#039;&#039;&#039;bytes_up_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à être uploadé sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;bytes_down_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* &#039;&#039;&#039;bytes_transfer_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à transféré à sur et à partir du serveur (upload+download).&lt;br /&gt;
* &#039;&#039;&#039;files_up_limit&#039;&#039;&#039; : nombre de fichiers autorisé à être uploadé sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;files_down_limit&#039;&#039;&#039; : nombre de fichiers autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* &#039;&#039;&#039;files_transfer_limit&#039;&#039;&#039; : nombre de fichiers autorisé à transféré sur et à partir du serveur (upload+download).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Pour définir un quota illimité à l&#039;un des champs, mettez une valeur négative ou nulle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Les quotas de type &#039;all&#039;, &#039;class&#039; ou &#039;group&#039; ne définissent pas un quota pour chaque utilisateur mais un quota partagé par tous les utlisateurs concernés par cette règle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Réinitialiser les quotas ====&lt;br /&gt;
&lt;br /&gt;
Il suffit de supprimer l&#039;entrée (ligne) correspondant à la règle devant être réinitialisé. Par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpquotatotal` WHERE `name`=&#039;test&#039; AND `quota_type`=&#039;user&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez réinitialiser tous les quotas, par exemple tous les mois, faîtes une tâche cron se connectant sur le serveur et exécutant la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;TRUNCATE TABLE `ftpquotatotal`;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Et voilà, c&#039;est terminé... Vous n&#039;avez plus qu&#039;à tester ;-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par space2d le 24/04/2005.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 24/04/2005, space2d&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:ProFTPD_MySQL_et_quotas&amp;diff=11052</id>
		<title>Discussion:ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:ProFTPD_MySQL_et_quotas&amp;diff=11052"/>
		<updated>2005-12-06T11:01:18Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* Commentaire de : MadHatter - 06/12/2005 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Commentaires de : SylvainBolay=&lt;br /&gt;
posté le 2005-09-30 11:37:53&lt;br /&gt;
&lt;br /&gt;
Bonjour,&lt;br /&gt;
&lt;br /&gt;
Lors de la création du nouvel utilisateur (ex: proftpd) une erreur s&#039;est glissée dans la requête SQL. &lt;br /&gt;
&lt;br /&gt;
Il faut remplacer &amp;quot;localhost&amp;quot; par &amp;quot;*&amp;quot; après la requète GRANT USAGE ON proftpd.localhost.&lt;br /&gt;
En effet, l&#039;astérisque permet de séléctionner toute les tables de la base de donnée proftpd. &lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous la version corrigée:&lt;br /&gt;
&lt;br /&gt;
GRANT USAGE ON proftpd.* TO &#039;proftpd&#039;@&#039;localhost&#039;&lt;br /&gt;
IDENTIFIED BY &#039;password&#039; WITH GRANT OPTION;&lt;br /&gt;
&lt;br /&gt;
P.S. Merci pour ce super article&lt;br /&gt;
&lt;br /&gt;
Salutations / Sylvain Bolay / 30.09.2005&lt;br /&gt;
&lt;br /&gt;
=Commentaire de MadHatter - 06/12/2005=&lt;br /&gt;
&lt;br /&gt;
La gestion des quotas ne fonctionne pas. (en tout cas pour moi. J&#039;ai pourtant scrupuleusement respecté le didactitiel).&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, il semblerait que lorsqu&#039;elle fonctionne, lors d&#039;un envoi de fichiers sur le serveur, si l&#039;envoi est hors quota, il est quand meme envoyé mais le fichier est ensuite supprimé automatiquement du serveur (cf : http://www.khoosys.net/single.htm?ipg=848).&lt;br /&gt;
&lt;br /&gt;
Il semblerait également, qu&#039;aucun message n&#039;avertisse l&#039;utilisateur du dépassement de quota (quel qu&#039;il soit). Ce qui est un peu génant, surtout dans le cas d&#039;une suppression automatique d&#039;un fichier transféré, cité précédemment.&lt;br /&gt;
&lt;br /&gt;
Je vais continuer à prospecter et tester de mon coté, mais si quelqu&#039;un a trouvé une solution, il est le bienvenu... ;)&lt;br /&gt;
&lt;br /&gt;
MadHatter.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:ProFTPD_MySQL_et_quotas&amp;diff=11051</id>
		<title>Discussion:ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:ProFTPD_MySQL_et_quotas&amp;diff=11051"/>
		<updated>2005-12-06T11:00:51Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* Commentaires de : SylvainBolay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Commentaires de : SylvainBolay=&lt;br /&gt;
posté le 2005-09-30 11:37:53&lt;br /&gt;
&lt;br /&gt;
Bonjour,&lt;br /&gt;
&lt;br /&gt;
Lors de la création du nouvel utilisateur (ex: proftpd) une erreur s&#039;est glissée dans la requête SQL. &lt;br /&gt;
&lt;br /&gt;
Il faut remplacer &amp;quot;localhost&amp;quot; par &amp;quot;*&amp;quot; après la requète GRANT USAGE ON proftpd.localhost.&lt;br /&gt;
En effet, l&#039;astérisque permet de séléctionner toute les tables de la base de donnée proftpd. &lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous la version corrigée:&lt;br /&gt;
&lt;br /&gt;
GRANT USAGE ON proftpd.* TO &#039;proftpd&#039;@&#039;localhost&#039;&lt;br /&gt;
IDENTIFIED BY &#039;password&#039; WITH GRANT OPTION;&lt;br /&gt;
&lt;br /&gt;
P.S. Merci pour ce super article&lt;br /&gt;
&lt;br /&gt;
Salutations / Sylvain Bolay / 30.09.2005&lt;br /&gt;
&lt;br /&gt;
=Commentaire de : MadHatter - 06/12/2005=&lt;br /&gt;
&lt;br /&gt;
La gestion des quotas ne fonctionne pas. (en tout cas pour moi. J&#039;ai pourtant scrupuleusement respecté le didactitiel).&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, il semblerait que lorsqu&#039;elle fonctionne, lors d&#039;un envoi de fichiers sur le serveur, si l&#039;envoi est hors quota, il est quand meme envoyé mais le fichier est ensuite supprimé automatiquement du serveur (cf : http://www.khoosys.net/single.htm?ipg=848).&lt;br /&gt;
&lt;br /&gt;
Il semblerait également, qu&#039;aucun message n&#039;avertisse l&#039;utilisateur du dépassement de quota (quel qu&#039;il soit). Ce qui est un peu génant, surtout dans le cas d&#039;une suppression automatique d&#039;un fichier transféré, cité précédemment.&lt;br /&gt;
&lt;br /&gt;
Je vais continuer à prospecter et tester de mon coté, mais si quelqu&#039;un a trouvé une solution, il est le bienvenu... ;)&lt;br /&gt;
&lt;br /&gt;
MadHatter.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:ProFTPD_MySQL_et_quotas&amp;diff=11050</id>
		<title>Discussion:ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:ProFTPD_MySQL_et_quotas&amp;diff=11050"/>
		<updated>2005-12-06T10:59:12Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Commentaires de : SylvainBolay=&lt;br /&gt;
posté le 2005-09-30 11:37:53&lt;br /&gt;
&lt;br /&gt;
Bonjour,&lt;br /&gt;
&lt;br /&gt;
Lors de la création du nouvel utilisateur (ex: proftpd) une erreur s&#039;est glissée dans la requête SQL. &lt;br /&gt;
&lt;br /&gt;
Il faut remplacer &amp;quot;localhost&amp;quot; par &amp;quot;*&amp;quot; après la requète GRANT USAGE ON proftpd.localhost.&lt;br /&gt;
En effet, l&#039;astérisque permet de séléctionner toute les tables de la base de donnée proftpd. &lt;br /&gt;
&lt;br /&gt;
Voici ci-dessous la version corrigée:&lt;br /&gt;
&lt;br /&gt;
GRANT USAGE ON proftpd.* TO &#039;proftpd&#039;@&#039;localhost&#039;&lt;br /&gt;
IDENTIFIED BY &#039;password&#039; WITH GRANT OPTION;&lt;br /&gt;
&lt;br /&gt;
P.S. Merci pour ce super article&lt;br /&gt;
&lt;br /&gt;
Salutations / Sylvain Bolay / 30.09.2005&lt;br /&gt;
&lt;br /&gt;
La gestion des quotas ne fonctionne pas. (en tout cas pour moi. J&#039;ai pourtant scrupuleusement respecté le didactitiel).&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, il semblerait que lorsqu&#039;elle fonctionne, lors d&#039;un envoi de fichiers sur le serveur, si l&#039;envoi est hors quota, il est quand meme envoyé mais le fichier est ensuite supprimé automatiquement du serveur (cf : http://www.khoosys.net/single.htm?ipg=848).&lt;br /&gt;
&lt;br /&gt;
Il semblerait également, qu&#039;aucun message n&#039;avertisse l&#039;utilisateur du dépassement de quota (quel qu&#039;il soit). Ce qui est un peu génant, surtout dans le cas d&#039;une suppression automatique d&#039;un fichier transféré, cité précédemment.&lt;br /&gt;
&lt;br /&gt;
Je vais continuer à prospecter et tester de mon coté, mais si quelqu&#039;un a trouvé une solution, il est le bienvenu... ;)&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=11048</id>
		<title>ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=11048"/>
		<updated>2005-12-06T10:19:40Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Partager ses fichiers]]&lt;br /&gt;
= ProFTPD, MySQL et Quota =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;ProFTPD, MySQL et Quota&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:howto@espace.fr.to Space2d] &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Exemple d&#039;utilisation du support MySQL pour ProFTPD avec gestion des quotas&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de lire d&#039;abord le tutoriel de DuF : [http://lea-linux.org/reseau/partfic/proftpd.html  Introduction à proftpd]&lt;br /&gt;
&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Rmq : Ce document peut aussi convenir à la configuration du support PostGreSQL.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Au début, j&#039;utilisais le serveur ProFTPD avec la configuration d&#039;origine (ou presque), donc sur la base de l&#039;authentification unix. J&#039;ai eu besoin de modifier regulièrement les comptes FTP. Ajouter et supprimer les utlisateurs (compte linux) devient vite lourd. Je me suis donc penché sur le support MySQL de ProFTPD et je vous propose mes explications.&lt;br /&gt;
&lt;br /&gt;
Le fait d&#039;utiliser l&#039;authentification de ProFTPD par base de données vous permet, par exemple, de faire une page php de configuration ou d&#039;administrer facilement vos comptes ftp via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Soit vous installez ProFTPD à partir de package. (Soyez sur que le package va installer le support MySQL)&lt;br /&gt;
* Soit à partir des sources.&lt;br /&gt;
&lt;br /&gt;
=== Sous Debian (apt) ===&lt;br /&gt;
&lt;br /&gt;
Il suffit de taper en tant que &#039;&#039;&#039;root&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#apt-get install proftpd-mysql&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A partir des sources ===&lt;br /&gt;
&lt;br /&gt;
Téléchargez les sources en allant sur le [http://www.proftpd.org site de proftpd] pour obtenir la version la plus récente.&lt;br /&gt;
&lt;br /&gt;
Décompressez-les et lancez la compilation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;tar jxvf proftpd-&#039;&#039;version&#039;&#039;.tar.bz2&amp;lt;br /&amp;gt; cd proftpd-&#039;&#039;version&#039;&#039;&amp;lt;br /&amp;gt; ./configure\&amp;lt;br /&amp;gt; --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql\&amp;lt;br /&amp;gt; --with-includes=/usr/include/mysql\&amp;lt;br /&amp;gt; --with-libraries=/usr/lib&amp;lt;br /&amp;gt; make&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et en tant que &#039;&#039;&#039;root&#039;&#039;&#039; : &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Créer un groupe &#039;&#039;ftpgroup&#039;&#039; avec un GID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;groupadd -g 5500 ftpgroup&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explications :]]&lt;br /&gt;
* &#039;&#039;&#039;groupadd&#039;&#039;&#039; : invoque la commande d&#039;ajout de groupe.&lt;br /&gt;
* &#039;&#039;&#039;-g 5500&#039;&#039;&#039; : défini le GID (numéro identifiant) du groupe.&lt;br /&gt;
* &#039;&#039;&#039;ftpgroup&#039;&#039;&#039; : défini le nom du group.&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur &#039;&#039;ftpuser&#039;&#039; avec un UID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;useradd -u 5500 -s /bin/false -d /bin/null -c &amp;quot;proftpd user&amp;quot; -g ftpgroup ftpuser&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explications :]]&lt;br /&gt;
* &#039;&#039;&#039;useradd&#039;&#039;&#039; : invoque la commande d&#039;ajout d&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-u 5500&#039;&#039;&#039; : défini l&#039;UID (numéro identifiant) de l&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-s /bin/false&#039;&#039;&#039; : défini le shell utilisé pour cet utilisateur, en l&#039;occurence, aucun puisque la connection sur une console linux est désactivée pour cet utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-d /bin/null&#039;&#039;&#039; : défini le répertoire de l&#039;utilisateur, également inexistant.&lt;br /&gt;
* &#039;&#039;&#039;-c &amp;quot;proftp user&amp;quot;&#039;&#039;&#039; : commentaire.&lt;br /&gt;
* &#039;&#039;&#039;-g ftpgroup&#039;&#039;&#039; : ajoute l&#039;utilisateur &#039;&#039;ftpuser&#039;&#039; au group &#039;&#039;ftpgroup&#039;&#039; précédemment créé.&lt;br /&gt;
* &#039;&#039;&#039;ftpuser&#039;&#039;&#039; : défini le nom de l&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
Le groupe et l&#039;utilisateur ainsi créés serviront de lien entre les utilisateurs créés dans la base MySQL et le système d&#039;authentification/droits du système.&lt;br /&gt;
&lt;br /&gt;
=== La base de données ===&lt;br /&gt;
&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&lt;br /&gt;
* si vous n&#039;avez jamais modifié les utilisateurs de la base : &amp;lt;code&amp;gt;mysql -u root&amp;lt;/code&amp;gt;&lt;br /&gt;
* sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : proftpd) et les tables qu&#039;elle contient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; CREATE DATABASE `proftpd`;&amp;lt;br /&amp;gt; USE proftpd;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpgroup`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpgroup` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `groupname` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `members` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; KEY `groupname` (`groupname`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des groupes ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotalimits`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotalimits` (&amp;lt;br /&amp;gt; `name` varchar(30) default NULL,&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `par_session` enum(&#039;false&#039;,&#039;true&#039;) NOT NULL default &#039;false&#039;,&amp;lt;br /&amp;gt; `limit_type` enum(&#039;soft&#039;,&#039;hard&#039;) NOT NULL default &#039;soft&#039;,&amp;lt;br /&amp;gt; `bytes_up_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_limit` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotatotal`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotatotal` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `name` varchar(30) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `bytes_up_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_total` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des compteurs des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpuser`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpuser` (&amp;lt;br /&amp;gt; `id` int(10) unsigned NOT NULL auto_increment,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `userid` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `passwd` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `uid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `homedir` varchar(255) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `shell` varchar(16) NOT NULL default &#039;/bin/false&#039;,&amp;lt;br /&amp;gt; `count` int(11) NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `accessed` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `modified` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `LoginAllowed` enum(&#039;true&#039;,&#039;false&#039;) NOT NULL default &#039;true&#039;,&amp;lt;br /&amp;gt; PRIMARY KEY (`id`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des utlisateurs ProFTPD&#039;; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut créer un nouvel utilisateur (ex : proftpd) avec un mot de passe (ex : password) qui a seulement les droits de lire les données de la base proftpd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;GRANT USAGE ON proftpd.localhost TO &#039;&#039;&#039;proftpd&#039;&#039;&#039;@&#039;localhost&#039;&amp;lt;br /&amp;gt; IDENTIFIED BY &#039;&#039;&#039;password&#039;&#039;&#039; WITH GRANT OPTION;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Si votre serveur MySQL n&#039;est sur la même machine que ProFTPD remplacer localhost par le nom de la machine (du serveur MySQL) ou par *&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration de ProFTPD ===&lt;br /&gt;
&lt;br /&gt;
Editez le fichier &amp;lt;code&amp;gt;/etc/proftpd.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; # Configuration de base&amp;lt;br /&amp;gt; # =====================&amp;lt;br /&amp;gt; ServerName &amp;quot;Mon serveur FTP&amp;quot;&amp;lt;br /&amp;gt; ServerType standalone&amp;lt;br /&amp;gt; ServerIdent on &amp;quot;Bienvenue sur mon ftp. Veuillez-vous identifiez&amp;quot;&amp;lt;br /&amp;gt; DeferWelcome on&amp;lt;br /&amp;gt; ServerAdmin &amp;quot;ftp_admin@mydomain.com&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; MultilineRFC2228 on&amp;lt;br /&amp;gt; DefaultServer on&amp;lt;br /&amp;gt; ShowSymlinks on&amp;lt;br /&amp;gt; AllowOverwrite on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; TimeoutNoTransfer 600&amp;lt;br /&amp;gt; TimeoutStalled 600&amp;lt;br /&amp;gt; TimeoutIdle 1200&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ListOptions &amp;quot;-l&amp;quot;&amp;lt;br /&amp;gt; Defaultroot ~&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; DenyFilter \*.*/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Port 21&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # A configurer selon sa connection&amp;lt;br /&amp;gt; # ================================&amp;lt;br /&amp;gt; MaxInstances 6&amp;lt;br /&amp;gt; MaxLoginAttempts 3&amp;lt;br /&amp;gt; MaxClientsPerUser 10&amp;lt;br /&amp;gt; MaxClientsPerHost 2&amp;lt;br /&amp;gt; MaxHostsPerUser 4&amp;lt;br /&amp;gt; MaxClients 6 &amp;quot;Limite a 6 utilisateurs&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # ProFTPD est excecuté avec des droits réduits&amp;lt;br /&amp;gt; # ============================================&amp;lt;br /&amp;gt; User nobody&amp;lt;br /&amp;gt; Group nogroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Umask 022&amp;lt;br /&amp;gt; AllowStoreRestart on&amp;lt;br /&amp;gt; AllowRetrieveRestart on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod MySQL&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; # Les mots de passe sont cryptés ds la base avec la fct ENCRYPT (MySQL)&amp;lt;br /&amp;gt; SQLAuthTypes Plaintext Crypt&amp;lt;br /&amp;gt; SQLAuthenticate users* groups*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Modifiez cette ligne selon l&#039;utilisateur et le mot de passe définit plutôt&amp;lt;br /&amp;gt; SQLConnectInfo &#039;&#039;proftpd@localhost proftpd password&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table usertable&amp;lt;br /&amp;gt; SQLUserInfo ftpuser userid passwd uid gid homedir shell&amp;lt;br /&amp;gt; SQLUserWhereClause &amp;quot;LoginAllowed = &#039;true&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table &amp;quot;grouptable&amp;quot;&amp;lt;br /&amp;gt; SQLGroupInfo ftpgroup groupname gid members&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Créer le repertoire home de l&#039;utilisateur si il n&#039;existe pas&amp;lt;br /&amp;gt; SQLHomedirOnDemand on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Met à jour les compteurs à chaque connection d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog PASS updatecount&amp;lt;br /&amp;gt; SQLNamedQuery updatecount UPDATE &amp;quot;count=count+1, accessed=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; #Met à jour les compteurs à chaque upload ou download d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog STOR,DELE modified&amp;lt;br /&amp;gt; SQLNamedQuery modified UPDATE &amp;quot;modified=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod quota&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; QuotaEngine on&amp;lt;br /&amp;gt; QuotaDirectoryTally on&amp;lt;br /&amp;gt; QuotaDisplayUnits Mb&amp;lt;br /&amp;gt; QuotaShowQuotas on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Définit les requêtes SQL pour que ProFTPd recupere les infos sur les quotas&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-limit SELECT &amp;quot;name, quota_type, par_session, limit_type, bytes_up_limit, bytes_down_limit, bytes_transfer_limit, files_up_limit, files_down_limit, files_transfer_limit FROM ftpquotalimits WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-tally SELECT &amp;quot;name, quota_type, bytes_up_total, bytes_down_total, bytes_transfer_total, files_up_total, files_down_total, files_transfer_total FROM ftpquotatotal WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery update-quota-tally UPDATE &amp;quot;bytes_up_total = bytes_up_total + %{0}, bytes_down_total = bytes_down_total + %{1}, bytes_transfer_total = bytes_transfer_total + %{2}, files_up_total = files_up_total + %{3}, files_down_total = files_down_total + %{4}, files_transfer_total = files_transfer_total + %{5} WHERE name = &#039;%{6}&#039; AND quota_type = &#039;%{7}&#039;&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery insert-quota-tally INSERT &amp;quot;%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; QuotaLimitTable sql:/get-quota-limit&amp;lt;br /&amp;gt; QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; RootLogin off&amp;lt;br /&amp;gt; RequireValidShell off&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Gestion des logs&amp;lt;br /&amp;gt; # ================&amp;lt;br /&amp;gt; # Enregistre les requêtes SQL dans /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; SQLLogFile /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; # Enregistre les authentifications&amp;lt;br /&amp;gt; LogFormat auth &amp;quot;%v [%P] %h %t \&amp;quot;%r\&amp;quot; %s&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/auth.log AUTH auth&amp;lt;br /&amp;gt; # Enregistre les accès aux fichiers&amp;lt;br /&amp;gt; LogFormat write &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %s %b&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/access.log WRITE,READ write&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Recupère le nom à partir de l&#039;ip de la machine de l&#039;utilisateur ( resolution DNS )&amp;lt;br /&amp;gt; IdentLookups on&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez redémarrez le serveur ProFTPd pour appliquer la configuration :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/proftpd restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que la configuration est faite, nous allons voir comment gérer les utilisateurs à travers la base de données.&lt;br /&gt;
&lt;br /&gt;
Je vous conseille d&#039;utiliser PHPMyAdmin pour ceux qui ne connaissent pas le langage SQL.&lt;br /&gt;
&lt;br /&gt;
=== Gestion des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur &#039;test&#039; avec un mot de passe &#039;pwd&#039;. Cet utilisateur a accès au repertoire &#039;/home/ftp/test&#039; avec les droits de l&#039;utilisateur (UID) 5500, et de groupe (GID) 5500, sans shell (&#039;/bin/false&#039;).&lt;br /&gt;
&lt;br /&gt;
La valeur &#039;LoginAllowed&#039; est mise à &#039;true&#039; pour autoriser la connection de cet utilisateur, à &#039;false&#039; pour l&#039;interdire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed` ) VALUES (&#039;&#039;, &#039;test&#039;, ENCRYPT(&#039;pwd&#039;), &#039;5500&#039;, &#039;5500&#039;, &#039;/home/ftp/test&#039;, &#039;/bin/false&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;true&#039; ); &amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;count&#039; représente le nombre d&#039;authentifications effectués par cet utilisateur,&amp;lt;br /&amp;gt; &#039;accessed&#039; la date du dernier accès et&amp;lt;br /&amp;gt; &#039;modified&#039; la date de la dernière écriture.&lt;br /&gt;
&lt;br /&gt;
==== Suppression d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Suppression de l&#039;utilisateur &#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpuser` WHERE `userid`=&#039;test&#039;;&amp;lt;br /&amp;gt; DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des groupes ===&lt;br /&gt;
&lt;br /&gt;
==== Affecter un utilisateur à un groupe ====&lt;br /&gt;
&lt;br /&gt;
Affecte l&#039;utilisateur &#039;test&#039; au groupe &#039;group_test&#039; avec les droits de groupe (GID) du groupe 5500&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpgroup` ( `groupname` , `gid` , `members` ) VALUES (&#039;group_test&#039;, &#039;5500&#039;, &#039;test&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Enlever un utilisateur d&#039;un groupe ====&lt;br /&gt;
&lt;br /&gt;
Enlève l&#039;utilisateur &#039;test&#039; du groupe &#039;group_test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des quotas ===&lt;br /&gt;
&lt;br /&gt;
La table &#039;ftpquotalimits&#039; contient la description des quotas.&amp;lt;br /&amp;gt; La table &#039;ftpquotatotal&#039; contient les statistiques d&#039;utilisation correspondant aux règles des quotas défini dans la table &#039;ftpquotalimits&#039;. Cette table permet à ProFTPd de gérer les quotas.&lt;br /&gt;
&lt;br /&gt;
==== Ajouter une règles de quotas ====&lt;br /&gt;
&lt;br /&gt;
Exécuter la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpquotalimits` ( `name`, `quota_type`, `par_session`, `limit_type`, `bytes_up_limit`, `bytes_down_limit`, `bytes_transfer_limit`, `files_up_limit`, `files_down_limit`, `files_transfer_limit` )&amp;lt;br /&amp;gt; VALUES ( &#039;NOM&#039; , &#039;TYPE&#039;, &#039;SESSION&#039;, &#039;LIMIT_TYPE&#039;, &#039;B_UP&#039;, &#039;B_DOWN&#039;, &#039;B_TRANS&#039;, &#039;F_UP&#039;, &#039;F_DOWN&#039;, &#039;F_TRANS&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
où&lt;br /&gt;
&lt;br /&gt;
* NOM : nom de l&#039;utilisateur, du groupe ou de la règle selon la valeur de TYPE.&lt;br /&gt;
* TYPE : &#039;user&#039; si le quota s&#039;applique à un utilisateur, &#039;group&#039; à un groupe, &#039;class&#039; à une classe (ici inutile), &#039;all&#039; à tous les utilisateurs.&lt;br /&gt;
* SESSION : &#039;true&#039; si les quotas doivent être remis à zéro à chaque nouvelle session, &#039;false&#039; sinon. (&#039;false&#039; est conseillé).&lt;br /&gt;
* LIMIT_TYPE : &#039;soft&#039; pour une mesure logicielle de la taille, &#039;hard&#039; pour une mesure hardware.&lt;br /&gt;
* B_UP : taille (en Mbytes) autorisé à être uploadé sur le serveur.&lt;br /&gt;
* B_DOWN : taille (en Mbytes) autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* B_TRANS : taille (en Mbytes) autorisé à transféré à sur et à partir du serveur (upload+download).&lt;br /&gt;
* F_UP : nombre de fichiers autorisé à être uploadé sur le serveur.&lt;br /&gt;
* F_DOWN : nombre de fichiers autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* F_TRANS : nombre de fichiers autorisé à transféré à sur et à partir du serveur (upload+download).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Pour définir un quota ilimité à un des champs, mettez une valeur négative ou nulle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Les quotas de type &#039;all&#039;, &#039;class&#039; ou &#039;group&#039; ne définissent pas un quota pour chaque utilisateur mais un quota partagé par tous les utlisateurs concernés par cette règle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Réinitialiser les quotas ====&lt;br /&gt;
&lt;br /&gt;
Il suffit de supprimer l&#039;entrée (ligne) correspondant à la règle devant être réinitialisé. Par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpquotatotal` WHERE `name`=&#039;test&#039; AND `quota_type`=&#039;user&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez réinitialiser tous les quotas, par exemple tous les mois, faîtes une tâc;he cron se connectant sur le serveur et executant la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;TRUNCATE TABLE `ftpquotatotal`;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Et voilà, c&#039;est terminé... Vous n&#039;avez plus qu&#039;à tester ;-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par space2d le 24/04/2005.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 24/04/2005, space2d&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10741</id>
		<title>Iptables</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10741"/>
		<updated>2005-11-15T13:09:58Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* 2.2.1/ Commandes principales */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= IpTables par l&#039;exemple =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Arnaud de Bermingham&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Contact : [mailto:duracell chez apinc point org  duracell chez apinc point org]&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Jice &amp;lt;[mailto:jice chez lea-linux point org jice chez lea-linux point org]&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Fred &amp;lt;[mailto:fred chez lea-linux point org fred chez lea-linux point org]&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cet article présente de façon pratique la mise en place d&#039;un firewall / proxy sur une machine Linux tournant avec un noyau 2.4. &amp;lt;br /&amp;gt;Pour des informations plus théoriques sur les firewall/proxies, vous pouvez lire [http://lea-linux.org/cached/index/Reseau-secu-firewall.html# l&#039;article firewall].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Présentation d&#039;IpTables&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
IpTables est une solution complète de firewall (noyau 2.4) remplaçant &#039;&#039;ipchains&#039;&#039; (noyau 2.2) tournant sous le système GNU/Linux. IpTables permet de faire du firewalling &#039;&#039;stateful&#039;&#039; (à états), de la translation de port et d&#039;adresse, du filtrage au niveau 2 et beaucoup d&#039;autres choses que nous n&#039;allons pas aborder comme le &amp;quot;Mangle&amp;quot; ou modification des paquets à la volée (atchoum).&lt;br /&gt;
&lt;br /&gt;
IpTables est fiable et dispose de très nombreuses options qui permettent de faire du filtrage très fin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de cet article&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Cette documentation est sous licence LDP&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de NetFilter&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
NetFilter est sous licence libre GPL, i.e. gratuit et modifiable du moment que les modifications et améliorations apportées soit rendues publiques.&lt;br /&gt;
&lt;br /&gt;
== 1/ Installation ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1/ Prérequis ===&lt;br /&gt;
&lt;br /&gt;
IpTables est installé en standard sur de nombreuses distributions Linux récentes. En particulier, il est installé sur Linux RedHat 7.1 et sur la plupart des distributions basées sur un kernel 2.4.x.&lt;br /&gt;
&lt;br /&gt;
IpTables a besoin d&#039;un &#039;&#039;&#039;kernel de génération 2.4&#039;&#039;&#039; compilé avec des options spéciales. Ceci ne pose pas de problèmes avec les noyaux 2.4 génériques des principales distributions basées sur cette génération de kernel.&lt;br /&gt;
&lt;br /&gt;
=== 1.2/ Options de compilation du kernel ===&lt;br /&gt;
&lt;br /&gt;
Si vous désirez re-compiler votre kernel, il faut spécifier les options nécessaires au fonctionnement d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
Les options suivantes doivent êtres activées en module (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;) ou dans le kernel (&amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_PACKET&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_NETFILTER&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_CONNTRACK&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FTP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IRC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IPTABLES&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FILTER&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_NAT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_STATE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_LOG&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_LIMIT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et éventuellement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPCHAINS&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipchains&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPFWADM&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipfwadm&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_REDIRECT&amp;lt;/tt&amp;gt; indispensable, pour les proxies transparents par exemple. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_MAC&amp;lt;/tt&amp;gt; permet de matcher avec les adresses MAC.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier le support réseau et TCP/IP et compiler le kernel comme d&#039;habitude : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make dep &amp;amp;&amp;amp; make clean &amp;amp;&amp;amp; make bzImage &amp;amp;&amp;amp; make modules &amp;amp;&amp;amp; make modules_install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3/ Installation ===&lt;br /&gt;
&lt;br /&gt;
Sur une RedHat 7.1, récupérer le package &amp;lt;tt&amp;gt;netfilter&amp;lt;/tt&amp;gt; et l&#039;installer comme d&#039;habitude avec &amp;lt;tt&amp;gt;rpm -Uvh netfilter-x.y.z.rpm&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Sur les versions inférieures a la 7.1, il faut compiler un kernel 2.4 car iptables ne supporte pas les kernels 2.2.x. La compilation de iptables est complexe. Le mieux est de lire le fichier INSTALL du package des sources.&lt;br /&gt;
&lt;br /&gt;
=== 1.4/ Chargement des modules ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas ou les options iptables du kernel ont étés compilées en modules, il est nécessaire de charger ces modules avant de pouvoir utiliser iptables :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_tables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
selon les besoins, on peut éventuellement charger les modules suivants :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_ftp&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_irc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_filter&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_mangle&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si on a besoin de pouvoir rediriger (forward) les paquets IP arrivant sur un interface réseau (connectée par exemple à Internet) vers une autre interface réseau (connectée par exemple au réseau local), il sera nécessaire, dans la plupart des cas, d&#039;exécuter cette commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
afin de l&#039;indiquer au noyau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota Bene :&#039;&#039;&#039; tous les modprobe semblent inutiles car le kernel les chargent automatiquement si l&#039;on se sert de l&#039;une des fonctionnalités d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
== 2/ Présentation ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1/ Les tables ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Table NAT&#039;&#039;&#039; (Network Address Translation) : Table utilisée pour la translation d&#039;adresse ou la translation de port. &amp;lt;br /&amp;gt;Il a 2 types de chaînes&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; : &#039;&#039;PREROUTING&#039;&#039; qui permet de spécifier &amp;quot;à l&#039;arrivée du firewall&amp;quot; et la chaîne &#039;&#039;POSTROUTING&#039;&#039; qui permet de spécifier &amp;quot;à la sortie du firewall&amp;quot;. Il existe 3 targets (ou cibles) : &#039;&#039;DNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;, SNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039; et &#039;&#039;MASQUERADE&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table FILTER&#039;&#039;&#039; : C&#039;est la table par défaut lorsque l&#039;on en spécifie pas. &amp;lt;br /&amp;gt;Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes : &#039;&#039;FORWARD&#039;&#039; pour les paquets passant par le firewall, &#039;&#039;INPUT&#039;&#039; pour les paquets entrant et &#039;&#039;OUTPUT&#039;&#039; pour les paquets sortants. Les cibles disponibles sont : &#039;&#039;ACCEPT, DENY, DROP, REJECT Â°&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table Mangle&#039;&#039;&#039; : C&#039;est la table qui contient les règles pour la modification de paquets. &amp;lt;br /&amp;gt;Elle est peu utilisée et ne sera pas décrite dans cet article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;A noter&amp;lt;/u&amp;gt; : Les règles sont évaluées dans l&#039;ordre, par défaut la table &#039;&#039;FILTER&#039;&#039; est vide et donc accepte tout. Aucune règle de translation d&#039;adresse n&#039;est présente par défaut.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;u&amp;gt;chaîne&amp;lt;/u&amp;gt;&lt;br /&gt;
: une chaîne est une suite de règles, qui sont prises dans l&#039;ordre ; dès qu&#039;une règle s&#039;applique à un paquet, elle est déclenchée, et la suite de la chaîne est ignorée.&lt;br /&gt;
; * &amp;lt;u&amp;gt;SNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse source du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;DNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse destination du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;MASQUERADE&amp;lt;/u&amp;gt;&lt;br /&gt;
: Une passerelle (gateway) transforme les paquets sortants passant par elle pour donner l&#039;illusion qu&#039;ils sortent de la passerelle elle-même par un port alloué dynamiquement ; lorsque la passerelle recoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu&#039;elle gère pour lui faire suivre le paquet.&lt;br /&gt;
; Â° &amp;lt;u&amp;gt;policy ACCEPT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet d&#039;accepter un paquet grâce à la règle vérifiée.&lt;br /&gt;
; Â° &amp;lt;u&amp;gt;policy DROP&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet d&#039;un paquet sans message d&#039;erreur si la règle est vérifiée (&amp;quot;non ! j&#039;en veux pas mais je dis rien à l&#039;expediteur&amp;quot;).&lt;br /&gt;
; Â° &amp;lt;u&amp;gt;policy REJECT&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet avec un retour de paquet d&#039;erreur à l&#039;expediteur si la règle est verifiée (&amp;quot;un paquet recommandé de La Poste refusé par son destinataire&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== 2.2/ Les commandes ===&lt;br /&gt;
&lt;br /&gt;
IpTables n&#039;est pas livré avec une interface graphique ; les commandes et les règles sont passées en ligne de commande. Le mieux est d&#039;écrire des scripts (à rajouter dans &amp;lt;tt&amp;gt;/etc/rc.d/init.d&amp;lt;/tt&amp;gt;) qui permettent d&#039;appliquer toutes les règles d&#039;un seul coup, dès le démarrage du Linux.&lt;br /&gt;
&lt;br /&gt;
==== 2.2.1/ Commandes principales ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-A --append&amp;lt;/tt&amp;gt; : Ajoute la règle à la fin de la chaîne spécifiée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT ...&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-D --delete&amp;lt;/tt&amp;gt; : Permet de supprimer une chaîne. On peut l&#039;utiliser de 2 manières, soit en spécifiant le numéros de la chaîne a supprimer, soit en spécifiant la règle à retirer. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT --dport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-R --replace&amp;lt;/tt&amp;gt; : Permet de remplacer la chaîne spécifiée. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -R INPUT 1 -s 192.168.0.1 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-I --insert&amp;lt;/tt&amp;gt; : Permet d&#039;ajouter une chaîne dans un endroit spécifié de la chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -I INPUT 1 --dport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-L --list&amp;lt;/tt&amp;gt; : Permet d&#039;afficher les règles. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L        &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles des chaînes de FILTER&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L INPUT  &amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles de INPUT (FILTER)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-F --flush&amp;lt;/tt&amp;gt; : Permet de vider toutes les règles d&#039;une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -F INPUT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-N --new-chain&amp;lt;/tt&amp;gt; : Permet de créer une nouvelle chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -N LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-X --delete-chain&amp;lt;/tt&amp;gt; : Permet d&#039;effacer une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -X LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-P --policy&amp;lt;/tt&amp;gt; : Permet de spécifier au noyau la politique par défaut d&#039;une chaîne DENY, ACCEPT, REJECT, DROP ... &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -P INPUT DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.2/ Commandes pour matcher ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarques&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;!&amp;quot; peut être utilisé pour certaines commandes afin de spécifier le contraire (on peut le traduire par &amp;quot;sauf&amp;quot;). Par exemple une commande qui doit refuser tout trafic TCP sauf ce qui provient de l&#039;adresse IP 10.42.42.42 sera traduite par la commande suivante : &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --source ! 10.42.42.42 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les adresses IP peuvent optionnellement être spécifiées avec le masque associé sous la forme [adresse ip]/[masque].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-p --protocol&amp;lt;/tt&amp;gt; : Spécifier un protocole : &amp;lt;tt&amp;gt;tcp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;udp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;icmp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;all&amp;lt;/tt&amp;gt; (tous) &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-s --source&amp;lt;/tt&amp;gt; : Spécifier une adresse source à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -s 192.168.42.42 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-d --destination&amp;lt;/tt&amp;gt; : Spécifier une adresse destination &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-i --in-interface&amp;lt;/tt&amp;gt; : Spécifier une interface d&#039;entrée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -i eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-o --out-interface&amp;lt;/tt&amp;gt; : Spécifier une interface de sortie &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p icmp -o eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-f --fragment&amp;lt;/tt&amp;gt; : Paquet fragmenté &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -f -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--sport --source-port&amp;lt;/tt&amp;gt; : Spécifier le port source ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt; permet de &amp;lt;br /&amp;gt;spécifier plusieurs ports à matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --sport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp -m multiport --sport 3128,21,1000 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp --sport 1024:2042 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--dport --destination-port&amp;lt;/tt&amp;gt; : Spécifier le port destination ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;permet de spécifier plusieurs ports a matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -m multiport --dport 110,4242,119 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 4925:4633 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--tcp-flags&amp;lt;/tt&amp;gt; : Spécifier un flag tcp à matcher : &amp;lt;tt&amp;gt;SYN ACK FIN RST URG PSH ALL NONE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--icmp-type&amp;lt;/tt&amp;gt; : Spécifier un type de paquet icmp à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp --icmp-type 8 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--mac-source&amp;lt;/tt&amp;gt; : Spécifier l&#039;adresse MAC à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT --mac-source 42.42.AA.42.42.AA -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--state&amp;lt;/tt&amp;gt; : Permet de spécifier l&#039;état du paquet à matcher parmi les états suivants : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; ESTABLISHED &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion déjà établie &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; NEW         &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet demandant une nouvelle connexion &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; INVALID     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion inconnue &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; RELATED     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: Nouvelle connexion mais liée, idéal pour les connexions FTP &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités NAT&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-destination&amp;lt;/tt&amp;gt; : Utilisé en target pour le DNAT, permet de spécifier l&#039;adresse de destination de la translation, on peut également spécifier un port s&#039;il est différent du port source. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d 42.12.42.12 -p tcp --dport 110 -j DNAT --to-destination 192.168.1.2:6110&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d ! 42.12.42.12 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-source&amp;lt;/tt&amp;gt; : Utilisé pour en target pour le SNAT, permet de spécifier l&#039;adresse source de la translation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités pour les LOGS&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-level&amp;lt;/tt&amp;gt; : Level, niveau de log &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-prefix&amp;lt;/tt&amp;gt; : Permet de spécifier un préfixe pour les logs. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.3/ Quelques exemples : ====&lt;br /&gt;
&lt;br /&gt;
Les exemples qui suivent supposent que vous êtes reliés à internet par modem via l&#039;interface ppp0 (mais en remplaçant ppp0 par eth0 - par exemple, on peut adapter les exemples pour d&#039;autres type de liaisons) et que votre réseau local est 192.168.1.0/24 (classe C).&lt;br /&gt;
&lt;br /&gt;
* Pour fixer les &#039;&#039;&#039;politiques par défaut&#039;&#039;&#039; (cad: ce qui se passe quand aucune règle ne correspond - ne matche pas), ici, on refuse tout (normal, on fait un firewall, oui ou non ?) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -P INPUT DROP&amp;lt;br /&amp;gt; iptables -P OUTPUT DROP&amp;lt;br /&amp;gt; iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;logguer&#039;&#039;&#039; tout ce qu&#039;on jette : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -N LOG_DROP&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j LOG --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Et ensuite, plutôt que de mettre &amp;lt;tt&amp;gt;-j DROP&amp;lt;/tt&amp;gt;, il faut mettre &amp;lt;tt&amp;gt;-j LOG_DROP&amp;lt;/tt&amp;gt; et les trois dernières règles doivent être : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A FORWARD -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A INPUT -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A OUTPUT -j LOG_DROP &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur l&#039;interface &amp;lt;tt&amp;gt;lo&amp;lt;/tt&amp;gt; (sinon ce n&#039;est pas la peine d&#039;activer le réseau !) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i lo -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o lo -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur le &#039;&#039;&#039;réseau local&#039;&#039;&#039; &amp;lt;tt&amp;gt;192.168.1.0&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter les résolutions de nom (ie: le &#039;&#039;&#039;dns&#039;&#039;&#039;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol udp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol udp --destination-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter le traffic &#039;&#039;&#039;web&#039;&#039;&#039; (on veut surfer!) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; La première ligne pour accepter ce qui entre sur notre interface ppp0 sur le port 80 (le port http) si c&#039;est une connexion déjà établie, la seconde pour accepter ce qui sort sur ppp0 sur le port 80 si c&#039;est une nouvelle connexion ou si c&#039;est une connexion déjà établie. &lt;br /&gt;
Pour autoriser le &#039;&#039;&#039;ssh&#039;&#039;&#039;, il faut préciser le port 22; pour autoriser l&#039;&#039;&#039;&#039;irc&#039;&#039;&#039;, le port 6667 (ou celui que vous utilisez pour vous connecter à votre serveur); pour le &#039;&#039;&#039;smtp&#039;&#039;&#039; (envoi d&#039;emails), le port 25; pour le &#039;&#039;&#039;pop3&#039;&#039;&#039; (réception d&#039;emails), le port 110; pour le &#039;&#039;&#039;imap&#039;&#039;&#039; (réception d&#039;emails), les ports 143 et 220 (&#039;&#039;&#039;imap3&#039;&#039;&#039;) ; pour le &#039;&#039;&#039;cvs&#039;&#039;&#039;, le port 2401 ; pour le &#039;&#039;&#039;https&#039;&#039;&#039;, le port 443. De manière générale, le numéros de port se trouvent dans /etc/services.&lt;br /&gt;
* Pour le &#039;&#039;&#039;ftp&#039;&#039;&#039; c&#039;est un peu plus complexe. D&#039;abord, il faut charger le module : &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; (c&#039;est lui qui suit - track en anglais - les connexions ftp) et, si vous &#039;&#039;nat&#039;&#039;ez (en utilisant le masquerading par exemple) vos connexions ftp vers d&#039;autres postes le module : &amp;lt;tt&amp;gt;ip_nat_ftp&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; modprobe ip_conntrack_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; # éventuellement : &amp;lt;tt&amp;gt; modprobe ip_nat_ftp&amp;lt;/tt&amp;gt; &amp;lt;/blockquote&amp;gt; Ensuite, il faut taper les commandes suivantes : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Cela pour que la connexion puisse s&#039;établir. Ensuite (et c&#039;est la qu&#039;on a besoin de &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que serveur puisse établir la connexion pour les données (en mode actif). Et enfin : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que le serveur puisse établir la connexion pour les données (en mode passif). Ici aussi &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; est nécessaire. &lt;br /&gt;
* Pour &#039;&#039;&#039;partager une connexion&#039;&#039;&#039;, il faut que le forwarding soit activé dans le noyau (&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;), puis il faut autoriser iptable à faire le forwarding : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -F FORWARD&amp;lt;br /&amp;gt; iptables -A FORWARD -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et enfin, cacher les machines forward-ées par le firewall : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Sur chaque machine devant être cachée par le firewall (ou devant partager la connexion avec la machine qui est connectée à internet), il faut ajouter une route par defaut : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; route add default gw 192.168.1.1 &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Si la machine connectée à internet a comme ip : 192.168.1.1. Il suffit avec une redhat/mandrake d&#039;éditer : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/sysconfig/network&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et d&#039;ajouter dedans : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;GATEWAY=192.168.1.1&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; puis de redémarer le réseau :&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/rc.d/init.d/network restart&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 3/ Application par l&#039;exemple ==&lt;br /&gt;
&lt;br /&gt;
Nous allons mettre en place un firewall / proxy.&lt;br /&gt;
&lt;br /&gt;
Pour cet exemple, le firewall aura la connexion à Internet (interface eth2) et disposera de 2 pattes sur des réseaux privés (eth0 et eth1) :&lt;br /&gt;
&lt;br /&gt;
* il fait office de proxy sur le port 3128 pour un réseau qui aura ainsi un accès internet&lt;br /&gt;
* et une DMZ&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; (&amp;quot;zone démilitarisée&amp;quot;) sur laquelle il y a un ensemble de serveurs disponibles de l&#039;extérieur dont un serveur web qui a pour adresse 192.168.1.2 écoutant sur le port 80 en TCP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;Â Â  ____Â Â Â Â Â Â Â Â Â Â Â Â Â  &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;eth1&amp;lt;/font&amp;gt;&#039;&#039;&#039; &#039;&#039;&#039;.-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt; Â _/Â Â Â  \_Â Â Â Â Â Â  ____ &amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;3128&amp;lt;/font&amp;gt;&#039;&#039;&#039;/&#039;&#039;&#039;Â Â Â Â  [PC1]Â  [PC2]Â  [PC3]Â &amp;lt;br /&amp;gt; (Â Â Â Â Â Â Â  ) &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;eth2&amp;lt;/font&amp;gt;&#039;&#039;&#039;|Â Â Â  |&#039;&#039;&#039;&amp;lt;--&#039;&#039;&#039;&#039;Â Â  &amp;lt;u&amp;gt;réseau local&amp;lt;/u&amp;gt; 198.168.2.0&amp;lt;br /&amp;gt; (INTERNET)&#039;&#039;&#039;&amp;lt;---&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;Fire&#039;&#039;&#039;|&amp;lt;br /&amp;gt; (_Â Â Â Â Â  _) &amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;ppp0&amp;lt;/font&amp;gt;|&#039;&#039;&#039;wall&#039;&#039;&#039;|&amp;lt;br /&amp;gt; Â  \____/Â Â Â Â Â Â  |____|&#039;&#039;&#039;&amp;lt;--.&#039;&#039;&#039;Â Â  &amp;lt;u&amp;gt;DMZ serveurs&amp;lt;/u&amp;gt; 198.168.1.0&amp;lt;br /&amp;gt; Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#3333FF&amp;quot;&amp;gt;eth0&amp;lt;/font&amp;gt;\&#039;&#039;&#039;Â Â Â Â  [WEB]Â  [NEWS] [FTP]&amp;lt;br /&amp;gt; Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  &#039;&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;&#039;&#039;ASCIIArt (c) Jice&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe d&#039;adresse IP 192.168.2.0 correspond au réseau interne sur l&#039;interface &amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;La classe d&#039;adresse IP 192.168.1.0 correspond a la DMZ sur l&#039;interface &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;L&#039;interface de la connexion Internet est ppp0 sur l&#039;interface &amp;lt;tt&amp;gt;eth2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;u&amp;gt;DMZ, ou zone démilitarisée&amp;lt;/u&amp;gt;&lt;br /&gt;
: Sous-réseau dans lequel des serveurs accessibles depuis internet sont en adressage privé (classe d&#039;adresse IP réservée comme 192.168.x.x) derrière un firewall.&lt;br /&gt;
&lt;br /&gt;
=== 3.1/ Le script init.d ===&lt;br /&gt;
&lt;br /&gt;
Nous allons écrire un script qui permettra de charger automatiquement au démarrage de la machine ou sur demande les règles du firewall qui seront stockées dans le fichier &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Le script de démarrage sera nommé &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt;. Bien sûr, on n&#039;oubliera pas d&#039;exécuter un &amp;lt;tt&amp;gt;chmod +x&amp;lt;/tt&amp;gt; sur les 2 scripts que nous allons créer au long de ce chapitre.&lt;br /&gt;
&lt;br /&gt;
Go ! &amp;lt;br /&amp;gt;Fichier de chargement &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt;Â &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lancement du script de Firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;. /etc/init.d/functions&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;RETVAL=0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour le lancement du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;start() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  echo -n &amp;quot;Application des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  /etc/firewall.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour arrêter le firewall (on flush)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;stop() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  echo -n &amp;quot;Flush des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  /etc/flush_iptables.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;case $1 in&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  start)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  stop)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  restart)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  status)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  /sbin/iptables -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  /sbin/iptables -t nat -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â  *)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  echo &amp;quot;Usage: firewall {start|stop|restart|status}&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Â Â Â  RETVAL=1&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;esac&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est tout simple non ?&lt;br /&gt;
&lt;br /&gt;
=== 3.2/ Le script pour flusher (vider) les règles ===&lt;br /&gt;
&lt;br /&gt;
Et maintenant : &amp;lt;tt&amp;gt;/etc/flush_iptables.sh&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#Â &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script pour vider les règles iptables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet la police par défaut à ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P INPUT ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet les polices par défaut pour la table NAT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P PREROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P POSTROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On vide (flush) toutes les règles existantes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -F&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Et enfin, on efface toutes les chaînes qui ne&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sont pas à defaut dans la table filter et nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Message de fin&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, on va enfin commencer les choses sérieuses : le script du firewall :)&lt;br /&gt;
&lt;br /&gt;
=== 3.3/ Les prérequis pour le script du firewall et création des tables pour les logs ===&lt;br /&gt;
&lt;br /&gt;
Le script sera commenté au fur et à mesure, afin de décrire chaque étape. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# script &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;/etc/firewall.sh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall d&#039;exemple a but pédagogique&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Activation du forwarding&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est pas pour faire joli, on aura des règles&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# de forward et il faut bien que les paquets&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# traversent la machine, donc on met ce fichier à 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Alors la, on va appliquer quelques astuces&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# pour empêcher les attaques de type &amp;lt;/nowiki&amp;gt;&#039;&#039;spoofing&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et bloquer les réponses ICMP du firewall,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# comme ça c&#039;est très propre. Attention, le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# fait de bloquer le trafic ICMP sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le firewall bloque les pings.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je veux &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de spoofing&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;then&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  do&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo 1 &amp;gt; $filtre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  done&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de icmp&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_all&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va utiliser iptables. Si on l&#039;a compilé en module&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dans le kernel, il faut &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;charger le module ip_tables&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_tables&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on va charger quelques &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;modules supplémentaires&#039;&#039;&#039; pour&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# gérer la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;translation&#039;&#039;&#039; d&#039;adresse, l&#039;&#039;&#039;&#039;IRC&#039;&#039;&#039; et le &#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tu me fait 4 pompes. Chef oui chef !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_nat_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe ip_nat_irc&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_nat&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire bien, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;vider toutes les règles&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# avant d&#039;appliquer les nouvelles règles de firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va rajouter 2 nouvelles &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;chaînes&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci permettra d&#039;ajouter des nouvelles cibles qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# auront la possibilité de loguer ce qui se passe.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La on logue et on refuse le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ici, on logue et on accepte le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES ACCEPT] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut faire un firewall efficace,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# donc la politique a appliquer est de tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# refuser par défaut et rajouter une a une&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les règles que l&#039;on autorise.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bien sur, on a RTFM un peu et on a vu que&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;option -P permet de définir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la cible par défaut&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -P INPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour éviter les problèmes, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;tout accepter sur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la machine en local&#039;&#039;&#039; (interface lo).&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je déconseille de retirer cette règle car&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ça pose pas mal de problèmes et ça peut&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# faire perdre la main sur la machine&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT  -i lo -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o lo -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, la partie initialisation et préparation est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# terminée, passons aux choses sérieuses&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Comme on l&#039;a dit dans la présentation de&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;architecture réseau, le firewall fait&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# également office de proxy grâce par exemple&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à un squid installé dessus. On va donc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# accepter que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy&#039;&#039;&#039; ait une &#039;&#039;&#039;connexion&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet directe&#039;&#039;&#039;. Tant qu&#039;à faire, on va&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mettre des états pour que ça soit bien sécurisé&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A OUTPUT -o ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT  -i ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant, on va faire en sorte que le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy soit totalement transparent pour le LAN&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# bénéficiant de la connexion internet.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# L&#039;astuce consiste a rediriger toutes les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# requêtes ayant un port de destination 80&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# vers le port 3128 du proxy, ici c&#039;est le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall (qui est sur le firewall et qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# a l&#039;adresse IP 192.168.2.1 ).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une règle de NAT suffira largement pour faire ça.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -i eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, c&#039;est pas trop compliqué ! Maintenant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on sait que l&#039;on a un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;serveur web sur la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (la machine d&#039;adresse IP 192.168.1.2) sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le port 80. On souhaite que toutes les requêtes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# provenant d&#039;internet arrivant sur l&#039;adresse IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# publique du serveur ( ici 42.42.42.42 ) soit&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# redirigées sur le serveur web de la DMZ.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Rien de bien compliqué. Dans l&#039;exemple,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on peut retirer le :80 de la target&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# --to-destination&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -d 42.42.42.42 \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est bien tout ça ! mais le problème c&#039;est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# que les chaînes de la table FILTER sont toutes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à DENY, donc tout ceci ne fait rien du tout.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va donc passer a la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;configuration du&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;firewall&#039;&#039;&#039; proprement dit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va quand même &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;accepter les connexions ssh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (port 22) provenant d&#039;une machine (la votre en&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;occurrence, on va dire 192.168.2.42) vers le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall pour pouvoir modifier les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facilement pour bien surveiller, on vas quand&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# même loguer les connexions provenant de mon IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et à destination du ssh du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT -i eth1 -s 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o eth1 -d 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; connecté à l&#039;interface&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# eth1 ait un accès complet à &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La règle de NAT qui permettait d&#039;avoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy transparent&#039;&#039;&#039; sera automatiquement&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# appliqué. L&#039;interface correspondant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à la connexion internet est ici ppp0&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o eth1 -i ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant on donne le droit au &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; de&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;consulter les pages web du serveur de la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth0 -o eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il n&#039;y a plus qu&#039;à dire au firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# d&#039;autoriser à transmettre des paquets TCP à&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# destination du port 80 provenant de l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique (i.e. d&#039;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;) &#039;&#039;&#039;vers le serveur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;web de la DMZ&#039;&#039;&#039; que nous avons naté précédemment.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i ppp0 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --destination-port 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o ppp0 -i eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --source-port 80      -m state --state ESTABLISHED     -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il ne reste plus grand chose à faire !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut permettre à l&#039;ensemble du LAN de dialoguer&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sur internet avec la même adresse IP sinon, bien&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# évidemment ça ne marchera pas (à moins que vous&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ayez 30 adresses ip !).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une petite règle de NAT avec un -j MASQUERADE&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# suffira (masquerade = dialoguer avec l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique sur firewall)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.2.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut également que le serveur web de la DMZ&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# soit masqueradé sinon, le serveur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dialoguera sur internet avec son IP privée&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.1.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Toutes les règles qui n&#039;ont pas passé les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# règles du firewall seront refusées et loguées...&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facile :&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire zoli&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [Termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# c&#039;est enfin fini&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! le firewall de compèt&#039; est prêt et fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Ceci était bien évidemment un exemple, vous pouvez dès à présent préparer votre propre firewall personnalisé ! &amp;lt;br /&amp;gt;Vous pouvez l&#039;adapter à vos besoins, votre connexion vers internet (par ADSL par exemple), etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Arnaud de Bermingham le 12/11/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|12/11/2001|Arnaud de Bermingham|CC-BY-NC-SA}}&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
Le [http://lea-linux.org/trucs/index.php3?aff_item=272 partage de connexion] facile.&lt;br /&gt;
&lt;br /&gt;
Tester votre firewall [http://grc.com/default.htm là].&lt;br /&gt;
&lt;br /&gt;
Cliquez sur &#039;ShieldsUP!&#039;, puis sur l&#039;un des boutons : &#039;Test My Shields !&amp;quot; et &amp;quot;Probe My Ports !&amp;quot;. Ça vaut pas un bon &amp;lt;tt&amp;gt;nmap&amp;lt;/tt&amp;gt; fait par un ami, mais ça permet de voir ou on en est.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10740</id>
		<title>Iptables</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10740"/>
		<updated>2005-11-15T13:03:46Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* 2.1/ Les tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= IpTables par l&#039;exemple =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Arnaud de Bermingham&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Contact : [mailto:duracell chez apinc point org  duracell chez apinc point org]&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Jice &amp;lt;[mailto:jice chez lea-linux point org jice chez lea-linux point org]&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Fred &amp;lt;[mailto:fred chez lea-linux point org fred chez lea-linux point org]&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cet article présente de façon pratique la mise en place d&#039;un firewall / proxy sur une machine Linux tournant avec un noyau 2.4. &amp;lt;br /&amp;gt;Pour des informations plus théoriques sur les firewall/proxies, vous pouvez lire [http://lea-linux.org/cached/index/Reseau-secu-firewall.html# l&#039;article firewall].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Présentation d&#039;IpTables&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
IpTables est une solution complète de firewall (noyau 2.4) remplaçant &#039;&#039;ipchains&#039;&#039; (noyau 2.2) tournant sous le système GNU/Linux. IpTables permet de faire du firewalling &#039;&#039;stateful&#039;&#039; (à états), de la translation de port et d&#039;adresse, du filtrage au niveau 2 et beaucoup d&#039;autres choses que nous n&#039;allons pas aborder comme le &amp;quot;Mangle&amp;quot; ou modification des paquets à la volée (atchoum).&lt;br /&gt;
&lt;br /&gt;
IpTables est fiable et dispose de très nombreuses options qui permettent de faire du filtrage très fin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de cet article&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Cette documentation est sous licence LDP&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de NetFilter&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
NetFilter est sous licence libre GPL, i.e. gratuit et modifiable du moment que les modifications et améliorations apportées soit rendues publiques.&lt;br /&gt;
&lt;br /&gt;
== 1/ Installation ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1/ Prérequis ===&lt;br /&gt;
&lt;br /&gt;
IpTables est installé en standard sur de nombreuses distributions Linux récentes. En particulier, il est installé sur Linux RedHat 7.1 et sur la plupart des distributions basées sur un kernel 2.4.x.&lt;br /&gt;
&lt;br /&gt;
IpTables a besoin d&#039;un &#039;&#039;&#039;kernel de génération 2.4&#039;&#039;&#039; compilé avec des options spéciales. Ceci ne pose pas de problèmes avec les noyaux 2.4 génériques des principales distributions basées sur cette génération de kernel.&lt;br /&gt;
&lt;br /&gt;
=== 1.2/ Options de compilation du kernel ===&lt;br /&gt;
&lt;br /&gt;
Si vous désirez re-compiler votre kernel, il faut spécifier les options nécessaires au fonctionnement d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
Les options suivantes doivent êtres activées en module (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;) ou dans le kernel (&amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_PACKET&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_NETFILTER&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_CONNTRACK&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FTP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IRC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IPTABLES&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FILTER&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_NAT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_STATE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_LOG&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_LIMIT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et éventuellement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPCHAINS&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipchains&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPFWADM&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipfwadm&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_REDIRECT&amp;lt;/tt&amp;gt; indispensable, pour les proxies transparents par exemple. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_MAC&amp;lt;/tt&amp;gt; permet de matcher avec les adresses MAC.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier le support réseau et TCP/IP et compiler le kernel comme d&#039;habitude : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make dep &amp;amp;&amp;amp; make clean &amp;amp;&amp;amp; make bzImage &amp;amp;&amp;amp; make modules &amp;amp;&amp;amp; make modules_install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3/ Installation ===&lt;br /&gt;
&lt;br /&gt;
Sur une RedHat 7.1, récupérer le package &amp;lt;tt&amp;gt;netfilter&amp;lt;/tt&amp;gt; et l&#039;installer comme d&#039;habitude avec &amp;lt;tt&amp;gt;rpm -Uvh netfilter-x.y.z.rpm&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Sur les versions inférieures a la 7.1, il faut compiler un kernel 2.4 car iptables ne supporte pas les kernels 2.2.x. La compilation de iptables est complexe. Le mieux est de lire le fichier INSTALL du package des sources.&lt;br /&gt;
&lt;br /&gt;
=== 1.4/ Chargement des modules ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas ou les options iptables du kernel ont étés compilées en modules, il est nécessaire de charger ces modules avant de pouvoir utiliser iptables :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_tables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
selon les besoins, on peut éventuellement charger les modules suivants :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_ftp&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_irc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_filter&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_mangle&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si on a besoin de pouvoir rediriger (forward) les paquets IP arrivant sur un interface réseau (connectée par exemple à Internet) vers une autre interface réseau (connectée par exemple au réseau local), il sera nécessaire, dans la plupart des cas, d&#039;exécuter cette commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
afin de l&#039;indiquer au noyau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota Bene :&#039;&#039;&#039; tous les modprobe semblent inutiles car le kernel les chargent automatiquement si l&#039;on se sert de l&#039;une des fonctionnalités d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
== 2/ Présentation ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1/ Les tables ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Table NAT&#039;&#039;&#039; (Network Address Translation) : Table utilisée pour la translation d&#039;adresse ou la translation de port. &amp;lt;br /&amp;gt;Il a 2 types de chaînes&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; : &#039;&#039;PREROUTING&#039;&#039; qui permet de spécifier &amp;quot;à l&#039;arrivée du firewall&amp;quot; et la chaîne &#039;&#039;POSTROUTING&#039;&#039; qui permet de spécifier &amp;quot;à la sortie du firewall&amp;quot;. Il existe 3 targets (ou cibles) : &#039;&#039;DNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;, SNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039; et &#039;&#039;MASQUERADE&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table FILTER&#039;&#039;&#039; : C&#039;est la table par défaut lorsque l&#039;on en spécifie pas. &amp;lt;br /&amp;gt;Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes : &#039;&#039;FORWARD&#039;&#039; pour les paquets passant par le firewall, &#039;&#039;INPUT&#039;&#039; pour les paquets entrant et &#039;&#039;OUTPUT&#039;&#039; pour les paquets sortants. Les cibles disponibles sont : &#039;&#039;ACCEPT, DENY, DROP, REJECT °&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table Mangle&#039;&#039;&#039; : C&#039;est la table qui contient les règles pour la modification de paquets. &amp;lt;br /&amp;gt;Elle est peu utilisée et ne sera pas décrite dans cet article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;A noter&amp;lt;/u&amp;gt; : Les règles sont évaluées dans l&#039;ordre, par défaut la table &#039;&#039;FILTER&#039;&#039; est vide et donc accepte tout. Aucune règle de translation d&#039;adresse n&#039;est présente par défaut.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;u&amp;gt;chaîne&amp;lt;/u&amp;gt;&lt;br /&gt;
: une chaîne est une suite de règles, qui sont prises dans l&#039;ordre ; dès qu&#039;une règle s&#039;applique à un paquet, elle est déclenchée, et la suite de la chaîne est ignorée.&lt;br /&gt;
; * &amp;lt;u&amp;gt;SNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse source du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;DNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse destination du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;MASQUERADE&amp;lt;/u&amp;gt;&lt;br /&gt;
: Une passerelle (gateway) transforme les paquets sortants passant par elle pour donner l&#039;illusion qu&#039;ils sortent de la passerelle elle-même par un port alloué dynamiquement ; lorsque la passerelle recoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu&#039;elle gère pour lui faire suivre le paquet.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy ACCEPT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet d&#039;accepter un paquet grâce à la règle vérifiée.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy DROP&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet d&#039;un paquet sans message d&#039;erreur si la règle est vérifiée (&amp;quot;non ! j&#039;en veux pas mais je dis rien à l&#039;expediteur&amp;quot;).&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy REJECT&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet avec un retour de paquet d&#039;erreur à l&#039;expediteur si la règle est verifiée (&amp;quot;un paquet recommandé de La Poste refusé par son destinataire&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== 2.2/ Les commandes ===&lt;br /&gt;
&lt;br /&gt;
IpTables n&#039;est pas livré avec une interface graphique ; les commandes et les règles sont passées en ligne de commande. Le mieux est d&#039;écrire des scripts (à rajouter dans &amp;lt;tt&amp;gt;/etc/rc.d/init.d&amp;lt;/tt&amp;gt;) qui permettent d&#039;appliquer toutes les règles d&#039;un seul coup, dès le démarrage du Linux.&lt;br /&gt;
&lt;br /&gt;
==== 2.2.1/ Commandes principales ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-A --append&amp;lt;/tt&amp;gt; : Ajoute la règle à la fin de la chaîne spécifiée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT ...&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-D --delete&amp;lt;/tt&amp;gt; : Permet de supprimer une chaîne. On peut la matcher de 2 manières, soit en spécifiant le numéros de la chaîne a supprimer, soit en &amp;lt;br /&amp;gt;spécifiant la règle à retirer. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT --dport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-R --replace&amp;lt;/tt&amp;gt; : Permet contrairement à &amp;lt;tt&amp;gt;--delete&amp;lt;/tt&amp;gt; de remplacer la chaîne spécifiée. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -R INPUT 1 -s 192.168.0.1 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-I --insert&amp;lt;/tt&amp;gt; : Permet d&#039;ajouter une chaîne dans un endroit spécifié de la chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -I INPUT 1 --dport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-L --list&amp;lt;/tt&amp;gt; : Permet d&#039;afficher les règles. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L        &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles des chaînes de FILTER&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L INPUT  &amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles de INPUT (FILTER)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-F --flush&amp;lt;/tt&amp;gt; : Permet de vider toutes les règles d&#039;une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -F INPUT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-N --new-chain&amp;lt;/tt&amp;gt; : Permet de créer une nouvelle chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -N LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-X --delete-chain&amp;lt;/tt&amp;gt; : Permet d&#039;effacer une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -X LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-P --policy&amp;lt;/tt&amp;gt; : Permet de spécifier au kernel la target par défaut d&#039;une chaîne DENY, ACCEPT, REJECT, DROP ... &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -P INPUT DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.2/ Commandes pour matcher ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarques&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;!&amp;quot; peut être utilisé pour certaines commandes afin de spécifier le contraire (on peut le traduire par &amp;quot;sauf&amp;quot;). Par exemple une commande qui doit refuser tout trafic TCP sauf ce qui provient de l&#039;adresse IP 10.42.42.42 sera traduite par la commande suivante : &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --source ! 10.42.42.42 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les adresses IP peuvent optionnellement être spécifiées avec le masque associé sous la forme [adresse ip]/[masque].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-p --protocol&amp;lt;/tt&amp;gt; : Spécifier un protocole : &amp;lt;tt&amp;gt;tcp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;udp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;icmp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;all&amp;lt;/tt&amp;gt; (tous) &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-s --source&amp;lt;/tt&amp;gt; : Spécifier une adresse source à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -s 192.168.42.42 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-d --destination&amp;lt;/tt&amp;gt; : Spécifier une adresse destination &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-i --in-interface&amp;lt;/tt&amp;gt; : Spécifier une interface d&#039;entrée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -i eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-o --out-interface&amp;lt;/tt&amp;gt; : Spécifier une interface de sortie &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p icmp -o eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-f --fragment&amp;lt;/tt&amp;gt; : Paquet fragmenté &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -f -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--sport --source-port&amp;lt;/tt&amp;gt; : Spécifier le port source ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt; permet de &amp;lt;br /&amp;gt;spécifier plusieurs ports à matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --sport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp -m multiport --sport 3128,21,1000 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp --sport 1024:2042 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--dport --destination-port&amp;lt;/tt&amp;gt; : Spécifier le port destination ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;permet de spécifier plusieurs ports a matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -m multiport --dport 110,4242,119 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 4925:4633 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--tcp-flags&amp;lt;/tt&amp;gt; : Spécifier un flag tcp à matcher : &amp;lt;tt&amp;gt;SYN ACK FIN RST URG PSH ALL NONE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--icmp-type&amp;lt;/tt&amp;gt; : Spécifier un type de paquet icmp à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp --icmp-type 8 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--mac-source&amp;lt;/tt&amp;gt; : Spécifier l&#039;adresse MAC à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT --mac-source 42.42.AA.42.42.AA -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--state&amp;lt;/tt&amp;gt; : Permet de spécifier l&#039;état du paquet à matcher parmi les états suivants : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; ESTABLISHED &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion déjà établie &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; NEW         &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet demandant une nouvelle connexion &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; INVALID     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion inconnue &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; RELATED     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: Nouvelle connexion mais liée, idéal pour les connexions FTP &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités NAT&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-destination&amp;lt;/tt&amp;gt; : Utilisé en target pour le DNAT, permet de spécifier l&#039;adresse de destination de la translation, on peut également spécifier un port s&#039;il est différent du port source. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d 42.12.42.12 -p tcp --dport 110 -j DNAT --to-destination 192.168.1.2:6110&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d ! 42.12.42.12 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-source&amp;lt;/tt&amp;gt; : Utilisé pour en target pour le SNAT, permet de spécifier l&#039;adresse source de la translation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités pour les LOGS&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-level&amp;lt;/tt&amp;gt; : Level, niveau de log &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-prefix&amp;lt;/tt&amp;gt; : Permet de spécifier un préfixe pour les logs. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.3/ Quelques exemples : ====&lt;br /&gt;
&lt;br /&gt;
Les exemples qui suivent supposent que vous êtes reliés à internet par modem via l&#039;interface ppp0 (mais en remplaçant ppp0 par eth0 - par exemple, on peut adapter les exemples pour d&#039;autres type de liaisons) et que votre réseau local est 192.168.1.0/24 (classe C).&lt;br /&gt;
&lt;br /&gt;
* Pour fixer les &#039;&#039;&#039;politiques par défaut&#039;&#039;&#039; (cad: ce qui se passe quand aucune règle ne correspond - ne matche pas), ici, on refuse tout (normal, on fait un firewall, oui ou non ?) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -P INPUT DROP&amp;lt;br /&amp;gt; iptables -P OUTPUT DROP&amp;lt;br /&amp;gt; iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;logguer&#039;&#039;&#039; tout ce qu&#039;on jette : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -N LOG_DROP&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j LOG --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Et ensuite, plutôt que de mettre &amp;lt;tt&amp;gt;-j DROP&amp;lt;/tt&amp;gt;, il faut mettre &amp;lt;tt&amp;gt;-j LOG_DROP&amp;lt;/tt&amp;gt; et les trois dernières règles doivent être : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A FORWARD -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A INPUT -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A OUTPUT -j LOG_DROP &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur l&#039;interface &amp;lt;tt&amp;gt;lo&amp;lt;/tt&amp;gt; (sinon ce n&#039;est pas la peine d&#039;activer le réseau !) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i lo -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o lo -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur le &#039;&#039;&#039;réseau local&#039;&#039;&#039; &amp;lt;tt&amp;gt;192.168.1.0&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter les résolutions de nom (ie: le &#039;&#039;&#039;dns&#039;&#039;&#039;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol udp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol udp --destination-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter le traffic &#039;&#039;&#039;web&#039;&#039;&#039; (on veut surfer!) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; La première ligne pour accepter ce qui entre sur notre interface ppp0 sur le port 80 (le port http) si c&#039;est une connexion déjà établie, la seconde pour accepter ce qui sort sur ppp0 sur le port 80 si c&#039;est une nouvelle connexion ou si c&#039;est une connexion déjà établie. &lt;br /&gt;
Pour autoriser le &#039;&#039;&#039;ssh&#039;&#039;&#039;, il faut préciser le port 22; pour autoriser l&#039;&#039;&#039;&#039;irc&#039;&#039;&#039;, le port 6667 (ou celui que vous utilisez pour vous connecter à votre serveur); pour le &#039;&#039;&#039;smtp&#039;&#039;&#039; (envoi d&#039;emails), le port 25; pour le &#039;&#039;&#039;pop3&#039;&#039;&#039; (réception d&#039;emails), le port 110; pour le &#039;&#039;&#039;imap&#039;&#039;&#039; (réception d&#039;emails), les ports 143 et 220 (&#039;&#039;&#039;imap3&#039;&#039;&#039;) ; pour le &#039;&#039;&#039;cvs&#039;&#039;&#039;, le port 2401 ; pour le &#039;&#039;&#039;https&#039;&#039;&#039;, le port 443. De manière générale, le numéros de port se trouvent dans /etc/services.&lt;br /&gt;
* Pour le &#039;&#039;&#039;ftp&#039;&#039;&#039; c&#039;est un peu plus complexe. D&#039;abord, il faut charger le module : &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; (c&#039;est lui qui suit - track en anglais - les connexions ftp) et, si vous &#039;&#039;nat&#039;&#039;ez (en utilisant le masquerading par exemple) vos connexions ftp vers d&#039;autres postes le module : &amp;lt;tt&amp;gt;ip_nat_ftp&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; modprobe ip_conntrack_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; # éventuellement : &amp;lt;tt&amp;gt; modprobe ip_nat_ftp&amp;lt;/tt&amp;gt; &amp;lt;/blockquote&amp;gt; Ensuite, il faut taper les commandes suivantes : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Cela pour que la connexion puisse s&#039;établir. Ensuite (et c&#039;est la qu&#039;on a besoin de &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que serveur puisse établir la connexion pour les données (en mode actif). Et enfin : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que le serveur puisse établir la connexion pour les données (en mode passif). Ici aussi &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; est nécessaire. &lt;br /&gt;
* Pour &#039;&#039;&#039;partager une connexion&#039;&#039;&#039;, il faut que le forwarding soit activé dans le noyau (&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;), puis il faut autoriser iptable à faire le forwarding : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -F FORWARD&amp;lt;br /&amp;gt; iptables -A FORWARD -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et enfin, cacher les machines forward-ées par le firewall : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Sur chaque machine devant être cachée par le firewall (ou devant partager la connexion avec la machine qui est connectée à internet), il faut ajouter une route par defaut : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; route add default gw 192.168.1.1 &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Si la machine connectée à internet a comme ip : 192.168.1.1. Il suffit avec une redhat/mandrake d&#039;éditer : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/sysconfig/network&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et d&#039;ajouter dedans : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;GATEWAY=192.168.1.1&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; puis de redémarer le réseau :&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/rc.d/init.d/network restart&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 3/ Application par l&#039;exemple ==&lt;br /&gt;
&lt;br /&gt;
Nous allons mettre en place un firewall / proxy.&lt;br /&gt;
&lt;br /&gt;
Pour cet exemple, le firewall aura la connexion à Internet (interface eth2) et disposera de 2 pattes sur des réseaux privés (eth0 et eth1) :&lt;br /&gt;
&lt;br /&gt;
* il fait office de proxy sur le port 3128 pour un réseau qui aura ainsi un accès internet&lt;br /&gt;
* et une DMZ&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; (&amp;quot;zone démilitarisée&amp;quot;) sur laquelle il y a un ensemble de serveurs disponibles de l&#039;extérieur dont un serveur web qui a pour adresse 192.168.1.2 écoutant sur le port 80 en TCP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;   ____              &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;eth1&amp;lt;/font&amp;gt;&#039;&#039;&#039; &#039;&#039;&#039;.-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;  _/    \_       ____ &amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;3128&amp;lt;/font&amp;gt;&#039;&#039;&#039;/&#039;&#039;&#039;     [PC1]  [PC2]  [PC3] &amp;lt;br /&amp;gt; (        ) &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;eth2&amp;lt;/font&amp;gt;&#039;&#039;&#039;|    |&#039;&#039;&#039;&amp;lt;--&#039;&#039;&#039;&#039;   &amp;lt;u&amp;gt;réseau local&amp;lt;/u&amp;gt; 198.168.2.0&amp;lt;br /&amp;gt; (INTERNET)&#039;&#039;&#039;&amp;lt;---&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;Fire&#039;&#039;&#039;|&amp;lt;br /&amp;gt; (_      _) &amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;ppp0&amp;lt;/font&amp;gt;|&#039;&#039;&#039;wall&#039;&#039;&#039;|&amp;lt;br /&amp;gt;   \____/       |____|&#039;&#039;&#039;&amp;lt;--.&#039;&#039;&#039;   &amp;lt;u&amp;gt;DMZ serveurs&amp;lt;/u&amp;gt; 198.168.1.0&amp;lt;br /&amp;gt;                      &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#3333FF&amp;quot;&amp;gt;eth0&amp;lt;/font&amp;gt;\&#039;&#039;&#039;     [WEB]  [NEWS] [FTP]&amp;lt;br /&amp;gt;                           &#039;&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;&#039;&#039;ASCIIArt (c) Jice&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe d&#039;adresse IP 192.168.2.0 correspond au réseau interne sur l&#039;interface &amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;La classe d&#039;adresse IP 192.168.1.0 correspond a la DMZ sur l&#039;interface &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;L&#039;interface de la connexion Internet est ppp0 sur l&#039;interface &amp;lt;tt&amp;gt;eth2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;u&amp;gt;DMZ, ou zone démilitarisée&amp;lt;/u&amp;gt;&lt;br /&gt;
: Sous-réseau dans lequel des serveurs accessibles depuis internet sont en adressage privé (classe d&#039;adresse IP réservée comme 192.168.x.x) derrière un firewall.&lt;br /&gt;
&lt;br /&gt;
=== 3.1/ Le script init.d ===&lt;br /&gt;
&lt;br /&gt;
Nous allons écrire un script qui permettra de charger automatiquement au démarrage de la machine ou sur demande les règles du firewall qui seront stockées dans le fichier &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Le script de démarrage sera nommé &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt;. Bien sûr, on n&#039;oubliera pas d&#039;exécuter un &amp;lt;tt&amp;gt;chmod +x&amp;lt;/tt&amp;gt; sur les 2 scripts que nous allons créer au long de ce chapitre.&lt;br /&gt;
&lt;br /&gt;
Go ! &amp;lt;br /&amp;gt;Fichier de chargement &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lancement du script de Firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;. /etc/init.d/functions&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;RETVAL=0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour le lancement du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;start() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Application des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/firewall.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour arrêter le firewall (on flush)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;stop() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Flush des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/flush_iptables.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;case $1 in&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  start)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  stop)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  restart)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  status)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -t nat -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  *)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Usage: firewall {start|stop|restart|status}&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=1&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;esac&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est tout simple non ?&lt;br /&gt;
&lt;br /&gt;
=== 3.2/ Le script pour flusher (vider) les règles ===&lt;br /&gt;
&lt;br /&gt;
Et maintenant : &amp;lt;tt&amp;gt;/etc/flush_iptables.sh&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script pour vider les règles iptables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet la police par défaut à ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P INPUT ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet les polices par défaut pour la table NAT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P PREROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P POSTROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On vide (flush) toutes les règles existantes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -F&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Et enfin, on efface toutes les chaînes qui ne&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sont pas à defaut dans la table filter et nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Message de fin&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, on va enfin commencer les choses sérieuses : le script du firewall :)&lt;br /&gt;
&lt;br /&gt;
=== 3.3/ Les prérequis pour le script du firewall et création des tables pour les logs ===&lt;br /&gt;
&lt;br /&gt;
Le script sera commenté au fur et à mesure, afin de décrire chaque étape. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# script &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;/etc/firewall.sh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall d&#039;exemple a but pédagogique&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Activation du forwarding&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est pas pour faire joli, on aura des règles&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# de forward et il faut bien que les paquets&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# traversent la machine, donc on met ce fichier à 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Alors la, on va appliquer quelques astuces&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# pour empêcher les attaques de type &amp;lt;/nowiki&amp;gt;&#039;&#039;spoofing&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et bloquer les réponses ICMP du firewall,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# comme ça c&#039;est très propre. Attention, le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# fait de bloquer le trafic ICMP sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le firewall bloque les pings.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je veux &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de spoofing&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;then&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  do&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo 1 &amp;gt; $filtre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  done&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de icmp&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_all&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va utiliser iptables. Si on l&#039;a compilé en module&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dans le kernel, il faut &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;charger le module ip_tables&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_tables&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on va charger quelques &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;modules supplémentaires&#039;&#039;&#039; pour&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# gérer la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;translation&#039;&#039;&#039; d&#039;adresse, l&#039;&#039;&#039;&#039;IRC&#039;&#039;&#039; et le &#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tu me fait 4 pompes. Chef oui chef !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_nat_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe ip_nat_irc&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_nat&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire bien, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;vider toutes les règles&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# avant d&#039;appliquer les nouvelles règles de firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va rajouter 2 nouvelles &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;chaînes&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci permettra d&#039;ajouter des nouvelles cibles qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# auront la possibilité de loguer ce qui se passe.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La on logue et on refuse le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ici, on logue et on accepte le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES ACCEPT] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut faire un firewall efficace,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# donc la politique a appliquer est de tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# refuser par défaut et rajouter une a une&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les règles que l&#039;on autorise.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bien sur, on a RTFM un peu et on a vu que&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;option -P permet de définir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la cible par défaut&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -P INPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour éviter les problèmes, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;tout accepter sur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la machine en local&#039;&#039;&#039; (interface lo).&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je déconseille de retirer cette règle car&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ça pose pas mal de problèmes et ça peut&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# faire perdre la main sur la machine&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT  -i lo -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o lo -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, la partie initialisation et préparation est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# terminée, passons aux choses sérieuses&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Comme on l&#039;a dit dans la présentation de&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;architecture réseau, le firewall fait&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# également office de proxy grâce par exemple&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à un squid installé dessus. On va donc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# accepter que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy&#039;&#039;&#039; ait une &#039;&#039;&#039;connexion&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet directe&#039;&#039;&#039;. Tant qu&#039;à faire, on va&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mettre des états pour que ça soit bien sécurisé&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A OUTPUT -o ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT  -i ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant, on va faire en sorte que le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy soit totalement transparent pour le LAN&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# bénéficiant de la connexion internet.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# L&#039;astuce consiste a rediriger toutes les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# requêtes ayant un port de destination 80&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# vers le port 3128 du proxy, ici c&#039;est le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall (qui est sur le firewall et qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# a l&#039;adresse IP 192.168.2.1 ).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une règle de NAT suffira largement pour faire ça.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -i eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, c&#039;est pas trop compliqué ! Maintenant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on sait que l&#039;on a un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;serveur web sur la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (la machine d&#039;adresse IP 192.168.1.2) sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le port 80. On souhaite que toutes les requêtes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# provenant d&#039;internet arrivant sur l&#039;adresse IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# publique du serveur ( ici 42.42.42.42 ) soit&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# redirigées sur le serveur web de la DMZ.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Rien de bien compliqué. Dans l&#039;exemple,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on peut retirer le :80 de la target&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# --to-destination&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -d 42.42.42.42 \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est bien tout ça ! mais le problème c&#039;est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# que les chaînes de la table FILTER sont toutes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à DENY, donc tout ceci ne fait rien du tout.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va donc passer a la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;configuration du&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;firewall&#039;&#039;&#039; proprement dit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va quand même &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;accepter les connexions ssh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (port 22) provenant d&#039;une machine (la votre en&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;occurrence, on va dire 192.168.2.42) vers le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall pour pouvoir modifier les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facilement pour bien surveiller, on vas quand&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# même loguer les connexions provenant de mon IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et à destination du ssh du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT -i eth1 -s 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o eth1 -d 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; connecté à l&#039;interface&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# eth1 ait un accès complet à &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La règle de NAT qui permettait d&#039;avoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy transparent&#039;&#039;&#039; sera automatiquement&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# appliqué. L&#039;interface correspondant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à la connexion internet est ici ppp0&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o eth1 -i ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant on donne le droit au &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; de&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;consulter les pages web du serveur de la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth0 -o eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il n&#039;y a plus qu&#039;à dire au firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# d&#039;autoriser à transmettre des paquets TCP à&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# destination du port 80 provenant de l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique (i.e. d&#039;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;) &#039;&#039;&#039;vers le serveur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;web de la DMZ&#039;&#039;&#039; que nous avons naté précédemment.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i ppp0 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --destination-port 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o ppp0 -i eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --source-port 80      -m state --state ESTABLISHED     -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il ne reste plus grand chose à faire !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut permettre à l&#039;ensemble du LAN de dialoguer&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sur internet avec la même adresse IP sinon, bien&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# évidemment ça ne marchera pas (à moins que vous&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ayez 30 adresses ip !).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une petite règle de NAT avec un -j MASQUERADE&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# suffira (masquerade = dialoguer avec l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique sur firewall)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.2.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut également que le serveur web de la DMZ&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# soit masqueradé sinon, le serveur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dialoguera sur internet avec son IP privée&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.1.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Toutes les règles qui n&#039;ont pas passé les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# règles du firewall seront refusées et loguées...&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facile :&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire zoli&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [Termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# c&#039;est enfin fini&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! le firewall de compèt&#039; est prêt et fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Ceci était bien évidemment un exemple, vous pouvez dès à présent préparer votre propre firewall personnalisé ! &amp;lt;br /&amp;gt;Vous pouvez l&#039;adapter à vos besoins, votre connexion vers internet (par ADSL par exemple), etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Arnaud de Bermingham le 12/11/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|12/11/2001|Arnaud de Bermingham|CC-BY-NC-SA}}&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
Le [http://lea-linux.org/trucs/index.php3?aff_item=272 partage de connexion] facile.&lt;br /&gt;
&lt;br /&gt;
Tester votre firewall [http://grc.com/default.htm là].&lt;br /&gt;
&lt;br /&gt;
Cliquez sur &#039;ShieldsUP!&#039;, puis sur l&#039;un des boutons : &#039;Test My Shields !&amp;quot; et &amp;quot;Probe My Ports !&amp;quot;. Ça vaut pas un bon &amp;lt;tt&amp;gt;nmap&amp;lt;/tt&amp;gt; fait par un ami, mais ça permet de voir ou on en est.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10739</id>
		<title>Iptables</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10739"/>
		<updated>2005-11-15T13:01:39Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* 2.1/ Les tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= IpTables par l&#039;exemple =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Arnaud de Bermingham&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Contact : [mailto:duracell chez apinc point org  duracell chez apinc point org]&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Jice &amp;lt;[mailto:jice chez lea-linux point org jice chez lea-linux point org]&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Fred &amp;lt;[mailto:fred chez lea-linux point org fred chez lea-linux point org]&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cet article présente de façon pratique la mise en place d&#039;un firewall / proxy sur une machine Linux tournant avec un noyau 2.4. &amp;lt;br /&amp;gt;Pour des informations plus théoriques sur les firewall/proxies, vous pouvez lire [http://lea-linux.org/cached/index/Reseau-secu-firewall.html# l&#039;article firewall].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Présentation d&#039;IpTables&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
IpTables est une solution complète de firewall (noyau 2.4) remplaçant &#039;&#039;ipchains&#039;&#039; (noyau 2.2) tournant sous le système GNU/Linux. IpTables permet de faire du firewalling &#039;&#039;stateful&#039;&#039; (à états), de la translation de port et d&#039;adresse, du filtrage au niveau 2 et beaucoup d&#039;autres choses que nous n&#039;allons pas aborder comme le &amp;quot;Mangle&amp;quot; ou modification des paquets à la volée (atchoum).&lt;br /&gt;
&lt;br /&gt;
IpTables est fiable et dispose de très nombreuses options qui permettent de faire du filtrage très fin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de cet article&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Cette documentation est sous licence LDP&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de NetFilter&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
NetFilter est sous licence libre GPL, i.e. gratuit et modifiable du moment que les modifications et améliorations apportées soit rendues publiques.&lt;br /&gt;
&lt;br /&gt;
== 1/ Installation ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1/ Prérequis ===&lt;br /&gt;
&lt;br /&gt;
IpTables est installé en standard sur de nombreuses distributions Linux récentes. En particulier, il est installé sur Linux RedHat 7.1 et sur la plupart des distributions basées sur un kernel 2.4.x.&lt;br /&gt;
&lt;br /&gt;
IpTables a besoin d&#039;un &#039;&#039;&#039;kernel de génération 2.4&#039;&#039;&#039; compilé avec des options spéciales. Ceci ne pose pas de problèmes avec les noyaux 2.4 génériques des principales distributions basées sur cette génération de kernel.&lt;br /&gt;
&lt;br /&gt;
=== 1.2/ Options de compilation du kernel ===&lt;br /&gt;
&lt;br /&gt;
Si vous désirez re-compiler votre kernel, il faut spécifier les options nécessaires au fonctionnement d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
Les options suivantes doivent êtres activées en module (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;) ou dans le kernel (&amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_PACKET&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_NETFILTER&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_CONNTRACK&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FTP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IRC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IPTABLES&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FILTER&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_NAT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_STATE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_LOG&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_LIMIT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et éventuellement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPCHAINS&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipchains&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPFWADM&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipfwadm&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_REDIRECT&amp;lt;/tt&amp;gt; indispensable, pour les proxies transparents par exemple. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_MAC&amp;lt;/tt&amp;gt; permet de matcher avec les adresses MAC.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier le support réseau et TCP/IP et compiler le kernel comme d&#039;habitude : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make dep &amp;amp;&amp;amp; make clean &amp;amp;&amp;amp; make bzImage &amp;amp;&amp;amp; make modules &amp;amp;&amp;amp; make modules_install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3/ Installation ===&lt;br /&gt;
&lt;br /&gt;
Sur une RedHat 7.1, récupérer le package &amp;lt;tt&amp;gt;netfilter&amp;lt;/tt&amp;gt; et l&#039;installer comme d&#039;habitude avec &amp;lt;tt&amp;gt;rpm -Uvh netfilter-x.y.z.rpm&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Sur les versions inférieures a la 7.1, il faut compiler un kernel 2.4 car iptables ne supporte pas les kernels 2.2.x. La compilation de iptables est complexe. Le mieux est de lire le fichier INSTALL du package des sources.&lt;br /&gt;
&lt;br /&gt;
=== 1.4/ Chargement des modules ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas ou les options iptables du kernel ont étés compilées en modules, il est nécessaire de charger ces modules avant de pouvoir utiliser iptables :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_tables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
selon les besoins, on peut éventuellement charger les modules suivants :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_ftp&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_irc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_filter&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_mangle&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si on a besoin de pouvoir rediriger (forward) les paquets IP arrivant sur un interface réseau (connectée par exemple à Internet) vers une autre interface réseau (connectée par exemple au réseau local), il sera nécessaire, dans la plupart des cas, d&#039;exécuter cette commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
afin de l&#039;indiquer au noyau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota Bene :&#039;&#039;&#039; tous les modprobe semblent inutiles car le kernel les chargent automatiquement si l&#039;on se sert de l&#039;une des fonctionnalités d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
== 2/ Présentation ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1/ Les tables ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Table NAT&#039;&#039;&#039; (Network Address Translation) : Table utilisée pour la translation d&#039;adresse ou la translation de port. &amp;lt;br /&amp;gt;Il a 2 types de chaînes&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; : &#039;&#039;PREROUTING&#039;&#039; qui permet de spécifier &amp;quot;à l&#039;arrivée du firewall&amp;quot; et la chaîne &#039;&#039;POSTROUTING&#039;&#039; qui permet de spécifier &amp;quot;à la sortie du firewall&amp;quot;. Il existe 3 targets (ou cibles) : &#039;&#039;DNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;, SNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039; et &#039;&#039;MASQUERADE&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table FILTER&#039;&#039;&#039; : C&#039;est la table par défaut lorsque l&#039;on en spécifie pas. &amp;lt;br /&amp;gt;Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes : &#039;&#039;FORWARD&#039;&#039; pour les paquets passant par le firewall, &#039;&#039;INPUT&#039;&#039; pour les paquets entrant et &#039;&#039;OUTPUT&#039;&#039; pour les paquets sortants. Les cibles disponibles sont : &#039;&#039;ACCEPT, DENY, DROP, REJECT °&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table Mangle&#039;&#039;&#039; : C&#039;est la table qui contient les règles pour la modification de paquets. &amp;lt;br /&amp;gt;Elle est peu utilisée et ne sera pas décrite dans cet article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;A noter&amp;lt;/u&amp;gt; : Les règles sont évaluées dans l&#039;ordre, par défaut la table &#039;&#039;FILTER&#039;&#039; est vide et donc accepte tout. Aucune règle de translation d&#039;adresse n&#039;est présente par défaut.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;u&amp;gt;chaîne&amp;lt;/u&amp;gt;&lt;br /&gt;
: une chaîne est une suite de règles, qui sont prises dans l&#039;ordre ; dès qu&#039;une règle s&#039;applique à un paquet, elle est déclenchée, et la suite de la chaîne est ignorée.&lt;br /&gt;
; * &amp;lt;u&amp;gt;SNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse source du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;DNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse destination du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;MASQUERADE&amp;lt;/u&amp;gt;&lt;br /&gt;
: Une gateway transforme les paquets sortants passant par elle pour donner l&#039;illusion qu&#039;ils sortent de la gateway elle-même par un port alloué dynamiquement ; lorsque la gateway recoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu&#039;elle gère pour lui faire suivre le paquet.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy ACCEPT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet d&#039;accepter un paquet grâce à la règle vérifiée.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy DROP&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet d&#039;un paquet sans message d&#039;erreur si la règle est vérifiée (&amp;quot;non ! j&#039;en veux pas mais je dis rien à l&#039;expediteur&amp;quot;).&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy REJECT&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet avec un retour de paquet d&#039;erreur à l&#039;expediteur si la la règle est verifiée (&amp;quot;un paquet recommandé de La Poste refusé par son destinataire&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== 2.2/ Les commandes ===&lt;br /&gt;
&lt;br /&gt;
IpTables n&#039;est pas livré avec une interface graphique ; les commandes et les règles sont passées en ligne de commande. Le mieux est d&#039;écrire des scripts (à rajouter dans &amp;lt;tt&amp;gt;/etc/rc.d/init.d&amp;lt;/tt&amp;gt;) qui permettent d&#039;appliquer toutes les règles d&#039;un seul coup, dès le démarrage du Linux.&lt;br /&gt;
&lt;br /&gt;
==== 2.2.1/ Commandes principales ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-A --append&amp;lt;/tt&amp;gt; : Ajoute la règle à la fin de la chaîne spécifiée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT ...&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-D --delete&amp;lt;/tt&amp;gt; : Permet de supprimer une chaîne. On peut la matcher de 2 manières, soit en spécifiant le numéros de la chaîne a supprimer, soit en &amp;lt;br /&amp;gt;spécifiant la règle à retirer. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT --dport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-R --replace&amp;lt;/tt&amp;gt; : Permet contrairement à &amp;lt;tt&amp;gt;--delete&amp;lt;/tt&amp;gt; de remplacer la chaîne spécifiée. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -R INPUT 1 -s 192.168.0.1 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-I --insert&amp;lt;/tt&amp;gt; : Permet d&#039;ajouter une chaîne dans un endroit spécifié de la chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -I INPUT 1 --dport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-L --list&amp;lt;/tt&amp;gt; : Permet d&#039;afficher les règles. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L        &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles des chaînes de FILTER&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L INPUT  &amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles de INPUT (FILTER)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-F --flush&amp;lt;/tt&amp;gt; : Permet de vider toutes les règles d&#039;une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -F INPUT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-N --new-chain&amp;lt;/tt&amp;gt; : Permet de créer une nouvelle chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -N LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-X --delete-chain&amp;lt;/tt&amp;gt; : Permet d&#039;effacer une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -X LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-P --policy&amp;lt;/tt&amp;gt; : Permet de spécifier au kernel la target par défaut d&#039;une chaîne DENY, ACCEPT, REJECT, DROP ... &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -P INPUT DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.2/ Commandes pour matcher ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarques&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;!&amp;quot; peut être utilisé pour certaines commandes afin de spécifier le contraire (on peut le traduire par &amp;quot;sauf&amp;quot;). Par exemple une commande qui doit refuser tout trafic TCP sauf ce qui provient de l&#039;adresse IP 10.42.42.42 sera traduite par la commande suivante : &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --source ! 10.42.42.42 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les adresses IP peuvent optionnellement être spécifiées avec le masque associé sous la forme [adresse ip]/[masque].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-p --protocol&amp;lt;/tt&amp;gt; : Spécifier un protocole : &amp;lt;tt&amp;gt;tcp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;udp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;icmp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;all&amp;lt;/tt&amp;gt; (tous) &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-s --source&amp;lt;/tt&amp;gt; : Spécifier une adresse source à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -s 192.168.42.42 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-d --destination&amp;lt;/tt&amp;gt; : Spécifier une adresse destination &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-i --in-interface&amp;lt;/tt&amp;gt; : Spécifier une interface d&#039;entrée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -i eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-o --out-interface&amp;lt;/tt&amp;gt; : Spécifier une interface de sortie &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p icmp -o eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-f --fragment&amp;lt;/tt&amp;gt; : Paquet fragmenté &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -f -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--sport --source-port&amp;lt;/tt&amp;gt; : Spécifier le port source ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt; permet de &amp;lt;br /&amp;gt;spécifier plusieurs ports à matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --sport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp -m multiport --sport 3128,21,1000 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp --sport 1024:2042 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--dport --destination-port&amp;lt;/tt&amp;gt; : Spécifier le port destination ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;permet de spécifier plusieurs ports a matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -m multiport --dport 110,4242,119 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 4925:4633 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--tcp-flags&amp;lt;/tt&amp;gt; : Spécifier un flag tcp à matcher : &amp;lt;tt&amp;gt;SYN ACK FIN RST URG PSH ALL NONE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--icmp-type&amp;lt;/tt&amp;gt; : Spécifier un type de paquet icmp à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp --icmp-type 8 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--mac-source&amp;lt;/tt&amp;gt; : Spécifier l&#039;adresse MAC à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT --mac-source 42.42.AA.42.42.AA -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--state&amp;lt;/tt&amp;gt; : Permet de spécifier l&#039;état du paquet à matcher parmi les états suivants : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; ESTABLISHED &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion déjà établie &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; NEW         &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet demandant une nouvelle connexion &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; INVALID     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion inconnue &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; RELATED     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: Nouvelle connexion mais liée, idéal pour les connexions FTP &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités NAT&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-destination&amp;lt;/tt&amp;gt; : Utilisé en target pour le DNAT, permet de spécifier l&#039;adresse de destination de la translation, on peut également spécifier un port s&#039;il est différent du port source. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d 42.12.42.12 -p tcp --dport 110 -j DNAT --to-destination 192.168.1.2:6110&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d ! 42.12.42.12 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-source&amp;lt;/tt&amp;gt; : Utilisé pour en target pour le SNAT, permet de spécifier l&#039;adresse source de la translation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités pour les LOGS&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-level&amp;lt;/tt&amp;gt; : Level, niveau de log &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-prefix&amp;lt;/tt&amp;gt; : Permet de spécifier un préfixe pour les logs. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.3/ Quelques exemples : ====&lt;br /&gt;
&lt;br /&gt;
Les exemples qui suivent supposent que vous êtes reliés à internet par modem via l&#039;interface ppp0 (mais en remplaçant ppp0 par eth0 - par exemple, on peut adapter les exemples pour d&#039;autres type de liaisons) et que votre réseau local est 192.168.1.0/24 (classe C).&lt;br /&gt;
&lt;br /&gt;
* Pour fixer les &#039;&#039;&#039;politiques par défaut&#039;&#039;&#039; (cad: ce qui se passe quand aucune règle ne correspond - ne matche pas), ici, on refuse tout (normal, on fait un firewall, oui ou non ?) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -P INPUT DROP&amp;lt;br /&amp;gt; iptables -P OUTPUT DROP&amp;lt;br /&amp;gt; iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;logguer&#039;&#039;&#039; tout ce qu&#039;on jette : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -N LOG_DROP&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j LOG --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Et ensuite, plutôt que de mettre &amp;lt;tt&amp;gt;-j DROP&amp;lt;/tt&amp;gt;, il faut mettre &amp;lt;tt&amp;gt;-j LOG_DROP&amp;lt;/tt&amp;gt; et les trois dernières règles doivent être : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A FORWARD -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A INPUT -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A OUTPUT -j LOG_DROP &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur l&#039;interface &amp;lt;tt&amp;gt;lo&amp;lt;/tt&amp;gt; (sinon ce n&#039;est pas la peine d&#039;activer le réseau !) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i lo -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o lo -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur le &#039;&#039;&#039;réseau local&#039;&#039;&#039; &amp;lt;tt&amp;gt;192.168.1.0&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter les résolutions de nom (ie: le &#039;&#039;&#039;dns&#039;&#039;&#039;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol udp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol udp --destination-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter le traffic &#039;&#039;&#039;web&#039;&#039;&#039; (on veut surfer!) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; La première ligne pour accepter ce qui entre sur notre interface ppp0 sur le port 80 (le port http) si c&#039;est une connexion déjà établie, la seconde pour accepter ce qui sort sur ppp0 sur le port 80 si c&#039;est une nouvelle connexion ou si c&#039;est une connexion déjà établie. &lt;br /&gt;
Pour autoriser le &#039;&#039;&#039;ssh&#039;&#039;&#039;, il faut préciser le port 22; pour autoriser l&#039;&#039;&#039;&#039;irc&#039;&#039;&#039;, le port 6667 (ou celui que vous utilisez pour vous connecter à votre serveur); pour le &#039;&#039;&#039;smtp&#039;&#039;&#039; (envoi d&#039;emails), le port 25; pour le &#039;&#039;&#039;pop3&#039;&#039;&#039; (réception d&#039;emails), le port 110; pour le &#039;&#039;&#039;imap&#039;&#039;&#039; (réception d&#039;emails), les ports 143 et 220 (&#039;&#039;&#039;imap3&#039;&#039;&#039;) ; pour le &#039;&#039;&#039;cvs&#039;&#039;&#039;, le port 2401 ; pour le &#039;&#039;&#039;https&#039;&#039;&#039;, le port 443. De manière générale, le numéros de port se trouvent dans /etc/services.&lt;br /&gt;
* Pour le &#039;&#039;&#039;ftp&#039;&#039;&#039; c&#039;est un peu plus complexe. D&#039;abord, il faut charger le module : &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; (c&#039;est lui qui suit - track en anglais - les connexions ftp) et, si vous &#039;&#039;nat&#039;&#039;ez (en utilisant le masquerading par exemple) vos connexions ftp vers d&#039;autres postes le module : &amp;lt;tt&amp;gt;ip_nat_ftp&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; modprobe ip_conntrack_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; # éventuellement : &amp;lt;tt&amp;gt; modprobe ip_nat_ftp&amp;lt;/tt&amp;gt; &amp;lt;/blockquote&amp;gt; Ensuite, il faut taper les commandes suivantes : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Cela pour que la connexion puisse s&#039;établir. Ensuite (et c&#039;est la qu&#039;on a besoin de &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que serveur puisse établir la connexion pour les données (en mode actif). Et enfin : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que le serveur puisse établir la connexion pour les données (en mode passif). Ici aussi &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; est nécessaire. &lt;br /&gt;
* Pour &#039;&#039;&#039;partager une connexion&#039;&#039;&#039;, il faut que le forwarding soit activé dans le noyau (&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;), puis il faut autoriser iptable à faire le forwarding : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -F FORWARD&amp;lt;br /&amp;gt; iptables -A FORWARD -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et enfin, cacher les machines forward-ées par le firewall : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Sur chaque machine devant être cachée par le firewall (ou devant partager la connexion avec la machine qui est connectée à internet), il faut ajouter une route par defaut : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; route add default gw 192.168.1.1 &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Si la machine connectée à internet a comme ip : 192.168.1.1. Il suffit avec une redhat/mandrake d&#039;éditer : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/sysconfig/network&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et d&#039;ajouter dedans : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;GATEWAY=192.168.1.1&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; puis de redémarer le réseau :&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/rc.d/init.d/network restart&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 3/ Application par l&#039;exemple ==&lt;br /&gt;
&lt;br /&gt;
Nous allons mettre en place un firewall / proxy.&lt;br /&gt;
&lt;br /&gt;
Pour cet exemple, le firewall aura la connexion à Internet (interface eth2) et disposera de 2 pattes sur des réseaux privés (eth0 et eth1) :&lt;br /&gt;
&lt;br /&gt;
* il fait office de proxy sur le port 3128 pour un réseau qui aura ainsi un accès internet&lt;br /&gt;
* et une DMZ&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; (&amp;quot;zone démilitarisée&amp;quot;) sur laquelle il y a un ensemble de serveurs disponibles de l&#039;extérieur dont un serveur web qui a pour adresse 192.168.1.2 écoutant sur le port 80 en TCP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;   ____              &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;eth1&amp;lt;/font&amp;gt;&#039;&#039;&#039; &#039;&#039;&#039;.-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;  _/    \_       ____ &amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;3128&amp;lt;/font&amp;gt;&#039;&#039;&#039;/&#039;&#039;&#039;     [PC1]  [PC2]  [PC3] &amp;lt;br /&amp;gt; (        ) &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;eth2&amp;lt;/font&amp;gt;&#039;&#039;&#039;|    |&#039;&#039;&#039;&amp;lt;--&#039;&#039;&#039;&#039;   &amp;lt;u&amp;gt;réseau local&amp;lt;/u&amp;gt; 198.168.2.0&amp;lt;br /&amp;gt; (INTERNET)&#039;&#039;&#039;&amp;lt;---&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;Fire&#039;&#039;&#039;|&amp;lt;br /&amp;gt; (_      _) &amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;ppp0&amp;lt;/font&amp;gt;|&#039;&#039;&#039;wall&#039;&#039;&#039;|&amp;lt;br /&amp;gt;   \____/       |____|&#039;&#039;&#039;&amp;lt;--.&#039;&#039;&#039;   &amp;lt;u&amp;gt;DMZ serveurs&amp;lt;/u&amp;gt; 198.168.1.0&amp;lt;br /&amp;gt;                      &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#3333FF&amp;quot;&amp;gt;eth0&amp;lt;/font&amp;gt;\&#039;&#039;&#039;     [WEB]  [NEWS] [FTP]&amp;lt;br /&amp;gt;                           &#039;&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;&#039;&#039;ASCIIArt (c) Jice&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe d&#039;adresse IP 192.168.2.0 correspond au réseau interne sur l&#039;interface &amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;La classe d&#039;adresse IP 192.168.1.0 correspond a la DMZ sur l&#039;interface &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;L&#039;interface de la connexion Internet est ppp0 sur l&#039;interface &amp;lt;tt&amp;gt;eth2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;u&amp;gt;DMZ, ou zone démilitarisée&amp;lt;/u&amp;gt;&lt;br /&gt;
: Sous-réseau dans lequel des serveurs accessibles depuis internet sont en adressage privé (classe d&#039;adresse IP réservée comme 192.168.x.x) derrière un firewall.&lt;br /&gt;
&lt;br /&gt;
=== 3.1/ Le script init.d ===&lt;br /&gt;
&lt;br /&gt;
Nous allons écrire un script qui permettra de charger automatiquement au démarrage de la machine ou sur demande les règles du firewall qui seront stockées dans le fichier &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Le script de démarrage sera nommé &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt;. Bien sûr, on n&#039;oubliera pas d&#039;exécuter un &amp;lt;tt&amp;gt;chmod +x&amp;lt;/tt&amp;gt; sur les 2 scripts que nous allons créer au long de ce chapitre.&lt;br /&gt;
&lt;br /&gt;
Go ! &amp;lt;br /&amp;gt;Fichier de chargement &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lancement du script de Firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;. /etc/init.d/functions&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;RETVAL=0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour le lancement du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;start() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Application des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/firewall.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour arrêter le firewall (on flush)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;stop() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Flush des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/flush_iptables.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;case $1 in&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  start)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  stop)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  restart)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  status)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -t nat -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  *)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Usage: firewall {start|stop|restart|status}&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=1&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;esac&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est tout simple non ?&lt;br /&gt;
&lt;br /&gt;
=== 3.2/ Le script pour flusher (vider) les règles ===&lt;br /&gt;
&lt;br /&gt;
Et maintenant : &amp;lt;tt&amp;gt;/etc/flush_iptables.sh&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script pour vider les règles iptables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet la police par défaut à ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P INPUT ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet les polices par défaut pour la table NAT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P PREROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P POSTROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On vide (flush) toutes les règles existantes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -F&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Et enfin, on efface toutes les chaînes qui ne&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sont pas à defaut dans la table filter et nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Message de fin&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, on va enfin commencer les choses sérieuses : le script du firewall :)&lt;br /&gt;
&lt;br /&gt;
=== 3.3/ Les prérequis pour le script du firewall et création des tables pour les logs ===&lt;br /&gt;
&lt;br /&gt;
Le script sera commenté au fur et à mesure, afin de décrire chaque étape. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# script &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;/etc/firewall.sh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall d&#039;exemple a but pédagogique&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Activation du forwarding&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est pas pour faire joli, on aura des règles&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# de forward et il faut bien que les paquets&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# traversent la machine, donc on met ce fichier à 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Alors la, on va appliquer quelques astuces&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# pour empêcher les attaques de type &amp;lt;/nowiki&amp;gt;&#039;&#039;spoofing&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et bloquer les réponses ICMP du firewall,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# comme ça c&#039;est très propre. Attention, le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# fait de bloquer le trafic ICMP sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le firewall bloque les pings.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je veux &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de spoofing&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;then&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  do&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo 1 &amp;gt; $filtre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  done&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de icmp&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_all&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va utiliser iptables. Si on l&#039;a compilé en module&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dans le kernel, il faut &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;charger le module ip_tables&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_tables&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on va charger quelques &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;modules supplémentaires&#039;&#039;&#039; pour&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# gérer la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;translation&#039;&#039;&#039; d&#039;adresse, l&#039;&#039;&#039;&#039;IRC&#039;&#039;&#039; et le &#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tu me fait 4 pompes. Chef oui chef !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_nat_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe ip_nat_irc&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_nat&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire bien, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;vider toutes les règles&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# avant d&#039;appliquer les nouvelles règles de firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va rajouter 2 nouvelles &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;chaînes&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci permettra d&#039;ajouter des nouvelles cibles qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# auront la possibilité de loguer ce qui se passe.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La on logue et on refuse le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ici, on logue et on accepte le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES ACCEPT] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut faire un firewall efficace,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# donc la politique a appliquer est de tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# refuser par défaut et rajouter une a une&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les règles que l&#039;on autorise.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bien sur, on a RTFM un peu et on a vu que&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;option -P permet de définir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la cible par défaut&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -P INPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour éviter les problèmes, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;tout accepter sur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la machine en local&#039;&#039;&#039; (interface lo).&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je déconseille de retirer cette règle car&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ça pose pas mal de problèmes et ça peut&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# faire perdre la main sur la machine&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT  -i lo -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o lo -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, la partie initialisation et préparation est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# terminée, passons aux choses sérieuses&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Comme on l&#039;a dit dans la présentation de&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;architecture réseau, le firewall fait&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# également office de proxy grâce par exemple&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à un squid installé dessus. On va donc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# accepter que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy&#039;&#039;&#039; ait une &#039;&#039;&#039;connexion&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet directe&#039;&#039;&#039;. Tant qu&#039;à faire, on va&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mettre des états pour que ça soit bien sécurisé&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A OUTPUT -o ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT  -i ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant, on va faire en sorte que le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy soit totalement transparent pour le LAN&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# bénéficiant de la connexion internet.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# L&#039;astuce consiste a rediriger toutes les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# requêtes ayant un port de destination 80&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# vers le port 3128 du proxy, ici c&#039;est le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall (qui est sur le firewall et qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# a l&#039;adresse IP 192.168.2.1 ).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une règle de NAT suffira largement pour faire ça.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -i eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, c&#039;est pas trop compliqué ! Maintenant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on sait que l&#039;on a un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;serveur web sur la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (la machine d&#039;adresse IP 192.168.1.2) sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le port 80. On souhaite que toutes les requêtes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# provenant d&#039;internet arrivant sur l&#039;adresse IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# publique du serveur ( ici 42.42.42.42 ) soit&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# redirigées sur le serveur web de la DMZ.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Rien de bien compliqué. Dans l&#039;exemple,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on peut retirer le :80 de la target&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# --to-destination&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -d 42.42.42.42 \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est bien tout ça ! mais le problème c&#039;est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# que les chaînes de la table FILTER sont toutes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à DENY, donc tout ceci ne fait rien du tout.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va donc passer a la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;configuration du&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;firewall&#039;&#039;&#039; proprement dit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va quand même &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;accepter les connexions ssh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (port 22) provenant d&#039;une machine (la votre en&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;occurrence, on va dire 192.168.2.42) vers le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall pour pouvoir modifier les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facilement pour bien surveiller, on vas quand&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# même loguer les connexions provenant de mon IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et à destination du ssh du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT -i eth1 -s 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o eth1 -d 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; connecté à l&#039;interface&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# eth1 ait un accès complet à &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La règle de NAT qui permettait d&#039;avoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy transparent&#039;&#039;&#039; sera automatiquement&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# appliqué. L&#039;interface correspondant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à la connexion internet est ici ppp0&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o eth1 -i ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant on donne le droit au &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; de&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;consulter les pages web du serveur de la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth0 -o eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il n&#039;y a plus qu&#039;à dire au firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# d&#039;autoriser à transmettre des paquets TCP à&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# destination du port 80 provenant de l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique (i.e. d&#039;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;) &#039;&#039;&#039;vers le serveur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;web de la DMZ&#039;&#039;&#039; que nous avons naté précédemment.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i ppp0 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --destination-port 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o ppp0 -i eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --source-port 80      -m state --state ESTABLISHED     -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il ne reste plus grand chose à faire !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut permettre à l&#039;ensemble du LAN de dialoguer&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sur internet avec la même adresse IP sinon, bien&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# évidemment ça ne marchera pas (à moins que vous&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ayez 30 adresses ip !).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une petite règle de NAT avec un -j MASQUERADE&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# suffira (masquerade = dialoguer avec l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique sur firewall)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.2.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut également que le serveur web de la DMZ&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# soit masqueradé sinon, le serveur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dialoguera sur internet avec son IP privée&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.1.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Toutes les règles qui n&#039;ont pas passé les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# règles du firewall seront refusées et loguées...&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facile :&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire zoli&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [Termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# c&#039;est enfin fini&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! le firewall de compèt&#039; est prêt et fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Ceci était bien évidemment un exemple, vous pouvez dès à présent préparer votre propre firewall personnalisé ! &amp;lt;br /&amp;gt;Vous pouvez l&#039;adapter à vos besoins, votre connexion vers internet (par ADSL par exemple), etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Arnaud de Bermingham le 12/11/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|12/11/2001|Arnaud de Bermingham|CC-BY-NC-SA}}&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
Le [http://lea-linux.org/trucs/index.php3?aff_item=272 partage de connexion] facile.&lt;br /&gt;
&lt;br /&gt;
Tester votre firewall [http://grc.com/default.htm là].&lt;br /&gt;
&lt;br /&gt;
Cliquez sur &#039;ShieldsUP!&#039;, puis sur l&#039;un des boutons : &#039;Test My Shields !&amp;quot; et &amp;quot;Probe My Ports !&amp;quot;. Ça vaut pas un bon &amp;lt;tt&amp;gt;nmap&amp;lt;/tt&amp;gt; fait par un ami, mais ça permet de voir ou on en est.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10738</id>
		<title>Iptables</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10738"/>
		<updated>2005-11-15T12:59:48Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* 2.1/ Les tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= IpTables par l&#039;exemple =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Arnaud de Bermingham&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Contact : [mailto:duracell chez apinc point org  duracell chez apinc point org]&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Jice &amp;lt;[mailto:jice chez lea-linux point org jice chez lea-linux point org]&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Fred &amp;lt;[mailto:fred chez lea-linux point org fred chez lea-linux point org]&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cet article présente de façon pratique la mise en place d&#039;un firewall / proxy sur une machine Linux tournant avec un noyau 2.4. &amp;lt;br /&amp;gt;Pour des informations plus théoriques sur les firewall/proxies, vous pouvez lire [http://lea-linux.org/cached/index/Reseau-secu-firewall.html# l&#039;article firewall].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Présentation d&#039;IpTables&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
IpTables est une solution complète de firewall (noyau 2.4) remplaçant &#039;&#039;ipchains&#039;&#039; (noyau 2.2) tournant sous le système GNU/Linux. IpTables permet de faire du firewalling &#039;&#039;stateful&#039;&#039; (à états), de la translation de port et d&#039;adresse, du filtrage au niveau 2 et beaucoup d&#039;autres choses que nous n&#039;allons pas aborder comme le &amp;quot;Mangle&amp;quot; ou modification des paquets à la volée (atchoum).&lt;br /&gt;
&lt;br /&gt;
IpTables est fiable et dispose de très nombreuses options qui permettent de faire du filtrage très fin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de cet article&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Cette documentation est sous licence LDP&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de NetFilter&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
NetFilter est sous licence libre GPL, i.e. gratuit et modifiable du moment que les modifications et améliorations apportées soit rendues publiques.&lt;br /&gt;
&lt;br /&gt;
== 1/ Installation ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1/ Prérequis ===&lt;br /&gt;
&lt;br /&gt;
IpTables est installé en standard sur de nombreuses distributions Linux récentes. En particulier, il est installé sur Linux RedHat 7.1 et sur la plupart des distributions basées sur un kernel 2.4.x.&lt;br /&gt;
&lt;br /&gt;
IpTables a besoin d&#039;un &#039;&#039;&#039;kernel de génération 2.4&#039;&#039;&#039; compilé avec des options spéciales. Ceci ne pose pas de problèmes avec les noyaux 2.4 génériques des principales distributions basées sur cette génération de kernel.&lt;br /&gt;
&lt;br /&gt;
=== 1.2/ Options de compilation du kernel ===&lt;br /&gt;
&lt;br /&gt;
Si vous désirez re-compiler votre kernel, il faut spécifier les options nécessaires au fonctionnement d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
Les options suivantes doivent êtres activées en module (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;) ou dans le kernel (&amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_PACKET&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_NETFILTER&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_CONNTRACK&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FTP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IRC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IPTABLES&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FILTER&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_NAT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_STATE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_LOG&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_LIMIT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et éventuellement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPCHAINS&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipchains&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPFWADM&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipfwadm&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_REDIRECT&amp;lt;/tt&amp;gt; indispensable, pour les proxies transparents par exemple. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_MAC&amp;lt;/tt&amp;gt; permet de matcher avec les adresses MAC.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier le support réseau et TCP/IP et compiler le kernel comme d&#039;habitude : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make dep &amp;amp;&amp;amp; make clean &amp;amp;&amp;amp; make bzImage &amp;amp;&amp;amp; make modules &amp;amp;&amp;amp; make modules_install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3/ Installation ===&lt;br /&gt;
&lt;br /&gt;
Sur une RedHat 7.1, récupérer le package &amp;lt;tt&amp;gt;netfilter&amp;lt;/tt&amp;gt; et l&#039;installer comme d&#039;habitude avec &amp;lt;tt&amp;gt;rpm -Uvh netfilter-x.y.z.rpm&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Sur les versions inférieures a la 7.1, il faut compiler un kernel 2.4 car iptables ne supporte pas les kernels 2.2.x. La compilation de iptables est complexe. Le mieux est de lire le fichier INSTALL du package des sources.&lt;br /&gt;
&lt;br /&gt;
=== 1.4/ Chargement des modules ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas ou les options iptables du kernel ont étés compilées en modules, il est nécessaire de charger ces modules avant de pouvoir utiliser iptables :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_tables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
selon les besoins, on peut éventuellement charger les modules suivants :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_ftp&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_irc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_filter&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_mangle&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si on a besoin de pouvoir rediriger (forward) les paquets IP arrivant sur un interface réseau (connectée par exemple à Internet) vers une autre interface réseau (connectée par exemple au réseau local), il sera nécessaire, dans la plupart des cas, d&#039;exécuter cette commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
afin de l&#039;indiquer au noyau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota Bene :&#039;&#039;&#039; tous les modprobe semblent inutiles car le kernel les chargent automatiquement si l&#039;on se sert de l&#039;une des fonctionnalités d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
== 2/ Présentation ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1/ Les tables ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Table NAT&#039;&#039;&#039; (Network Address Translation) : Table utilisée pour la translation d&#039;adresse ou la translation de port. &amp;lt;br /&amp;gt;Il a 2 types de chaînes&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; : &#039;&#039;PREROUTING&#039;&#039; qui permet de spécifier &amp;quot;à l&#039;arrivée du firewall&amp;quot; et la chaîne &#039;&#039;POSTROUTING&#039;&#039; qui permet de spécifier &amp;quot;à la sortie du firewall&amp;quot;. Il existe 3 targets (ou cibles) : &#039;&#039;DNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;, SNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039; et &#039;&#039;MASQUERADE&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table FILTER&#039;&#039;&#039; : C&#039;est la table par défaut lorsque l&#039;on en spécifie pas. &amp;lt;br /&amp;gt;Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes : &#039;&#039;FORWARD&#039;&#039; pour les paquets passant par le firewall, &#039;&#039;INPUT&#039;&#039; pour les paquets entrant et &#039;&#039;OUTPUT&#039;&#039; pour les paquets sortants. Les cibles disponibles sont : &#039;&#039;ACCEPT, DENY, DROP, REJECT °&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table Mangle&#039;&#039;&#039; : C&#039;est la table qui contient les règles pour la modification de paquets. &amp;lt;br /&amp;gt;Elle est peu utilisée et ne sera pas décrite dans cet article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;A noter&amp;lt;/u&amp;gt; : Les règles sont évaluées dans l&#039;ordre, par défaut la table &#039;&#039;FILTER&#039;&#039; est vide et donc accepte tout. Aucune règle de translation d&#039;adresse n&#039;est présente par défaut.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;u&amp;gt;chaîne&amp;lt;/u&amp;gt;&lt;br /&gt;
: une chaîne est une suite de règles, qui sont prises dans l&#039;ordre ; dès qu&#039;une règle matche un paquet, elle est déclenchée, et la suite de la chaîne est ignorée.&lt;br /&gt;
; * &amp;lt;u&amp;gt;SNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse source du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;DNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse destination du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;MASQUERADE&amp;lt;/u&amp;gt;&lt;br /&gt;
: Une gateway transforme les paquets sortants passant par elle pour donner l&#039;illusion qu&#039;ils sortent de la gateway elle-même par un port alloué dynamiquement ; lorsque la gateway recoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu&#039;elle gère pour lui faire suivre le paquet.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy ACCEPT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet d&#039;accepter un paquet grâce à la règle vérifiée.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy DROP&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet d&#039;un paquet sans message d&#039;erreur si la règle est vérifiée (&amp;quot;non ! j&#039;en veux pas mais je dis rien à l&#039;expediteur&amp;quot;).&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy REJECT&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet avec un retour de paquet d&#039;erreur à l&#039;expediteur si la la règle est verifiée (&amp;quot;un paquet recommandé de La Poste refusé par son destinataire&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== 2.2/ Les commandes ===&lt;br /&gt;
&lt;br /&gt;
IpTables n&#039;est pas livré avec une interface graphique ; les commandes et les règles sont passées en ligne de commande. Le mieux est d&#039;écrire des scripts (à rajouter dans &amp;lt;tt&amp;gt;/etc/rc.d/init.d&amp;lt;/tt&amp;gt;) qui permettent d&#039;appliquer toutes les règles d&#039;un seul coup, dès le démarrage du Linux.&lt;br /&gt;
&lt;br /&gt;
==== 2.2.1/ Commandes principales ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-A --append&amp;lt;/tt&amp;gt; : Ajoute la règle à la fin de la chaîne spécifiée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT ...&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-D --delete&amp;lt;/tt&amp;gt; : Permet de supprimer une chaîne. On peut la matcher de 2 manières, soit en spécifiant le numéros de la chaîne a supprimer, soit en &amp;lt;br /&amp;gt;spécifiant la règle à retirer. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT --dport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-R --replace&amp;lt;/tt&amp;gt; : Permet contrairement à &amp;lt;tt&amp;gt;--delete&amp;lt;/tt&amp;gt; de remplacer la chaîne spécifiée. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -R INPUT 1 -s 192.168.0.1 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-I --insert&amp;lt;/tt&amp;gt; : Permet d&#039;ajouter une chaîne dans un endroit spécifié de la chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -I INPUT 1 --dport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-L --list&amp;lt;/tt&amp;gt; : Permet d&#039;afficher les règles. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L        &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles des chaînes de FILTER&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L INPUT  &amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles de INPUT (FILTER)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-F --flush&amp;lt;/tt&amp;gt; : Permet de vider toutes les règles d&#039;une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -F INPUT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-N --new-chain&amp;lt;/tt&amp;gt; : Permet de créer une nouvelle chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -N LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-X --delete-chain&amp;lt;/tt&amp;gt; : Permet d&#039;effacer une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -X LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-P --policy&amp;lt;/tt&amp;gt; : Permet de spécifier au kernel la target par défaut d&#039;une chaîne DENY, ACCEPT, REJECT, DROP ... &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -P INPUT DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.2/ Commandes pour matcher ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarques&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;!&amp;quot; peut être utilisé pour certaines commandes afin de spécifier le contraire (on peut le traduire par &amp;quot;sauf&amp;quot;). Par exemple une commande qui doit refuser tout trafic TCP sauf ce qui provient de l&#039;adresse IP 10.42.42.42 sera traduite par la commande suivante : &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --source ! 10.42.42.42 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les adresses IP peuvent optionnellement être spécifiées avec le masque associé sous la forme [adresse ip]/[masque].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-p --protocol&amp;lt;/tt&amp;gt; : Spécifier un protocole : &amp;lt;tt&amp;gt;tcp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;udp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;icmp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;all&amp;lt;/tt&amp;gt; (tous) &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-s --source&amp;lt;/tt&amp;gt; : Spécifier une adresse source à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -s 192.168.42.42 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-d --destination&amp;lt;/tt&amp;gt; : Spécifier une adresse destination &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-i --in-interface&amp;lt;/tt&amp;gt; : Spécifier une interface d&#039;entrée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -i eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-o --out-interface&amp;lt;/tt&amp;gt; : Spécifier une interface de sortie &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p icmp -o eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-f --fragment&amp;lt;/tt&amp;gt; : Paquet fragmenté &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -f -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--sport --source-port&amp;lt;/tt&amp;gt; : Spécifier le port source ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt; permet de &amp;lt;br /&amp;gt;spécifier plusieurs ports à matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --sport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp -m multiport --sport 3128,21,1000 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp --sport 1024:2042 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--dport --destination-port&amp;lt;/tt&amp;gt; : Spécifier le port destination ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;permet de spécifier plusieurs ports a matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -m multiport --dport 110,4242,119 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 4925:4633 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--tcp-flags&amp;lt;/tt&amp;gt; : Spécifier un flag tcp à matcher : &amp;lt;tt&amp;gt;SYN ACK FIN RST URG PSH ALL NONE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--icmp-type&amp;lt;/tt&amp;gt; : Spécifier un type de paquet icmp à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp --icmp-type 8 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--mac-source&amp;lt;/tt&amp;gt; : Spécifier l&#039;adresse MAC à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT --mac-source 42.42.AA.42.42.AA -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--state&amp;lt;/tt&amp;gt; : Permet de spécifier l&#039;état du paquet à matcher parmi les états suivants : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; ESTABLISHED &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion déjà établie &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; NEW         &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet demandant une nouvelle connexion &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; INVALID     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion inconnue &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; RELATED     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: Nouvelle connexion mais liée, idéal pour les connexions FTP &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités NAT&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-destination&amp;lt;/tt&amp;gt; : Utilisé en target pour le DNAT, permet de spécifier l&#039;adresse de destination de la translation, on peut également spécifier un port s&#039;il est différent du port source. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d 42.12.42.12 -p tcp --dport 110 -j DNAT --to-destination 192.168.1.2:6110&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d ! 42.12.42.12 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-source&amp;lt;/tt&amp;gt; : Utilisé pour en target pour le SNAT, permet de spécifier l&#039;adresse source de la translation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités pour les LOGS&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-level&amp;lt;/tt&amp;gt; : Level, niveau de log &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-prefix&amp;lt;/tt&amp;gt; : Permet de spécifier un préfixe pour les logs. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.3/ Quelques exemples : ====&lt;br /&gt;
&lt;br /&gt;
Les exemples qui suivent supposent que vous êtes reliés à internet par modem via l&#039;interface ppp0 (mais en remplaçant ppp0 par eth0 - par exemple, on peut adapter les exemples pour d&#039;autres type de liaisons) et que votre réseau local est 192.168.1.0/24 (classe C).&lt;br /&gt;
&lt;br /&gt;
* Pour fixer les &#039;&#039;&#039;politiques par défaut&#039;&#039;&#039; (cad: ce qui se passe quand aucune règle ne correspond - ne matche pas), ici, on refuse tout (normal, on fait un firewall, oui ou non ?) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -P INPUT DROP&amp;lt;br /&amp;gt; iptables -P OUTPUT DROP&amp;lt;br /&amp;gt; iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;logguer&#039;&#039;&#039; tout ce qu&#039;on jette : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -N LOG_DROP&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j LOG --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Et ensuite, plutôt que de mettre &amp;lt;tt&amp;gt;-j DROP&amp;lt;/tt&amp;gt;, il faut mettre &amp;lt;tt&amp;gt;-j LOG_DROP&amp;lt;/tt&amp;gt; et les trois dernières règles doivent être : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A FORWARD -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A INPUT -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A OUTPUT -j LOG_DROP &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur l&#039;interface &amp;lt;tt&amp;gt;lo&amp;lt;/tt&amp;gt; (sinon ce n&#039;est pas la peine d&#039;activer le réseau !) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i lo -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o lo -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur le &#039;&#039;&#039;réseau local&#039;&#039;&#039; &amp;lt;tt&amp;gt;192.168.1.0&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter les résolutions de nom (ie: le &#039;&#039;&#039;dns&#039;&#039;&#039;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol udp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol udp --destination-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter le traffic &#039;&#039;&#039;web&#039;&#039;&#039; (on veut surfer!) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; La première ligne pour accepter ce qui entre sur notre interface ppp0 sur le port 80 (le port http) si c&#039;est une connexion déjà établie, la seconde pour accepter ce qui sort sur ppp0 sur le port 80 si c&#039;est une nouvelle connexion ou si c&#039;est une connexion déjà établie. &lt;br /&gt;
Pour autoriser le &#039;&#039;&#039;ssh&#039;&#039;&#039;, il faut préciser le port 22; pour autoriser l&#039;&#039;&#039;&#039;irc&#039;&#039;&#039;, le port 6667 (ou celui que vous utilisez pour vous connecter à votre serveur); pour le &#039;&#039;&#039;smtp&#039;&#039;&#039; (envoi d&#039;emails), le port 25; pour le &#039;&#039;&#039;pop3&#039;&#039;&#039; (réception d&#039;emails), le port 110; pour le &#039;&#039;&#039;imap&#039;&#039;&#039; (réception d&#039;emails), les ports 143 et 220 (&#039;&#039;&#039;imap3&#039;&#039;&#039;) ; pour le &#039;&#039;&#039;cvs&#039;&#039;&#039;, le port 2401 ; pour le &#039;&#039;&#039;https&#039;&#039;&#039;, le port 443. De manière générale, le numéros de port se trouvent dans /etc/services.&lt;br /&gt;
* Pour le &#039;&#039;&#039;ftp&#039;&#039;&#039; c&#039;est un peu plus complexe. D&#039;abord, il faut charger le module : &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; (c&#039;est lui qui suit - track en anglais - les connexions ftp) et, si vous &#039;&#039;nat&#039;&#039;ez (en utilisant le masquerading par exemple) vos connexions ftp vers d&#039;autres postes le module : &amp;lt;tt&amp;gt;ip_nat_ftp&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; modprobe ip_conntrack_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; # éventuellement : &amp;lt;tt&amp;gt; modprobe ip_nat_ftp&amp;lt;/tt&amp;gt; &amp;lt;/blockquote&amp;gt; Ensuite, il faut taper les commandes suivantes : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Cela pour que la connexion puisse s&#039;établir. Ensuite (et c&#039;est la qu&#039;on a besoin de &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que serveur puisse établir la connexion pour les données (en mode actif). Et enfin : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que le serveur puisse établir la connexion pour les données (en mode passif). Ici aussi &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; est nécessaire. &lt;br /&gt;
* Pour &#039;&#039;&#039;partager une connexion&#039;&#039;&#039;, il faut que le forwarding soit activé dans le noyau (&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;), puis il faut autoriser iptable à faire le forwarding : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -F FORWARD&amp;lt;br /&amp;gt; iptables -A FORWARD -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et enfin, cacher les machines forward-ées par le firewall : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Sur chaque machine devant être cachée par le firewall (ou devant partager la connexion avec la machine qui est connectée à internet), il faut ajouter une route par defaut : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; route add default gw 192.168.1.1 &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Si la machine connectée à internet a comme ip : 192.168.1.1. Il suffit avec une redhat/mandrake d&#039;éditer : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/sysconfig/network&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et d&#039;ajouter dedans : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;GATEWAY=192.168.1.1&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; puis de redémarer le réseau :&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/rc.d/init.d/network restart&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 3/ Application par l&#039;exemple ==&lt;br /&gt;
&lt;br /&gt;
Nous allons mettre en place un firewall / proxy.&lt;br /&gt;
&lt;br /&gt;
Pour cet exemple, le firewall aura la connexion à Internet (interface eth2) et disposera de 2 pattes sur des réseaux privés (eth0 et eth1) :&lt;br /&gt;
&lt;br /&gt;
* il fait office de proxy sur le port 3128 pour un réseau qui aura ainsi un accès internet&lt;br /&gt;
* et une DMZ&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; (&amp;quot;zone démilitarisée&amp;quot;) sur laquelle il y a un ensemble de serveurs disponibles de l&#039;extérieur dont un serveur web qui a pour adresse 192.168.1.2 écoutant sur le port 80 en TCP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;   ____              &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;eth1&amp;lt;/font&amp;gt;&#039;&#039;&#039; &#039;&#039;&#039;.-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;  _/    \_       ____ &amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;3128&amp;lt;/font&amp;gt;&#039;&#039;&#039;/&#039;&#039;&#039;     [PC1]  [PC2]  [PC3] &amp;lt;br /&amp;gt; (        ) &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;eth2&amp;lt;/font&amp;gt;&#039;&#039;&#039;|    |&#039;&#039;&#039;&amp;lt;--&#039;&#039;&#039;&#039;   &amp;lt;u&amp;gt;réseau local&amp;lt;/u&amp;gt; 198.168.2.0&amp;lt;br /&amp;gt; (INTERNET)&#039;&#039;&#039;&amp;lt;---&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;Fire&#039;&#039;&#039;|&amp;lt;br /&amp;gt; (_      _) &amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;ppp0&amp;lt;/font&amp;gt;|&#039;&#039;&#039;wall&#039;&#039;&#039;|&amp;lt;br /&amp;gt;   \____/       |____|&#039;&#039;&#039;&amp;lt;--.&#039;&#039;&#039;   &amp;lt;u&amp;gt;DMZ serveurs&amp;lt;/u&amp;gt; 198.168.1.0&amp;lt;br /&amp;gt;                      &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#3333FF&amp;quot;&amp;gt;eth0&amp;lt;/font&amp;gt;\&#039;&#039;&#039;     [WEB]  [NEWS] [FTP]&amp;lt;br /&amp;gt;                           &#039;&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;&#039;&#039;ASCIIArt (c) Jice&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe d&#039;adresse IP 192.168.2.0 correspond au réseau interne sur l&#039;interface &amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;La classe d&#039;adresse IP 192.168.1.0 correspond a la DMZ sur l&#039;interface &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;L&#039;interface de la connexion Internet est ppp0 sur l&#039;interface &amp;lt;tt&amp;gt;eth2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;u&amp;gt;DMZ, ou zone démilitarisée&amp;lt;/u&amp;gt;&lt;br /&gt;
: Sous-réseau dans lequel des serveurs accessibles depuis internet sont en adressage privé (classe d&#039;adresse IP réservée comme 192.168.x.x) derrière un firewall.&lt;br /&gt;
&lt;br /&gt;
=== 3.1/ Le script init.d ===&lt;br /&gt;
&lt;br /&gt;
Nous allons écrire un script qui permettra de charger automatiquement au démarrage de la machine ou sur demande les règles du firewall qui seront stockées dans le fichier &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Le script de démarrage sera nommé &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt;. Bien sûr, on n&#039;oubliera pas d&#039;exécuter un &amp;lt;tt&amp;gt;chmod +x&amp;lt;/tt&amp;gt; sur les 2 scripts que nous allons créer au long de ce chapitre.&lt;br /&gt;
&lt;br /&gt;
Go ! &amp;lt;br /&amp;gt;Fichier de chargement &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lancement du script de Firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;. /etc/init.d/functions&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;RETVAL=0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour le lancement du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;start() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Application des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/firewall.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour arrêter le firewall (on flush)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;stop() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Flush des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/flush_iptables.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;case $1 in&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  start)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  stop)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  restart)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  status)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -t nat -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  *)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Usage: firewall {start|stop|restart|status}&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=1&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;esac&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est tout simple non ?&lt;br /&gt;
&lt;br /&gt;
=== 3.2/ Le script pour flusher (vider) les règles ===&lt;br /&gt;
&lt;br /&gt;
Et maintenant : &amp;lt;tt&amp;gt;/etc/flush_iptables.sh&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script pour vider les règles iptables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet la police par défaut à ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P INPUT ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet les polices par défaut pour la table NAT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P PREROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P POSTROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On vide (flush) toutes les règles existantes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -F&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Et enfin, on efface toutes les chaînes qui ne&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sont pas à defaut dans la table filter et nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Message de fin&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, on va enfin commencer les choses sérieuses : le script du firewall :)&lt;br /&gt;
&lt;br /&gt;
=== 3.3/ Les prérequis pour le script du firewall et création des tables pour les logs ===&lt;br /&gt;
&lt;br /&gt;
Le script sera commenté au fur et à mesure, afin de décrire chaque étape. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# script &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;/etc/firewall.sh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall d&#039;exemple a but pédagogique&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Activation du forwarding&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est pas pour faire joli, on aura des règles&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# de forward et il faut bien que les paquets&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# traversent la machine, donc on met ce fichier à 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Alors la, on va appliquer quelques astuces&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# pour empêcher les attaques de type &amp;lt;/nowiki&amp;gt;&#039;&#039;spoofing&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et bloquer les réponses ICMP du firewall,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# comme ça c&#039;est très propre. Attention, le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# fait de bloquer le trafic ICMP sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le firewall bloque les pings.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je veux &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de spoofing&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;then&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  do&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo 1 &amp;gt; $filtre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  done&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de icmp&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_all&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va utiliser iptables. Si on l&#039;a compilé en module&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dans le kernel, il faut &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;charger le module ip_tables&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_tables&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on va charger quelques &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;modules supplémentaires&#039;&#039;&#039; pour&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# gérer la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;translation&#039;&#039;&#039; d&#039;adresse, l&#039;&#039;&#039;&#039;IRC&#039;&#039;&#039; et le &#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tu me fait 4 pompes. Chef oui chef !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_nat_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe ip_nat_irc&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_nat&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire bien, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;vider toutes les règles&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# avant d&#039;appliquer les nouvelles règles de firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va rajouter 2 nouvelles &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;chaînes&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci permettra d&#039;ajouter des nouvelles cibles qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# auront la possibilité de loguer ce qui se passe.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La on logue et on refuse le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ici, on logue et on accepte le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES ACCEPT] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut faire un firewall efficace,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# donc la politique a appliquer est de tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# refuser par défaut et rajouter une a une&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les règles que l&#039;on autorise.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bien sur, on a RTFM un peu et on a vu que&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;option -P permet de définir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la cible par défaut&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -P INPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour éviter les problèmes, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;tout accepter sur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la machine en local&#039;&#039;&#039; (interface lo).&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je déconseille de retirer cette règle car&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ça pose pas mal de problèmes et ça peut&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# faire perdre la main sur la machine&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT  -i lo -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o lo -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, la partie initialisation et préparation est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# terminée, passons aux choses sérieuses&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Comme on l&#039;a dit dans la présentation de&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;architecture réseau, le firewall fait&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# également office de proxy grâce par exemple&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à un squid installé dessus. On va donc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# accepter que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy&#039;&#039;&#039; ait une &#039;&#039;&#039;connexion&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet directe&#039;&#039;&#039;. Tant qu&#039;à faire, on va&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mettre des états pour que ça soit bien sécurisé&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A OUTPUT -o ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT  -i ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant, on va faire en sorte que le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy soit totalement transparent pour le LAN&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# bénéficiant de la connexion internet.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# L&#039;astuce consiste a rediriger toutes les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# requêtes ayant un port de destination 80&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# vers le port 3128 du proxy, ici c&#039;est le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall (qui est sur le firewall et qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# a l&#039;adresse IP 192.168.2.1 ).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une règle de NAT suffira largement pour faire ça.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -i eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, c&#039;est pas trop compliqué ! Maintenant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on sait que l&#039;on a un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;serveur web sur la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (la machine d&#039;adresse IP 192.168.1.2) sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le port 80. On souhaite que toutes les requêtes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# provenant d&#039;internet arrivant sur l&#039;adresse IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# publique du serveur ( ici 42.42.42.42 ) soit&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# redirigées sur le serveur web de la DMZ.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Rien de bien compliqué. Dans l&#039;exemple,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on peut retirer le :80 de la target&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# --to-destination&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -d 42.42.42.42 \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est bien tout ça ! mais le problème c&#039;est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# que les chaînes de la table FILTER sont toutes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à DENY, donc tout ceci ne fait rien du tout.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va donc passer a la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;configuration du&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;firewall&#039;&#039;&#039; proprement dit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va quand même &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;accepter les connexions ssh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (port 22) provenant d&#039;une machine (la votre en&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;occurrence, on va dire 192.168.2.42) vers le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall pour pouvoir modifier les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facilement pour bien surveiller, on vas quand&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# même loguer les connexions provenant de mon IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et à destination du ssh du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT -i eth1 -s 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o eth1 -d 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; connecté à l&#039;interface&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# eth1 ait un accès complet à &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La règle de NAT qui permettait d&#039;avoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy transparent&#039;&#039;&#039; sera automatiquement&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# appliqué. L&#039;interface correspondant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à la connexion internet est ici ppp0&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o eth1 -i ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant on donne le droit au &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; de&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;consulter les pages web du serveur de la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth0 -o eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il n&#039;y a plus qu&#039;à dire au firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# d&#039;autoriser à transmettre des paquets TCP à&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# destination du port 80 provenant de l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique (i.e. d&#039;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;) &#039;&#039;&#039;vers le serveur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;web de la DMZ&#039;&#039;&#039; que nous avons naté précédemment.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i ppp0 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --destination-port 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o ppp0 -i eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --source-port 80      -m state --state ESTABLISHED     -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il ne reste plus grand chose à faire !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut permettre à l&#039;ensemble du LAN de dialoguer&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sur internet avec la même adresse IP sinon, bien&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# évidemment ça ne marchera pas (à moins que vous&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ayez 30 adresses ip !).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une petite règle de NAT avec un -j MASQUERADE&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# suffira (masquerade = dialoguer avec l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique sur firewall)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.2.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut également que le serveur web de la DMZ&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# soit masqueradé sinon, le serveur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dialoguera sur internet avec son IP privée&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.1.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Toutes les règles qui n&#039;ont pas passé les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# règles du firewall seront refusées et loguées...&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facile :&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire zoli&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [Termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# c&#039;est enfin fini&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! le firewall de compèt&#039; est prêt et fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Ceci était bien évidemment un exemple, vous pouvez dès à présent préparer votre propre firewall personnalisé ! &amp;lt;br /&amp;gt;Vous pouvez l&#039;adapter à vos besoins, votre connexion vers internet (par ADSL par exemple), etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Arnaud de Bermingham le 12/11/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|12/11/2001|Arnaud de Bermingham|CC-BY-NC-SA}}&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
Le [http://lea-linux.org/trucs/index.php3?aff_item=272 partage de connexion] facile.&lt;br /&gt;
&lt;br /&gt;
Tester votre firewall [http://grc.com/default.htm là].&lt;br /&gt;
&lt;br /&gt;
Cliquez sur &#039;ShieldsUP!&#039;, puis sur l&#039;un des boutons : &#039;Test My Shields !&amp;quot; et &amp;quot;Probe My Ports !&amp;quot;. Ça vaut pas un bon &amp;lt;tt&amp;gt;nmap&amp;lt;/tt&amp;gt; fait par un ami, mais ça permet de voir ou on en est.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10737</id>
		<title>Iptables</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10737"/>
		<updated>2005-11-15T12:57:09Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* 1.4/ Chargement des modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= IpTables par l&#039;exemple =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Arnaud de Bermingham&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Contact : [mailto:duracell chez apinc point org  duracell chez apinc point org]&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Jice &amp;lt;[mailto:jice chez lea-linux point org jice chez lea-linux point org]&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Fred &amp;lt;[mailto:fred chez lea-linux point org fred chez lea-linux point org]&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cet article présente de façon pratique la mise en place d&#039;un firewall / proxy sur une machine Linux tournant avec un noyau 2.4. &amp;lt;br /&amp;gt;Pour des informations plus théoriques sur les firewall/proxies, vous pouvez lire [http://lea-linux.org/cached/index/Reseau-secu-firewall.html# l&#039;article firewall].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Présentation d&#039;IpTables&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
IpTables est une solution complète de firewall (noyau 2.4) remplaçant &#039;&#039;ipchains&#039;&#039; (noyau 2.2) tournant sous le système GNU/Linux. IpTables permet de faire du firewalling &#039;&#039;stateful&#039;&#039; (à états), de la translation de port et d&#039;adresse, du filtrage au niveau 2 et beaucoup d&#039;autres choses que nous n&#039;allons pas aborder comme le &amp;quot;Mangle&amp;quot; ou modification des paquets à la volée (atchoum).&lt;br /&gt;
&lt;br /&gt;
IpTables est fiable et dispose de très nombreuses options qui permettent de faire du filtrage très fin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de cet article&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Cette documentation est sous licence LDP&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de NetFilter&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
NetFilter est sous licence libre GPL, i.e. gratuit et modifiable du moment que les modifications et améliorations apportées soit rendues publiques.&lt;br /&gt;
&lt;br /&gt;
== 1/ Installation ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1/ Prérequis ===&lt;br /&gt;
&lt;br /&gt;
IpTables est installé en standard sur de nombreuses distributions Linux récentes. En particulier, il est installé sur Linux RedHat 7.1 et sur la plupart des distributions basées sur un kernel 2.4.x.&lt;br /&gt;
&lt;br /&gt;
IpTables a besoin d&#039;un &#039;&#039;&#039;kernel de génération 2.4&#039;&#039;&#039; compilé avec des options spéciales. Ceci ne pose pas de problèmes avec les noyaux 2.4 génériques des principales distributions basées sur cette génération de kernel.&lt;br /&gt;
&lt;br /&gt;
=== 1.2/ Options de compilation du kernel ===&lt;br /&gt;
&lt;br /&gt;
Si vous désirez re-compiler votre kernel, il faut spécifier les options nécessaires au fonctionnement d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
Les options suivantes doivent êtres activées en module (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;) ou dans le kernel (&amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_PACKET&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_NETFILTER&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_CONNTRACK&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FTP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IRC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IPTABLES&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FILTER&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_NAT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_STATE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_LOG&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_LIMIT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et éventuellement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPCHAINS&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipchains&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPFWADM&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipfwadm&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_REDIRECT&amp;lt;/tt&amp;gt; indispensable, pour les proxies transparents par exemple. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_MAC&amp;lt;/tt&amp;gt; permet de matcher avec les adresses MAC.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier le support réseau et TCP/IP et compiler le kernel comme d&#039;habitude : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make dep &amp;amp;&amp;amp; make clean &amp;amp;&amp;amp; make bzImage &amp;amp;&amp;amp; make modules &amp;amp;&amp;amp; make modules_install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3/ Installation ===&lt;br /&gt;
&lt;br /&gt;
Sur une RedHat 7.1, récupérer le package &amp;lt;tt&amp;gt;netfilter&amp;lt;/tt&amp;gt; et l&#039;installer comme d&#039;habitude avec &amp;lt;tt&amp;gt;rpm -Uvh netfilter-x.y.z.rpm&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Sur les versions inférieures a la 7.1, il faut compiler un kernel 2.4 car iptables ne supporte pas les kernels 2.2.x. La compilation de iptables est complexe. Le mieux est de lire le fichier INSTALL du package des sources.&lt;br /&gt;
&lt;br /&gt;
=== 1.4/ Chargement des modules ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas ou les options iptables du kernel ont étés compilées en modules, il est nécessaire de charger ces modules avant de pouvoir utiliser iptables :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_tables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
selon les besoins, on peut éventuellement charger les modules suivants :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_ftp&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_irc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_filter&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_mangle&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si on a besoin de pouvoir rediriger (forward) les paquets IP arrivant sur un interface réseau (connectée par exemple à Internet) vers une autre interface réseau (connectée par exemple au réseau local), il sera nécessaire, dans la plupart des cas, d&#039;exécuter cette commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
afin de l&#039;indiquer au noyau.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota Bene :&#039;&#039;&#039; tous les modprobe semblent inutiles car le kernel les chargent automatiquement si l&#039;on se sert de l&#039;une des fonctionnalités d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
== 2/ Présentation ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1/ Les tables ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Table NAT&#039;&#039;&#039; (Network Address Translation) : Table utilisée pour la translation d&#039;adresse ou la translation de port. &amp;lt;br /&amp;gt;Il a 2 types de chaînes&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; : &#039;&#039;PREROUTING&#039;&#039; qui permet de spécifier &amp;quot;à l&#039;arrivée du firewall&amp;quot; et la chaîne &#039;&#039;POSTROUTING&#039;&#039; qui permet de spécifier &amp;quot;à la sortie du firewall&amp;quot;. Il existe 3 targets (ou cibles) : &#039;&#039;DNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;, SNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039; et &#039;&#039;MASQUERADE&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table FILTER&#039;&#039;&#039; : C&#039;est la table par défaut lorsque l&#039;on en spécifie pas. &amp;lt;br /&amp;gt;Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes : &#039;&#039;FORWARD&#039;&#039; pour les paquets passant par le firewall, &#039;&#039;INPUT&#039;&#039; pour les paquets entrant et &#039;&#039;OUTPUT&#039;&#039; pour les paquets sortants. Les cibles disponibles sont : &#039;&#039;ACCEPT, DENY, DROP, REJECT °&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table Mangle&#039;&#039;&#039; : C&#039;est la table qui contient les règles pour la modification de paquets. &amp;lt;br /&amp;gt;Elle est peu utilisée et ne sera pas décrite dans cet article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;A noter&amp;lt;/u&amp;gt; : Les règles sont matchées dans l&#039;ordre, par défaut la table &#039;&#039;FILTER&#039;&#039; est vide et donc accepte tout. Aucune règle de translation d&#039;adresse n&#039;est présente par défaut.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;u&amp;gt;chaîne&amp;lt;/u&amp;gt;&lt;br /&gt;
: une chaîne est une suite de règles, qui sont prises dans l&#039;ordre ; dès qu&#039;une règle matche un paquet, elle est déclenchée, et la suite de la chaîne est ignorée.&lt;br /&gt;
; * &amp;lt;u&amp;gt;SNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse source du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;DNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse destination du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;MASQUERADE&amp;lt;/u&amp;gt;&lt;br /&gt;
: Une gateway transforme les paquets sortants passant par elle pour donner l&#039;illusion qu&#039;ils sortent de la gateway elle-même par un port alloué dynamiquement ; lorsque la gateway recoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu&#039;elle gère pour lui faire suivre le paquet.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy ACCEPT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet d&#039;accepter un paquet grâce à la règle vérifiée.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy DROP&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet d&#039;un paquet sans message d&#039;erreur si la règle est vérifiée (&amp;quot;non ! j&#039;en veux pas mais je dis rien à l&#039;expediteur&amp;quot;).&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy REJECT&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet avec un retour de paquet d&#039;erreur à l&#039;expediteur si la la règle est verifiée (&amp;quot;un paquet recommandé de La Poste refusé par son destinataire&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== 2.2/ Les commandes ===&lt;br /&gt;
&lt;br /&gt;
IpTables n&#039;est pas livré avec une interface graphique ; les commandes et les règles sont passées en ligne de commande. Le mieux est d&#039;écrire des scripts (à rajouter dans &amp;lt;tt&amp;gt;/etc/rc.d/init.d&amp;lt;/tt&amp;gt;) qui permettent d&#039;appliquer toutes les règles d&#039;un seul coup, dès le démarrage du Linux.&lt;br /&gt;
&lt;br /&gt;
==== 2.2.1/ Commandes principales ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-A --append&amp;lt;/tt&amp;gt; : Ajoute la règle à la fin de la chaîne spécifiée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT ...&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-D --delete&amp;lt;/tt&amp;gt; : Permet de supprimer une chaîne. On peut la matcher de 2 manières, soit en spécifiant le numéros de la chaîne a supprimer, soit en &amp;lt;br /&amp;gt;spécifiant la règle à retirer. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT --dport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-R --replace&amp;lt;/tt&amp;gt; : Permet contrairement à &amp;lt;tt&amp;gt;--delete&amp;lt;/tt&amp;gt; de remplacer la chaîne spécifiée. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -R INPUT 1 -s 192.168.0.1 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-I --insert&amp;lt;/tt&amp;gt; : Permet d&#039;ajouter une chaîne dans un endroit spécifié de la chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -I INPUT 1 --dport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-L --list&amp;lt;/tt&amp;gt; : Permet d&#039;afficher les règles. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L        &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles des chaînes de FILTER&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L INPUT  &amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles de INPUT (FILTER)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-F --flush&amp;lt;/tt&amp;gt; : Permet de vider toutes les règles d&#039;une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -F INPUT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-N --new-chain&amp;lt;/tt&amp;gt; : Permet de créer une nouvelle chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -N LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-X --delete-chain&amp;lt;/tt&amp;gt; : Permet d&#039;effacer une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -X LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-P --policy&amp;lt;/tt&amp;gt; : Permet de spécifier au kernel la target par défaut d&#039;une chaîne DENY, ACCEPT, REJECT, DROP ... &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -P INPUT DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.2/ Commandes pour matcher ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarques&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;!&amp;quot; peut être utilisé pour certaines commandes afin de spécifier le contraire (on peut le traduire par &amp;quot;sauf&amp;quot;). Par exemple une commande qui doit refuser tout trafic TCP sauf ce qui provient de l&#039;adresse IP 10.42.42.42 sera traduite par la commande suivante : &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --source ! 10.42.42.42 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les adresses IP peuvent optionnellement être spécifiées avec le masque associé sous la forme [adresse ip]/[masque].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-p --protocol&amp;lt;/tt&amp;gt; : Spécifier un protocole : &amp;lt;tt&amp;gt;tcp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;udp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;icmp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;all&amp;lt;/tt&amp;gt; (tous) &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-s --source&amp;lt;/tt&amp;gt; : Spécifier une adresse source à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -s 192.168.42.42 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-d --destination&amp;lt;/tt&amp;gt; : Spécifier une adresse destination &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-i --in-interface&amp;lt;/tt&amp;gt; : Spécifier une interface d&#039;entrée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -i eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-o --out-interface&amp;lt;/tt&amp;gt; : Spécifier une interface de sortie &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p icmp -o eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-f --fragment&amp;lt;/tt&amp;gt; : Paquet fragmenté &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -f -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--sport --source-port&amp;lt;/tt&amp;gt; : Spécifier le port source ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt; permet de &amp;lt;br /&amp;gt;spécifier plusieurs ports à matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --sport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp -m multiport --sport 3128,21,1000 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp --sport 1024:2042 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--dport --destination-port&amp;lt;/tt&amp;gt; : Spécifier le port destination ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;permet de spécifier plusieurs ports a matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -m multiport --dport 110,4242,119 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 4925:4633 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--tcp-flags&amp;lt;/tt&amp;gt; : Spécifier un flag tcp à matcher : &amp;lt;tt&amp;gt;SYN ACK FIN RST URG PSH ALL NONE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--icmp-type&amp;lt;/tt&amp;gt; : Spécifier un type de paquet icmp à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp --icmp-type 8 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--mac-source&amp;lt;/tt&amp;gt; : Spécifier l&#039;adresse MAC à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT --mac-source 42.42.AA.42.42.AA -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--state&amp;lt;/tt&amp;gt; : Permet de spécifier l&#039;état du paquet à matcher parmi les états suivants : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; ESTABLISHED &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion déjà établie &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; NEW         &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet demandant une nouvelle connexion &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; INVALID     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion inconnue &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; RELATED     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: Nouvelle connexion mais liée, idéal pour les connexions FTP &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités NAT&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-destination&amp;lt;/tt&amp;gt; : Utilisé en target pour le DNAT, permet de spécifier l&#039;adresse de destination de la translation, on peut également spécifier un port s&#039;il est différent du port source. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d 42.12.42.12 -p tcp --dport 110 -j DNAT --to-destination 192.168.1.2:6110&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d ! 42.12.42.12 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-source&amp;lt;/tt&amp;gt; : Utilisé pour en target pour le SNAT, permet de spécifier l&#039;adresse source de la translation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités pour les LOGS&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-level&amp;lt;/tt&amp;gt; : Level, niveau de log &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-prefix&amp;lt;/tt&amp;gt; : Permet de spécifier un préfixe pour les logs. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.3/ Quelques exemples : ====&lt;br /&gt;
&lt;br /&gt;
Les exemples qui suivent supposent que vous êtes reliés à internet par modem via l&#039;interface ppp0 (mais en remplaçant ppp0 par eth0 - par exemple, on peut adapter les exemples pour d&#039;autres type de liaisons) et que votre réseau local est 192.168.1.0/24 (classe C).&lt;br /&gt;
&lt;br /&gt;
* Pour fixer les &#039;&#039;&#039;politiques par défaut&#039;&#039;&#039; (cad: ce qui se passe quand aucune règle ne correspond - ne matche pas), ici, on refuse tout (normal, on fait un firewall, oui ou non ?) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -P INPUT DROP&amp;lt;br /&amp;gt; iptables -P OUTPUT DROP&amp;lt;br /&amp;gt; iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;logguer&#039;&#039;&#039; tout ce qu&#039;on jette : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -N LOG_DROP&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j LOG --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Et ensuite, plutôt que de mettre &amp;lt;tt&amp;gt;-j DROP&amp;lt;/tt&amp;gt;, il faut mettre &amp;lt;tt&amp;gt;-j LOG_DROP&amp;lt;/tt&amp;gt; et les trois dernières règles doivent être : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A FORWARD -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A INPUT -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A OUTPUT -j LOG_DROP &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur l&#039;interface &amp;lt;tt&amp;gt;lo&amp;lt;/tt&amp;gt; (sinon ce n&#039;est pas la peine d&#039;activer le réseau !) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i lo -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o lo -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur le &#039;&#039;&#039;réseau local&#039;&#039;&#039; &amp;lt;tt&amp;gt;192.168.1.0&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter les résolutions de nom (ie: le &#039;&#039;&#039;dns&#039;&#039;&#039;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol udp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol udp --destination-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter le traffic &#039;&#039;&#039;web&#039;&#039;&#039; (on veut surfer!) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; La première ligne pour accepter ce qui entre sur notre interface ppp0 sur le port 80 (le port http) si c&#039;est une connexion déjà établie, la seconde pour accepter ce qui sort sur ppp0 sur le port 80 si c&#039;est une nouvelle connexion ou si c&#039;est une connexion déjà établie. &lt;br /&gt;
Pour autoriser le &#039;&#039;&#039;ssh&#039;&#039;&#039;, il faut préciser le port 22; pour autoriser l&#039;&#039;&#039;&#039;irc&#039;&#039;&#039;, le port 6667 (ou celui que vous utilisez pour vous connecter à votre serveur); pour le &#039;&#039;&#039;smtp&#039;&#039;&#039; (envoi d&#039;emails), le port 25; pour le &#039;&#039;&#039;pop3&#039;&#039;&#039; (réception d&#039;emails), le port 110; pour le &#039;&#039;&#039;imap&#039;&#039;&#039; (réception d&#039;emails), les ports 143 et 220 (&#039;&#039;&#039;imap3&#039;&#039;&#039;) ; pour le &#039;&#039;&#039;cvs&#039;&#039;&#039;, le port 2401 ; pour le &#039;&#039;&#039;https&#039;&#039;&#039;, le port 443. De manière générale, le numéros de port se trouvent dans /etc/services.&lt;br /&gt;
* Pour le &#039;&#039;&#039;ftp&#039;&#039;&#039; c&#039;est un peu plus complexe. D&#039;abord, il faut charger le module : &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; (c&#039;est lui qui suit - track en anglais - les connexions ftp) et, si vous &#039;&#039;nat&#039;&#039;ez (en utilisant le masquerading par exemple) vos connexions ftp vers d&#039;autres postes le module : &amp;lt;tt&amp;gt;ip_nat_ftp&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; modprobe ip_conntrack_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; # éventuellement : &amp;lt;tt&amp;gt; modprobe ip_nat_ftp&amp;lt;/tt&amp;gt; &amp;lt;/blockquote&amp;gt; Ensuite, il faut taper les commandes suivantes : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Cela pour que la connexion puisse s&#039;établir. Ensuite (et c&#039;est la qu&#039;on a besoin de &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que serveur puisse établir la connexion pour les données (en mode actif). Et enfin : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que le serveur puisse établir la connexion pour les données (en mode passif). Ici aussi &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; est nécessaire. &lt;br /&gt;
* Pour &#039;&#039;&#039;partager une connexion&#039;&#039;&#039;, il faut que le forwarding soit activé dans le noyau (&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;), puis il faut autoriser iptable à faire le forwarding : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -F FORWARD&amp;lt;br /&amp;gt; iptables -A FORWARD -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et enfin, cacher les machines forward-ées par le firewall : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Sur chaque machine devant être cachée par le firewall (ou devant partager la connexion avec la machine qui est connectée à internet), il faut ajouter une route par defaut : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; route add default gw 192.168.1.1 &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Si la machine connectée à internet a comme ip : 192.168.1.1. Il suffit avec une redhat/mandrake d&#039;éditer : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/sysconfig/network&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et d&#039;ajouter dedans : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;GATEWAY=192.168.1.1&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; puis de redémarer le réseau :&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/rc.d/init.d/network restart&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 3/ Application par l&#039;exemple ==&lt;br /&gt;
&lt;br /&gt;
Nous allons mettre en place un firewall / proxy.&lt;br /&gt;
&lt;br /&gt;
Pour cet exemple, le firewall aura la connexion à Internet (interface eth2) et disposera de 2 pattes sur des réseaux privés (eth0 et eth1) :&lt;br /&gt;
&lt;br /&gt;
* il fait office de proxy sur le port 3128 pour un réseau qui aura ainsi un accès internet&lt;br /&gt;
* et une DMZ&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; (&amp;quot;zone démilitarisée&amp;quot;) sur laquelle il y a un ensemble de serveurs disponibles de l&#039;extérieur dont un serveur web qui a pour adresse 192.168.1.2 écoutant sur le port 80 en TCP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;   ____              &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;eth1&amp;lt;/font&amp;gt;&#039;&#039;&#039; &#039;&#039;&#039;.-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;  _/    \_       ____ &amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;3128&amp;lt;/font&amp;gt;&#039;&#039;&#039;/&#039;&#039;&#039;     [PC1]  [PC2]  [PC3] &amp;lt;br /&amp;gt; (        ) &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;eth2&amp;lt;/font&amp;gt;&#039;&#039;&#039;|    |&#039;&#039;&#039;&amp;lt;--&#039;&#039;&#039;&#039;   &amp;lt;u&amp;gt;réseau local&amp;lt;/u&amp;gt; 198.168.2.0&amp;lt;br /&amp;gt; (INTERNET)&#039;&#039;&#039;&amp;lt;---&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;Fire&#039;&#039;&#039;|&amp;lt;br /&amp;gt; (_      _) &amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;ppp0&amp;lt;/font&amp;gt;|&#039;&#039;&#039;wall&#039;&#039;&#039;|&amp;lt;br /&amp;gt;   \____/       |____|&#039;&#039;&#039;&amp;lt;--.&#039;&#039;&#039;   &amp;lt;u&amp;gt;DMZ serveurs&amp;lt;/u&amp;gt; 198.168.1.0&amp;lt;br /&amp;gt;                      &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#3333FF&amp;quot;&amp;gt;eth0&amp;lt;/font&amp;gt;\&#039;&#039;&#039;     [WEB]  [NEWS] [FTP]&amp;lt;br /&amp;gt;                           &#039;&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;&#039;&#039;ASCIIArt (c) Jice&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe d&#039;adresse IP 192.168.2.0 correspond au réseau interne sur l&#039;interface &amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;La classe d&#039;adresse IP 192.168.1.0 correspond a la DMZ sur l&#039;interface &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;L&#039;interface de la connexion Internet est ppp0 sur l&#039;interface &amp;lt;tt&amp;gt;eth2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;u&amp;gt;DMZ, ou zone démilitarisée&amp;lt;/u&amp;gt;&lt;br /&gt;
: Sous-réseau dans lequel des serveurs accessibles depuis internet sont en adressage privé (classe d&#039;adresse IP réservée comme 192.168.x.x) derrière un firewall.&lt;br /&gt;
&lt;br /&gt;
=== 3.1/ Le script init.d ===&lt;br /&gt;
&lt;br /&gt;
Nous allons écrire un script qui permettra de charger automatiquement au démarrage de la machine ou sur demande les règles du firewall qui seront stockées dans le fichier &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Le script de démarrage sera nommé &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt;. Bien sûr, on n&#039;oubliera pas d&#039;exécuter un &amp;lt;tt&amp;gt;chmod +x&amp;lt;/tt&amp;gt; sur les 2 scripts que nous allons créer au long de ce chapitre.&lt;br /&gt;
&lt;br /&gt;
Go ! &amp;lt;br /&amp;gt;Fichier de chargement &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lancement du script de Firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;. /etc/init.d/functions&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;RETVAL=0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour le lancement du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;start() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Application des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/firewall.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour arrêter le firewall (on flush)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;stop() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Flush des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/flush_iptables.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;case $1 in&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  start)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  stop)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  restart)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  status)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -t nat -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  *)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Usage: firewall {start|stop|restart|status}&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=1&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;esac&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est tout simple non ?&lt;br /&gt;
&lt;br /&gt;
=== 3.2/ Le script pour flusher (vider) les règles ===&lt;br /&gt;
&lt;br /&gt;
Et maintenant : &amp;lt;tt&amp;gt;/etc/flush_iptables.sh&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script pour vider les règles iptables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet la police par défaut à ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P INPUT ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet les polices par défaut pour la table NAT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P PREROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P POSTROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On vide (flush) toutes les règles existantes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -F&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Et enfin, on efface toutes les chaînes qui ne&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sont pas à defaut dans la table filter et nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Message de fin&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, on va enfin commencer les choses sérieuses : le script du firewall :)&lt;br /&gt;
&lt;br /&gt;
=== 3.3/ Les prérequis pour le script du firewall et création des tables pour les logs ===&lt;br /&gt;
&lt;br /&gt;
Le script sera commenté au fur et à mesure, afin de décrire chaque étape. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# script &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;/etc/firewall.sh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall d&#039;exemple a but pédagogique&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Activation du forwarding&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est pas pour faire joli, on aura des règles&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# de forward et il faut bien que les paquets&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# traversent la machine, donc on met ce fichier à 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Alors la, on va appliquer quelques astuces&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# pour empêcher les attaques de type &amp;lt;/nowiki&amp;gt;&#039;&#039;spoofing&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et bloquer les réponses ICMP du firewall,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# comme ça c&#039;est très propre. Attention, le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# fait de bloquer le trafic ICMP sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le firewall bloque les pings.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je veux &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de spoofing&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;then&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  do&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo 1 &amp;gt; $filtre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  done&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de icmp&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_all&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va utiliser iptables. Si on l&#039;a compilé en module&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dans le kernel, il faut &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;charger le module ip_tables&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_tables&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on va charger quelques &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;modules supplémentaires&#039;&#039;&#039; pour&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# gérer la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;translation&#039;&#039;&#039; d&#039;adresse, l&#039;&#039;&#039;&#039;IRC&#039;&#039;&#039; et le &#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tu me fait 4 pompes. Chef oui chef !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_nat_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe ip_nat_irc&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_nat&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire bien, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;vider toutes les règles&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# avant d&#039;appliquer les nouvelles règles de firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va rajouter 2 nouvelles &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;chaînes&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci permettra d&#039;ajouter des nouvelles cibles qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# auront la possibilité de loguer ce qui se passe.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La on logue et on refuse le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ici, on logue et on accepte le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES ACCEPT] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut faire un firewall efficace,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# donc la politique a appliquer est de tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# refuser par défaut et rajouter une a une&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les règles que l&#039;on autorise.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bien sur, on a RTFM un peu et on a vu que&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;option -P permet de définir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la cible par défaut&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -P INPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour éviter les problèmes, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;tout accepter sur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la machine en local&#039;&#039;&#039; (interface lo).&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je déconseille de retirer cette règle car&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ça pose pas mal de problèmes et ça peut&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# faire perdre la main sur la machine&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT  -i lo -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o lo -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, la partie initialisation et préparation est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# terminée, passons aux choses sérieuses&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Comme on l&#039;a dit dans la présentation de&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;architecture réseau, le firewall fait&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# également office de proxy grâce par exemple&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à un squid installé dessus. On va donc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# accepter que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy&#039;&#039;&#039; ait une &#039;&#039;&#039;connexion&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet directe&#039;&#039;&#039;. Tant qu&#039;à faire, on va&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mettre des états pour que ça soit bien sécurisé&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A OUTPUT -o ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT  -i ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant, on va faire en sorte que le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy soit totalement transparent pour le LAN&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# bénéficiant de la connexion internet.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# L&#039;astuce consiste a rediriger toutes les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# requêtes ayant un port de destination 80&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# vers le port 3128 du proxy, ici c&#039;est le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall (qui est sur le firewall et qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# a l&#039;adresse IP 192.168.2.1 ).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une règle de NAT suffira largement pour faire ça.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -i eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, c&#039;est pas trop compliqué ! Maintenant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on sait que l&#039;on a un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;serveur web sur la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (la machine d&#039;adresse IP 192.168.1.2) sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le port 80. On souhaite que toutes les requêtes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# provenant d&#039;internet arrivant sur l&#039;adresse IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# publique du serveur ( ici 42.42.42.42 ) soit&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# redirigées sur le serveur web de la DMZ.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Rien de bien compliqué. Dans l&#039;exemple,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on peut retirer le :80 de la target&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# --to-destination&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -d 42.42.42.42 \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est bien tout ça ! mais le problème c&#039;est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# que les chaînes de la table FILTER sont toutes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à DENY, donc tout ceci ne fait rien du tout.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va donc passer a la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;configuration du&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;firewall&#039;&#039;&#039; proprement dit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va quand même &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;accepter les connexions ssh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (port 22) provenant d&#039;une machine (la votre en&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;occurrence, on va dire 192.168.2.42) vers le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall pour pouvoir modifier les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facilement pour bien surveiller, on vas quand&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# même loguer les connexions provenant de mon IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et à destination du ssh du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT -i eth1 -s 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o eth1 -d 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; connecté à l&#039;interface&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# eth1 ait un accès complet à &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La règle de NAT qui permettait d&#039;avoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy transparent&#039;&#039;&#039; sera automatiquement&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# appliqué. L&#039;interface correspondant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à la connexion internet est ici ppp0&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o eth1 -i ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant on donne le droit au &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; de&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;consulter les pages web du serveur de la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth0 -o eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il n&#039;y a plus qu&#039;à dire au firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# d&#039;autoriser à transmettre des paquets TCP à&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# destination du port 80 provenant de l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique (i.e. d&#039;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;) &#039;&#039;&#039;vers le serveur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;web de la DMZ&#039;&#039;&#039; que nous avons naté précédemment.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i ppp0 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --destination-port 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o ppp0 -i eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --source-port 80      -m state --state ESTABLISHED     -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il ne reste plus grand chose à faire !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut permettre à l&#039;ensemble du LAN de dialoguer&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sur internet avec la même adresse IP sinon, bien&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# évidemment ça ne marchera pas (à moins que vous&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ayez 30 adresses ip !).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une petite règle de NAT avec un -j MASQUERADE&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# suffira (masquerade = dialoguer avec l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique sur firewall)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.2.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut également que le serveur web de la DMZ&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# soit masqueradé sinon, le serveur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dialoguera sur internet avec son IP privée&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.1.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Toutes les règles qui n&#039;ont pas passé les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# règles du firewall seront refusées et loguées...&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facile :&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire zoli&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [Termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# c&#039;est enfin fini&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! le firewall de compèt&#039; est prêt et fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Ceci était bien évidemment un exemple, vous pouvez dès à présent préparer votre propre firewall personnalisé ! &amp;lt;br /&amp;gt;Vous pouvez l&#039;adapter à vos besoins, votre connexion vers internet (par ADSL par exemple), etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Arnaud de Bermingham le 12/11/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|12/11/2001|Arnaud de Bermingham|CC-BY-NC-SA}}&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
Le [http://lea-linux.org/trucs/index.php3?aff_item=272 partage de connexion] facile.&lt;br /&gt;
&lt;br /&gt;
Tester votre firewall [http://grc.com/default.htm là].&lt;br /&gt;
&lt;br /&gt;
Cliquez sur &#039;ShieldsUP!&#039;, puis sur l&#039;un des boutons : &#039;Test My Shields !&amp;quot; et &amp;quot;Probe My Ports !&amp;quot;. Ça vaut pas un bon &amp;lt;tt&amp;gt;nmap&amp;lt;/tt&amp;gt; fait par un ami, mais ça permet de voir ou on en est.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10736</id>
		<title>Iptables</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Iptables&amp;diff=10736"/>
		<updated>2005-11-15T12:43:20Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= IpTables par l&#039;exemple =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Arnaud de Bermingham&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;IpTables par l&#039;exemple&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Contact : [mailto:duracell chez apinc point org  duracell chez apinc point org]&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Jice &amp;lt;[mailto:jice chez lea-linux point org jice chez lea-linux point org]&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;révision par Fred &amp;lt;[mailto:fred chez lea-linux point org fred chez lea-linux point org]&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cet article présente de façon pratique la mise en place d&#039;un firewall / proxy sur une machine Linux tournant avec un noyau 2.4. &amp;lt;br /&amp;gt;Pour des informations plus théoriques sur les firewall/proxies, vous pouvez lire [http://lea-linux.org/cached/index/Reseau-secu-firewall.html# l&#039;article firewall].&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Présentation d&#039;IpTables&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
IpTables est une solution complète de firewall (noyau 2.4) remplaçant &#039;&#039;ipchains&#039;&#039; (noyau 2.2) tournant sous le système GNU/Linux. IpTables permet de faire du firewalling &#039;&#039;stateful&#039;&#039; (à états), de la translation de port et d&#039;adresse, du filtrage au niveau 2 et beaucoup d&#039;autres choses que nous n&#039;allons pas aborder comme le &amp;quot;Mangle&amp;quot; ou modification des paquets à la volée (atchoum).&lt;br /&gt;
&lt;br /&gt;
IpTables est fiable et dispose de très nombreuses options qui permettent de faire du filtrage très fin.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de cet article&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Cette documentation est sous licence LDP&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;nowiki&amp;gt;* Licence de NetFilter&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
NetFilter est sous licence libre GPL, i.e. gratuit et modifiable du moment que les modifications et améliorations apportées soit rendues publiques.&lt;br /&gt;
&lt;br /&gt;
== 1/ Installation ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1/ Prérequis ===&lt;br /&gt;
&lt;br /&gt;
IpTables est installé en standard sur de nombreuses distributions Linux récentes. En particulier, il est installé sur Linux RedHat 7.1 et sur la plupart des distributions basées sur un kernel 2.4.x.&lt;br /&gt;
&lt;br /&gt;
IpTables a besoin d&#039;un &#039;&#039;&#039;kernel de génération 2.4&#039;&#039;&#039; compilé avec des options spéciales. Ceci ne pose pas de problèmes avec les noyaux 2.4 génériques des principales distributions basées sur cette génération de kernel.&lt;br /&gt;
&lt;br /&gt;
=== 1.2/ Options de compilation du kernel ===&lt;br /&gt;
&lt;br /&gt;
Si vous désirez re-compiler votre kernel, il faut spécifier les options nécessaires au fonctionnement d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
Les options suivantes doivent êtres activées en module (&amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt;) ou dans le kernel (&amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_PACKET&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_NETFILTER&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_CONNTRACK&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FTP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IRC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_IPTABLES&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_FILTER&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_NAT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_STATE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_LOG&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_LIMIT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et éventuellement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPCHAINS&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipchains&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_COMPAT_IPFWADM&amp;lt;/tt&amp;gt; pour garder la compatibilité avec &amp;lt;u&amp;gt;ipfwadm&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_TARGET_REDIRECT&amp;lt;/tt&amp;gt; indispensable, pour les proxies transparents par exemple. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;CONFIG_IP_NF_MATCH_MAC&amp;lt;/tt&amp;gt; permet de matcher avec les adresses MAC.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier le support réseau et TCP/IP et compiler le kernel comme d&#039;habitude : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make dep &amp;amp;&amp;amp; make clean &amp;amp;&amp;amp; make bzImage &amp;amp;&amp;amp; make modules &amp;amp;&amp;amp; make modules_install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3/ Installation ===&lt;br /&gt;
&lt;br /&gt;
Sur une RedHat 7.1, récupérer le package &amp;lt;tt&amp;gt;netfilter&amp;lt;/tt&amp;gt; et l&#039;installer comme d&#039;habitude avec &amp;lt;tt&amp;gt;rpm -Uvh netfilter-x.y.z.rpm&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Sur les versions inférieures a la 7.1, il faut compiler un kernel 2.4 car iptables ne supporte pas les kernels 2.2.x. La compilation de iptables est complexe. Le mieux est de lire le fichier INSTALL du package des sources.&lt;br /&gt;
&lt;br /&gt;
=== 1.4/ Chargement des modules ===&lt;br /&gt;
&lt;br /&gt;
Dans le cas ou les options iptables du kernel ont étés compilées en modules, il est nécessaire de charger ces modules avant de pouvoir utiliser iptables :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_tables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
selon les besoins, on peut éventuellement charger les modules suivants :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_ftp&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe ip_nat_irc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_filter&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_mangle&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# modprobe iptable_nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si on a besoin de pouvoir forwarder&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; les paquets IP (dans la plupart des cas), il sera nécessaire d&#039;exécuter cette commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
afin de l&#039;indiquer au noyau.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;u&amp;gt;forwarder&amp;lt;/u&amp;gt;&lt;br /&gt;
: il s&#039;agit de faire passer des paquets IP d&#039;une interface réseau vers une autre. Par exemple, un paquet qui arrive de l&#039;internet via un modem ou une carte réseau sera &#039;&#039;redirigé&#039;&#039; (ou &#039;&#039;forwardé&#039;&#039;) vers la carte réseau par laquelle le firewall est attaché au réseau local.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nota Bene :&#039;&#039;&#039; tous les modprobe semblent inutiles car le kernel les chargent automatiquement si l&#039;on se sert de l&#039;une des fonctionnalités d&#039;iptables.&lt;br /&gt;
&lt;br /&gt;
== 2/ Présentation ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1/ Les tables ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Table NAT&#039;&#039;&#039; (Network Address Translation) : Table utilisée pour la translation d&#039;adresse ou la translation de port. &amp;lt;br /&amp;gt;Il a 2 types de chaînes&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; : &#039;&#039;PREROUTING&#039;&#039; qui permet de spécifier &amp;quot;à l&#039;arrivée du firewall&amp;quot; et la chaîne &#039;&#039;POSTROUTING&#039;&#039; qui permet de spécifier &amp;quot;à la sortie du firewall&amp;quot;. Il existe 3 targets (ou cibles) : &#039;&#039;DNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;, SNAT&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039; et &#039;&#039;MASQUERADE&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table FILTER&#039;&#039;&#039; : C&#039;est la table par défaut lorsque l&#039;on en spécifie pas. &amp;lt;br /&amp;gt;Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes : &#039;&#039;FORWARD&#039;&#039; pour les paquets passant par le firewall, &#039;&#039;INPUT&#039;&#039; pour les paquets entrant et &#039;&#039;OUTPUT&#039;&#039; pour les paquets sortants. Les cibles disponibles sont : &#039;&#039;ACCEPT, DENY, DROP, REJECT °&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Table Mangle&#039;&#039;&#039; : C&#039;est la table qui contient les règles pour la modification de paquets. &amp;lt;br /&amp;gt;Elle est peu utilisée et ne sera pas décrite dans cet article.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;A noter&amp;lt;/u&amp;gt; : Les règles sont matchées dans l&#039;ordre, par défaut la table &#039;&#039;FILTER&#039;&#039; est vide et donc accepte tout. Aucune règle de translation d&#039;adresse n&#039;est présente par défaut.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;u&amp;gt;chaîne&amp;lt;/u&amp;gt;&lt;br /&gt;
: une chaîne est une suite de règles, qui sont prises dans l&#039;ordre ; dès qu&#039;une règle matche un paquet, elle est déclenchée, et la suite de la chaîne est ignorée.&lt;br /&gt;
; * &amp;lt;u&amp;gt;SNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse source du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;DNAT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet de modifier l&#039;adresse destination du paquet.&lt;br /&gt;
; * &amp;lt;u&amp;gt;MASQUERADE&amp;lt;/u&amp;gt;&lt;br /&gt;
: Une gateway transforme les paquets sortants passant par elle pour donner l&#039;illusion qu&#039;ils sortent de la gateway elle-même par un port alloué dynamiquement ; lorsque la gateway recoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu&#039;elle gère pour lui faire suivre le paquet.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy ACCEPT&amp;lt;/u&amp;gt;&lt;br /&gt;
: permet d&#039;accepter un paquet grâce à la règle vérifiée.&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy DROP&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet d&#039;un paquet sans message d&#039;erreur si la règle est vérifiée (&amp;quot;non ! j&#039;en veux pas mais je dis rien à l&#039;expediteur&amp;quot;).&lt;br /&gt;
; ° &amp;lt;u&amp;gt;policy REJECT&amp;lt;/u&amp;gt;&lt;br /&gt;
: Rejet avec un retour de paquet d&#039;erreur à l&#039;expediteur si la la règle est verifiée (&amp;quot;un paquet recommandé de La Poste refusé par son destinataire&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== 2.2/ Les commandes ===&lt;br /&gt;
&lt;br /&gt;
IpTables n&#039;est pas livré avec une interface graphique ; les commandes et les règles sont passées en ligne de commande. Le mieux est d&#039;écrire des scripts (à rajouter dans &amp;lt;tt&amp;gt;/etc/rc.d/init.d&amp;lt;/tt&amp;gt;) qui permettent d&#039;appliquer toutes les règles d&#039;un seul coup, dès le démarrage du Linux.&lt;br /&gt;
&lt;br /&gt;
==== 2.2.1/ Commandes principales ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-A --append&amp;lt;/tt&amp;gt; : Ajoute la règle à la fin de la chaîne spécifiée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT ...&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-D --delete&amp;lt;/tt&amp;gt; : Permet de supprimer une chaîne. On peut la matcher de 2 manières, soit en spécifiant le numéros de la chaîne a supprimer, soit en &amp;lt;br /&amp;gt;spécifiant la règle à retirer. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT --dport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -D INPUT 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-R --replace&amp;lt;/tt&amp;gt; : Permet contrairement à &amp;lt;tt&amp;gt;--delete&amp;lt;/tt&amp;gt; de remplacer la chaîne spécifiée. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -R INPUT 1 -s 192.168.0.1 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-I --insert&amp;lt;/tt&amp;gt; : Permet d&#039;ajouter une chaîne dans un endroit spécifié de la chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -I INPUT 1 --dport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-L --list&amp;lt;/tt&amp;gt; : Permet d&#039;afficher les règles. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L        &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles des chaînes de FILTER&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -L INPUT  &amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Affiche toutes les règles de INPUT (FILTER)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-F --flush&amp;lt;/tt&amp;gt; : Permet de vider toutes les règles d&#039;une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -F INPUT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-N --new-chain&amp;lt;/tt&amp;gt; : Permet de créer une nouvelle chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -N LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-X --delete-chain&amp;lt;/tt&amp;gt; : Permet d&#039;effacer une chaîne. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -X LOG_DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-P --policy&amp;lt;/tt&amp;gt; : Permet de spécifier au kernel la target par défaut d&#039;une chaîne DENY, ACCEPT, REJECT, DROP ... &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -P INPUT DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.2/ Commandes pour matcher ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarques&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
Le &amp;quot;!&amp;quot; peut être utilisé pour certaines commandes afin de spécifier le contraire (on peut le traduire par &amp;quot;sauf&amp;quot;). Par exemple une commande qui doit refuser tout trafic TCP sauf ce qui provient de l&#039;adresse IP 10.42.42.42 sera traduite par la commande suivante : &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --source ! 10.42.42.42 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les adresses IP peuvent optionnellement être spécifiées avec le masque associé sous la forme [adresse ip]/[masque].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-p --protocol&amp;lt;/tt&amp;gt; : Spécifier un protocole : &amp;lt;tt&amp;gt;tcp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;udp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;icmp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;all&amp;lt;/tt&amp;gt; (tous) &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-s --source&amp;lt;/tt&amp;gt; : Spécifier une adresse source à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -s 192.168.42.42 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-d --destination&amp;lt;/tt&amp;gt; : Spécifier une adresse destination &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-i --in-interface&amp;lt;/tt&amp;gt; : Spécifier une interface d&#039;entrée &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -i eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-o --out-interface&amp;lt;/tt&amp;gt; : Spécifier une interface de sortie &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p icmp -o eth0 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-f --fragment&amp;lt;/tt&amp;gt; : Paquet fragmenté &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp -f -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--sport --source-port&amp;lt;/tt&amp;gt; : Spécifier le port source ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt; permet de &amp;lt;br /&amp;gt;spécifier plusieurs ports à matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 80 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --sport 80 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp -m multiport --sport 3128,21,1000 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -p tcp --sport 1024:2042 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--dport --destination-port&amp;lt;/tt&amp;gt; : Spécifier le port destination ou une plage de ports, fonctionne aussi en udp, &amp;lt;tt&amp;gt;-m multiport&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;permet de spécifier plusieurs ports a matcher. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p udp --dport 110 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp -m multiport --dport 110,4242,119 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --sport 4925:4633 -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--tcp-flags&amp;lt;/tt&amp;gt; : Spécifier un flag tcp à matcher : &amp;lt;tt&amp;gt;SYN ACK FIN RST URG PSH ALL NONE&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p tcp --dport 42 --tcp-flags SYN,ACK -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--icmp-type&amp;lt;/tt&amp;gt; : Spécifier un type de paquet icmp à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -p icmp --icmp-type 8 -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--mac-source&amp;lt;/tt&amp;gt; : Spécifier l&#039;adresse MAC à matcher &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT --mac-source 42.42.AA.42.42.AA -j DROP&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--state&amp;lt;/tt&amp;gt; : Permet de spécifier l&#039;état du paquet à matcher parmi les états suivants : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; ESTABLISHED &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion déjà établie &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; NEW         &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet demandant une nouvelle connexion &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; INVALID     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: paquet associé à une connexion inconnue &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; RELATED     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: Nouvelle connexion mais liée, idéal pour les connexions FTP &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités NAT&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-destination&amp;lt;/tt&amp;gt; : Utilisé en target pour le DNAT, permet de spécifier l&#039;adresse de destination de la translation, on peut également spécifier un port s&#039;il est différent du port source. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemples :&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d 42.12.42.12 -p tcp --dport 110 -j DNAT --to-destination 192.168.1.2:6110&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# iptables -t nat -A PREROUTING -d ! 42.12.42.12 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--to-source&amp;lt;/tt&amp;gt; : Utilisé pour en target pour le SNAT, permet de spécifier l&#039;adresse source de la translation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Spécificités pour les LOGS&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-level&amp;lt;/tt&amp;gt; : Level, niveau de log &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--log-prefix&amp;lt;/tt&amp;gt; : Permet de spécifier un préfixe pour les logs. &amp;lt;br /&amp;gt;&#039;&#039;&amp;lt;font color=&amp;quot;#770000&amp;quot;&amp;gt;Exemple : Cf. chapitre 3&amp;lt;/font&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2.2.3/ Quelques exemples : ====&lt;br /&gt;
&lt;br /&gt;
Les exemples qui suivent supposent que vous êtes reliés à internet par modem via l&#039;interface ppp0 (mais en remplaçant ppp0 par eth0 - par exemple, on peut adapter les exemples pour d&#039;autres type de liaisons) et que votre réseau local est 192.168.1.0/24 (classe C).&lt;br /&gt;
&lt;br /&gt;
* Pour fixer les &#039;&#039;&#039;politiques par défaut&#039;&#039;&#039; (cad: ce qui se passe quand aucune règle ne correspond - ne matche pas), ici, on refuse tout (normal, on fait un firewall, oui ou non ?) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -P INPUT DROP&amp;lt;br /&amp;gt; iptables -P OUTPUT DROP&amp;lt;br /&amp;gt; iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;logguer&#039;&#039;&#039; tout ce qu&#039;on jette : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -N LOG_DROP&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j LOG --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;br /&amp;gt; iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Et ensuite, plutôt que de mettre &amp;lt;tt&amp;gt;-j DROP&amp;lt;/tt&amp;gt;, il faut mettre &amp;lt;tt&amp;gt;-j LOG_DROP&amp;lt;/tt&amp;gt; et les trois dernières règles doivent être : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A FORWARD -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A INPUT -j LOG_DROP&amp;lt;br /&amp;gt; iptables -A OUTPUT -j LOG_DROP &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur l&#039;interface &amp;lt;tt&amp;gt;lo&amp;lt;/tt&amp;gt; (sinon ce n&#039;est pas la peine d&#039;activer le réseau !) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i lo -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o lo -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour &#039;&#039;&#039;accepter&#039;&#039;&#039; tout ce qui se passe sur le &#039;&#039;&#039;réseau local&#039;&#039;&#039; &amp;lt;tt&amp;gt;192.168.1.0&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter les résolutions de nom (ie: le &#039;&#039;&#039;dns&#039;&#039;&#039;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol udp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol udp --destination-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 53 -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
* Pour accepter le traffic &#039;&#039;&#039;web&#039;&#039;&#039; (on veut surfer!) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; La première ligne pour accepter ce qui entre sur notre interface ppp0 sur le port 80 (le port http) si c&#039;est une connexion déjà établie, la seconde pour accepter ce qui sort sur ppp0 sur le port 80 si c&#039;est une nouvelle connexion ou si c&#039;est une connexion déjà établie. &lt;br /&gt;
Pour autoriser le &#039;&#039;&#039;ssh&#039;&#039;&#039;, il faut préciser le port 22; pour autoriser l&#039;&#039;&#039;&#039;irc&#039;&#039;&#039;, le port 6667 (ou celui que vous utilisez pour vous connecter à votre serveur); pour le &#039;&#039;&#039;smtp&#039;&#039;&#039; (envoi d&#039;emails), le port 25; pour le &#039;&#039;&#039;pop3&#039;&#039;&#039; (réception d&#039;emails), le port 110; pour le &#039;&#039;&#039;imap&#039;&#039;&#039; (réception d&#039;emails), les ports 143 et 220 (&#039;&#039;&#039;imap3&#039;&#039;&#039;) ; pour le &#039;&#039;&#039;cvs&#039;&#039;&#039;, le port 2401 ; pour le &#039;&#039;&#039;https&#039;&#039;&#039;, le port 443. De manière générale, le numéros de port se trouvent dans /etc/services.&lt;br /&gt;
* Pour le &#039;&#039;&#039;ftp&#039;&#039;&#039; c&#039;est un peu plus complexe. D&#039;abord, il faut charger le module : &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; (c&#039;est lui qui suit - track en anglais - les connexions ftp) et, si vous &#039;&#039;nat&#039;&#039;ez (en utilisant le masquerading par exemple) vos connexions ftp vers d&#039;autres postes le module : &amp;lt;tt&amp;gt;ip_nat_ftp&amp;lt;/tt&amp;gt; : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; modprobe ip_conntrack_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; # éventuellement : &amp;lt;tt&amp;gt; modprobe ip_nat_ftp&amp;lt;/tt&amp;gt; &amp;lt;/blockquote&amp;gt; Ensuite, il faut taper les commandes suivantes : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Cela pour que la connexion puisse s&#039;établir. Ensuite (et c&#039;est la qu&#039;on a besoin de &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt;) : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que serveur puisse établir la connexion pour les données (en mode actif). Et enfin : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT&amp;lt;br /&amp;gt; iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Pour que le serveur puisse établir la connexion pour les données (en mode passif). Ici aussi &amp;lt;tt&amp;gt;ip_conntrack_ftp&amp;lt;/tt&amp;gt; est nécessaire. &lt;br /&gt;
* Pour &#039;&#039;&#039;partager une connexion&#039;&#039;&#039;, il faut que le forwarding soit activé dans le noyau (&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;), puis il faut autoriser iptable à faire le forwarding : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -F FORWARD&amp;lt;br /&amp;gt; iptables -A FORWARD -j ACCEPT &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et enfin, cacher les machines forward-ées par le firewall : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Sur chaque machine devant être cachée par le firewall (ou devant partager la connexion avec la machine qui est connectée à internet), il faut ajouter une route par defaut : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt; route add default gw 192.168.1.1 &amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Si la machine connectée à internet a comme ip : 192.168.1.1. Il suffit avec une redhat/mandrake d&#039;éditer : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/sysconfig/network&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; et d&#039;ajouter dedans : &amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;GATEWAY=192.168.1.1&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; puis de redémarer le réseau :&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;/etc/rc.d/init.d/network restart&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 3/ Application par l&#039;exemple ==&lt;br /&gt;
&lt;br /&gt;
Nous allons mettre en place un firewall / proxy.&lt;br /&gt;
&lt;br /&gt;
Pour cet exemple, le firewall aura la connexion à Internet (interface eth2) et disposera de 2 pattes sur des réseaux privés (eth0 et eth1) :&lt;br /&gt;
&lt;br /&gt;
* il fait office de proxy sur le port 3128 pour un réseau qui aura ainsi un accès internet&lt;br /&gt;
* et une DMZ&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; (&amp;quot;zone démilitarisée&amp;quot;) sur laquelle il y a un ensemble de serveurs disponibles de l&#039;extérieur dont un serveur web qui a pour adresse 192.168.1.2 écoutant sur le port 80 en TCP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;   ____              &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;eth1&amp;lt;/font&amp;gt;&#039;&#039;&#039; &#039;&#039;&#039;.-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;  _/    \_       ____ &amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;3128&amp;lt;/font&amp;gt;&#039;&#039;&#039;/&#039;&#039;&#039;     [PC1]  [PC2]  [PC3] &amp;lt;br /&amp;gt; (        ) &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;eth2&amp;lt;/font&amp;gt;&#039;&#039;&#039;|    |&#039;&#039;&#039;&amp;lt;--&#039;&#039;&#039;&#039;   &amp;lt;u&amp;gt;réseau local&amp;lt;/u&amp;gt; 198.168.2.0&amp;lt;br /&amp;gt; (INTERNET)&#039;&#039;&#039;&amp;lt;---&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;Fire&#039;&#039;&#039;|&amp;lt;br /&amp;gt; (_      _) &amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;ppp0&amp;lt;/font&amp;gt;|&#039;&#039;&#039;wall&#039;&#039;&#039;|&amp;lt;br /&amp;gt;   \____/       |____|&#039;&#039;&#039;&amp;lt;--.&#039;&#039;&#039;   &amp;lt;u&amp;gt;DMZ serveurs&amp;lt;/u&amp;gt; 198.168.1.0&amp;lt;br /&amp;gt;                      &#039;&#039;&#039;&amp;lt;font color=&amp;quot;#3333FF&amp;quot;&amp;gt;eth0&amp;lt;/font&amp;gt;\&#039;&#039;&#039;     [WEB]  [NEWS] [FTP]&amp;lt;br /&amp;gt;                           &#039;&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039; ---+------+------+---&amp;lt;br /&amp;gt;&#039;&#039;ASCIIArt (c) Jice&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La classe d&#039;adresse IP 192.168.2.0 correspond au réseau interne sur l&#039;interface &amp;lt;tt&amp;gt;eth1&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;La classe d&#039;adresse IP 192.168.1.0 correspond a la DMZ sur l&#039;interface &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;L&#039;interface de la connexion Internet est ppp0 sur l&#039;interface &amp;lt;tt&amp;gt;eth2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;u&amp;gt;DMZ, ou zone démilitarisée&amp;lt;/u&amp;gt;&lt;br /&gt;
: Sous-réseau dans lequel des serveurs accessibles depuis internet sont en adressage privé (classe d&#039;adresse IP réservée comme 192.168.x.x) derrière un firewall.&lt;br /&gt;
&lt;br /&gt;
=== 3.1/ Le script init.d ===&lt;br /&gt;
&lt;br /&gt;
Nous allons écrire un script qui permettra de charger automatiquement au démarrage de la machine ou sur demande les règles du firewall qui seront stockées dans le fichier &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Le script de démarrage sera nommé &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt;. Bien sûr, on n&#039;oubliera pas d&#039;exécuter un &amp;lt;tt&amp;gt;chmod +x&amp;lt;/tt&amp;gt; sur les 2 scripts que nous allons créer au long de ce chapitre.&lt;br /&gt;
&lt;br /&gt;
Go ! &amp;lt;br /&amp;gt;Fichier de chargement &amp;lt;tt&amp;gt;/etc/init.d/firewall&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lancement du script de Firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;. /etc/init.d/functions&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;RETVAL=0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour le lancement du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;start() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Application des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/firewall.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; touch /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fonction pour arrêter le firewall (on flush)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;stop() {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo -n &amp;quot;Flush des règles IpTables: &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  /etc/flush_iptables.sh&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  [ $RETVAL -eq 0 ] &amp;amp;&amp;amp; rm -f /var/lock/subsys/firewall&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  echo&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;case $1 in&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  start)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  stop)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  restart)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    stop&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    start&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  status)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    /sbin/iptables -t nat -L&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=0&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  *)&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Usage: firewall {start|stop|restart|status}&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    RETVAL=1&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;esac&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exit&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est tout simple non ?&lt;br /&gt;
&lt;br /&gt;
=== 3.2/ Le script pour flusher (vider) les règles ===&lt;br /&gt;
&lt;br /&gt;
Et maintenant : &amp;lt;tt&amp;gt;/etc/flush_iptables.sh&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script pour vider les règles iptables&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet la police par défaut à ACCEPT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P INPUT ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On remet les polices par défaut pour la table NAT&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P PREROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P POSTROUTING ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -P OUTPUT ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On vide (flush) toutes les règles existantes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -F&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Et enfin, on efface toutes les chaînes qui ne&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sont pas à defaut dans la table filter et nat&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -t nat -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Message de fin&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, on va enfin commencer les choses sérieuses : le script du firewall :)&lt;br /&gt;
&lt;br /&gt;
=== 3.3/ Les prérequis pour le script du firewall et création des tables pour les logs ===&lt;br /&gt;
&lt;br /&gt;
Le script sera commenté au fur et à mesure, afin de décrire chaque étape. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# script &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;/etc/firewall.sh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall d&#039;exemple a but pédagogique&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Arnaud de Bermingham&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# duracell@apinc.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Activation du forwarding&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est pas pour faire joli, on aura des règles&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# de forward et il faut bien que les paquets&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;font size=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# traversent la machine, donc on met ce fichier à 1&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Alors la, on va appliquer quelques astuces&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# pour empêcher les attaques de type &amp;lt;/nowiki&amp;gt;&#039;&#039;spoofing&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et bloquer les réponses ICMP du firewall,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# comme ça c&#039;est très propre. Attention, le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# fait de bloquer le trafic ICMP sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le firewall bloque les pings.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je veux &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de spoofing&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;then&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  do&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    echo 1 &amp;gt; $filtre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  done&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;pas de icmp&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_all&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va utiliser iptables. Si on l&#039;a compilé en module&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dans le kernel, il faut &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;charger le module ip_tables&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_tables&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on va charger quelques &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;modules supplémentaires&#039;&#039;&#039; pour&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# gérer la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;translation&#039;&#039;&#039; d&#039;adresse, l&#039;&#039;&#039;&#039;IRC&#039;&#039;&#039; et le &#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tu me fait 4 pompes. Chef oui chef !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;modprobe ip_nat_ftp&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe ip_nat_irc&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_filter&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;modprobe iptable_nat&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire bien, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;vider toutes les règles&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# avant d&#039;appliquer les nouvelles règles de firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -F&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va rajouter 2 nouvelles &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;chaînes&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci permettra d&#039;ajouter des nouvelles cibles qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# auront la possibilité de loguer ce qui se passe.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La on logue et on refuse le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES DROP] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_DROP -j DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ici, on logue et on accepte le paquet,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on rajoute un préfixe pour pouvoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# s&#039;y retrouver dans les logs&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -N LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j LOG \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --log-prefix &#039;[IPTABLES ACCEPT] : &#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A LOG_ACCEPT -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut faire un firewall efficace,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# donc la politique a appliquer est de tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# refuser par défaut et rajouter une a une&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les règles que l&#039;on autorise.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bien sur, on a RTFM un peu et on a vu que&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;option -P permet de définir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la cible par défaut&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -P INPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P OUTPUT DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -P FORWARD DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour éviter les problèmes, on va &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;tout accepter sur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;la machine en local&#039;&#039;&#039; (interface lo).&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Je déconseille de retirer cette règle car&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ça pose pas mal de problèmes et ça peut&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# faire perdre la main sur la machine&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT  -i lo -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o lo -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, la partie initialisation et préparation est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# terminée, passons aux choses sérieuses&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Comme on l&#039;a dit dans la présentation de&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;architecture réseau, le firewall fait&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# également office de proxy grâce par exemple&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à un squid installé dessus. On va donc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# accepter que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy&#039;&#039;&#039; ait une &#039;&#039;&#039;connexion&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet directe&#039;&#039;&#039;. Tant qu&#039;à faire, on va&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mettre des états pour que ça soit bien sécurisé&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A OUTPUT -o ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT  -i ppp0 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 80 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant, on va faire en sorte que le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy soit totalement transparent pour le LAN&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# bénéficiant de la connexion internet.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# L&#039;astuce consiste a rediriger toutes les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# requêtes ayant un port de destination 80&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# vers le port 3128 du proxy, ici c&#039;est le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall (qui est sur le firewall et qui&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# a l&#039;adresse IP 192.168.2.1 ).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une règle de NAT suffira largement pour faire ça.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -i eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -j DNAT --to-destination 192.168.2.1:3128&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Bon, c&#039;est pas trop compliqué ! Maintenant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on sait que l&#039;on a un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;serveur web sur la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (la machine d&#039;adresse IP 192.168.1.2) sur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# le port 80. On souhaite que toutes les requêtes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# provenant d&#039;internet arrivant sur l&#039;adresse IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# publique du serveur ( ici 42.42.42.42 ) soit&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# redirigées sur le serveur web de la DMZ.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Rien de bien compliqué. Dans l&#039;exemple,&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# on peut retirer le :80 de la target&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# --to-destination&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A PREROUTING -d 42.42.42.42 \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# C&#039;est bien tout ça ! mais le problème c&#039;est&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# que les chaînes de la table FILTER sont toutes&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à DENY, donc tout ceci ne fait rien du tout.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va donc passer a la &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;configuration du&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;firewall&#039;&#039;&#039; proprement dit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On va quand même &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;accepter les connexions ssh&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# (port 22) provenant d&#039;une machine (la votre en&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;occurrence, on va dire 192.168.2.42) vers le&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# firewall pour pouvoir modifier les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facilement pour bien surveiller, on vas quand&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# même loguer les connexions provenant de mon IP&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# et à destination du ssh du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A INPUT -i eth1 -s 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -o eth1 -d 192.168.2.42 -m state \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --state ESTABLISHED     -p tcp --sport 22 -j LOG_ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On veut que le &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; connecté à l&#039;interface&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# eth1 ait un accès complet à &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# La règle de NAT qui permettait d&#039;avoir&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# un &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;proxy transparent&#039;&#039;&#039; sera automatiquement&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# appliqué. L&#039;interface correspondant&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# à la connexion internet est ici ppp0&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o eth1 -i ppp0 -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant on donne le droit au &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LAN&#039;&#039;&#039; de&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;consulter les pages web du serveur de la DMZ&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth1 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -i eth0 -o eth1 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --sport 80 -m state --state ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il n&#039;y a plus qu&#039;à dire au firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# d&#039;autoriser à transmettre des paquets TCP à&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# destination du port 80 provenant de l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique (i.e. d&#039;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;internet&#039;&#039;&#039;) &#039;&#039;&#039;vers le serveur&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;web de la DMZ&#039;&#039;&#039; que nous avons naté précédemment.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -i ppp0 -o eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --destination-port 80 -m state --state NEW,ESTABLISHED -j ACCEPT&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A FORWARD -o ppp0 -i eth0 -p tcp \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  --source-port 80      -m state --state ESTABLISHED     -j ACCEPT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Maintenant il ne reste plus grand chose à faire !&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut permettre à l&#039;ensemble du LAN de dialoguer&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# sur internet avec la même adresse IP sinon, bien&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# évidemment ça ne marchera pas (à moins que vous&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ayez 30 adresses ip !).&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Une petite règle de NAT avec un -j MASQUERADE&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# suffira (masquerade = dialoguer avec l&#039;adresse&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# IP publique sur firewall)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.2.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Il faut également que le serveur web de la DMZ&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# soit masqueradé sinon, le serveur&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# dialoguera sur internet avec son IP privée&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -t nat -A POSTROUTING \&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  -s 192.168.1.0/24 -j MASQUERADE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Toutes les règles qui n&#039;ont pas passé les&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# règles du firewall seront refusées et loguées...&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# facile :&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iptables -A FORWARD -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A INPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;iptables -A OUTPUT -j LOG_DROP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Pour faire zoli&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot; [Termine]&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# c&#039;est enfin fini&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! le firewall de compèt&#039; est prêt et fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Ceci était bien évidemment un exemple, vous pouvez dès à présent préparer votre propre firewall personnalisé ! &amp;lt;br /&amp;gt;Vous pouvez l&#039;adapter à vos besoins, votre connexion vers internet (par ADSL par exemple), etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Arnaud de Bermingham le 12/11/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|12/11/2001|Arnaud de Bermingham|CC-BY-NC-SA}}&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
Le [http://lea-linux.org/trucs/index.php3?aff_item=272 partage de connexion] facile.&lt;br /&gt;
&lt;br /&gt;
Tester votre firewall [http://grc.com/default.htm là].&lt;br /&gt;
&lt;br /&gt;
Cliquez sur &#039;ShieldsUP!&#039;, puis sur l&#039;un des boutons : &#039;Test My Shields !&amp;quot; et &amp;quot;Probe My Ports !&amp;quot;. Ça vaut pas un bon &amp;lt;tt&amp;gt;nmap&amp;lt;/tt&amp;gt; fait par un ami, mais ça permet de voir ou on en est.&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Reseau-secu-firewall&amp;diff=10735</id>
		<title>Reseau-secu-firewall</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Reseau-secu-firewall&amp;diff=10735"/>
		<updated>2005-11-15T11:18:31Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* Pré-installation d&amp;#039;un Firewall filtrant sous Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= Firewall =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Firewall&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Serge (légèrement modifié par Jicé)&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Protégez vous derrière un mur de feu.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ce document a été inspiré du [http://www.freenix.org/unix/linux/HOWTO/Firewall-HOWTO.html Firewall-HOWTO], de l&#039;[http://www.freenix.org/unix/linux/HOWTO/IPCHAINS-HOWTO.html IPCHAINS-HOWTO] et du [http://www.freenix.org/unix/linux/HOWTO-vo/IP-Masquerade-HOWTO.html IP-Masquerade-HOWTO]. C&#039;est la synthèse de ces trois documents pour permettre la mise en place des techniques de Firewalling. Je vous conseille quand même de lire ces HOWTO pour plus de compréhension. Je suppose que vous savez configurer un réseau IP, au cas où jeter un coup d&#039;oeil sur la rubrique [[Reseau-cxion locale-lan|réseau local]]. Il se peut que des erreurs se soient glissées dans cette présentation, de plus je ne pourrai être tenu responsable d&#039;une mauvaise configuration de votre système. La sécurité est un sujet vaste, toujours en évolution et je ne prétends pas vous fournir ici une solution exempte de tout danger. Ce document est à prendre comme une présentation de ces techniques.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;ATTENTION: rubrique non finie, le filtrage plus fin et les techniques de proxy ne sont pas encore décrits.&amp;lt;/font&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Explications ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Bon qu&#039;est un Firewall ? Si on traduit, cela nous donne « pare-feu » , vous allez me dire « ha bon mon micro me protège du feu ? », bien sûr que non, un Firewall sert en fait à protéger un réseau vis à vis d&#039;un autre ou d&#039;autre réseaux.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Plusieurs types de Firewall existent et ne travaillent pas de la même façon et n&#039;offrent pas les mêmes sécurités.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Les Firewall sont de plus en plus utilisés pour protéger les réseaux locaux d&#039;entreprises vis à vis de l&#039;internet. Il s&#039;agit en fait d&#039;une machine qui est reliée vers l&#039;extérieur (Internet) et vers le réseaux local aussi et qui en quelque sorte analyse le trafic réseau qui la traverse pour savoir si oui ou non elle laisse passer ce trafic que ça soit dans un sens ou dans l&#039;autre :&amp;lt;/div&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;  _ ---- _         ________     +---&amp;gt; PC2&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; (        )       |        |    |&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;( INTERNET )&amp;lt;----&amp;gt;|FIREWALL|&amp;lt;---+---&amp;gt; PC3&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; (_      _)       |________|    |&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ----                        +---&amp;gt; PC4&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les différents types de Firewall ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Le Firewall le plus simple est une machine qui possède une connexion vers l&#039;extérieur et une autre sur le réseau local et qui ne transmet pas le trafic réseau d&#039;un réseau à l&#039;autre. Si une machine du réseau local veut accéder vers l&#039;extérieur, elle ouvre en fait une session sur le Firewall, et travaille directement sur cette machine pour accéder vers l&#039;extérieur. De ce fait aucun trafic réseau de l&#039;extérieur ne peut rentrer sur le réseau local. &lt;br /&gt;
&lt;br /&gt;
Vous avez compris les problèmes que cela engendre :&lt;br /&gt;
&lt;br /&gt;
* on travaille directement sur le Firewall donc chaque utilisateur qui va par exemple « naviguer » sur le web vas lancer un nouveau processus « navigateur »,&lt;br /&gt;
* on n&#039;a pas accès directement à sa machine avec ses ressources mais à celle du Firewall, et la protection s&#039;arrête juste a une authentification d&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
 Ce type de Firewall en fait ne filtre absolument rien et peut donc être sujet à la moindre attaque extérieure. En fait il n&#039;est plus utilisé, on va dire que c&#039;est le « Firewall préhistorique » en quelque sorte. Voyons maintenant les types de Firewall utilisés :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;#FF6666&amp;quot;&amp;gt;Les Firewalls à filtrage de paquets&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-indent: 0.49in; margin-bottom: 0in&amp;quot;&amp;gt;Ils travaillent sur les paquets réseaux eux-même. Pour les personnes qui ont des connaissances réseaux, ce type de Firewall travaille sur la couche réseau du modèle OSI. Ils analysent les paquets entrants/sortants suivant leur type, leurs adresses source et destination et les ports. Comme ils travaillent directement sur la couche IP, ils sont très peu gourmands en mémoire. &lt;br /&gt;
&lt;br /&gt;
Avec Linux ce style de filtrage au niveau de la couche IP est intégré directement dans le noyau, il suffit donc d&#039;avoir un 486 avec 8 Mo de mémoire et d&#039;une distribution Linux avec juste un kernel de base et la couche IP pour faire un tel Firewall.&lt;br /&gt;
&lt;br /&gt;
De plus ils sont totalement transparents pour les utilisateurs, pas d&#039;authentification pour aller vers l&#039;extérieur et pas de paramétrages spécifiques sur les machines des utilisateurs. Un désavantage, c&#039;est qu&#039;il n&#039;y a pas d&#039;authentification possible par utilisateur mais par adresse IP. C&#039;est à dire que si l&#039;on veut en interne interdire à certaine personnes d&#039;aller vers l&#039;extérieur ce n&#039;est possible que si l&#039;on connaît l&#039;adresse de la machine de cet utilisateur, on ne peut pas empêcher que la personne aille sur une autre machine et il faut de plus que les machines aient toujours la même adresse, ce qui peut poser problème lorsqu&#039;on on utilise [[DHCP]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;#FF6666&amp;quot;&amp;gt;Les Firewalls Proxy&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Les Proxy serveur sont utilisés pour contrôler et analyser tout trafic avec l&#039;extérieur. Certains proxies utilisent en plus un cache, c&#039;est à dire qu&#039;ils stockent des données en local, ce qui permet de réduire le trafic réseau, en effet si une même donnée est demandée plusieurs fois, au lieu d&#039;aller la chercher au nouveau vers l&#039;extérieur c&#039;est le proxy lui même qui la fournit. Leur fonctionnement dépend de leur type :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;Proxy d&#039;applications&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Leur fonctionnement ressemble un peu au fonctionnement du premier Firewall, c&#039;est à dire quand une application d&#039;une machine locale va vers l&#039;extérieur, en fait elle se connecte sur le Proxy et c&#039;est le Proxy lui-même qui va chercher l&#039;information puis la renvoyer vers la machine demandeuse.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Un exemple : vous voulez récupérer un fichier via FTP sur internet, en fait votre client FTP vas se connecter sur le proxy qui va faire serveur FTP, le Proxy va en même temps ouvrir une session FTP sur le serveur distant, il va récupérer le fichier cible et vous le renvoyer via son serveur FTP. En fait c&#039;est toujours le Proxy qui récupère les données et vous les renvoie.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Ça à l&#039;avantage d&#039;être très sécurisé pour la machine cliente, ça fait cache la plupart du temps donc ça réduit le trafic réseau, ça peut permettre l&#039;authentification aussi si l&#039;on oblige une authentification sur les applications du Proxy. Par contre ça demande des configurations spéciales sur les clients, ça demande aussi d&#039;installer sur le proxy les applications serveur de chaque protocole que l&#039;on souhaite fournir aux utilisateurs et ça consomme énormément de ressources.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;Proxy « SOCKS »&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Il ne travaille pas sur les applications, en fait il « refait » en quelque sorte les connexions. Le client passe par le Proxy qui lui en interne refait la connexion vers l&#039;extérieur. Comme les Firewalls filtrants, ils ne font pas d&#039;authentification, mais peuvent quand même enregistrer l&#039;utilisateur qui a demandé la connexion.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pré-installation d&#039;un Firewall filtrant sous Linux ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;On va dans cette partie configurer le kernel pour préparer notre système à devenir un Firewall filtrant.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Comme je l&#039;ai dit plus haut, les Firewall filtrants sont facilement configurables sous Linux car ils sont pris en charge directement dans le noyau de Linux. Ce type de Firewall étant très léger, il vous suffit d&#039;un 486 avec 16 voire 8 Mo de RAM. Vous avez besoin aussi suivant la version du kernel :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Version 1.x.x : une copie de &amp;lt;tt&amp;gt;ipfwadm&amp;lt;/tt&amp;gt; (mais bon je vous conseille vivement de passer a une version supérieure de kernel).&lt;br /&gt;
* Version 2.0.x : &amp;lt;tt&amp;gt;ipwadm&amp;lt;/tt&amp;gt; est sûrement déjà présent, vérifiez quand même.&lt;br /&gt;
* Version 2.2.x : &amp;lt;tt&amp;gt;ipchains&amp;lt;/tt&amp;gt; (sûrement présent aussi).&lt;br /&gt;
* &#039;&#039;Version 2.3.x et 2.4 à venir : le format de firewall a encore changé, il n&#039;est pas encore décrit dans ce document.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Pour ce document je décris la manière de mettre en place tout ça pour un kernel de version 2.2.X car à mon goût le Firewall est beaucoup plus sûr avec ce kernel (stack IP plus sûre et &amp;lt;tt&amp;gt;ipchains&amp;lt;/tt&amp;gt; bien plus puissant que &amp;lt;tt&amp;gt;ipwadm&amp;lt;/tt&amp;gt;), de plus il est facile de trouver une distribution à base de kernel 2.2.X, les 2.0.X deviennent rare.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Si vous voulez de plus faire un Proxy, récupérez l&#039;un de ces programmes :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Squid&lt;br /&gt;
* TIS Firewall toolkit (FWTK)&lt;br /&gt;
* Socks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Une recherche sur freshmeat vous trouvera ça :) Mais bon pour l&#039;instant ce document ne traite que des Firewall filtrant, j&#039;ajouterais une rubrique Proxy plus tard.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Bon il faut maintenant configurer le kernel pour activer ce filtrage. Cochez les options suivantes :&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;y&amp;gt; Enable experimental&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;y&amp;gt; Enable loadable module support&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;*&amp;gt; Packet socket&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[ ] Kernel/User netlink socket&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[y] Network firewalls&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[ ] Socket Filtering&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;y&amp;gt; Unix domain sockets&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[y] TCP/IP networking&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[ ] IP: multicasting&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: advanced router&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[ ] IP: kernel level autoconfiguration&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: firewalling&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: always defragment (required for masquerading)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: transparent proxy support&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[M] IP: masquerading&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--- Protocol-specific masquerading support will be built as modules.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[M] IP: ICMP masquerading&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--- Protocol-specific masquerading support will be built as modules.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[Y] IP: masquerading special modules support &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;lt;- Choisir tout les modules en répondant M&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: optimize as router not host&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; IP: tunneling&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; IP: GRE tunnels over IP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: aliasing support&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: TCP syncookie support (not enabled per default)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--- (it is safe to leave these untouched)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; IP: Reverse ARP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: Allow large windows (not recommended if &amp;lt;16Mb of memory)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; The IPv6 protocol (EXPERIMENTAL)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cochez également toutes les autres options nécessaires ([http://lea-linux.org/cached/index/Kernel-kernel.html# voir la rubrique noyau]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Bon vous recompilez le noyau (&amp;lt;tt&amp;gt;make dep; make clean; make bzImage&amp;lt;/tt&amp;gt;), déplacez votre ancien répertoire de module (&amp;lt;tt&amp;gt;mv /lib/module/votre_version /lib/module/votre_version.old&amp;lt;/tt&amp;gt;), puis compilez et instakllez les modules (&amp;lt;tt&amp;gt;make modules; make modules_install&amp;lt;/tt&amp;gt;), copiez alors le nouveau kernel (c&amp;lt;tt&amp;gt;p /usr/src/linux/arch/i386/boot/bzImage /boot&amp;lt;/tt&amp;gt;) et si vous utilisez LILO, reconfigurez le pour qu&#039;il pointe sur votre nouveau kernel (editez &amp;lt;tt&amp;gt;/etc/lilo.conf&amp;lt;/tt&amp;gt;) et relancez lilo (&amp;lt;tt&amp;gt;/sbin/lilo&amp;lt;/tt&amp;gt;), sinon reconfigurez votre loader (CHOS, LOADLIN, etc.). Enfin on reboute (&amp;lt;tt&amp;gt;reboot&amp;lt;/tt&amp;gt;). Ouf ! :)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt;&#039;&#039;&#039; :&lt;br /&gt;
: Vérifiez la configuration réseau, assurez-vous que l&#039;adresse de réseau de votre LAN est bien une des adresses réservée (192.168.2.0 par exemple, [http://lea-linux.org/cached/index/Reseau-cxion_locale-lan.html# voir la rubrique réseau local] pour ça). Pour la configuration de la carte externe, assurez vous aussi de sa bonne configuration pour accéder au net (testez votre connexion en fait), de même si la connexion se fait par modem. Pour tout ce qui suit je suppose que votre connexion au net se fait via une carte ethernet, en fait si vous utilisez un modem, de toute façon c&#039;est identique. Bon avant de vraiment configurer le firewall on va tout d&#039;abord mettre en place le « masquerading ».&lt;br /&gt;
&lt;br /&gt;
== Mise en place du filtrage, du masquerading, routage LAN&amp;lt;tt&amp;gt;&amp;lt;-&amp;gt;&amp;lt;/tt&amp;gt;NET et règles de base ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Times New Roman, serif&amp;quot;&amp;gt;Assurez-vous d&#039;avoir bien la configuration précédente pour votre kernel (validez les lors de la configuration du kernel).&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Compilez le kernel puis les modules. Une fois tout ça réalisé, ajouter dans le fichier &amp;lt;tt&amp;gt;/etc/rc.d/rc.local&amp;lt;/tt&amp;gt; (vérifiez le chemin, il peut être différent suivant les distributions) le chargement des modules de masquerade :&amp;lt;/div&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/depmod -a &amp;lt;/tt&amp;gt;&#039;&#039;(n&#039;ajoutez cette ligne que si elle n&#039;est pas déjà présente)&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_ftp  &amp;lt;/tt&amp;gt;&#039;&#039;(pour ftp)&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_raudio &amp;lt;/tt&amp;gt;&#039;&#039;(pour real audio)&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_irc  &amp;lt;/tt&amp;gt;&#039;&#039;(pour IRC)&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;et tout autre module comme &amp;lt;tt&amp;gt;ip_masq_cuseeme&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ip_masq_vdolive&amp;lt;/tt&amp;gt;, etc. que vous pouvez récupérer sur le net, si vous voulez bien sûr que de tels services soit accessibles par votre réseau local.&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: Je vous rappelle quand même que plus vous ouvrirez de services, plus votre sécurité baissera. En effet certains services « supplémentaires » peuvent contenir des bugs encore inconnus mais exploitables plus tard. Si vous voulez une sécurité accrue n&#039;autorisez que le web ainsi que le FTP, surtout si vous êtes sur un réseau d&#039;entreprise, je ne vois pas pourquoi l&#039;IRC par exemple doit être activé, on n&#039;en a pas besoin pour travailler dans une entreprise :).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Avant de continuer vérifiez bien que votre LAN (réseau local) est bien sur une adresse réservée privé, c&#039;est a dire du type:&amp;lt;/div&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&#039;&#039;&#039;10.0.0.0 - 10.255.255.255 Classe A&#039;&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&#039;&#039;&#039;172.16.0.0 - 172.31.255.255 Classe B&#039;&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&#039;&#039;&#039;192.168.0.0 - 192.168.255.255 Classe C&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Pour plus de simplicité, je considère que votre LAN est sur l&#039;adresse réseau &#039;&#039;&#039;192.168.1.0&#039;&#039;&#039; et que votre « passerelle » (le firewall Linux) a comme adresse &#039;&#039;&#039;192.168.1.1&#039;&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Configurez aussi les autres machines de votre LAN avec bien sûr une adresse IP valide (de 192.168.1.2 jusqu&#039;à 192.168.1.254), l&#039;adresse de passerelle et de DNS, celle du Firewall (192.168.1.1).&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Bon maintenant sur le Firewall, on va activer le masquerade avec:&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s yyy.yyy.yyy.yyy/x -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;avec &#039;&#039;&#039;x&#039;&#039;&#039; qui correspond au masque et &#039;&#039;&#039;yyy.yyy.yyy.yyy&#039;&#039;&#039; l&#039;adresse réseau de votre LAN (ici 192.168.1.0)&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;  &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;BORDER&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | Masque&lt;br /&gt;
! width=&amp;quot;198&amp;quot; | Valeur de x&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | Classe&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | &#039;&#039;&#039;&#039;&#039;255.0.0.0&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
! width=&amp;quot;198&amp;quot; | &#039;&#039;&#039;&#039;&#039;8&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | &#039;&#039;&#039;&#039;&#039;A&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;255.255.0.0&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;198&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;16&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;255.255.255.0&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;198&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;24&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;C&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;255.255.255.255&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;198&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;32&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;Point à point&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Si pour vous ce style de notation de masque vous gêne vous pouvez aussi utiliser la notation xxx.xxx.xxx.xxx du masque pour remplacer x.&lt;br /&gt;
&lt;br /&gt;
Pour notre exemple on tape alors:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.0/24 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;ou&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.0/255.255.255.0 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Bon on a fait quoi au juste là ?&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La première ligne indique au noyau de ne transmettre AUCUN paquet, donc on bloque TOUT en fait.&lt;br /&gt;
* La deuxième ligne elle indique de transmettre les paquets réseaux de notre LAN (192.168.1.0 avec masque 255.255.255.0).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Donc en fait notre Firewall Linux ne laissera passer au travers de lui que les communications LAN&amp;lt;-&amp;gt;Extérieur.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Au lieu de laisser la possibilité à toutes les machines de notre LAN d&#039;avoir accès vers l&#039;extérieur, on aurait pu aussi ne spécifier que certaines machines, par exemple on veut que juste le patron de notre société ainsi que l&#039;administrateur réseau par exemple qui ont des machines avec adresse IP 192.168.1.3 et 192.168.1.10. Pour cela il faut jouer sur le masque, ça nous donne:&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.3/32 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.10/32 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;Pour rendre ces règles « permanentes » après chaque reboot, ajoutez-les aussi dans un fichier que vous appelez par exemple &#039;&#039;&#039;&amp;lt;tt&amp;gt;rc.firewall&amp;lt;/tt&amp;gt;&#039;&#039;&#039; que vous placez dans &amp;lt;tt&amp;gt;/etc/rc.d&amp;lt;/tt&amp;gt;, sinon vous allez devoir les taper à chaque reboot du système. &amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;On résume alors ce qui peut se trouver dans un tel fichier:&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall.rc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script de démarrage des règles du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tchesmeli serge , Version 0.2&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lea : http://www.lea-linux.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;Démarrage FIREWALL :&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;- Activation de l&#039;IP forwarding...&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# D&#039;abord on bloque tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo -n &amp;quot;- Arrêt total des transmissions réseau...&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;if [ -x /sbin/ipchains ]; then&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    /sbin/ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;OK&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;else&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Erreur !&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Votre noyau n&#039;est pas configuré pour\&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;permettre le filtrage.... veuillez le recompiler.&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    exit&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On charge les modules de masquerade&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo -n &amp;quot;- Chargement des modules de masquerade... &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_ftp&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_raudio&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_irc&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo &amp;quot;OK&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Vous pouvez y inclure ou enlever&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les modules de votre choix&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Puis on applique les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo -n &amp;quot;- Chargement des règles de filtrage... &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ipchains -P forward DENY&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;ipchains -A forward -s 192.168.1.0/255.255.255.0 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo &amp;quot;OK&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# A vous de bien fixer les règles suivant votre réseau&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;Firewall prêt.&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors appeler ce script depuis &amp;lt;tt&amp;gt;/etc/rc.d/rc.local&amp;lt;/tt&amp;gt; en y ajoutant une ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;source rc.firewall&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Voilà ! Votre firewall est configuré ! A vous de jouer sur les règles afin d&#039;optimiser la sécurité sur votre réseau local...&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Serge Tchesmeli le 05/06/2000.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 05/06/2000, Serge Tchesmeli&lt;br /&gt;
{{LDL}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO/Firewall-HOWTO.html Firewall-HOWTO]&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO/IPCHAINS-HOWTO.html IPCHAINS-HOWTO]&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO-vo/IP-Masquerade-HOWTO.html IP-Masquerade HOWTO]&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO/mini/IP-Masquerade.html IP-Masq. mini-HOWTO]&lt;br /&gt;
* [http://www.fwbuilder.org Firewall builder], un excellent outil pour configurer votre firewall sous Linux.&lt;br /&gt;
* La logithèque de Léa, [[Logithèque:Oldrub=21|section Sécurité]].&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Reseau-secu-firewall&amp;diff=10734</id>
		<title>Reseau-secu-firewall</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Reseau-secu-firewall&amp;diff=10734"/>
		<updated>2005-11-15T11:00:33Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* &amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;Proxy d&amp;#039;applications&amp;lt;/font&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Sécurité]]&lt;br /&gt;
= Firewall =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Firewall&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Serge (légèrement modifié par Jicé)&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Protégez vous derrière un mur de feu.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ce document a été inspiré du [http://www.freenix.org/unix/linux/HOWTO/Firewall-HOWTO.html Firewall-HOWTO], de l&#039;[http://www.freenix.org/unix/linux/HOWTO/IPCHAINS-HOWTO.html IPCHAINS-HOWTO] et du [http://www.freenix.org/unix/linux/HOWTO-vo/IP-Masquerade-HOWTO.html IP-Masquerade-HOWTO]. C&#039;est la synthèse de ces trois documents pour permettre la mise en place des techniques de Firewalling. Je vous conseille quand même de lire ces HOWTO pour plus de compréhension. Je suppose que vous savez configurer un réseau IP, au cas où jeter un coup d&#039;oeil sur la rubrique [[Reseau-cxion locale-lan|réseau local]]. Il se peut que des erreurs se soient glissées dans cette présentation, de plus je ne pourrai être tenu responsable d&#039;une mauvaise configuration de votre système. La sécurité est un sujet vaste, toujours en évolution et je ne prétends pas vous fournir ici une solution exempte de tout danger. Ce document est à prendre comme une présentation de ces techniques.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;ATTENTION: rubrique non finie, le filtrage plus fin et les techniques de proxy ne sont pas encore décrits.&amp;lt;/font&amp;gt;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Explications ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Bon qu&#039;est un Firewall ? Si on traduit, cela nous donne « pare-feu » , vous allez me dire « ha bon mon micro me protège du feu ? », bien sûr que non, un Firewall sert en fait à protéger un réseau vis à vis d&#039;un autre ou d&#039;autre réseaux.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Plusieurs types de Firewall existent et ne travaillent pas de la même façon et n&#039;offrent pas les mêmes sécurités.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Les Firewall sont de plus en plus utilisés pour protéger les réseaux locaux d&#039;entreprises vis à vis de l&#039;internet. Il s&#039;agit en fait d&#039;une machine qui est reliée vers l&#039;extérieur (Internet) et vers le réseaux local aussi et qui en quelque sorte analyse le trafic réseau qui la traverse pour savoir si oui ou non elle laisse passer ce trafic que ça soit dans un sens ou dans l&#039;autre :&amp;lt;/div&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;  _ ---- _         ________     +---&amp;gt; PC2&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; (        )       |        |    |&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;( INTERNET )&amp;lt;----&amp;gt;|FIREWALL|&amp;lt;---+---&amp;gt; PC3&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; (_      _)       |________|    |&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ----                        +---&amp;gt; PC4&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les différents types de Firewall ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Le Firewall le plus simple est une machine qui possède une connexion vers l&#039;extérieur et une autre sur le réseau local et qui ne transmet pas le trafic réseau d&#039;un réseau à l&#039;autre. Si une machine du réseau local veut accéder vers l&#039;extérieur, elle ouvre en fait une session sur le Firewall, et travaille directement sur cette machine pour accéder vers l&#039;extérieur. De ce fait aucun trafic réseau de l&#039;extérieur ne peut rentrer sur le réseau local. &lt;br /&gt;
&lt;br /&gt;
Vous avez compris les problèmes que cela engendre :&lt;br /&gt;
&lt;br /&gt;
* on travaille directement sur le Firewall donc chaque utilisateur qui va par exemple « naviguer » sur le web vas lancer un nouveau processus « navigateur »,&lt;br /&gt;
* on n&#039;a pas accès directement à sa machine avec ses ressources mais à celle du Firewall, et la protection s&#039;arrête juste a une authentification d&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
 Ce type de Firewall en fait ne filtre absolument rien et peut donc être sujet à la moindre attaque extérieure. En fait il n&#039;est plus utilisé, on va dire que c&#039;est le « Firewall préhistorique » en quelque sorte. Voyons maintenant les types de Firewall utilisés :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;#FF6666&amp;quot;&amp;gt;Les Firewalls à filtrage de paquets&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-indent: 0.49in; margin-bottom: 0in&amp;quot;&amp;gt;Ils travaillent sur les paquets réseaux eux-même. Pour les personnes qui ont des connaissances réseaux, ce type de Firewall travaille sur la couche réseau du modèle OSI. Ils analysent les paquets entrants/sortants suivant leur type, leurs adresses source et destination et les ports. Comme ils travaillent directement sur la couche IP, ils sont très peu gourmands en mémoire. &lt;br /&gt;
&lt;br /&gt;
Avec Linux ce style de filtrage au niveau de la couche IP est intégré directement dans le noyau, il suffit donc d&#039;avoir un 486 avec 8 Mo de mémoire et d&#039;une distribution Linux avec juste un kernel de base et la couche IP pour faire un tel Firewall.&lt;br /&gt;
&lt;br /&gt;
De plus ils sont totalement transparents pour les utilisateurs, pas d&#039;authentification pour aller vers l&#039;extérieur et pas de paramétrages spécifiques sur les machines des utilisateurs. Un désavantage, c&#039;est qu&#039;il n&#039;y a pas d&#039;authentification possible par utilisateur mais par adresse IP. C&#039;est à dire que si l&#039;on veut en interne interdire à certaine personnes d&#039;aller vers l&#039;extérieur ce n&#039;est possible que si l&#039;on connaît l&#039;adresse de la machine de cet utilisateur, on ne peut pas empêcher que la personne aille sur une autre machine et il faut de plus que les machines aient toujours la même adresse, ce qui peut poser problème lorsqu&#039;on on utilise [[DHCP]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;#FF6666&amp;quot;&amp;gt;Les Firewalls Proxy&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Les Proxy serveur sont utilisés pour contrôler et analyser tout trafic avec l&#039;extérieur. Certains proxies utilisent en plus un cache, c&#039;est à dire qu&#039;ils stockent des données en local, ce qui permet de réduire le trafic réseau, en effet si une même donnée est demandée plusieurs fois, au lieu d&#039;aller la chercher au nouveau vers l&#039;extérieur c&#039;est le proxy lui même qui la fournit. Leur fonctionnement dépend de leur type :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;Proxy d&#039;applications&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Leur fonctionnement ressemble un peu au fonctionnement du premier Firewall, c&#039;est à dire quand une application d&#039;une machine locale va vers l&#039;extérieur, en fait elle se connecte sur le Proxy et c&#039;est le Proxy lui-même qui va chercher l&#039;information puis la renvoyer vers la machine demandeuse.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Un exemple : vous voulez récupérer un fichier via FTP sur internet, en fait votre client FTP vas se connecter sur le proxy qui va faire serveur FTP, le Proxy va en même temps ouvrir une session FTP sur le serveur distant, il va récupérer le fichier cible et vous le renvoyer via son serveur FTP. En fait c&#039;est toujours le Proxy qui récupère les données et vous les renvoie.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Ça à l&#039;avantage d&#039;être très sécurisé pour la machine cliente, ça fait cache la plupart du temps donc ça réduit le trafic réseau, ça peut permettre l&#039;authentification aussi si l&#039;on oblige une authentification sur les applications du Proxy. Par contre ça demande des configurations spéciales sur les clients, ça demande aussi d&#039;installer sur le proxy les applications serveur de chaque protocole que l&#039;on souhaite fournir aux utilisateurs et ça consomme énormément de ressources.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;Proxy « SOCKS »&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Il ne travaille pas sur les applications, en fait il « refait » en quelque sorte les connexions. Le client passe par le Proxy qui lui en interne refait la connexion vers l&#039;extérieur. Comme les Firewalls filtrants, ils ne font pas d&#039;authentification, mais peuvent quand même enregistrer l&#039;utilisateur qui a demandé la connexion.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pré-installation d&#039;un Firewall filtrant sous Linux ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;On va dans cette partie configurer le kernel pour préparer notre système à devenir un Firewall filtrant.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Comme je l&#039;ai dit plus haut, les Firewall filtrants sont facilement configurables sous Linux car ils sont pris en charge directement dans le noyau de Linux. Ce type de Firewall étant très léger, il vous suffit d&#039;un 486 avec 16 voire 8 Mo de RAM. Vous avez besoin aussi suivant la version du kernel :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Version 1.x.x : une copie de &amp;lt;tt&amp;gt;ipfwadm&amp;lt;/tt&amp;gt; (mais bon je vous conseille vivement de passer a une version supérieure de kernel).&lt;br /&gt;
* Version 2.0.x : &amp;lt;tt&amp;gt;ipwadm&amp;lt;/tt&amp;gt; est sûrement déjà présent, vérifiez quand même.&lt;br /&gt;
* Version 2.2.x : &amp;lt;tt&amp;gt;ipchains&amp;lt;/tt&amp;gt; (sûrement présent aussi).&lt;br /&gt;
* &#039;&#039;Version 2.3.x et 2.4 à venir : le format de firewall a encore changé, il n&#039;est pas encore décrit dans ce document.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Pour ce document je décris la manière de mettre en place tout ça pour un kernel de version 2.2.X car à mon goût le Firewall est beaucoup plus sûr avec ce kernel (stack IP plus sûre et &amp;lt;tt&amp;gt;ipchains&amp;lt;/tt&amp;gt; bien plus puissant que &amp;lt;tt&amp;gt;ipwadm&amp;lt;/tt&amp;gt;), de plus il est facile de trouver une distribution à base de kernel 2.2.X, les 2.0.X deviennent rare.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Si vous voulez de plus faire un Proxy, récupérez l&#039;un de ces programmes :&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Squid&lt;br /&gt;
* TIS Firewall toolkit (FWTK)&lt;br /&gt;
* Socks&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Une recherche sur freshmeat vous trouvera ça :) Mais bon pour l&#039;instant ce document ne traite que des Firewall filtrant, j&#039;ajouterais une rubrique Proxy plus tard.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Bon il faut maintenant configurer le kernel pour activer ce filtrage. Cochez les options suivantes :&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;y&amp;gt; Enable experimental&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;y&amp;gt; Enable loadable module support&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;*&amp;gt; Packet socket&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[ ] Kernel/User netlink socket&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[y] Network firewalls&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[ ] Socket Filtering&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;y&amp;gt; Unix domain sockets&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;[y] TCP/IP networking&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[ ] IP: multicasting&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: advanced router&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[ ] IP: kernel level autoconfiguration&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: firewalling&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: always defragment (required for masquerading)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: transparent proxy support&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[M] IP: masquerading&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--- Protocol-specific masquerading support will be built as modules.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[M] IP: ICMP masquerading&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--- Protocol-specific masquerading support will be built as modules.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[Y] IP: masquerading special modules support &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;lt;- Choisir tout les modules en répondant M&amp;lt;/font&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: optimize as router not host&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; IP: tunneling&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; IP: GRE tunnels over IP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: aliasing support&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: TCP syncookie support (not enabled per default)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;--- (it is safe to leave these untouched)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; IP: Reverse ARP&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[y] IP: Allow large windows (not recommended if &amp;lt;16Mb of memory)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt; &amp;gt; The IPv6 protocol (EXPERIMENTAL)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cochez également toutes les autres options nécessaires (voir la [../kernel/kernel.php3 rubrique noyau]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Bon vous recompilez le noyau (&amp;lt;tt&amp;gt;make dep; make clean; make bzImage&amp;lt;/tt&amp;gt;), déplacez votre ancien répertoire de module (&amp;lt;tt&amp;gt;mv /lib/module/votre_version /lib/module/votre_version.old&amp;lt;/tt&amp;gt;), puis compilez et instakllez les modules (&amp;lt;tt&amp;gt;make modules; make modules_install&amp;lt;/tt&amp;gt;), copiez alors le nouveau kernel (c&amp;lt;tt&amp;gt;p /usr/src/linux/arch/i386/boot/bzImage /boot&amp;lt;/tt&amp;gt;) et si vous utilisez LILO, reconfigurez le pour qu&#039;il pointe sur votre nouveau kernel (editez &amp;lt;tt&amp;gt;/etc/lilo.conf&amp;lt;/tt&amp;gt;) et relancez lilo (&amp;lt;tt&amp;gt;/sbin/lilo&amp;lt;/tt&amp;gt;), sinon reconfigurez votre loader (CHOS, LOADLIN, etc.). Enfin on reboute (&amp;lt;tt&amp;gt;reboot&amp;lt;/tt&amp;gt;). Ouf ! :)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt;&#039;&#039;&#039; :&lt;br /&gt;
: Vérifiez la configuration réseau, assurez-vous que l&#039;adresse de réseau de votre LAN est bien une des adresses réservée (192.168.2.0 par exemple, voir la [lan.php3 rubrique réseau local] pour ça). Pour la configuration de la carte externe, assurez vous aussi de sa bonne configuration pour accéder au net (testez votre connexion en fait), de même si la connexion se fait par modem. Pour tout ce qui suit je suppose que votre connexion au net se fait via une carte ethernet, en fait si vous utilisez un modem, de toute façon c&#039;est identique. Bon avant de vraiment configurer le firewall on va tout d&#039;abord mettre en place le « masquerading ».&lt;br /&gt;
&lt;br /&gt;
== Mise en place du filtrage, du masquerading, routage LAN&amp;lt;tt&amp;gt;&amp;lt;-&amp;gt;&amp;lt;/tt&amp;gt;NET et règles de base ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Times New Roman, serif&amp;quot;&amp;gt;Assurez-vous d&#039;avoir bien la configuration précédente pour votre kernel (validez les lors de la configuration du kernel).&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Compilez le kernel puis les modules. Une fois tout ça réalisé, ajouter dans le fichier &amp;lt;tt&amp;gt;/etc/rc.d/rc.local&amp;lt;/tt&amp;gt; (vérifiez le chemin, il peut être différent suivant les distributions) le chargement des modules de masquerade :&amp;lt;/div&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/depmod -a &amp;lt;/tt&amp;gt;&#039;&#039;(n&#039;ajoutez cette ligne que si elle n&#039;est pas déjà présente)&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_ftp  &amp;lt;/tt&amp;gt;&#039;&#039;(pour ftp)&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_raudio &amp;lt;/tt&amp;gt;&#039;&#039;(pour real audio)&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_irc  &amp;lt;/tt&amp;gt;&#039;&#039;(pour IRC)&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;et tout autre module comme &amp;lt;tt&amp;gt;ip_masq_cuseeme&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ip_masq_vdolive&amp;lt;/tt&amp;gt;, etc. que vous pouvez récupérer sur le net, si vous voulez bien sûr que de tels services soit accessibles par votre réseau local.&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;&#039;&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt;&#039;&#039; &#039;&#039;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
: Je vous rappelle quand même que plus vous ouvrirez de services, plus votre sécurité baissera. En effet certains services « supplémentaires » peuvent contenir des bugs encore inconnus mais exploitables plus tard. Si vous voulez une sécurité accrue n&#039;autorisez que le web ainsi que le FTP, surtout si vous êtes sur un réseau d&#039;entreprise, je ne vois pas pourquoi l&#039;IRC par exemple doit être activé, on n&#039;en a pas besoin pour travailler dans une entreprise :).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Avant de continuer vérifiez bien que votre LAN (réseau local) est bien sur une adresse réservée privé, c&#039;est a dire du type:&amp;lt;/div&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&#039;&#039;&#039;10.0.0.0 - 10.255.255.255 Classe A&#039;&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&#039;&#039;&#039;172.16.0.0 - 172.31.255.255 Classe B&#039;&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&#039;&#039;&#039;192.168.0.0 - 192.168.255.255 Classe C&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;Pour plus de simplicité, je considère que votre LAN est sur l&#039;adresse réseau &#039;&#039;&#039;192.168.1.0&#039;&#039;&#039; et que votre « passerelle » (le firewall Linux) a comme adresse &#039;&#039;&#039;192.168.1.1&#039;&#039;&#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Configurez aussi les autres machines de votre LAN avec bien sûr une adresse IP valide (de 192.168.1.2 jusqu&#039;à 192.168.1.254), l&#039;adresse de passerelle et de DNS, celle du Firewall (192.168.1.1).&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Bon maintenant sur le Firewall, on va activer le masquerade avec:&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s yyy.yyy.yyy.yyy/x -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;avec &#039;&#039;&#039;x&#039;&#039;&#039; qui correspond au masque et &#039;&#039;&#039;yyy.yyy.yyy.yyy&#039;&#039;&#039; l&#039;adresse réseau de votre LAN (ici 192.168.1.0)&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;  &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;BORDER&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | Masque&lt;br /&gt;
! width=&amp;quot;198&amp;quot; | Valeur de x&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | Classe&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | &#039;&#039;&#039;&#039;&#039;255.0.0.0&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
! width=&amp;quot;198&amp;quot; | &#039;&#039;&#039;&#039;&#039;8&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
! width=&amp;quot;197&amp;quot; | &#039;&#039;&#039;&#039;&#039;A&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;255.255.0.0&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;198&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;16&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;255.255.255.0&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;198&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;24&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;C&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;255.255.255.255&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;198&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;32&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
| width=&amp;quot;197&amp;quot; |&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;&#039;&#039;Point à point&#039;&#039;&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Si pour vous ce style de notation de masque vous gêne vous pouvez aussi utiliser la notation xxx.xxx.xxx.xxx du masque pour remplacer x.&lt;br /&gt;
&lt;br /&gt;
Pour notre exemple on tape alors:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.0/24 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;ou&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.0/255.255.255.0 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Bon on a fait quoi au juste là ?&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La première ligne indique au noyau de ne transmettre AUCUN paquet, donc on bloque TOUT en fait.&lt;br /&gt;
* La deuxième ligne elle indique de transmettre les paquets réseaux de notre LAN (192.168.1.0 avec masque 255.255.255.0).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Donc en fait notre Firewall Linux ne laissera passer au travers de lui que les communications LAN&amp;lt;-&amp;gt;Extérieur.&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;Au lieu de laisser la possibilité à toutes les machines de notre LAN d&#039;avoir accès vers l&#039;extérieur, on aurait pu aussi ne spécifier que certaines machines, par exemple on veut que juste le patron de notre société ainsi que l&#039;administrateur réseau par exemple qui ont des machines avec adresse IP 192.168.1.3 et 192.168.1.10. Pour cela il faut jouer sur le masque, ça nous donne:&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.3/32 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ipchains -A forward -s 192.168.1.10/32 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;Pour rendre ces règles « permanentes » après chaque reboot, ajoutez-les aussi dans un fichier que vous appelez par exemple &#039;&#039;&#039;&amp;lt;tt&amp;gt;rc.firewall&amp;lt;/tt&amp;gt;&#039;&#039;&#039; que vous placez dans &amp;lt;tt&amp;gt;/etc/rc.d&amp;lt;/tt&amp;gt;, sinon vous allez devoir les taper à chaque reboot du système. &amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;On résume alors ce qui peut se trouver dans un tel fichier:&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/bash&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Firewall.rc&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Script de démarrage des règles du firewall&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Tchesmeli serge , Version 0.2&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Lea : http://www.lea-linux.org&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;Démarrage FIREWALL :&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;  &amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;- Activation de l&#039;IP forwarding...&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# D&#039;abord on bloque tout&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo -n &amp;quot;- Arrêt total des transmissions réseau...&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;if [ -x /sbin/ipchains ]; then&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    /sbin/ipchains -P forward DENY&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;OK&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;else&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Erreur !&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    echo &amp;quot;Votre noyau n&#039;est pas configuré pour\&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;permettre le filtrage.... veuillez le recompiler.&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;    exit&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;fi&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;  &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# On charge les modules de masquerade&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo -n &amp;quot;- Chargement des modules de masquerade... &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_ftp&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_raudio&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;/sbin/modprobe ip_masq_irc&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo &amp;quot;OK&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Vous pouvez y inclure ou enlever&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# les modules de votre choix&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Puis on applique les règles&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo -n &amp;quot;- Chargement des règles de filtrage... &amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# ipchains -P forward DENY&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;ipchains -A forward -s 192.168.1.0/255.255.255.0 -j MASQ&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;echo &amp;quot;OK&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# A vous de bien fixer les règles suivant votre réseau&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-bottom: 0in; font-weight: medium; text-decoration: none&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;echo &amp;quot;Firewall prêt.&amp;quot;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors appeler ce script depuis &amp;lt;tt&amp;gt;/etc/rc.d/rc.local&amp;lt;/tt&amp;gt; en y ajoutant une ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;source rc.firewall&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt; Voilà ! Votre firewall est configuré ! A vous de jouer sur les règles afin d&#039;optimiser la sécurité sur votre réseau local...&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Serge Tchesmeli le 05/06/2000.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 05/06/2000, Serge Tchesmeli&lt;br /&gt;
{{LDL}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO/Firewall-HOWTO.html Firewall-HOWTO]&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO/IPCHAINS-HOWTO.html IPCHAINS-HOWTO]&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO-vo/IP-Masquerade-HOWTO.html IP-Masquerade HOWTO]&lt;br /&gt;
* [http://www.freenix.org/unix/linux/HOWTO/mini/IP-Masquerade.html IP-Masq. mini-HOWTO]&lt;br /&gt;
* [http://www.fwbuilder.org Firewall builder], un excellent outil pour configurer votre firewall sous Linux.&lt;br /&gt;
* La logithèque de Léa, [[Logithèque:Oldrub=21|section Sécurité]].&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Protection_d%27un_serveur_Apache_PHP_MySQL&amp;diff=10702</id>
		<title>Protection d&#039;un serveur Apache PHP MySQL</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Protection_d%27un_serveur_Apache_PHP_MySQL&amp;diff=10702"/>
		<updated>2005-11-14T11:06:43Z</updated>

		<summary type="html">&lt;p&gt;Madhatter : /* 2 Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services Web]]&lt;br /&gt;
= Protection d&#039;un serveur Apache PHP MySQL =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Protection d&#039;un serveur Apache PHP MySQL&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Jean-Marc LICHTLE&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Protection d&#039;un serveur Apache PHP MySQL contre les visites non souhaitées&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 1 Objectif de ce document ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;L&#039;objectif est de décrire comment protéger un serveur constitué de la trilogie Apache + PHP + MySQL des ``visites inopportunes&#039;&#039;. La description est relative à une installation LINUX, plus spécifiquement la version 8.0 de MANDRAKE.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de problème de sécurité posé : vous avez installé phpMyAdmin. Il est souhaitable d&#039;interdire qu&#039;un visiteur non autorisé accède à ce script ce qui lui donnerait des droits dangereux sur toutes les bases de données installées.&lt;br /&gt;
&lt;br /&gt;
Il n&#039;entre pas dans les vues de l&#039;auteur de transformer le lecteur en spécialiste de la sécurité informatique. Ce document veut être :&lt;br /&gt;
&lt;br /&gt;
* Un pied à l&#039;étrier pour tout utilisateur qui voudrait étudier la question de la sécurité d&#039;un serveur Web Apache + PHP + MySQL.&lt;br /&gt;
* La description du minimum de précautions à mettre en place sur un serveur d&#039;entreprise ne contenant aucune information stratégique mais qui mettrait à la disposition des utilisateurs des informations relativement banalisées. L&#039;objectif de sécurité est relativement sommaire : &lt;br /&gt;
** - éviter que des manipulations non souhaitées ne détruisent une partie ou la totalité des informations,&lt;br /&gt;
** - limiter les droits d&#039;accès à certaines informations plus sensibles à un nombre limité d&#039;utilisateurs identifiés.&lt;br /&gt;
&lt;br /&gt;
== 2 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Ce texte est la suite naturelle d&#039;un document décrivant l&#039;installation de la trilogie Apache PHP MySQL en environnement LINUX MANDRAKE 8.0 ([http://lea-linux.org/cached/index/Reseau-web-Apache_PHP_MySQL.html# voir l&#039;article]). L&#039;installation décrite dans ce premier document est la plus simple possible, son seul objectif était d&#039;aboutir à un système qui soit fonctionnel. Dans l&#039;installation de MySQL par exemple j&#039;avais précisé de faire l&#039;impasse sur la mise en place d&#039;un mot de passe administrateur afin de ne pas bloquer le fonctionnement ultérieur de phpMyAdmin dans son installation de base. Il est temps maintenant de faire le pas supplémentaire qui verrouillera un peu mieux le site.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Pour plus d&#039;informations on pourra se reporter à l&#039;importante littérature qui existe sur la question, notamment ``Pratique de MySQL et PHP&#039;&#039;, édition O&#039;REILLY. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Il importe de comprendre que la protection d&#039;un site Apache + PHP + MySQL prend des facettes multiples, chaque logiciel ayant ses ``protections&#039;&#039; propres. De plus comme nous le verrons bientôt avec phpMyAdmin, ces systèmes de protections dialoguent entre eux. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3 Protection du serveur Apache ==&lt;br /&gt;
&lt;br /&gt;
Il s&#039;agit dans un premier temps de protéger le serveur http, c&#039;est à dire le logiciel qui va adresser les pages html au navigateur qui en fait la demande. A ce stade il importe peu que PHP et MySQL soient exploités ou non. Cette protection est très générale et s&#039;applique aussi bien à un serveur simple ne mettant en oeuvre que des pages html pures qu&#039;à un serveur plus évolué faisant appel à un langage de programmation et à un gestionnaire de bases de données (PHP et MySQL ou une autre combinaison). Les exemples qui suivent portent sur la protection d&#039;un sous répertoire &amp;lt;tt&amp;gt;test/&amp;lt;/tt&amp;gt; situé au premier niveau de l&#039;arborescence du serveur, plus précisément &amp;lt;tt&amp;gt;/var/www/html/test/&amp;lt;/tt&amp;gt;. Attention, toutes les informations de chemins d&#039;accès sont relatives à la distribution Mdk 8.0 !&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Protection par .htaccess ===&lt;br /&gt;
&lt;br /&gt;
Le principe consiste à créer dans le sous répertoire à protéger un fichier nommé &amp;lt;tt&amp;gt;.htaccess&amp;lt;/tt&amp;gt; (commençant par un point donc caché) et qui va en limiter les droits d&#039;accès. En fait &amp;lt;tt&amp;gt;.htaccess&amp;lt;/tt&amp;gt; va renvoyer vers un fichier contenant les logins et mots de passe des utilisateurs autorisés.&lt;br /&gt;
&lt;br /&gt;
Ce fichier de mots de passe peut porter un nom quelconque. Habituellement ce dernier est rangé dans &amp;lt;tt&amp;gt;/etc/httpd/auth/&amp;lt;/tt&amp;gt;, répertoire qu&#039;il convient éventuellement de créer puisqu&#039;il n&#039;existe pas après l&#039;installation de base. Il est assez logique que tous les fichiers d&#039;authentification seront rangés dans le même sous-répertoire. Il est de ce fait judicieux de choisir des noms de fichiers qui soient parlant et qui rappellent l&#039;objet de la protection, par exemple test.users pour le fichier qui définira les droits d&#039;accès des diféfrents utilisateurs au sous répertoire test. L&#039;emploi de &amp;lt;tt&amp;gt;/etc/httpd/auth/&amp;lt;/tt&amp;gt; pour ranger les fichiers d&#039;autorisation est une pure question de convention. Ces fichiers pourraient aussi bien être rangés n&#039;importe ou ailleurs. Il va toutefois sans dire (mais mieux en le disant) que ces fichiers doivent être hors de portée des visiteurs, en clair ne doivent pas faire partie de l&#039;arborescence &amp;lt;tt&amp;gt;/var/www/html/&amp;lt;/tt&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
==== 3.1.1 Création de .htaccess ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exemple simple&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
Avec un éditeur quelconque (de préférence emacs =;-) créer le fichier minimum suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;AuthUserFile /etc/httpd/auth/test.users&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;AuthName ``Accès restreint&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthType Basic&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;require valid-user&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sauvegardez...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthUserFile&amp;lt;/tt&amp;gt; définit quel est le fichier chargé de contenir les autorisations. La Mandrake 8.0 suppose par défaut que les fichiers d&#039;autorisation sont rangés dans &amp;lt;tt&amp;gt;/etc/httpd/&amp;lt;/tt&amp;gt;. La première partie de l&#039;adresse &amp;lt;tt&amp;gt;AuthUserFile&amp;lt;/tt&amp;gt; peut donc être omise éventuellement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthName&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt; précise le message qui sera affiché dans la boite de dialogue, dans ce cas ``Accès restreint à localhost&#039;&#039; si la machine est nommée localhost. Nous verrons plus loin l&#039;intérêt de choisir un message aussi explicite que possible. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3.1.2 Création du fichier des autorisations d&#039;accès ====&lt;br /&gt;
&lt;br /&gt;
La première étape consiste à créer, s&#039;il n&#039;existe pas encore, le sous répertoire &amp;lt;tt&amp;gt;/etc/httpd/auth/&amp;lt;/tt&amp;gt; qui contiendra les autorisations (md... sous compte root). Le fichier d&#039;autorisation lui-même se crée (et s&#039;entretient) avec la commande &amp;lt;tt&amp;gt;htpasswd&amp;lt;/tt&amp;gt;. Attention: la commande htpasswd peut être lancée aussi bien par un utilisateur de base que par l&#039;administrateur. Toutefois, les fichiers contenus dans &amp;lt;tt&amp;gt;/etc&amp;lt;/tt&amp;gt; étant tous la propriété de root je préconise, dans un but de cohérence, de lancer cette commande uniquement sous compte root. De toute façon, sauf à imaginer que &amp;lt;tt&amp;gt;/etc/httpd/auth/&amp;lt;/tt&amp;gt; soit propriété d&#039;un utilisateur non root, le lancement de &amp;lt;tt&amp;gt;htpasswd&amp;lt;/tt&amp;gt; depuis un login non root conduirait à un échec à l&#039;enregistrement des données.&lt;br /&gt;
&lt;br /&gt;
Syntaxes:&lt;br /&gt;
&lt;br /&gt;
* Pour la création (avec un premier utilisateur lambda): &amp;lt;tt&amp;gt;htpasswd -c /etc/ httpd/auth/ test.users lambda&amp;lt;/tt&amp;gt;. htpasswd va alors vous demander le mot de passe de lambda (avec confirmation).&lt;br /&gt;
* Pour l&#039;ajout d&#039;un utilisateur supplémentaire: &amp;lt;tt&amp;gt;htpasswd /etc/httpd/auth/test.users lambda2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Pour supprimer un utilisateur et ben le plus simple est de supprimer la ligne correspondante dans le fichier d&#039;autorisation !&lt;br /&gt;
&lt;br /&gt;
La consultation de .htaccess se fait à chaque accès du serveur Apache au sous-répertoire concerné. Avantage : la nouvelle configuration entre en action immédiatement sans qu&#039;il soit nécessaire de relancer le serveur Apache pour recharger la nouvelle configuration.&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Protection par modification de httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
Le principe est assez similaire à ce qui a été exposé ci-dessus si ce n&#039;est que le renvoi vers le fichier des autorisations est réalisé dans &amp;lt;tt&amp;gt;/etc/httpd/conf/httpd.conf&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place ce renvoi éditez ce fichier et ajoutez (par exemple tout à la fin) les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;Directory /var/www/html/test&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthName &amp;quot;Accès limité&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthUserFile /etc/httpd/auth/test.users&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthType Basic&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;require valid-user&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;/Directory&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour protéger plusieurs répertoires créez plusieurs paragraphes &amp;lt;tt&amp;gt;&amp;lt;Directory&amp;gt; &amp;lt;/Directory&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sauvegardez puis relancez le démon Apache (comme root : &amp;lt;tt&amp;gt;/etc/rc.d/init.d/httpd restart&amp;lt;/tt&amp;gt;). En effet dans ce cas vous venez de modifier un des fichiers de configuration du serveur, fichier qui est lu au moment du chargement de Apache. Il convient donc de forcer Apache à relire ce fichier pour prendre en compte les modifications.&lt;br /&gt;
&lt;br /&gt;
=== 3.3 Différence entre les deux méthodes .htaccess et httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
Votre attention aura certainement été attirée par le similitude de rédaction entre les deux solutions. Cette similitude n&#039;est absolument pas fortuite et provient simplement de la logique interne du fonctionnement d&#039;Apache. Le serveur lit au lancement les paramètres de configuration stockés dans httpd.conf. Il ne les relira ensuite qu&#039;en cas de demande explicite (restart).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Par contre, il cherchera à chaque requête d&#039;un navigateur, à lire un éventuel fichier .htaccess contenu dans le sous-répertoire concerné par la demande. S&#039;il le trouve les informations contenues dans ce fichier remplaceront, pour la durée de la requête, celles qui sont contenues dans httpd.conf. En clair vous pouvez ``masquer&#039;&#039; la configuration officielle contenue dans httpd.conf en proposant une nouvelle configuration dans un .htaccess. Faites l&#039;essai en mettant en place une protection double : &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt; Par httpd.conf en mettant ``Accès contrôlé par httpd.conf&#039;&#039; dans la variable AuthName.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt; Par .htaccess en mettant ``Accès contrôlé par htaccess&#039;&#039; dans AuthName.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pourrez vérifier simplement (en renommant .htaccess par exemple) que la protection par .htaccess, lorsqu&#039;elle est en place, remplace bien la protection induite par httpd.conf.&lt;br /&gt;
&lt;br /&gt;
L&#039;intérêt de cette petite démonstration ne semble pas évident. Trois éléments méritent toutefois d&#039;être retenus :&lt;br /&gt;
&lt;br /&gt;
* Une protection par .htaccess nécessite un travail supplémentaire d&#039;analyse de la part du serveur (à prendre en compte pour les serveurs très chargés ou installés sur des machines poussives).&lt;br /&gt;
* Certaines directives de httpd.conf peuvent être neutralisées, modifiées...&lt;br /&gt;
* Une protection par .htaccess est prise en compte immédiatement sans nécessité d&#039;intervenir sur le serveur.&lt;br /&gt;
&lt;br /&gt;
=== 3.4 Protection de fichiers particuliers dans un sous répertoire ===&lt;br /&gt;
&lt;br /&gt;
La protection par .htaccess décrite ci-dessus s&#039;applique à l&#039;ensemble d&#039;un sous-répertoire. En fait vous pouvez différencier, si vous le souhaitez, les accès aux fichiers. La syntaxe de .htaccess s&#039;en trouve légèrement modifiée, par exemple pour protéger un fichier nommé &amp;lt;tt&amp;gt;common.php&amp;lt;/tt&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;Files common.php&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthName &amp;quot;Accès limité au fichier common.php par .htaccess&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthUserFile /etc/httpd/auth/common.users&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AuthType Basic&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;require valid-user&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;/Files&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;intérêt de libeller &amp;lt;tt&amp;gt;AuthName&amp;lt;/tt&amp;gt; de façon explicite apparaît ici de façon nette. Lors des essais vous pourrez en effet savoir immédiatement quels sont les contrôles d&#039;accès qui sont en place.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez souhaiter protéger plus spécifiquement l&#039;accès à un fichier particulier. La solution consiste à créer un fichier .htaccess libellé comme suit :&lt;br /&gt;
&lt;br /&gt;
Exemple pour protéger un fichier &amp;lt;tt&amp;gt;common.php&amp;lt;/tt&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;Files common.php&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Order Deny,Allow&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Deny from All&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;/Files&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour protéger plusieurs fichiers il suffit de créer plusieurs rubriques &amp;lt;tt&amp;gt;&amp;lt;Files&amp;gt; &amp;lt;/Files&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attention: cette méthode interdit l&#039;accès via le serveur Web pour tout le monde, y compris le propriétaire du fichier, l&#039;administrateur, etc.&lt;br /&gt;
&lt;br /&gt;
=== 3.5 Rendre le contenu d&#039;un sous-répertoire invisible ===&lt;br /&gt;
&lt;br /&gt;
L&#039;astuce qui suit consiste simplement à faire afficher par le serveur Web une page html qui signale au visiteur qu&#039;il n&#039;a rien à faire dans ce sous-répertoire.&lt;br /&gt;
&lt;br /&gt;
Lorsque Apache accède à un sous-répertoire pour satisfaire à la demande d&#039;un navigateur client il commence par vérifier les autorisations d&#039;accès (voir ci-dessus). S&#039;il ne rencontre pas de veto alors il part à la recherche d&#039;un éventuel fichier index.html ou index.php (si PHP est installé). S&#039;il ne trouve pas ce fichier alors il affiche le contenu du sous-répertoire qui apparaît donc en clair pour le visiteur.&lt;br /&gt;
&lt;br /&gt;
Pour éviter que le contenu du sous-répertoire ne s&#039;affiche il suffit donc de créer un fichier index.html ou index.php. Concevoir le contenu de ce fichier de telle sorte qu&#039;il réponde à votre attente, du simple message d&#039;avertissement au script PHP qui va renvoyer de force le visiteur dans le droit chemin. C&#039;est simple et relativement efficace pour un environnement non critique. La solution la plus simple consiste simplement à créer un fichier index.html vide. Le navigateur recevra donc une page blanche. Pas très explicite mais simple et efficace !&lt;br /&gt;
&lt;br /&gt;
Attention, il s&#039;agit là simplement de créer une dissuasion. Nous ne sommes plus dans le domaine de la protection gérée comme ci-dessus. Un utilisateur qui connaîtrait un ou plusieurs noms de fichiers contenus dans ce sous-répertoire pourrait y accéder sans le moindre problème en tapant simplement leurs URL complets ! De grâce, ne construisez pas un site central de banque avec de telles méthodes !&lt;br /&gt;
&lt;br /&gt;
== 4 Protection du gestionnaire de bases de données MySQL ==&lt;br /&gt;
&lt;br /&gt;
Un peu comme dans le cas d&#039;Apache cette section est spécifique à MySQL. Il importe peu pour ce qui va suivre qu&#039;Apache soit installé ou non (idem pour PHP). Nous supposerons que les notions de bases du langage SQL sont connues (ben voyons !). La première partie de ce chapitre va en effet faire largement appel à ce langage pour régler la configuration. Attention, nous allons utiliser le client texte MySQL ! Efficace mais pour le moins spartiate !&lt;br /&gt;
&lt;br /&gt;
Pour commencer ouvrez une fenêtre texte (xterm, rxvt, terminal ou autre) et lancez le client MySQL par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; mysql -u root&amp;lt;/tt&amp;gt; (on suppose que vous êtes logué comme root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;La réponse devrait être immédiate ``Welcome to the MySQL Monitor ....&#039;&#039; et se terminer par l&#039;invite de commande de MySQL qui est modestement mysql&amp;gt;. Je reproduirais cette invite pour tous les exemples de syntaxe SQL donnés ci-dessous. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, vous êtes logué comme administrateur, tout ce que vous allez faire pourra devenir dramatique en cas d&#039;erreur !&lt;br /&gt;
&lt;br /&gt;
tapez &amp;lt;tt&amp;gt;mysql&amp;gt;use mysql;&amp;lt;/tt&amp;gt; pour préciser au serveur d&#039;utiliser dans ce qui suit la base de données nommée mysql.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;La réponse devrait se terminer par ``Database changed&#039;&#039;. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Configuration des fichiers d&#039;autorisations d&#039;accès ===&lt;br /&gt;
&lt;br /&gt;
La protection de MySQL s&#039;articule autour des fichiers d&#039;autorisations (qui constituent eux-même une base de données MySQL) qui définissent très précisément les droits de chaque utilisateur, des informations les plus globales (telle base de donnée est accessible à tel utilisateur) aux plus pointues (la n-ième colonne de telle table est accessible pour tel utilisateur mais seulement pour telle opération).&lt;br /&gt;
&lt;br /&gt;
Ces droits sont différenciés, consultation, mise à jour, etc.&lt;br /&gt;
&lt;br /&gt;
La base de données qui décrit la structure des autorisations d&#039;accès est contenue dans &amp;lt;tt&amp;gt;/var/lib/mysql/mysql/&amp;lt;/tt&amp;gt; (dans l&#039;installation Mdk8.0). Cette BDD est créée automatiquement par le script d&#039;installation du package MySQL. Vous pouvez consulter la liste des tables de cette base par &amp;lt;tt&amp;gt;mysql&amp;gt;show tables;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette commande affiche la liste des tables constituant la BDD.&lt;br /&gt;
&lt;br /&gt;
L&#039;objet du présent document étant de constituer une aide de départ (et non de remplacer la documentation spécialisée) nous ne nous intéresseront dans ce qui suit qu&#039;à une seule table de cette base de données, la table user qui défini les droits d&#039;accès globaux des utilisateurs à l&#039;ensemble des BDD. De même nous n&#039;étudierons que le cas d&#039;une machine isolée servant à la fois de serveur et de client. La configuration en réseau n&#039;est guère plus complexe mais dépasserait le cadre de la présente étude.&lt;br /&gt;
&lt;br /&gt;
==== 4.1.1 Structure de la table user ====&lt;br /&gt;
&lt;br /&gt;
La structure de la table user est assez simple. Elle contient les champs suivants:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; border=&amp;quot;BORDER&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;Host char(60)&amp;lt;/tt&amp;gt;&lt;br /&gt;
| nom de la machine depuis laquelle est fait l&#039;appel&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;User char(16)&amp;lt;/tt&amp;gt;&lt;br /&gt;
| login de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Password char(16)&amp;lt;/tt&amp;gt;&lt;br /&gt;
| mot de passe codé&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Select_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| droits d&#039;effectuer des requêtes sélect (valeur Yes ou No)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Insert_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Update_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Delete_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Create_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| droits d&#039;effectuer une création de table&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Drop_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| droits de suppression d&#039;une table&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Reload_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| droits de relancer le serveur MySQL&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Shutdown_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| droits d&#039;arrêter le serveur MySQL&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Process_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;File_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Grant_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;References_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Index_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Alter_priv&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette structure peut être consultée très simplement par &amp;lt;tt&amp;gt;mysql&amp;gt;desc user;&amp;lt;/tt&amp;gt; Son contenu peut être affiché par &amp;lt;tt&amp;gt;mysql&amp;gt;select * from user;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.1.2 Mise à jour de la table user ====&lt;br /&gt;
&lt;br /&gt;
Cette table contient d&#039;origine (après l&#039;installation décrite dans le document précédent) 4 enregistrements qui définissent les droits de l&#039;administrateur depuis localhost et localhost.localdomain et ceux d&#039;un utilisateur non nommé depuis les mêmes hôtes. L&#039;administrateur root (dont vous utilisez le compte actuellement) a tous les droits, l&#039;utilisateur non nommé aucun, si ce n&#039;est celui d&#039;accéder à la base de données mais sans pouvoir faire la moindre opération. Vous constaterez également que root n&#039;a pas de mot de passe (voir plus haut, cette partie du script a été sautée au moment de l&#039;installation de façon à ne pas bloquer le fonctionnement de phpMyAdmin).&lt;br /&gt;
&lt;br /&gt;
La première étape va consister à supprimer les lignes qui sont inutiles de telle sorte à ne conserver qu&#039;une seule ligne, celle qui correspond à l&#039;administrateur root depuis localhost.&lt;br /&gt;
&lt;br /&gt;
Tapez donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;mysql&amp;gt;delete from user where Host=&#039;localhost.localdomain&#039;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;mysql&amp;gt;delete from user where User=&#039;&#039;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;mysql&amp;gt;select * from user;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fois la liste devrait contenir le seul enregistrement relatif à root depuis localhost.&lt;br /&gt;
&lt;br /&gt;
Pour ajouter un utilisateur lambda procédez comme suit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;mysql&amp;gt;insert into user values(&#039;localhost&#039;,&#039;lambda&#039;,password(&#039;mdp_lambda&#039;), &#039;Y&#039;,&#039;Y&#039;,&#039;Y&#039;,&#039;Y&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;,&#039;N&#039;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ne comptez pas, il y a 4 &#039;Y&#039; et 10 &#039;N&#039; !&lt;br /&gt;
&lt;br /&gt;
Vous venez de créer un nouvel utilisateur nommé lambda et dont le mot de passe est mdp_lambda (vous mettez bien sûr ce qui vous convient).&lt;br /&gt;
&lt;br /&gt;
La syntaxe de cette ligne mérite quelques commentaires :&lt;br /&gt;
&lt;br /&gt;
* Insert into user ... donne l&#039;ordre de créer une nouvelle ligne dans la table user.&lt;br /&gt;
* Une ligne insert complète (avec toutes les options SQL) préciserait la liste des champs à compléter, dans ce cas particulier nous donnons exactement autant de valeurs (values) qu&#039;il y a de champs dans la table, l&#039;affectation des valeurs aux champs devient donc implicite (et la ligne plus simple !).&lt;br /&gt;
* La liste values() contient exactement 17 valeurs séparées par des virgules. Les chaînes de caractères sont placées entre guillemets simples (&#039;).&lt;br /&gt;
* La composition de cette liste reflète précisément la structure de la table user mise en évidence précédemment avec &amp;lt;tt&amp;gt;mysql&amp;gt;desc user;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Le nouvel utilisateur dispose de 4 droits simples, sélection, insertion de nouvelles lignes, modifications de lignes existantes et effacement de lignes. Il ne peut ni créer une nouvelle table, ni en effacer une existante. Toutes les fonctions d&#039;administration lui sont interdites.&lt;br /&gt;
* Password() est une fonction texte qui transforme un mot de passe donné en clair en une chaîne codée.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant quittez le client mysql en tapant &amp;lt;tt&amp;gt;mysql&amp;gt;quit;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.1.3 Rechargement de la table des autorisations par MySQL ====&lt;br /&gt;
&lt;br /&gt;
Il reste à vérifier la validité de ce nouvel utilisateur en essayant de se connecter avec ce nouveau login. Mais avant il faut que MySQL actualise la table des autorisations conservée en mémoire et chargée au lancement initial du serveur.&lt;br /&gt;
&lt;br /&gt;
Pour cela tapez dans un terminal :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; mysqladmin flush-privileges&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette commande demande à MySQL de recharger les tables définissant les autorisations d&#039;accès depuis le disque sans pour autant arrêter le serveur.&lt;br /&gt;
&lt;br /&gt;
Une autre solution plus brutale serait d&#039;arrêter le serveur et de le redémarrer en tapant (compte root) &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# /etc/rc.d/init.d/mysql stop&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; puis &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# /etc/rc.d/init.d/mysql start&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On peut enfin arrêter complètement LINUX et relancer mais là c&#039;est la honte, n&#039;est-ce pas ? Nous ne sommes pas sous Window$ que diable !&lt;br /&gt;
&lt;br /&gt;
==== 4.1.4 Login avec le nouveau compte ====&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant vous loguer avec le compte nouvellement créé. Plusieurs possibilités s&#039;offrent à vous :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;$ mysql -u lambda -pmdp_lambda&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; Cette syntaxe vous donne l&#039;accès direct. Attention: vous laissez un espace après -u mais pas après -p, collez directement le mot de passe à -p !Inconvénient : le mot de passe apparaît en clair, sur l&#039;écran mais aussi dans l&#039;historique des frappes au clavier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$ mysql -u lambda -p&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Avec cette syntaxe le serveur MySQL vous demandera immédiatement le mot de passe associé au login lambda. Vous devrez taper ce mot de passe en aveugle. Il n&#039;apparaîtra donc ni à l&#039;écran, ni dans un historique de frappes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$ mysql -u lambda -p mysql&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Variante de la précédente, l&#039;espace après -p va provoquer une demande de mot de passe comme ci-dessus, l&#039;indication de mysql va indiquer au serveur d&#039;utiliser la base de donner mysql (équivalent à &amp;lt;tt&amp;gt;mysql&amp;gt;use mysql;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ce qui ne marche pas:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;$ mysql -u lambda&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;MySQL va protester parce que l&#039;utilisateur lambda est connu comme étant validé par un mot de passe. Le message sera assez explicite puisqu&#039;il se termine par Using password: YES. Nota : voir plus loin le chapitre Automatisation des connexions, il sera possible d&#039;automatiser l&#039;indication du mot de passe et donc de se connecter en utilisant cette syntaxe.&lt;br /&gt;
&lt;br /&gt;
Voilà, vous êtes maintenant en mesure de modifier efficacement le fichier user pour accorder et retirer des droits à chacun des utilisateurs de votre système. Ce chapitre n&#039;a simplement fait que soulever un coin du voile sur la question. L&#039;étude de l&#039;utilisation des autres fichiers de &amp;lt;tt&amp;gt;/var/lib/mysql/mysql/&amp;lt;/tt&amp;gt; vous permettra de définir encore mieux ces droits et de créer des droits différenciés par BDD et par utilisateur, voire même par table ou par champ. L&#039;étape suivante s&#039;articulerait autour de la table db. Cette étude de détail sortirait toutefois du cadre fixé ici.&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Automatisation des connexions ===&lt;br /&gt;
&lt;br /&gt;
A ce stade nous pouvons définir autant d&#039;utilisateurs que souhaité. Chacun devra se connecter à MySQL avec la syntaxe $ mysql -u utilisateur -p (utilisateur étant à remplacer par le login). En réponse MySQL demandera le mot de passe correct.&lt;br /&gt;
&lt;br /&gt;
Il peut paraître lourd, alors que LINUX vous a déjà demandé de vous identifier correctement au login, de se re-identifier à nouveau à chaque lancement d&#039;un client MySQL.&lt;br /&gt;
&lt;br /&gt;
Cette procédure est heureusement contournable.&lt;br /&gt;
&lt;br /&gt;
A chaque lancement d&#039;un client MySQL celui-ci va en effet vérifier la présence des fichiers suivants:&lt;br /&gt;
&lt;br /&gt;
* /etc/my.conf&lt;br /&gt;
* /var/lib/mysql/my.conf&lt;br /&gt;
* /.my.conf, étant le répertoire home de l&#039;utilisateur LINUX dûment logué et identifié.&lt;br /&gt;
&lt;br /&gt;
Dès qu&#039;il trouvera un fichier le client MySQL lira les données de configuration qui y sont rangées et ira à la recherche du fichier suivant dans la liste et dans cet ordre.&lt;br /&gt;
&lt;br /&gt;
Les données les plus récentes iront à chaque fois écraser les plus anciennes ce qui permet de personnaliser très finement le comportement du client MySQL en fonction des besoins de l&#039;utilisateur. Et parmi ces données, mais vous l&#039;aurez déjà deviné, figurent le mot de passe de connexion au serveur MySQL !&lt;br /&gt;
&lt;br /&gt;
Dans une installation de base aucun de ces fichiers n&#039;existe. Par contre le sous-répertoire /usr/share/mysql/ contient un certain nombre de fichiers exemples nommés my-small.cnf, my-medium.cnf, etc. qui correspondent à des propositions de fichiers de configuration pour différents cas d&#039;utilisation. Les premières lignes de chacun de ses fichiers précisent les domaines d&#039;application.&lt;br /&gt;
&lt;br /&gt;
Pour automatiser le login MySQL pour un utilisateur lambda en se basant sur le modèle medium procéder comme suit :&lt;br /&gt;
&lt;br /&gt;
* Copier /usr/share/mysql/my-medium.cnf vers /.my.cnf (fichier caché).&lt;br /&gt;
* Editer /.my.cnf et modifiez la rubrique [client], la première qui soit proposée après l&#039;entête, de telle sorte à faire apparaître une ligne password = mot_de_passe (remplacer mot_de_passe par le mot de passe MySQL en clair de l&#039;utilisateur). Dans le fichier exemple cette ligne est affectée d&#039;un signe commentaire (#) qu&#039;il faudra effacer. Pour simplifier vous pouvez même supprimer toutes les autres ligne de ce fichier et ne laisser que le paragraphe [client]. De la sorte vous évitez d&#039;écraser des configurations ajustées qui auraient été mises en place, ou pourraient l&#039;être ultérieurement, dans /etc/my.conf ou /var/lib/mysql/my.conf.&lt;br /&gt;
* Sauvegardez et modifiez les droits d&#039;accès du fichier sauvegardé en tapant $ chmod 700 .my.cnf pour limiter les droits d&#039;accès. Il serait en effet détestable qu&#039;on puisse lire votre mot de passe MySQL !&lt;br /&gt;
&lt;br /&gt;
Le tour est joué ! A la prochaine connexion avec le client MySQL celui-ci trouvera le mot de passe et établira une connexion directe en utilisant le login LINUX de l&#039;utilisateur et le mot de passe mémorisé dans &amp;lt;tt&amp;gt;/.my.cnf&amp;lt;/tt&amp;gt;. Pour vérifier tapez simplement $ mysql pour lancer un client MySQL. La connexion devrait être immédiate. Vérifiez sous quel login vous êtes entré en tapant &amp;lt;tt&amp;gt;mysql&amp;gt; select user();&amp;lt;/tt&amp;gt; ce qui devrait provoquer l&#039;affichage d&#039;un tableau à une seule cellule titrée user() et contenant une information du genre lambda@localhost. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 5 Contrôle des accès MySQL initiés par des scripts PHP. ==&lt;br /&gt;
&lt;br /&gt;
Un script PHP qui accède à une base de données MySQL le fait dans des conditions fixées par la syntaxe de la commande de connexion. En PHP on obtient une connexion à un serveur MySQL au moyen de la commande &amp;lt;tt&amp;gt;mysql_connect()&amp;lt;/tt&amp;gt;. Celle-ci utilise trois arguments, $host, $user, $password et renvoie une valeur TRUE, 1 si la connexion est établie, FALSE, 0 si celle-ci a échoué.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Le login de connexion ainsi que le mot de passe apparaissent donc en clair dans le script de connexion ce qui est moyennement satisfaisant. Aspect positif le script lui-même n&#039;est jamais envoyé au client puisque PHP s&#039;exécute entièrement sur le serveur (contrairement à JAVA). Il n&#039;y a donc aucune raison pour qu&#039;un visiteur puisse lire ce mot de passe. Oui, mais... il n&#039;y a pas que des visiteurs ``normaux&#039;&#039; ! &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une protection supplémentaire (et aussi une simplification si on rédige beaucoup d&#039;applications PHP) est de définir ses variables $host, $user et $password dans un fichier extérieur au script lui-même et d&#039;incorporer ces valeurs au moyen d&#039;une directive include. Avantage : le fichier qui contient les variables peut être stocké en dehors des sous-répertoires consultés normalement par Apache (hors de l&#039;arborescence /var/www/html/), et protégé par un fichier .htaccess.&lt;br /&gt;
&lt;br /&gt;
Finalement le contrôle d&#039;accès à MySQL via un script PHP découle directement de ce qui a été exposé au chapitre précédent et s&#039;appuie directement sur les règles d&#039;accès à MySQL définies dans la base de données /var/lib/mysql/mysql/. Il peut donc s&#039;avérer souhaitable de créer un compte utilisateur MySQL spécifique aux applications PHP qui tournent sur le serveur. On pourrait aussi imaginer d&#039;en créer plusieurs, 1 par famille de scripts par exemple. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 6 Cas particulier de phpMyAdmin. ==&lt;br /&gt;
&lt;br /&gt;
PhpMyAdmin est une petite merveille, un ensemble de scripts PHP, qui permet d&#039;accéder au serveur MySQL en utilisant une interface graphique plus avenante que le spartiate client MySQL en mode texte.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation par défaut conduit à faire de phpMyAdmin un client MySQL avec un login root sans mot de passe (d&#039;où l&#039;intérêt de ne pas mettre, dans un premier temps, de mot de passe au compte root faute de quoi phpMyAdmin ne serait plus en mesure d&#039;accéder au serveur MySQL).&lt;br /&gt;
&lt;br /&gt;
En fait le fonctionnement de phpMyAdmin est réglé par le fichier &amp;lt;tt&amp;gt;/var/www/html/phpMyAdmin/config.inc.php3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier, assez court, contient notamment les lignes suivantes : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; bgcolor=&amp;quot;#FFFFCC&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;// The $cfgServers array starts with $cfgServers[1]. Do not use $cfgServers[0].&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;// You can disable a server config entry by setting host to &#039;&#039;.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;$cfgServers[1][&#039;host&#039;] = &#039;localhost&#039;; // MySQL hostname&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;$cfgServers[1][&#039;port&#039;] = &#039;&#039;; // MySQL port - leave blank for default port&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;$cfgServers[1][&#039;adv_auth&#039;] = false; // Use advanced authentication?&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;$cfgServers[1][&#039;stduser&#039;] = &#039;root&#039;; // MySQL standard user (only needed with advanced auth)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;$cfgServers[1][&#039;stdpass&#039;] = &#039;&#039;; // MySQL standard password (only needed with advanced auth)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;$cfgServers[1][&#039;user&#039;] = &#039;root&#039;; // MySQL user (only needed with basic auth)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;$cfgServers[1][&#039;password&#039;] = &#039;&#039;; // MySQL password (only needed with basic auth)&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;$cfgServers[1][&#039;only_db&#039;] = &#039;&#039;; // If set to a db-name, only this db is accessible&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;$cfgServers[1][&#039;verbose&#039;] = &#039;&#039;; // Verbose name for this host - leave blank to show the hostname&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le texte de ce fichier semble assez explicite. Il nécessite toutefois une analyse plus détaillée pour bien en comprendre certaines finesses.&lt;br /&gt;
&lt;br /&gt;
$cfgServers[1] désigne le premier serveur MySQL, le seul qui nous intéresse ici (il semblerait qu&#039;il y ait des vicieux qui démarrent plusieurs serveurs.. imaginez un peu ;-)).&lt;br /&gt;
&lt;br /&gt;
Le paramètre important est [adv_auth]. Il peut prendre deux valeurs, false (défaut à l&#039;installation) et true.&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Configuration avec adv_auth = false ===&lt;br /&gt;
&lt;br /&gt;
Avec false l&#039;authentification se fait selon une ancienne méthode qui utilise les valeurs de $cfgServers[1][&#039;user&#039;] et $cfgServers[1][&#039;password&#039;] pour s&#039;identifier auprès de MySQL. L&#039;installation de base résumée ci-dessus reflète cette authentification. En clair phpMyAdmin s&#039;enregistre sous compte root et sans mot de passe. C&#039;est précisément la raison pour laquelle il ne faut surtout pas, en cours d&#039;installation de MySQL, donner suite à la proposition du script de définir un mot de passe administrateur (voir http://jeanmarc.lichtle.free.fr/Apache_PHP_MySQL.html). Définir un mot de passe à ce stade de l&#039;installation bloquerait le fonctionnement ultérieur de phpMyAdmin. Pour le vérifier faites simplement l&#039;essai de fixer un mot de passe pour root dans MySQL. La syntaxe SQL est la suivante (mais vous l&#039;aurez déjà deviné) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;mysql&amp;gt; update user set Password=password(&#039;mdp_root&#039;) where user = &#039;root&#039;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un petit coup de &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mysqladmin flush-privileges&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; (y&#039;en a qui avaient oublié !?) et voilà le mot de passe administrateur pris en compte par le serveur MySQL. Pour la petite histoire c&#039;est la dernière fois que vous tapez cette commande avec cette syntaxe simple. Maintenant que root a un mot de passe dans MySQL il faudra utiliser la syntaxe &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# mysqladmin -u root -p flush-privileges&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;, ce qui va provoquer la demande du mot de passe par le serveur.&lt;br /&gt;
&lt;br /&gt;
Et maintenant adieu phpMyAdmin, ça ne marche plus ! Seulement voilà, arrivé à ce stade de notre étude nous savons comment faire prendre en compte ce mot de passe par phpMyAdmin. Il suffit de l&#039;incorporer au fichier de configuration &amp;lt;tt&amp;gt;/var/www/html/phpMyAdmin/config.inc.php3&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt; à la ligne $cfgServers[1][&#039;password&#039;] = &#039;&#039;. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au prochain lancement de phpMyAdmin le fichier de configuration va être pris en compte et tout va rentrer dans l&#039;ordre, la connexion s&#039;effectuant à nouveau de façon directe...&lt;br /&gt;
&lt;br /&gt;
Bon, ça ne marche pas ? Ne vous affolez pas ! Je fais le pari que vous avez fait des essais de .htaccess ou de httpd.conf sur le sous répertoire de phpMyAdmin et qu&#039;il reste des traces des essais effectués précédemment. Supprimez (ou renommez) l&#039;éventuel fichier .htaccess situé dans le sous répertoire &amp;lt;tt&amp;gt;/var/www/html/phpMyAdmin/&amp;lt;/tt&amp;gt; et/ou mettez des commentaires (#) aux éventuelles lignes ajoutées à &amp;lt;tt&amp;gt;/etc/httpd/conf/httpd.conf&amp;lt;/tt&amp;gt;. Attention de relancer Apache si vous modifiez httpd.conf !&lt;br /&gt;
&lt;br /&gt;
=== 6.2 Configuration avec adv_auth=true ===&lt;br /&gt;
&lt;br /&gt;
L&#039;authentification avancée diffère légèrement du cas précédent en ce que le login et le mot de passe de l&#039;utilisateur qui lance phpMyAdmin sont demandés au lancement. Il n&#039;y a plus un login de connexion unique, celui-ci peut changer en fonction des informations données par l&#039;utilisateur qui lance phpMyAdmin. Ces informations sont ensuite comparées à la base de données des utilisateurs autorisés par MySQL. La connexion est établie si les informations sont correctes.&lt;br /&gt;
&lt;br /&gt;
Il faut toutefois établir une première connexion de façon à avoir un accès temporaire à la table user. C&#039;est à cette fin que la configuration prévoit un compte défini par $cfgServers[1][&#039;stduser&#039;] et $cfgServers[1][&#039;stdpass&#039;], ces deux variables devant permettre la vérification des droits d&#039;accès. Il va sans dire que le [stduser] désigné ici devra avoir des droits suffisants pour lire la table user.&lt;br /&gt;
&lt;br /&gt;
Cette authentification offre au minimum deux avantages :&lt;br /&gt;
&lt;br /&gt;
* Les accès à MySQL via phpMyAdmin sont différenciés suivant les utilisateurs et suivent exactement les règles d&#039;autorisation d&#039;accès à MySQL.&lt;br /&gt;
* Le mot de passe administrateur n&#039;a plus à figurer dans le fichier de configuration de phpMyAdmin. Il suffit de créer dans la table user de MySQL un utilisateur, nommé par exemple phpMyAdmin, dont les droits sont strictement limités à la consultation des tables (et donc de la table user). Il suffit de mettre un seul &#039;Y&#039; et 13 &#039;N&#039; dans la fameuse requête de création d&#039;un utilisateur. N&#039;oubliez pas de relancer &amp;lt;tt&amp;gt;mysqladmin -u root -p flush-privileges&amp;lt;/tt&amp;gt; hein !&lt;br /&gt;
&lt;br /&gt;
Pour le fun, et c&#039;est une excursion vers l&#039;étude de la configuration avancée des droits d&#039;accès MySQL on peut même limiter encore plus les droits de cet utilisateur spécial. Il suffit de ne lui donner aucun droit dans la table user (14 fois &#039;N&#039;) et de lui créer une ligne dans la table db. Cherchez bien, la syntaxe est extrêmement proche de celle qui ajoute un utilisateur dans user, il suffit de préciser cette fois que ces droits s&#039;applique spécifiquement à la base de données mysql. L&#039;utilisateur &#039;phpMyAdmin&#039; aura donc uniquement le droit de lire le contenu des tables user, db etc.. qui constituent la base mysql.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez même aller plus loin dans le raisonnement et limiter les droits strictement à la table user. Mais là c&#039;est une autre affaire, je sens que vous allez passer quelques heures sur l&#039;étude détaillée des droits d&#039;accès MySQL.&lt;br /&gt;
&lt;br /&gt;
== 7 Le petit bréviaire ==&lt;br /&gt;
&lt;br /&gt;
Je ne sais pas si vous êtes comme moi mais j&#039;ai besoin de prendre des notes pour retrouver rapidement les informations vitales dans un document aussi touffu que celui-ci.&lt;br /&gt;
&lt;br /&gt;
Parmi les informations qu&#039;il me semble intéressant de résumer ici je dresse à toutes fins utiles la liste des fichiers et répertoires qui ont été évoqués ci-dessus (dans leur ordre d&#039;apparition en scène): &amp;lt;br /&amp;gt;  &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;BORDER&amp;quot; cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &#039;&#039;&#039;Répertoire /fichier&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &#039;&#039;&#039;Fonction&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/var/www/html/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Base arborscence site Web&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/var/www/html/phpMyAdmin/config.inc.php3&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Configuration de phpMyAdmin&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/var/lib/mysql/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Base de données des droits d&#039;accès&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/var/lib/mysql/my.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Configuration de base de MySQL (optionnel)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/etc/httpd/auth/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Rangement des fichiers d&#039;authentification par .htaccess&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/etc/httpd/conf/httpd.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Configuration serveur Apache&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/etc/rc.d/init.d/httpd&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Lancement du serveur Apache option restart&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/etc/rc.d/init.d/mysql&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Lancement du serveur MySQL opt stop ou start&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/etc/my.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Configuration de base de MySQL (optionnel)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/.my.conf&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Configuration de base de MySQL (opt. spécif. util.)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/usr/share/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Contient des exemples de fichier my.cnf&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | &amp;lt;tt&amp;gt;/var/log/httpd/&amp;lt;/tt&amp;gt;&lt;br /&gt;
| align=&amp;quot;LEFT&amp;quot; | Contient les fichiers log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je précise à nouveau que ce document s&#039;applique au cas d&#039;une installation en environnement LINUX Mandrake 8.0 telle que décrite dans un document identifié plus haut. Un système qui serait basé sur une autre distribution et/ou qui utiliserait des versions d&#039;Apache, PHP ou MySQL qui auraient été compilées par l&#039;utilisateur pourrait utiliser d&#039;autre répertoires pour stocker les différentes informations. L&#039;essentiel est d&#039;obtenir un ensemble cohérent.&lt;br /&gt;
&lt;br /&gt;
== 8 Conclusion ==&lt;br /&gt;
&lt;br /&gt;
L&#039;exposé ci-dessus devait vous mettre en situation d&#039;appréhender sérieusement la question assez complexe (mais oh combien stratégique) du contrôle des accès sur un serveur Apache PHP MySQL. J&#039;espère avoir atteint cet objectif en montrant comment structurer la réflexion :&lt;br /&gt;
&lt;br /&gt;
* protection du serveur Apache&lt;br /&gt;
* protection du serveur MySQL&lt;br /&gt;
* mise en place de contrôles d&#039;accès via le langage PHP et plus précisément avec le script phpMyAdmin.&lt;br /&gt;
&lt;br /&gt;
Il est évident qu&#039;un sujet aussi vaste ne peut être qu&#039;effleuré en quelques pages aussi je vous renvoie vers la littérature plus complète (livres, HowTo, pages man etc..) sur les différents points abordés.&lt;br /&gt;
&lt;br /&gt;
J&#039;espère sincèrement que ce document servira un jour à quelqu&#039;un. Sa rédaction est de toute façon justifiée par le simple fait que l&#039;exercice m&#039;a obligé à mettre mes connaissances et mes notes au propre, à tester pas à pas toutes mes propositions. J&#039;en suis donc le premier lecteur. N&#039;hésitez pas à me faire part de votre avis sur l&#039;intérêt de cette étude. Toute suggestion d&#039;amélioration sera bienvenue. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== L&#039;auteur ==&lt;br /&gt;
&lt;br /&gt;
JML dit Jean-Marc LICHTLE, email jean-marc.lichtle@gadz.org, ingénieur Arts et Métiers promo CH173 (rigolez pas, à l&#039;époque les écrans n&#039;existaient pas, le conversationnel c&#039;était à grands renforts de télétypes et de rouleaux de papier! Pire encore, 16 clés, 16 voyants et un bouton run! Beurk.....)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Marc LICHTLE le 01/10/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 01/10/2001, Jean-Marc LICHTLE&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>Madhatter</name></author>
	</entry>
</feed>