Ipchains-router.sh
Un article de Page Personnelle de Cédric Blancher, l'encyclopéde libre.
Source: ipchains.router.sh (http://sid.rstack.org/code/scripts/ipchains.router.sh)
############################################################################### # # script ipchains pour Filtre # # eth0 : 192.168.1.100 vers 192.168.1.0/24 # eth1 : 192.168.2.1 vers 192.168.2.0/24 # Serveur DNS : 192.168.1.1 # Serveur SMTP/POP : 192.168.1.2 # Serveur LPR : 192.168.1.3 # Un serveur a acces restreint (DNS, FTP) : 192.168.2.2 # Administration en SSH depuis 192.168.1.0 # # 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 : # 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 3 : # 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=192.168.1.100 IP2=192.168.2.1 NET1=192.168.1.0 NET2=192.168.2.0 DNS=192.168.1.1 MAIL=192.168.1.2 LPR=192.168.1.3 SERV=192.168.2.2 # 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 deux chaines pour traiter les connexions du serveur $IPCHAINS -N serv_in $IPCHAINS -N serv_out # 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 ! $NET2/24 -i eth1 -j DENY -l $IPCHAINS -A input -s $NET2/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 $NET1/24 1024: -d $IP1 22 -i eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $IP1 22 -d $NET1/24 1024: -o eth0 -j ACCEPT !-y $IPCHAINS -A output -p udp -s $IP1 1024: -d $DNS 53 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $IP1 1024: -d $DNS 53 -o eth0 -j ACCEPT $IPCHAINS -A input -p udp -s $DNS 53 -d $IP1 1024: -i eth0 -j ACCEPT $IPCHAINS -A input -p tcp -s $DNS 53 -d $IP1 1024: -i eth0 -j ACCEPT ! -y # Filtrage des protocoles routes # Filtrage des connexion du serveur $IPCHAINS -A input -s $SERV -i eth1 -j ACCEPT $IPCHAINS -A input -d $SERV -i eth0 -j ACCEPT $IPCHAINS -A forward -s $SERV -j serv_out $IPCHAINS -A forward -d $SERV -j serv_in $IPCHAINS -A output -s $SERV -o eth0 -j ACCEPT $IPCHAINS -A output -d $SERV -o eth1 -j ACCEPT #Connexions du serveur (FTP actif, DNS, ICMP) #vers le serveur $IPCHAINS -A serv_in -p tcp -s 0/0 21 -d $SERV 1024: -j ACCEPT ! -y $IPCHAINS -A serv_in -p tcp -s 0/0 20 -d $SERV 1024: -j ACCEPT $IPCHAINS -A serv_in -p tcp -s $DNS 53 -d $SERV 1024: -j ACCEPT ! -y $IPCHAINS -A serv_in -p udp -s $DNS 53 -d $SERV 1024: -j ACCEPT $IPCHAINS -A serv_in -p icmp -j ACCEPT # deja filtre $IPCHAINS -A serv_in -s 0/0 -d 0/0 -j DENY #depuis le serveur $IPCHAINS -A serv_out -p tcp -s $SERV 1024: -d 0/0 21 -j ACCEPT $IPCHAINS -A serv_out -p tcp -s $SERV 1024: -d 0/0 20 -j ACCEPT ! -y $IPCHAINs -A serv_out -p tcp -s $SERV 1024: -d $DNS 53 -j ACCEPT $IPCHAINs -A serv_out -p tcp -s $SERV 1024: -d $DNS 53 -j ACCEPT $IPCHAINS -A serv_out -p icmp -j ACCEPT # deja filtre $IPCHAINS -A serv_out -s 0/0 -d 0/0 -j DENY # Filtrage du reste du reseau #DNS $IPCHAINS -A input -p udp -s $NET2/24 1024: -d $DNS 53 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d $DNS 53 -i eth1 -j ACCEPT $IPCHAINS -A input -p udp -s $DNS 53 -d $NET2/24 1024: -i eth0 -j ACCEPT $IPCHAINS -A input -p tcp -s $DNS 53 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p udp -s $NET2/24 1024: -d $DNS 53 -j ACCEPT $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d $DNS 53 -j ACCEPT $IPCHAINS -A forward -p udp -s $DNS 53 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A forward -p udp -s $DNS 53 -d $NET2/24 1024: -j ACCEPT $IPCHAINS -A output -p udp -s $NET2/24 1024: -d $DNS 53 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d $DNS 53 -o eth0 -j ACCEPT $IPCHAINS -A output -p udp -s $DNS 53 -d $NET2/24 1024: -o eth1 -j ACCEPT $IPCHAINS -A output -p tcp -s $DNS 53 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y #SMTP $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d $MAIL 25 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $MAIL 25 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d $MAIL 25 -j ACCEPT $IPCHAINS -A forward -p tcp -s $MAIL 25 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d $MAIL 25 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $MAIL 25 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y #POP3 $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d $MAIL 110 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $MAIL 110 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d $MAIL 110 -j ACCEPT $IPCHAINS -A forward -p tcp -s $MAIL 110 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d $MAIL 110 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $MAIL 110 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y #NNTP $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d 0/0 119 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 119 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 119 -j ACCEPT $IPCHAINS -A forward -p tcp -s 0/0 119 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 119 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 119 -d $NET2/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 $NET2/24 1024: -d 0/0 21 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 21 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 21 -j ACCEPT $IPCHAINS -A forward -p tcp -s 0/0 21 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 21 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 21 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y # canal de données # mode actif $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d 0/0 20 -i eth1 -j ACCEPT ! -y $IPCHAINS -A input -p tcp -s 0/0 20 -d $NET2/24 1024: -i eth0 -j ACCEPT $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 20 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s 0/0 20 -d $NET2/24 1024: -j ACCEPT $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 20 -o eth0 -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s 0/0 20 -d $NET2/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 $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 1024: -j ACCEPT $IPCHAINS -A forward -p tcp -s 0/0 1024: -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 1024: -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 1024: -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y #HTTP $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d 0/0 80 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 80 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 80 -j ACCEPT $IPCHAINS -A forward -p tcp -s 0/0 80 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 80 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 80 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y #HTTPS $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d 0/0 443 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 443 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 443 -j ACCEPT $IPCHAINS -A forward -p tcp -s 0/0 443 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 443 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 443 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y #RealAudio $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d 0/0 554 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 554 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 554 -j ACCEPT $IPCHAINS -A forward -p tcp -s 0/0 554 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 554 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 554 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y $IPCHAINS -A input -p tcp -s $NET2/24 1024: -d 0/0 7070 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s 0/0 7070 -d $NET2/24 1024: -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 1024: -d 0/0 7070 -j ACCEPT $IPCHAINS -A forward -p tcp -s 0/0 7070 -d $NET2/24 1024: -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 1024: -d 0/0 7070 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s 0/0 7070 -d $NET2/24 1024: -o eth1 -j ACCEPT ! -y #LPR (Subtilite : les connexions LPR utilisent des ports privilegies des deux # cotes, normallement au dessus de 700, mais manifestement, l'implementation # Microsoft ne se plie pas a cette regle). $IPCHAINS -A input -p tcp -s $NET2/24 :1023 -d $LPR 515 -i eth1 -j ACCEPT $IPCHAINS -A input -p tcp -s $LPR 515 -d $NET2/24 :1023 -i eth0 -j ACCEPT ! -y $IPCHAINS -A forward -p tcp -s $NET2/24 :1023 -d $LPR 515 -j ACCEPT $IPCHAINS -A forward -p tcp -s $LPR 515 -d $NET2/24 :1023 -j ACCEPT ! -y $IPCHAINS -A output -p tcp -s $NET2/24 :1023 -d $LPR 515 -o eth0 -j ACCEPT $IPCHAINS -A output -p tcp -s $LPR 515 -d $NET2/24 :1023 -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. # ###############################################################################




