Ipchains-router.sh

De Page Personnelle de Cédric Blancher.

Source: 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.
#
###############################################################################
Navigation
autres
Locations of visitors to this page

No software patents !

Valid XHTML 1.0 Transitional

Valid CSS 2.1