bonjour, je suis debutante sous linux, je suis sous la fedora core 4 et j'ai un pb :
mon reseau :
reseau privé<------>firewall<----->modem/routeur<----->internet
je suis en train de faire le firewall avec iptables, j'ai fais :
###############################################################################
# Initialisation de Netfilter #
###############################################################################
# Initialise la table Filter (par défaut tout les échanges sont refusés)
iptables -t filter -F
# On supprime d'eventuelles chaines personnelles
iptables -t filter -X
# Mise en place des regles par defaut (on accepte les paquets generes localement)
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
###############################################################################
# Initialise la table NAT
iptables -t nat -F
# On supprime d'eventuelles chaines personnelles
iptables -t nat -X
# Mise en place des regles par defaut (par défaut tout les échanges sont activés)
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
###############################################################################
# Initialise la table MANGLE
iptables -t mangle -F
# On supprime d'eventuelles chaines personnelles
iptables -t mangle -X
# Mise en place des regles par defaut (par défaut toutes les modifications de paquets sont autorisées)
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
###############################################################################
# Routage filtrant FORWARD #
###############################################################################
# On accepte tout le traffic provenant du LAN pour internet:
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
###############################################################################
# On accepte la sortie de certain protocoles
iptables -A OUTPUT -o eth0 -p UDP --dport domain -j ACCEPT
iptables -A OUTPUT -o eth0 -p TCP --dport domain -j ACCEPT
# HTTP
iptables -t filter -A FORWARD -i eth1 -o eth0 -s 139.54.47.0/24 -p tcp --dport 80 -m state --state ! INVALID -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth0 -s 139.54.46.0/24 -p tcp --dport 80 -m state --state ! INVALID -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -o eth1 -p tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
# HTTPS
iptables -t filter -A FORWARD -i eth1 -o eth0 -s 139.54.47.0/24 -p tcp --dport 443 -m state --state ! INVALID -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth0 -s 139.54.46.0/24 -p tcp --dport 443 -m state --state ! INVALID -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -o eth1 -p tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT
###############################################################################
# Routage filtrant INPUT/OUTPUT #
###############################################################################
# Réseau Local <--> Firewall
###########################
# Pas de filtrage sur l'interface "loopback"
iptables -t filter -A INPUT -i lo -p all -m state --state ! INVALID -j ACCEPT
iptables -t filter -A OUTPUT -o lo -p all -m state --state ! INVALID -j ACCEPT
# ICMP
# On autorise le PC a faire des ping sur des IP exterieur
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Internet <--> Firewall
#######################
# ICMP
# On interdit les PC a l'exterieur de faire des ping
iptables -A INPUT -p icmp -j DROP
###############################################################################
# Masquerading DNAT
###############################################################################
#Tout ce qui sort du routage (-A POSTROUTING) et qui doit passer vers l'Internet (-o eth0) doit subir un masquage d'adresse (-j MASQUERADE)
iptables -t nat -A POSTROUTING -o eth0 -s 139.54.47.0/24 -p all -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 139.54.46.0/24 -p all -j MASQUERADE
###############################################################################
# LOG
###############################################################################
#envoyer vers la cible LOG tout paquet ICMP qui entre par eth0
iptables -A INPUT -i eth0 -p icmp -j LOG
iptables -t nat -A PREROUTING -i eth0 -p udp -j LOG --log-prefix log_iptables
iptables -t filter -A OUTPUT -o eth1 -p all -j LOG --log-prefix log_iptables
# Ecriture de la politique de log
# Ici on affiche [IPTABLES DROP] dans /var/log/message a chaque paquet rejette par iptables
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-level 1 --log-prefix '[IPTABLES DROP]:'
iptables -A LOG_DROP -j DROP
# On met en place les logs en entree, sortie et routage selon la politique LOG_DROP ecrit avant
iptables -A FORWARD -j LOG_DROP
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP
# On sauvegarde la configuration de iptables
/etc/init.d/iptables save
# On redemarre le service iptable
/etc/init.d/iptables restart
# On fait en sort que IPTABLES soit active au demarrage du PC
/sbin/chkconfig iptables on
mais d'un pc de mon reseau je n'arrive pas à passer au travers de mon firewall. je n'arrive pas à acceder à internet.
qu'est ce que je n'aurais pas fais ? si vous pouvez m'aider.
# ip_forward
Posté par Sebastian . Évalué à 2.
Normalement il faut que le module "ip_forward" soit activé avant les règles IPTABLES.
Si ce n'est pas le cas ...
echo "1" > /proc/sys/net/ipv4/ip_forward (Tu peux l'inserer dans ton fichier)
Je crois que c'est ainsi.
[^] # Re: ip_forward
Posté par yumelle . Évalué à 1.
[^] # Trou de sécurité
Posté par Dabowl_94 . Évalué à 1.
Dans tout bon script iptables, juste après l'initialisation des variables, je faisais ça :
echo 0 > /proc/sys/net/ipv4/ip_forward
Une fois que toutes les rêgles sont activées, j'active le forwarding :
echo 1 > /proc/sys/net/ipv4/ip_forward
Pour faciliter la maintenance et la lisibilité d'un script iptables, je recommande vivement l'usage de variables, voici un exemple de script :
#!/bin/bash
IPT="/sbin/iptables"
TABLE="filter nat mangle"
FILTER_CHAINS="INPUT FORWARD OUTPUT"
NAT_CHAINS="PREROUTING POSTROUTING OUTPUT"
ALL_CHAINS="PREROUTING INPUT FORWARD OUTPUT POSTROUTING"
LAN_INT="eth0"
WAN_INT="ppp0"
LAN_NET="192.168.10.0/24"
ANYWHERE="0.0.0.0/0"
case "$1"
in start)
# On efface toute regle existante.
clear
echo
echo Effacement des regles existantes
echo
$IPT -F
$IPT -F INPUT
$IPT -F FORWARD
$IPT -F OUTPUT
# Table NAT
$IPT -t nat -F
$IPT -t nat -F PREROUTING
$IPT -t nat -F POSTROUTING
$IPT -t nat -F OUTPUT
# Table Mangle
$IPT -t mangle -F
$IPT -t mangle -F PREROUTING
$IPT -t mangle -F INPUT
$IPT -t mangle -F FORWARD
$IPT -t mangle -F OUTPUT
$IPT -t mangle -F POSTROUTING
echo Mise a zero des compteurs
echo
# Mise a zero des compteurs
$IPT -t filter -Z
$IPT -t nat -Z
$IPT -t mangle -Z
sleep 1
echo Flushage de toute chaine
echo
# Flush toute chaine creee
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
sleep 1
echo Activation de la politique par defaut de chaque chaine
echo
# Comportement par defaut, refuse tous les paquets
#
#-------------------------------------------------
for filter_chains in $FILTER_CHAINS
do
$IPT -t filter -P $filter_chains DROP
done
for nat_chains in $NAT_CHAINS
do
$IPT -t nat -P $nat_chains ACCEPT
done
for all_chains in $ALL_CHAINS
do
$IPT -t mangle -P $all_chains ACCEPT
done
#-------------------------------------------------
# On désactive le forwarding pendant la config...et on masque le traffic interne
echo 0 > /proc/sys/net/ipv4/ip_forward
$IPT -t nat -A POSTROUTING -o $WAN_INT -j MASQUERADE
sleep 1
echo Mise en place des regles de filtrage
echo
# On accepte tout sur le localhost.
$IPT -A INPUT -p ALL -i lo -j ACCEPT
$IPT -A OUTPUT -p ALL -o lo -j ACCEPT
# On accepte tout le traffic en interne avec les utilisateurs.
$IPT -A INPUT -j ACCEPT -p ALL -i $LAN_INT -s $LAN_NET -d $ANYWHERE
$IPT -A OUTPUT -j ACCEPT -p ALL -o $LAN_INT -s $ANYWHERE -d $LAN_NET
# On accepte la retransmission de paquets entre interfaces avec le protocole TCP
# dans les deux sens, sauf pour l'etat NEW de l'exterieur vers l'interieur.
$IPT -A FORWARD -j ACCEPT -i $LAN_INT -o $WAN_INT -s $LAN_NET -d $ANYWHERE \
-p tcp -m state --state NEW,ESTABLISHED,RELATED
$IPT -A FORWARD -j ACCEPT -o $LAN_INT -i $WAN_INT -s $ANYWHERE \
-p tcp -m state --state ESTABLISHED,RELATED
# On accepte le protocole UDP dans les deux sens.
$IPT -A FORWARD -j ACCEPT -i $LAN_INT -o $WAN_INT -s $LAN_NET -d $ANYWHERE -p udp
$IPT -A FORWARD -j ACCEPT -o $LAN_INT -i $WAN_INT -s $ANYWHERE -d $LAN_NET -p udp
# On accepte les paquets provenant de connexion deja etablies.
$IPT -A INPUT -i $WAN_INT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o $WAN_INT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
;;
esac
dabowl_75
[^] # Re: Trou de sécurité
Posté par yumelle . Évalué à 1.
mais dites moi je ne comprend pas, je peux bien tout faire par ligne de commande ou dois je enregistrer un script quelque part ?
[^] # Re: Trou de sécurité
Posté par Sebastian . Évalué à 2.
Bien sur tu peux tout effectuer en ligne de commande, mais je doute que tu veuilles à chaque démarrage de ta machine tapper toutes tes régles :D
Donc, avec un fichier, tu peux le lancer comme un script de démarrage (init.d).
[^] # Re: Trou de sécurité
Posté par Yann 'Ze' Richard (site web personnel) . Évalué à 1.
donc enregistrer dans un fichier firewall.sh par exemple.
le rendre executable: chmod 700 firewall.sh
et pour qu'il se charge automatiquement au lancement
soit tu utilise le systeme d'init soit tu le met dans /etc/network/interfaces
avec la directive post-up par exemple..
Une bonne lecture: http://christian.caleca.free.fr/masquerade/passerelle_simple(...)
et
http://christian.caleca.free.fr/netfilter/
[^] # Re: Trou de sécurité
Posté par yumelle . Évalué à 1.
merci encore
# Utilise shorewall
Posté par benoar . Évalué à 2.
http://shorewall.net
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.