Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Ma copie pour iptables
Envoyé par: Bullet

Sans vergogne je me suis inspiré de deux sources puisées sur ce site ("iptables par l'exemple" et "Mur Pare-feu pas à pas") pour écrire le script suivant pour mon firewall.

Pouvez-vous me dire quelles erreurs, quels manques, quelles redondances il y aurait ?

#!/bin/sh
# d’abord quelques variables dépendantes du contexte
# l'emplacement d'iptables :
IPTABLES=/sbin/iptables
# nom de l'interface réseau vers internet :
EXTERNAL_IF="eth1"
# nom de l'interface réseau vers le réseau local :
INTERNAL_IF="eth0"
# le réseau local
RESEAU_LOCAL="192.1.1.0/12"

# on commence par l’arrêt du coupe-feu
echo "Arrêt du coupe-feu"
echo "On vide toutes les règles."
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F POSTROUTING
$IPTABLES -F LOG_DROP
$IPTABLES -X
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

# on relance le coupe-feu
echo "Relance du coupe-feu"

# Pour fixer les politiques par défaut (c.a.d: ce qui se passe quand aucune
# règle ne s’applique), ici, on refuse tout , (hop hop hop on circule mais ailleurs !)
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# On trace ce qu’on jette
$IPTABLES -N LOG_DROP
$IPTABLES -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '
$IPTABLES -A LOG_DROP -j DROP
$IPTABLES -A FORWARD -j LOG_DROP
$IPTABLES -A INPUT -j LOG_DROP
$IPTABLES -A OUTPUT -j LOG_DROP

# On accepte tout ce qui se passe sur l'interface lo
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Pour accepter tout ce qui se passe sur le réseau local :
$IPTABLES -A INPUT -s $RESEAU_LOCAL -j ACCEPT
$IPTABLES -A OUTPUT -d $RESEAU_LOCAL -j ACCEPT
$IPTABLES -A FORWARD -s $RESEAU_LOCAL -j ACCEPT

# Pour accepter les résolutions de nom (ie: le dns) :
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol udp --source-port 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol udp --destination-port 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --source-port 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol tcp --destination-port 53 -j ACCEPT

# Pour accepter le trafic web (on veut surfer!) :
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --source-port 80,443 -m state --state ESTABLISHED -j LOG_ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol tcp --destination-port 80,443 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT
# on accepte aussi que l’extérieur établisse une nouvelle connexion https sur le firewall (pour webmin)
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --source-port 443 -m state --state NEW-j LOG_ACCEPT

# ici on traite pop smtp à initiative locale
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --source-port 25,110 -m state --state ESTABLISHED -j LOG_ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol tcp --destination-port 25,110 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT

# on autorise le ping
$IPTABLES -A OUTPUT -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# en le limitant
$IPTABLES -A INPUT -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit --limit 5/min -j ACCEPT

# pour autoriser le partage de connexion au niveau du noyau
echo 1 > /proc/sys/net/ipv4/ip_forward

# on cache les autres machines du réseau local derrière le mur pare feu :
$IPTABLES -A POSTROUTING -t nat -o $EXTERNAL_IF -j MASQUERADE

Voilà voila...
D'avance merci pour la correction de ma copie.


--------------------------------------------------------------------------------
Le monde est tellement con, on dirait que c'est moi qui fait tout !

Poste le Thursday 26 January 2006 12:29:46
Répondre     Citer    
Re: Ma copie pour iptables
Envoyé par: chromosome

Dans un premier temps je doute de RESEAU_LOCAL=192.1.1.0/12 c'est pas possible comme subnet.
iptables -X xxx (il te faut la chaine a supprimer, je pense que c'est dans ton cas LOG_DROP) Si c'est le cas alors le iptables -F LOG_DROP juste avant ne sert a rien.
Si tu veux vraiment arreter ton firewall (dans le cas ou tu comptes un jour faire un stop, n'oublie pas de mettre 0 dans ip_forward en premier lieux)

Alors commencer par mettre la regle DROP_LOG c'est vraiment pas un bon plan, sauf si tu veux un MAX de securite car rien ne passe. Il faut la mettre a la fin, et le drop sur la derniere ligne ne sert a rien car c'est deja la default rule de tes groupes.

$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol udp --source-port 53 -j ACCEPT ca ne sert a rien.

$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --source-port 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol tcp --destination-port 53 -j ACCEPT
Ca non plus je pense pas que tu fasses une synchro de zone entre l'interne et l'externe. Donc pas de TCP pour le DNS, seulement de l'UDP. (Quoiqu'en pense les anciennes versions de windows)

Tu peux remplacer
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --source-port 80,443 -m state --state ESTABLISHED -j LOG_ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol tcp --destination-port 80,443 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT

par
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 25 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 110 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 -j ACCEPT

Car il est inutile de specifier port par port les sessions de retour (iptables le fait tres bien pour toi)

Au fait c'est quoi LOG_ACCEPT ?

Le protocole icmp n'est pas statefull, donc un simple
$IPTABLES -A INPUT -p icmp -j ACCEPT
$IPTABLES -A OUTPUT -p icmp -j ACCEPT
Sauf si tu veux specifier les messages que tu veux accepter.

Voila deja un premier commentaire.

Poste le Thursday 26 January 2006 18:08:05
Répondre     Citer    
Re: Ma copie pour iptables
Envoyé par: Bullet

Grand merci, Je vais corriger çà...

--------------------------------------------------------------------------------
Le monde est tellement con, on dirait que c'est moi qui fait tout !

Poste le Friday 27 January 2006 08:58:18
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Ma copie pour iptables
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons