Ipchains-masq.sh
Un article de Page Personnelle de Cédric Blancher, l'encyclopéde libre.
Source: ipchains.masq.sh (http://sid.rstack.org/code/scripts/ipchains.masq.sh)
############################################################################### # # script ipchains pour Filtre avec support masquage d'adresses. # # eth0 : 172.16.0.1 vers 172.16.0.0/16 # eth1 : 192.168.11.1 vers 192.168.11.0/24 # Serveur DNS : 192.168.11.2 # Serveur SMTP/POP : 172.16.0.2 # Administration en SSH depuis 192.168.11.0/24 # # Les paquets ICMP acceptes sont : # destination-unreachable # source-quench # time-exceeded # parameter-problem # # Ce script est a lancer _avant_ la levee des interfaces reseau # # Note 1 : # Je precise les interfaces pour les chaines input et output. Cela peut aussi # etre fait pour la chaine forward (auquel cas, l'interface designee est celle # de sortie), mais je n'en vois pas l'interet. # # Note 2 : # Pour les paquets de retour, l'exterieur pense avoir affaire a la passerelle # Les ports sont translates vers des ports >60000 # # Note 3 : # Les regles du firewall peuvent etre sauvegardees dans un fichier arbitraire # par la commande : # ipchains-save > mon_fichier # puis restaurees par la commande : # ipchains-restore < mon_fichier # Cependant, ce contenu de ce fichier est peu lisible et non commentable. # # Note 4 : # Pour plus de lisibilite, les numeros de port peuvent etre remplace par le # nom du service tel qu'il est donne dans /etc/services. # # Pour plus d'informations : # http://netfilter.filewatcher.org/ipchains/ # http://netfilter.filewatcher.org/ipchains/HOWTO.html # http://www.freenix.org/unix/linux/HOWTO/IPCHAINS-HOWTO.html # # (c) 2000, Cedric Blancher (blancher at cartel-securite dot fr) # ############################################################################### #!/bin/sh # Localisation de l'executable IPCHAINS=/sbin/ipchains # Variables du script IP1=172.16.0.1 IP2=192.168.11.1 NET=192.168.11.0/24 MAIL=172.16.0.2 DNS=192.168.11.2 DNS_FAI=X.X.X.X # On vide les chaines et on supprime les les chaines utilisateur $IPCHAINS -X -F # On ferme l'acces completement $IPCHAINS -A input -s 0/0 -j DENY $IPCHAINS -A forward -s 0/0 -j DENY $IPCHAINS -A output -s 0/0 -j DENY # On s'assure que le forward est desactive echo 0 > /proc/sys/net/ipv4/ipforward # On active les rp_filters du noyau contre le spoofing if [ -e /proc/sys/net/ipv4/conf/all/rp_filter]; then for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f done fi # Politique par defaut : les paquets sont refuses # Note : les chaines utilisateur n'ont pas de politique ; si on veut en mettre # une , c'est la derniere regle de la chaine qui la definie. $IPCHAINS -P input DENY $IPCHAINS -P forward DENY $IPCHAINS -P output DENY # On cree une chaine pour traiter les ICMP $IPCHAINS -N icmp_check # Antispoofing de base $IPCHAINS -A input -i lo -j ACCEPT $IPCHAINS -A input -s ! $NET/24 -i eth1 -j DENY -l $IPCHAINS -A input -s $NET/24 -i ! eth1 -j DENY -l #Traitement de l'ICMP $IPCHAINS -A input -p icmp -j icmp-check $IPCHAINS -A forward -p icmp -j ACCEPT # deja filtre en input $IPCHAINS -A output -p icmp -j icmp_check #Filtrage de l'ICMP $IPCHAINS -A icmp_check -p icmp --icmp-type destination-unreachable -j ACCEPT $IPCHAINS -A icmp_check -p icmp --icmp-type source-quench -j ACCEPT $IPCHAINS -A icmp_check -p icmp --icmp-type time-exceeded -j ACCEPT $IPCHAINS -A icmp_check -p icmp --icmp-type parameter-problem -j ACCEPT $IPCHAINS -A icmp_check -p icmp -j DENY -l # peut alourdir considerablement les logs # Ports a usage local (SSH, DNS) $IPCHAINS -A input -p tcp -s $NET/24 1024: -d $IP2 22 -i eth1 -j ACCEPT $IPCHAINS -A output -p tcp -s $IP2 22 -d $NET/24 1024: -o eth1 -j ACCEPT !-y $IPCHAINS -A output -p udp -s $IP2 1024: -d $DNS 53 -o eth1 -j ACCEPT $IPCHAINS -A output -p tcp -s $IP2 1024: -d $DNS 53 -o eth1 -j ACCEPT $IPCHAINS -A input -p udp -s $DNS 53 -d $IP2 1024: -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $DNS 53 -d $IP2 1024: -i eth1 -j ACCEPT ! -y # Filtrage des protocoles routes #DNS a destination du serveur DNS $IPCHAINS -A input -p udp -s $DNS 1024: -d $DNS_FAI 53 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $DNS 1024: -d $DNS_FAI 53 -i eth1 -j ACCEPT $IPCHAINS -A input -p udp -s $DNS_FAI 53 -d $IP1/24 60000: -i eth0 -j ACCEPT $IPCHAINS -A input -p tcp -s $DNS_FAI 53 -d $IP1/24 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p udp -s $DNS 1024: -d $DNS_FAI 53 -j MASQ $IPCHAINS -A forward -p tcp -s $DNS 1024: -d $DNS_FAI 53 -j MASQ $IPCHAINS -A output -p udp -s $IP1 60000: -d $DNS_FAI 53 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $IP1 60000: -d $DNS_FAI 53 -o eth0 -j ACCEPT $IPCHAINS -A output -p udp -s $DNS_FAI 53 -d $DNS 1024: -o eth1 -j ACCEPT $IPCHAINS -A output -p tcp -s $DNS_FAI 53 -d $DNS 1024: -o eth1 -j ACCEPT ! -y #SMTP $IPCHAINS -A input -p tcp -s $NET 1024: -d $MAIL 25 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $MAIL 25 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d $MAIL 25 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d $MAIL 25 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $MAIL 25 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y #POP3 $IPCHAINS -A input -p tcp -s $NET 1024: -d $MAIL 110 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $MAIL 110 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d $MAIL 110 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d $MAIL 110 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $MAIL 110 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y #NNTP $IPCHAINS -A input -p tcp -s $NET 1024: -d 0/0 119 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 119 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 119 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d 0/0 119 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 119 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y #FTP... (Attention, faut suivre :) Il vaudra peut etre mieux revoir le # fonctionnement du FTP) # canal de commandes $IPCHAINS -A input -p tcp -s $NET 1024: -d 0/0 21 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 21 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 21 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d 0/0 21 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 21 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y # canal de données # mode actif $IPCHAINS -A input -p tcp -s $NET/24 1024: -d 0/0 20 -i eth1 -j ACCEPT ! -y $IPCHAINS -A input -p tcp -s 0/0 20 -d $IP1 60000: -i eth0 -j ACCEPT $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 20 -j MASQ $IPCHAINS -A output -p tcp -s $IP1/24 60000: -d 0/0 20 -o eth0 -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s 0/0 20 -d $NET/24 1024: -o eth1 -j ACCEPT # mode passif (les connexions 1024: vers 1024: me genent un peu cependant...) $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d 0/0 1024: -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 1024: -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 1024: -j MASQ $IPCHAINS -A output -p tcp -s $NET/24 1024: -d 0/0 1024: -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 1024: -d $IP1 60000: -o eth1 -j ACCEPT ! -y #HTTP $IPCHAINS -A input -p tcp -s $NET 1024: -d 0/0 80 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 80 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 80 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d 0/0 80 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 80 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y #HTTPS $IPCHAINS -A input -p tcp -s $NET 1024: -d 0/0 443 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 443 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 443 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d 0/0 443 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 443 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y #RealAudio $IPCHAINS -A input -p tcp -s $NET 1024: -d 0/0 554 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 554 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 554 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d 0/0 554 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 554 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y $IPCHAINS -A input -p tcp -s $NET 1024: -d 0/0 7070 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 7070 -d $IP1 60000: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET/24 1024: -d 0/0 7070 -j MASQ $IPCHAINS -A output -p tcp -s $IP1 60000: -d 0/0 7070 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 7070 -d $NET/24 1024: -o eth1 -j ACCEPT ! -y # Tout est en place, on peut activer le forward echo 1 > /proc/sys/net/ipv4/ip_forward # On ouvre la boite :) $IPCHAINS -D input 1 $IPCHAINS -D forward 1 $IPCHAINS -D output 1 ############################################################################### # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You can obtain a copy of the GNU General Public License at this # URL : # http://www.fsf.org/copyleft/gpl.html # If not, write to the Free Software Foundation, Inc., 59 Temple # Place - Suite 330, Boston, MA 02111-1307, USA. # ###############################################################################




