Voilà un astuce d'un livre que je suis en train de lire et qui vous permet de créer un par-feu en ligne de commande.
Le par-feu netfilter (disponible depuis Linux 2.4) peut être manipulé de manière très souple en ligne de commande.L'utilisation d'iptable peut demander un certain temps d'adaptation mais offre une syntaxe très expressive pour céer des régles de par-feu complexe ( et je l'espère utile).
Même si votre machine n'est pas un par-feu "réel" (en d'autre termes, si elle n'a qu'une interface réseau et ne protège pas d'autre machines), la fonctionnalité de filtrage peut être très précieuse.Supposez que vous souhaitiez autoriser l'accsès à cette machine
telnet (simplement au cas ou quelque chose arriverait à
ssh ou à ses bibliotèques), mais que vous ne vouliez simplement pas le permetre depuis tout endroit du Net.Vous pourriez faire un appel à une enveloppe
tcp (wrapper) en remplissant
/etc/hosts.allow et
/etc/hosts.deny, puis en configurant convenablement
/etc/inetd.conf.Ou bien vous pourriez employer
iptables ainsi:
iptables -A INPUT -t filter -s ! 208.201.239.36 -p tcp --dport 23 -j DROP
La plupart des utilisateurs veulent, en général, permetre un accès complet depuis des hôtes de confiance, bloquer tout accès depuis des hôtes ayant des problèmes connu et autoriser tout ce qui est intermédiaire pour les autres.
Voici une méthode permetant d'utiliser simultanément une liste blanche, une liste noire et une politique de restriction de port.
#!/bin/sh
#
#Un script simple d'initialisation de par-feu
#
WHITELIST=/usr/local/etc/liste_blanche.txt
BLACKLIST=/usr/local/etc/liste_noir.txt
ALLOWED="22 25 80 443"
#
#Ecarter toutes les règles de filtrage existantes
#
iptables -F
#
#Commencer par parcourir $WHITELIST, en acceptant tout le trafic
#qu'elle contient.
#
for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
echo "Autorisation accordée à $x..."
iptables -A INPUT -t filter -s $x -j ACCEPT
done
#
#Ensuite, parcourir $BLACKLIST, en écartant tout le trafic provenant
#des hôtes et des réseaux qu'elle contient.
#
for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
echo "Blocage de $x..."
iptables -A INPUT -t filter -s $x -j DROP
done
#
#A présant, les ports autorisés : qu'accepterons-nous des hôtes
#n'apparaissant pas sur la liste noir ?
#
for port in $ALLOWED; do
echo "Acceptation du port $port..."
iptables -A INPUT -t filter -p tcp -dport $port -j ACCEPT
done
#
#Pour finir, à moins d'un contre-ordre ci-dessus, rejeter les connexions
#entrantes à l'initiative de l'extérieur.
#
iptables -A INPUT -t filter -p tcp --syn -j DROP
Veillez à spécifier tous les ports que vous souhaitez inclure dans la variable $ALLOWED au début du script.Si vous oubliez d'inclure le port 22, vous ne serez pas en mesure de lancer
ssh sur votre machine!
Le fichier
/usr/local/etc/liste_noir.txt est rempli d'adresses IP,de noms d'hôtes et de réseaux de lamanière suivante:
1.2.3.4 #Analyse des ports le 15/8/07
7.8.9.0/24 #Qui peut savoir quelle menace se profile ici
r00tb0y.script-kiddie.coop
De même
/usr/local/etc/liste_blache.txt contien les gentils utilisateurs qui sont autorisés à accéder, quelles que soit les autres règles:
11.22.33.44 # Ma station de travail
208.201.239.0/26 # Le réseau local
Vous pouvez apporter tous les changements que vous voulez sur
/usr/local/etc/liste_noir.txt et
/usr/local/etc/liste_blanche.txt et aussi sur les ports spécifiés dans $ALLOWED car au début de script on purge tout les éléments de filtrage avec la comande
iptables -F donc vous pouvez simplement lancer le script à nouveau des que vous avez fait des chagements.
Ce scipt ne tien compte que des connexions TCP.Si vous souhaitez également prendre en charge UDP, ICMP ou tout autre protocol, exécutez une boucle for analogue à celle de $ALLOWED, mais incluez vos ports et vos protocoles supplémenataires (en passant
-p udp ou
-p icmp à iptables)
ATTENTION:tous les personnes sur la liste blache auront accès à tous les ports sur votre machine.
Vous pouvez lister les règles d'iptables avec
iptables -L et si cela ne marche pas essayez
iptables -L -n pour afficher les règles sans la moindre résolution DNS ---Vos règles pourraient accidentellement interdire les requêtes DNS.