Forum Linux.debian/ubuntu debian 3.1: installer un pare feu

Posté par  (site web personnel) .
Étiquettes :
0
29
avr.
2007
Bonjour,

décidément, je suis apparemment l'animateur principal de cette rubrique.

J'ai un autre souci: mettre en place un pare feu (firewall) sur un pc debian 3.1. Ce pare feu sera à la frontière réseau local/internet et devra empêcher les instrusions malveillantes dans le réseau, et filtrer les flux (entrants surtout) dans le réseau etc. Le pare feu devra tout simplement sécuriser le réseau.

Voici mon script à cet effet:

Afin que mon script s'exécute à chaque démarrage du pc, je le placerai dans le dossier /etc/init.d/ .

##Pour autoriser des connections entrantes tcp (internet-> vers mon reseau):
ptables -A INPUT -s [allowed-client-ip] -p tcp,udp --dport [port] -j ACCEPT
iptables -A OUTPUT -d [allowed-client-ip] -p tcp,udp --sport [port] -j ACCEPT -m state --state ESTABLISHED

##Pour autoriser les connections sortantes tcp (initiées par des pc de mon réseau):
iptables -A OUTPUT -d [destination-server-ip] -p tcp,udp --dport [port] -j ACCEPT
iptables -A INPUT -s [destination-server-ip] -p tcp,udp --sport [port] -j ACCEPT -m state --state ESTABLISHED

##pour autoriser le ssh depuis l'exterieur
iptables -A INPUT -s 0/0 -p tcp --dport 22 -j ACCEPT
# Plus nécessaire car OUTPUT est ACCEPT ..
# iptables -A OUTPUT -d 0/0-p tcp --sport 22 -j ACCEPT -m state --state ESTABLISHED


S'il y'a des experts qui ont déjà eu cette expérience, leurs commentaires et apports sont les bienvenus.

Merci
  • # installer un pare feu

    Posté par  (site web personnel) . Évalué à 2.

    Je n'ai pas la prétention d'être un expert ern sécurité mais néanmoins, je me suis déjà intéressé au sujet, je vais donc te passer le script que j'emploie.

    En premier lieu, un conseil : ton script, lance-le via les directives post-down et pre-up dans ton fichier /etc/network/interfaces. Cela te permettera d'avoir un firewall fonctionnel avant que n'importe quel service soit lancé.

    Ensuite voici mon script (un peut plus long)

    #!/bin/sh

    # Début configuration
    ICMP_PER_SEC=5 # Nombre max d'icmp par seconde
    SCAN_PER_SEC=5 # Nombre max de scan de port par seconde
    WAN_INTERFACE="eth0" # Interace(s) pour le wan (wired area network) : zone externe
    LAN_INTERFACE="eth1" # Interface(s) pour le lan (Local area network) : zone interne
    LOCAL_NETWORK="192.168.8.0/255.255.255.0" # Adresses du reseau local
    LOCAL_BROADCAST="192.168.8.255" # Adresse locale de broadcast
    LOG_PREFIX='[iptables DROP]' # Tag à ajouté lors du log de paquet droppé
    # Fin configuration

    init()
    {
    if [ `whoami` != "root" ]
    then
    echo "Vous devez être root pour éxecuter ce script"
    exit 1
    fi
    # D'abord charger les modules nécessaires : dépend du kernel
    # Réinitialisation
    iptables -F # Supprime les chaînes de la table filter (INPUT, FORWARD et OUTPUT)
    iptables -X # Supprime les chaînes personnelles de la table filter
    iptables -t nat -F # Supprime les chaînes de la table nat (PREROUTING, OUTPUT et POSTROUTING)
    iptables -t nat -X # Supprime les chaînes personnelles de la table nat
    }

    start()
    {
    init
    # Politique par défaut
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    # Définition du comportement géneral de netfilter
    echo 1 > /proc/sys/net/ipv4/ip_forward # Active le forwarding des ip
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Refuse l'icmp broadcasting
    echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects # Refuse les redirections (protection contre les attaques mim) : changement de route
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Ignorer les paquets icmp invalide
    echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route # Refuse le routage par la source
    echo 1 > /proc/sys/net/ipv4/conf/all/log_martians # Log des martiens activé
    echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter # Activation du filtre rp (protection contre ip spoofing)
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Protection contre les syn flood
    echo 0 > /proc/sys/net/ipv4/tcp_timestamps # Suppression des timestamps

    # Evite quelques DOS avec des limites temporelles
    echo 60 > /proc/sys/net/ipv4/tcp_fin_timeout
    echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
    echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
    echo 0 > /proc/sys/net/ipv4/tcp_sack
    echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog

    # Gestion de la chaine INPUT
    iptables -A INPUT -m state --state INVALID -j DROP
    iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT # Autoriser la communicatio sur lo
    iptables -A INPUT -i $WAN_INTERFACE -s $LOCAL_NETWORK -j DROP # Refuse tous paquets depuis l'extérieur prétendant être du réseau interne.
    iptables -A INPUT -p icmp -d $LOCAL_BROADCAST -j DROP # Refuse le ping sur une adresse de broadcast
    iptables -A INPUT -i $WAN_INTERFACE -p icmp --icmp-type echo-request -j DROP # Refuse les pings de l'extérieur
    iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit $ICMP_PER_SEC/s -j ACCEPT # Nombre de ping accepté par sec.
    iptables -A INPUT -s $LOCAL_NETWORK -j ACCEPT # Accepte les paquets du reseau local
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Autoriser le trafic local

    # Gestion de la chaine FORWARD
    iptables -A FORWARD -m state --state INVALID -j DROP
    iptables -A FORWARD -p icmp --icmp-type echo-request -o $LAN_INTERFACE -j DROP # Refuser les pings externes vers le reseau local
    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit $SCAN_PER_SEC/s -j ACCEPT # Protection contre les scans de ports
    iptables -A FORWARD -s $LOCAL_NETWORK -j ACCEPT # Autoriser le trafic local
    iptables -A FORWARD -d $LOCAL_NETWORK -m state --state RELATED,ESTABLISHED -j ACCEPT

    # Activation du routage / masquerade
    iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -j MASQUERADE

    iptables -A OUTPUT -m state --state INVALID -j DROP
    # Autorise l'ouverture de connexion vers l'extérieur
    iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

    # Loggé tout ce qui est droppé
    iptables -A INPUT -j LOG --log-prefix "$LOG_PREFIX"
    iptables -A OUTPUT -j LOG --log-prefix "$LOG_PREFIX"
    iptables -A FORWARD -j LOG --log-prefix "$LOG_PREFIX"
    }

    stop()
    {
    init
    # Politique par défaut : tout accepter ! Dangereux !
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    # Activation du routage / masquerade
    iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -j MASQUERADE
    }


    case $1 in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    stop
    start
    ;;
    *)
    echo "Usage : $0 {start | stop | restart}"
    exit 1
    ;;
    esac

    exit 0


    Voila déjà une bonne base de travail.
  • # firestarter

    Posté par  . Évalué à 3.

    Bonjour,

    L'écriture d'iptables étant assez opaque en ce qui me concerne, j'utilise firestarter pour tout initialiser comme il faut, puis je fait un "/etc/init.d/iptables save" pour les enregister pour le prochain démarrage.

    Voilà

    yvounet14
  • # L'en manque un bout?

    Posté par  . Évalué à 0.

    Nan je crois que tu te trompe :s . Les (tables, chaine ou jsais pas quoi) INPUT et OUTPUT font references aux entrée et sortis de ton ordi qui te sert de firewall. Si tu veux filtrer les entrée et sortie de ce qui ce passe de chaque coté de ton FW (LAN<->net), utilise la (chaine/table/autre (jsais tjrs pas :D)) FORWARD. exemple :

    (autorise le http et https entre 192.168.0.2 sur eth0 et le net sur ppp0)
    iptables -A FORWARD -i eth0 -o ppp0 -s 192.168.0.2 -p TCP -m multiport --dport 80,443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -o eth0 -i ppp0 -d 192.168.0.2 -p TCP -m multiport --sport 80,443 -m state --state RELATED,ESTABLISHED -j ACCEPT

    il ne faut pas oublier de permettre le forwarding :
    echo 1 > /proc/sys/net/ipv4/ip_forward (noyau 2.6)
    ou indique "net.ipv4.ip_forward = 1" dans /etc/sysctl suivis de la commande "sysctl -p"

    Et aussi mettre en place le masquerade (pour que tes paquet qui sorte (de ppp0 dans mon cas) prenne l'IP de ton routeur FW)
    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.