Forum Linux.débutant firewall iptables

Posté par  .
Étiquettes :
0
10
avr.
2006
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  . Évalué à 2.

    Bonjour,

    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  . Évalué à 1.

      je l'ai taper en ligne de commande, comme tout le reste c'est juste que je ne l'ai pas noté là dsl.
    • [^] # Trou de sécurité

      Posté par  . Évalué à 1.

      Tu n'es pas obligé d'activer le forwarding avant la mise en place des règles, et c'est d'ailleurs peu recommandé car pendant que tes rêgles se mettent en place, ta machine n'est pas sécurisée..

      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  . Évalué à 1.

        merci je vai recommencer.
        mais dites moi je ne comprend pas, je peux bien tout faire par ligne de commande ou dois je enregistrer un script quelque part ?
  • # Utilise shorewall

    Posté par  . Évalué à 2.

    Juste une petite suggestion, je sais que ce n'est pas forcément ce que tu recherches, mais shorewall est beaucoup plus pratique que de se faire un script "à la main" aujourd'hui. En plus il y a plein de doc sur le site :
    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.