Vous êtes ici : Accueil » Articles » Système
>>IPTablesPrésentationComment réaliser un partage de connexion Internet facilement et complétement sécurisé. La solution consiste à créer une Zone démilitarisée. L’exemple qui suit est donc la création d’un réseau local assez basique. C’est un sous réseau dans le réseau Internet. De ce fait, il vous faut un routeur, alors soit vous vous procurez un routeur dans le marché actuel soit, ce qui est mon cas, vous possédez un petit ordinateur, et vous installez un système libre et le configurez pour qu’il fasse office de routeur. Cette page va décrire la configuration à effectuez pour que votre linux devienne un routeur. Ce routeur va permettre de donner un accès total à Internet pour notre réseau local, et surtout va empêcher le réseau Internet de pouvoir avoir accès à notre réseau local. ![]() Pour cela vous devez disposer de deux interfaces réseaux sur votre routeur. Nommé ici eth0 et eth1, ou eth0 sera l’interface communiquant avec Internet qui possedera votre ip publique et eth1 qui sera votre interface local qui possedera votre ip privée. L’élément qui va vous permettre de réaliser cette prouesse est Le module iptables de votre linux. IpTables est une solution complète de firewall (noyau 2.4) remplaçant ipchains (noyau 2.2) tournant sous le système GNU/Linux. IpTables permet de faire du firewalling stateful (à états), de la translation de port et d’adresse, du filtrage au niveau 2 et beaucoup d’autres choses. 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. Si celui ci n’est pas compris dans le noyau vous pouvez toujours monter ce module grâce à la commande ’modprobe [ip_tables]’. Pour voir si votre module est bien inséré vous devez regarder la liste des modules en faisant un ’lsmod’. Si vous trouvez des modules non-utilisés alors vous pouvez les retirer par ’rmmod [Nom du Module]’. Si vous désirez que certain module soit présent dans devoir les monter ou retirer certain module au démarrage, il vous faut recompiler le noyau. IPTablesIpTables possède plusieurs Table :
Il existe 3 targets (ou cibles) :
ScriptVoici un exemple de script. Mise à zéro des tables iptables -F iptables -X iptables -t nat -F iptables -t nat -X Montage des modules nécessaire (module de base) modprobe iptable_nat modprobe iptable_filter Paramétrage du réseau : AntiSpoofing if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] then for filtre in /proc/sys/net/ipv4/conf/*/rp_filter do echo 1 > $filtre done fi On active la translation des packets echo 1 > /proc/sys/net/ipv4/ip_forward On ignore les pings echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts La politique par défaut La méthode consiste à tout refuser puis à rajouter des règles d’acceptation au compte goutte. Des fichiers logs peuvent être paramétrés. iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP On accepte les translations des IP iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT On accepte que les processus locaux puissent communiquer par le biais de l’interface local (localhost) iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT On part du principe que notre réseau local est sur, donc on accepte tout iptables -A INPUT -i eth1 -j ACCEPT iptables -A OUTPUT -o eth1 -j ACCEPT Configuration de la translation A la sortie du firewall, toute ip sera masqué et prendra l’ip publique iptables -A POSTROUTING -t nat -s 192.168.166.0/24 -j MASQUERADE Toutes les connexions qui sortent du LAN vers le Net sont acceptées iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT Seules les connexions deja établies ou en relation avec des connexions établies sont acceptees venant du Net vers le LAN iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT Autorisations particulières. Par exemple, notre serveur étant une des machine du réseau local, il est nécessaire de faire les bonnes translations. Dans ce cas le ftp se trouve sur la machine local ayant comme ip 192.168.166.177:21. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT --to-destination 192.168.166.177 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 40000:41000 -j DNAT --to-destination 192.168.166.177 Le serveur SSH écoute seulement sur l’interface locale, donc il est imposssible d’y accéder depuis internet, néanmoins une seule machine du réseau local pourra y accéder. iptables -A INPUT -i eth1 -s 192.168.166.14 -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -o eth1 -d 192.168.166.14 -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT Enfin, si aucune régle ne correspond aux régles précedentes alors on supprime iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP En effet le script sera lu séquentiellement, donc dès que un packet correspondra à une régle la lecture sera terminée, en revanche si aucune régle ne correspond alors la dernière règle sera définie. Il va s’en dire que vous pouvez crée des logs de tout ce qui ce passe. Vous pouvez également installer un IDS comme Snort afin de logger encore plus de chose. Couplé avec certains plugins il devient très vite indispensable. Références |