next up previous contents
suivant: 9.7 Génération de la monter: 9.6 Gestion de SMTP précédent: 9.6 Gestion de SMTP   Table des matières

9.6.1 Script mkdroitsmtp

Le script mkdroitsmtp est fourni à titre d'exemple. Il fonctionne sur FreeBSD version 8 (minimum), et utilise pf (PacketFilter) issu d'OpenBSD comme outil de filtrage IP.

Par exemple, les règles de filtrage pf peuvent être les suivantes :


#
# Extrait de /etc/pf.conf montrant les regles a mettre en oeuvre
# sur le relayeur de messagerie pour admettre les connexions SMTP
# non authentifiees en provenance des clients dument autorises.
#

if="em0"

##############################################################################
# donnees necessaires au dialogue SMTP
##############################################################################

# machines autorisees a dialoguer en SMTP : le contenu de la table est
# issu d'un fichier externe

table <droitsmtp> persist file "/local/mail/droitsmtp.pf"

# les reseaux qu'on filtre (les exceptions citees ci-dessus doivent
# appartenir a un de ces reseaux)
# il faut egalement inclure les reseaux prives car certains sont 
# utilises sur Osiris

table <netsmtp> const {		\
	130.79.0.0/16		\
	10/8			\
	172.16/12		\
	192.168.255.255		\
	2001:660:2402::/48	\
	2001:660:4701::/48	\
	2001:660:4702::/48	\
	2001:660:4703::/48	\
	2001:660:4709::/48	\
	fe80::/64		\
}

##############################################################################
# Protocoles lies a l'activite de cette machine (i.e. mail)
##############################################################################

# Mail :
# - on autorise les machines dument autorisee dans WebDNS (table droitstmpN)
# - on refuse l'acces a tous les autres reseaux Osiris
# - on accepte le reste (i.e. tout l'internet)

pass  in quick on $if inet  proto tcp from <droitsmtp> to any port = smtp keep state
pass  in quick on $if inet6 proto tcp from <droitsmtp> to any port = smtp keep state

block in quick on $if inet  proto tcp from <netsmtp> to any port = smtp
block in quick on $if inet6 proto tcp from <netsmtp> to any port = smtp

pass  in quick on $if inet  proto tcp from any to any port = smtp keep state
pass  in quick on $if inet6 proto tcp from any to any port = smtp keep state

Le rôle du script consiste à créer un fichier pour stocker la table droitsmtp et à activer cette table. Il commence par récupérer une liste d'exceptions (sous forme d'un fichier contenant une liste d'adresses à systématiquement autoriser), puis ajoute la liste des adresses IP ayant l'attribut « droit d'émettre en SMTP non authentifié ». Ensuite, le fichier ainsi constitué est testé en utilisant l'utilitaire pfctl. Enfin, le fichier est envoyé et activé vers les autres relayeurs via un script cpmh (non fourni).

Le script mkdroitsmtp doit être lancé par cron, par exemple toutes les minutes, avec une entrée de la forme ·

#
# La crontab de "root"
#
SHELL = /bin/sh
MAILTO = hostmaster@u-strasbg.fr

* * * * *  lockf -t 30 /tmp/droitsmtp.lock /local/sbin/mkdroitsmtp

La commande lockf empêche l'exécution simultanée de deux instances du script.


Pierre DAVID 2010-11-16