(Courriels de diversion: <approvisionnerai@embeguiner-rajouter.com> <cachottieres@encastrerent-charites.com> <banjos@ruinant-plaignaient.com> <chancre@appelles-recycleraient.com> <transcrirai@surgeles-rebiffa.com> <validerait@remmenez-concourant.com> <dissimuleriez@imaginerions-degouts.com> <viroles@gitane-usinera.com> <retraduisiez@constatent-sous-estimerez.com> <jouissions@reorganisez-jalonnez.com> )


Bonjour à tous

Tout dabord il faut récupérer les howtos "IPCHAINS" et IP Masquerade" où
il y a toutes les infos sur les paramètres du noyau à abiliter.
J'utilise un noyau 2.2.17 RAID (assez stable) pour lequel, à part
IPAUTOFW et IPPORTFW, il n'y a pas de pilotes expérimentaux.
Pour monter la manip il faut 3 machine dont une avec 2 interfaces
réseau. Pour ne pas faire de bétises je n'utilise que des adresses de la
RFC 1918
Pour les amateurs d'art ASCII

-------------------------------------------------------- Internet
                                                  |

|                              eth1    10.1.0.2
                        +----------------------+    eth1:0  10.1.0.3
                         |  Passerelle
|    eth1.1  10.1.0.4
                         |  DNS + proxy Squid               |
eth1:2   ...........
                        +----------------------+
                                                 |
                                                 | eth0 192.168.1.108
-------------------------------------------------------- Réseau privé

Le but et de translater les demandes entrantes sur une adresse IP
donnée (du domaine internet) vers la machine appropriée dans le réseau
privé (ça peut être aussi une zone démilitarisée DMZ).

Le problème principal à comprendre c'est que la demande d'accés à un
firewall se fait en 2 temps. Par exemple pour sortir, il y a une demande
de service avec l'adresse 192.... puis aprés translation une demande
avec l'adresse 10..... . C'est pour cette raison que les contôles on
généralement 4 lignes: 1 input + 1 output avec une adresse interne et la
même chose avec une adresse externe.

Amusez vous bien et salut à tous

Bernard ETIENNE
Castel et Fromaget
Fleurance
#!/bin/bash
#
case "$1" in
	start)
	echo "Turning on packet filtering"
	/sbin/depmod -a
	/sbin/modprobe ip_masq_ftp
	##
	##
	######################################################################
	## Initialisation des paramètres du noyau (déjà contrôlé par rc.inet2)
	## mais ça ne mange pas de pain
	echo 1 > /proc/sys/net/ipv4/ip_forward
	echo 1 > /proc/sys/net/ipv4/ip_always_defrag
	######################################################################
	## 
	##
	######################################################################
	## "MASQUERADE Timeout" 
	## 2 heures pour les sessions TCP
	## 10 seciondes après réception de fin
	## 160 secondes pour le trafic UDP
	/sbin/ipchains -M -S 7200 10 160
	######################################################################
	## 
	##
	######################################################################
	## On ferme tout !!!
	/sbin/ipchains -P input DENY
	/sbin/ipchains -P output DENY
	/sbin/ipchains -P forward DENY
	######################################################################
	## 
	##
	######################################################################
	## Autoriser tout le trafic interne
	/sbin/ipchains -A input -i eth0 -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
	/sbin/ipchains -A output -i eth0 -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
	######################################################################
	## 
	##
	######################################################################
	## Autoriser l'accés au dns depuis l'intérieur
	/sbin/ipchains -A input -i eth0 -p udp -s 192.168.0.0/16 -d 10.1.0.2 53 -j ACCEPT
	/sbin/ipchains -A output -i eth0 -p udp -s 10.1.0.2 53 -d 192.168.0.0/16 -j ACCEPT
	## Autoriser l'accés au dns depuis l'extérieur
	## Je suis DNS primaire de ma zone
	/sbin/ipchains -A input -i eth1 -p udp -d 10.1.0.2 53 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p udp -s 10.1.0.2 53 -j ACCEPT
	## Le serveur lui même: interface lo
	## sinon un ftp ou un telnet va ramer pour résoudre sans succés l'adresse
	/sbin/ipchains -A output -i lo -p udp --dport 53 -j ACCEPT
	/sbin/ipchains -A input -i lo -p udp --dport 53 -j ACCEPT
	/sbin/ipchains -A output -i lo -p udp --sport 53 -j ACCEPT
	/sbin/ipchains -A input -i lo -p udp --sport 53 -j ACCEPT
	######################################################################
	## 
	##
	######################################################################
	## Pratique pour voir si tout fonctionne mais ne pas tout bloquer
	## sinon on perd tous les messages ICMP
	## On laisse passer les "pings" de l'intérieur vers l'extérieur
	/sbin/ipchains -A input -i eth0 -p icmp -s 192.168.0.0/16 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p icmp -s 10.1.0.2 -j ACCEPT
	/sbin/ipchains -A input -i eth1 -p icmp -d 10.1.0.2 -j ACCEPT
	/sbin/ipchains -A output -i eth0 -p icmp -d 192.168.0.0/16 -j ACCEPT
	## On laisse passer les "pings" de l'extérieur vers eth1
	/sbin/ipchains -A input -i eth1 -p icmp -d 10.1.0.0/8 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p icmp -s 10.1.0.0/8 -j ACCEPT
	## "pings" du serveur sur lui même
	/sbin/ipchains -A output -i lo -p icmp -j ACCEPT
	/sbin/ipchains -A input -i lo -p icmp -j ACCEPT
	######################################################################
	## 
	##
	######################################################################
	## Masquerading
	##
	## "Masquerade from local net on local interface to anywhere"
	/sbin/ipchains -A forward -i eth1 -s 192.168.0.0/16 -d 0.0.0.0/0 -j MASQ
	## Evaluée pour toute chaine arrivant de l'extérieur
	## Il faut vraiment fermer
	/sbin/ipchains -A forward -s 0.0.0.0/0 -d 0.0.0.0/0 -j REJECT
	##
	## Autorise toutes entrées: c'est contraire à la règle ci dessus
	## /sbin/ipchains -A forward -i eth0 -s 0.0.0.0/0 -d 192.168.0.0/16 -j MASQ
	##
	######################################################################
	##
	##
	######################################################################
	## Contrôler les sorties sur le web et les forcer à passer par le prowy
	## port 3128, sauf pour la machine 104
	##
	/sbin/ipchains -A output -i eth0 -p tcp -s 192.168.1.108 3128 -j ACCEPT
	/sbin/ipchains -A input -i eth0 -p tcp -d 192.168.1.108 3128 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p tcp -s 10.1.0.2 --dport 80 -j ACCEPT
	/sbin/ipchains -A input -i eth1 -p tcp --sport 80 -d 10.1.0.2 -j ACCEPT
	## Exceptionnellement la 104 ne passe pas par le proxy
	/sbin/ipchains -A input -i eth0 -p tcp -s 192.168.1.104 --dport 80 -j ACCEPT
	/sbin/ipchains -A output -i eth0 -p tcp --sport 80 -d 192.168.1.104 -j ACCEPT
	## Les out et in sur eth1 sont gérés dans le cas général
	######################################################################
	##
	##
	######################################################################
	## Autorise l'accés au serveur ftp 10.1.0.6
	/sbin/ipchains -A input -i eth1 -p tcp -d 10.1.0.6 20:21 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p tcp -s 10.1.0.6 20:21 -j ACCEPT
	######################################################################
	##
	##
	######################################################################
	## Autoriser l'accés au serveur web 10.1.0.3 avec la redirection vers 105
	## Voir plus bas les redirections de ports
	/sbin/ipchains -A input -i eth1 -p tcp -d 10.1.0.3 80 -j ACCEPT
	/sbin/ipchains -A output -i eth0 -p tcp -d 192.168.1.105 80 -j ACCEPT
	/sbin/ipchains -A input -i eth0 -p tcp -s 192.168.1.105 80 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p tcp -s 10.1.0.3 80 -j ACCEPT
	######################################################################
	##
	##
	######################################################################
	## Autoriser l'accés telnet à 10.1.0.4 avec la redirection vers 104
	/sbin/ipchains -A input -i eth1 -p tcp -d 10.1.0.4 23 -j ACCEPT
	/sbin/ipchains -A output -i eth0 -p tcp -d 192.168.1.104 23 -j ACCEPT
	/sbin/ipchains -A input -i eth0 -p tcp -s 192.168.1.104 23 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p tcp -s 10.1.0.4 23 -j ACCEPT
	######################################################################
	##
	##
	######################################################################
	## Authentification
	## Pour un service ftp ou telnet il y a tentative de résolution de l'adresse
	## Si ça ne marche pas on attend assez lontemps avant d'avoir la main
	## Là je suppose qu'il n'y a que la 104 sur laquelle j'ai ce besoin
	/sbin/ipchains -A input -i eth0 -p tcp -s 192.168.1.104 --dport 113 -j ACCEPT
	/sbin/ipchains -A output -i eth1 -p tcp -s 10.1.0.0/8 --dport 113 -j ACCEPT
	/sbin/ipchains -A input -i eth1 -p tcp --sport 113 -d 10.1.0.0/8 -j ACCEPT
	/sbin/ipchains -A output -i eth0 -p tcp --sport 113 -d 192.168.1.104 -j ACCEPT
	######################################################################
	##
	##
	######################################################################
	## Contrôle des chaines entrantes et sortantes pour debuggage et contrôle
	## En regardant les logs d'un service qui ne peut pas traverser le firewall
	## vous comprendrez comment écrire vos chaines
	/sbin/ipchains -A input -l -j RETURN
	/sbin/ipchains -A output -l -j RETURN
	/sbin/ipchains -A forward -l -j RETURN
	######################################################################
	##
	##
	######################################################################
	## redirection de ports entrants
	##
	## Redirige une demande sur 10.1.0.3 avec le port www vers 105
	/usr/sbin/ipmasqadm portfw -a -P tcp -L 10.1.0.3 80 -R 192.168.1.105 80
	##
	## Redirige une demande sur 10.1.0.4 avec le port telnet vers 104
	/usr/sbin/ipmasqadm portfw -a -P tcp -L 10.1.0.4 23 -R 192.168.1.104 23
	######################################################################
	##
	##
	;;
	stop)
	echo "Turning off packet filtering"
	## 1 permet le routage entre interfaces lorsque le firewall et arrété
	## c'est pratique pour la mise au point mais en exploitation il faut 0
	## echo 0 > /proc/sys/net/ipv4/ip_forward
	echo 1 > /proc/sys/net/ipv4/ip_forward
	/usr/sbin/ipmasqadm portfw -f
	/sbin/ipchains -F
	/sbin/ipchains -X
	/sbin/ipchains -P input ACCEPT
	/sbin/ipchains -P output ACCEPT
	/sbin/ipchains -P forward ACCEPT
	;;
	list)
	echo "Liste des chaines"
	/sbin/ipchains --version
	/sbin/ipchains -L -n
	echo "Liste des redirections"
	/usr/sbin/ipmasqadm portfw -l -n
	;;
	*)
	echo "Usage: /etc/rc.d/rc.firewall {start|stop|list}"
	;;
esac

---------------------------------------------------------------------
Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://www.CULTe.org/>