DESMETTRE Julien
LEBON Samuel
FI 2001
RIO 2000
EXEMPLE IPCHAINS
|
IPChains: Exemple complet et commenté
#! /bin/sh
# Création d'un routeur filtrant avec masquage
# définition des variables
IPCHAINS=/sbin/ipchains
LOCALNET="192.168.1.0/24" # le réseau privé de l'entreprise
ETHINSIDE="192.168.1.1" # exemple d'adresse IP interne
ETHOUTSIDE="193.251.53.1" # exemple d'adresse IP publique
LOOPBACK="127.0.0.1/8" # adresse de loopback ; constante
ANYWHERE="0/0"
OUTSIDEIF=eth1 # nom de l'interface du routeur côté extérieur
FORWARD_PROCENTRY=/proc/sys/net/ipv4/ip_forward
# Les deux commandes suivantes renverront des codes d 'erreur si les règles existent déjà ; placé avant
# set- e pour que le script ne plante pas dans ce cas précis :
$IPCHAINS -N outside
$IPCHAINS -N portmap
set -e # annule immédiatement le script, à cause d'une erreur sur les règles
# Nettoyer la table de filtrage et l'IP forwarding (mise à plat du firewall) :
echo "0" > ${FORWARD_PROCENTRY}
$IPCHAINS -F forward
$IPCHAINS -F input
$IPCHAINS -F output
$IPCHAINS -F outside
$IPCHAINS -F portmap
# Masquage des paquets à destination de l'extérieur ; ne pas masquer les paquets local vers local :
$IPCHAINS -A forward -s $LOCALNET -d $LOCALNET -j ACCEPT
$IPCHAINS -A forward -s $ETHOUTSIDE -d $ANYWHERE -j ACCEPT
$IPCHAINS -A forward -s $LOCALNET -d $ANYWHERE -j MASQ
# Définition des priorités ; délais minimum de connexions pour www, telnet, ftp, ssh ; paquets sortants
# seulement :
$IPCHAINS -A output -p tcp -d $ANYWHERE www -t 0x01 0x10
$IPCHAINS -A output -p tcp -d $ANYWHERE telnet -t 0x01 0x10
$IPCHAINS -A output -p tcp -d $ANYWHERE ftp -t 0x01 0x10
$IPCHAINS -A output -p tcp -d $ANYWHERE ssh -t 0x01 0x10
# Définition des règles de filtrage :
$IPCHAINS -A input -s $LOCALNET -j ACCEPT
$IPCHAINS -A input -s $LOOPBACK -j ACCEPT
$IPCHAINS -A input -s $ETHOUTSIDE -j ACCEPT
# Définition des règles pour les paquets venant de l'extérieur :
$IPCHAINS -A input -i ${OUTSIDEIF} -j outside
$IPCHAINS -A input -i ppp+ -j outside
Définition des règles pour les paquets venant de l'extérieur
# Refuser tout paquet venant de l'extérieur et ayant une adresse interne, pour éviter l'IP Spoofing :
$IPCHAINS -A outside -s $LOCALNET -j DENY
$IPCHAINS -A outside -s $LOOPBACK -j DENY
# Aucun paquet venant de l'extérieur ne doit pénétrer sur le réseau local, parce qu'à l'extérieur, personne
# n'est supposé connaître la plage d'adresses privée interne :
$IPCHAINS -A outside -d $LOCALNET -j DENY
# Refuser toute connexion sur le port X (blocs 6000 à 6010) :
$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 6000:6010 -j DENY
# Refuser les connexion externes vers les ports NFS (111 et 2049), sur TCP ou UDP :
$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 111 -j DENY
$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 2049 -j DENY
$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 111 -j DENY
$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 2049 -j DENY
# Refuser les paquets XDM de l'extérieur (port 177 UDP) :
$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 177 -j DENY
# Refuser les paquets YP/NIS (port 653) :
$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 653 -j DENY
# Ne pas surcharger le port 80 TCP en évitant les connexions extérieures sur ce port :
$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 80 -j DENY
# Accepter les connexions FTP (ports 20 et 21) :
$IPCHAINS -A outside -p TCP -s $ANYWHERE 20:21 -d $ANYWHERE 1024: -j ACCEPT
# Accepter les paquets SSH d' administration à distance :
$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE ssh -j ACCEPT
# Accepter les paquets DNS venant de l'extérieur (port 53 TCP et UDP) :
$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 53 -j ACCEPT
$IPCHAINS -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 53 -j ACCEPT
# Accepter tout le trafic SMTP sur le port 25 uniquement :
$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 25 -j ACCEPT
# Accepter les paquets NTP de synchronisation d'horloge (port 123) :
$IPCHAINS -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 123 -j ACCEPT
# Eteindre et connecter tous les autres paquets entrants, TCP ou UDP, sur des ports réservés :
$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE :1023 -y -j DENY
$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE :1023 -j DENY
# Check against the portmapper ruleset
$IPCHAINS -A outside -j portmap
Fin des règles pour les paquets venant de l'extérieur
# D'autres options de règles de filtrage :
$ IPCHAINS -A output -p UDP -i $OUTSIDEIF -s $ANYWHERE 513 -d $ANYWHERE -j DENY
# Empêcher les paquets NetBios de sortir :
$ IPCHAINS -A output -p UDP -i $OUTSIDEIF -s $ANYWHERE 137 -d $ANYWHERE -j DENY
# Activer l'IP Forwarding :
echo "1" > ${FORWARD_PROCENTRY}
# Empêcher le ping des stations extérieures à votre réseau local sur celui-ci :
$ IPCHAINS -A input -b -i eth0 -p icmp -s 0/0 -d 0/0
# Interdire la consultation de certaines pages, par exemple www.enic.fr (pour toutes les adresses du réseau local), http://webenic.enic.fr (juste pour les adresses du réseau local commençant par 192.168.61) et http://www.laetitia-casta.com/ (juste pour l'adresse du réseau local 192.168.61.5). Vous pouvez mettre à la place des noms les adresses IP correspondantes :
$ IPCHAINS -A output -i eth1 -s 0/0 -d www.enic.fr -l -j REJECT
$ IPCHAINS -A output -i eth1 -s 192.168.61.0/24 -d webenic.enic.fr -l -j REJECT
$ IPCHAINS -A output -i eth1 -s 192.168.61.5/32 -d www.laetitia-casta.com -l -j REJECT
# Protéger son réseau local NetBEUI des attaques extérieures :
$ IPCHAINS -A input -i eth0 -p tcp -s 0/0 -d 192.168.61.0/24 139 -l -j DENY
$ IPCHAINS -A input -i eth0 -p udp -s 0/0 -d 192.168.61.0/24 139 -l -j DENY
# Protection pour les attaques BackOrifice :
IPCHAINS -A input -i eth0 -p tcp -s 0/0 -d 192.168.61.0/24 31137 -l -j DENY
IPCHAINS -A input -i eth0 -p udp -s 0/0 -d 192.168.1.0/24 31137 -l -j DENY
# Protection pour les attaques NetBUS :
IPCHAINS -A input -i eth0 -p tcp -s 0/0 -d 192.168.1.0/24 12345:12346 -l -j DENY
IPCHAINS -A input -i eth0 -p udp -s 0/0 -d 192.168.1.0/24 12345:12346 -l -j DENY
Fin du script
|