\documentclass{article}
\title{Firewall}
\author{Julien Danjou\\jdanjou@linuxenrezo.org}
\date{}
\begin{document}
\maketitle

	Le principe du firewall est de stopper les connections dont on ne veut pas ou/et d'accepter celle que l'on veut (filtrer les connections).\\
        
	Dans cette exemple, un routeur a 3 cartes r\'eseau et donc 3 adresses :\\
	
	IP (eth0 = 192.168.0.1 eth1 = 192.168.0.65 eth2 = 192.168.0.129)\\
        
	On veut que le sous-r\'eseau 0 (qui est connect\'e \`a la carte eth0 du routeur), le sous-r\'eseau 1 (qui est connect\'e \`a la carte eth1 du routeur) et le sous-r\'eseau 2 (qui est connect\'e \`a la carte eth2 du routeur) communiquent de la fa\c\ con suivante (SR0 = sous r\'eseau 0, connect\'e \`a eth0 du routeur):\\
        SR0  SR1\\
        SR1  SR0\\
        SR2  SR1\\
        SR2  SR1\\
        
        Cela signifie que les sous r\'eseau 0 et 1 pourront communiquer ensemble, mais que le sous-r\'eseau 2 ne sera pas accessible depuis les sous r\'eseau 0\\
        
	1. En revanche, le sous r\'eseau 2 a lui acc\`es au sous r\'eseau 0 et 1. Il pourrait \^etre un sous r\'eseau compos\'e de PC important  (comportant des donn\'ees confidentielles ou critique: comptabilit\'e, salaire...) dont on veut empecher l'acc\`es de l'ext\'erieur du sous r\'eseau lui m\^eme...\\
        
	Voil\`a un sch\'ema r\'ecapitulatif:\\
        
        Je n'ai mis ici qu'un PC par sous r\'eseau, ce qui est possible mais un peu absurde....\\ 
        
	Il faut donc ajouter dans un script de d\'emarrage (par exemple /etc/rc.d/rc.local):\\ 

	\# On efface toutes les r\`egles\\
	/sbin/ipchains -F\\

\newpage

        \# Autorise le SR0 \`a acc\'eder au SR1\\
        ipchains -A forward -s 192.168.0.0/24 -d 192.168.0.64/24 -j ACCEPT\\

        \# Autorise le SR1 \`a acc\'eder au SR0\\
        ipchains -A forward -s 192.168.0.64/24 -d 192.168.0.0/24 -j ACCEPT\\

        \# Autorise le SR2 \`a acc\'eder \`a tout les SR\\
        ipchains -A forward -s 192.168.0.128/24 -d 0.0.0.0/0 -j ACCEPT\\

	\# Refuse les connections vers SR2\\
	ipchains -A forward -s 0.0.0.0/0 -d 192.168.0.128/24 -d 0.0.0.0 -j REJECT\\

        Oui, mais j'ai fait une erreur car il est stupide de bloquer toutes les connexions allant vers SR2, car il ne pourra recevoir aucun paquet, donc aucune r\'eponse \'a ses requ\^etes ! C'\'etait pour voir si vous suiviez)\\

	Donc il faut boquer seulement les tentatives de connexions, c'est \'a dire les paquets SYN. Pour cela on rajoute l'option -y\\

	Ce qui donne:\\

	\# Refuse les connections vers SR2\\
	
	ipchains -A forward -p tcp -s 0.0.0.0/0 -d 192.168.0.128/24 -d 0.0.0.0 -j REJECT -y\\

        Notez toutefois que j'utilise ici les adresses IP des sous-r\'eseaux, mais il est aussi possible d'utiliser des adresses IP de machines. On pourrait, par exemple, ne laisser qu'une machine par sous-r\'eseau acc\'eder aux autre sous-r\'eseaux afin de r\'eduire le trafic passant pas le routeur.\\ 
        
	Si vous voulez bloquez des connections entrantes, il suffit de remplacer forward par input, ou output pour des connections sortantes.\\

	\textbf{Protection Anti-spoofing}\\
	
	On ma demand\'e plusieurs fois comment se protéger de l'ip spoofing. L'ip spoofing est une m\'ethode qui consiste \`a se faire passer pour un PC que l'on n'est pas. En clair, cela signifie que quelqu'un vous envoie des packets avec comme origine "théorique" une machine de votre r\'eseau local !\\
	
	Pour se prot\'eger de cela, voil\`a ce qu'il faut rajouter dans votre script de firewall:\\
	
	/sbin/ipchains -A input -i ! eth0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j DENY\\

	Cela signifie que si des packets arrivant de votre connection modem (ppp0) (vous pouvez le modifier par eth1 si vous avez une connexion par c\^able ou ADSL) ayant pour adresse une adresse de votre r\'eseau local (changez 192.168.0.0 par l'adresse du r\'eseau connectez \`a eth0 par exemple), ils seront litt\'eralement explos\'e \`a coups de batte de base-ball sans avertissement.\\
\end{document}