Voici un firewall iptables minimal, mais efficace, pour un ordinateur qui ne fait tourner aucun serveur et qui n'est pas un routeur (certains P2P sont assimilables à des serveurs si on n'active pas leur option "firewall" ). Ce script peut bien-sûr être enrichi par la suite. Il doit être lancé automatiquement à chaque boot, avant le lancement des programmes utilisables depuis internet.
#! /bin/sh
iptables -P INPUT DROP
iptables -F INPUT
iptables -A INPUT -m state --state established -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
C'est tout.
Explications :
-P fixe le comportement (Policy) par défaut
-F efface les règles précédentes, s'il y en avait (Flush)
-A ajoute (Add) une règle
-m state --state established précise que cette règle ne concerne que les connexions déjà établies (utilisation du module state)
-i lo précise que cette règle concerne l'interface locale (lo), c'est à dire pour les communications entre 2 programmes de la même machine.
Voici un enrichissement élémentaire, pour aller plus loin :
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
pour autoriser les connexions depuis l'extérieur vers un serveur local, ici le port est celui de ssh (équivalent à 22 en chiffres)
Un enrichissement plus compliqué : voici l'ajout du NAT/masquerading pour en faire un routeur/firewall internet pour un réseau local : (remplacer eth0 par l'interface de votre réseau local, et ppp0 par votre interface internet)
iptables -A FORWARD -m state --state established -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo 1 >/proc/sys/net/ipv4/ip_forward
# petit oubli: flush NAT
Posté par free2.org . Évalué à 3.
la fin de l'astuce devient donc:
iptables -A FORWARD -m state --state established -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo 1 >/proc/sys/net/ipv4/ip_forward
# mieux?
Posté par syl44419 . Évalué à 1.
certes ton exemple est simple, mais rapport aux clients sortants, le script ne sert à rien.
à la ligne iptables -A INPUT -m state --state established -j ACCEPT
je met comme toi: iptables -A INPUT -m state --state established -j ACCEPT
mais aussi: iptables -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
le mieux est de préciser via -o pour l'output et -i pour l'input l'interface précisement ciblée. (ppp0 ou eth0)
C'est ce point, avec le fait de préciser les ports, qui sécurisent "vraiment".
l'objectif etait le simple, mais cela n'empeche pas :
# news (wanadoo)
iptables -A OUTPUT -o eth0 -p tcp -m state --state NEW,ESTABLISHED -d 193.252.117.183 --dport 119 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED -s 193.252.117.183 --sport 119 -j ACCEPT
car je suis recemment en dhcp via mon provider donc j'appliques ça sur eth0, avant c'etait pppoe donc ppp0. 119=port des newsgroups
tcp car c'est du mode connecte. dport destination port.. s source addresse..
un truc sympa :
iptables -A OUTPUT -o eth0 -p tcp -m owner --cmd-owner bash -j ACCEPT
autorisera n'importe quel processus s'intitulant bash à sortir par eth0 (noyaux recents) :p en tcp pour l'input il faut voir au port bien sûr, sous windows ce genre de choses est completement fait...artis(anal)ement (buffering.."intelligent")car on sait juste ip:port pour l'input.
# Attention au conntrack
Posté par Mr_Moustache . Évalué à 2.
echo $((24*3600)) >/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
(Ici une journée pour le timeout)
On peut augmenter la taille de la table ainsi:
echo 32760 >/proc/sys/net/ipv4/ip_conntrack_max
Pour calculer la bonne taille pour une machine: http://www.wallfire.org/misc/netfilter_conntrack_perf.txt(...)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.