Quelques fonctionnalités du plugin vont disparaître, donc on adapte main.cf

This commit is contained in:
Pierre-Elliott Bécue 2015-05-09 18:47:45 +02:00
parent a26eb6ed05
commit 10d42f96dd

View file

@ -36,14 +36,12 @@ def db_file(suffix):
'''Nom des fichiers de conf pour la base de donnees''' '''Nom des fichiers de conf pour la base de donnees'''
return "%(db)s:/etc/postfix/%(db)s-%(suffix)s.cf" % {"db": db, "suffix": suffix} return "%(db)s:/etc/postfix/%(db)s-%(suffix)s.cf" % {"db": db, "suffix": suffix}
# Pour les lignes commençant par un %
keysep = " = " keysep = " = "
def add(*values):
'''Continue une ligne logique (voif postconf(5))'''
out((len(last_definition)+len(keysep)) * " " + ", ".join([tostring(v) for v in values]) + "\n")
# La liste des variables de configuration de postfix ######################################
import commands # Début effectif du fichier #
exports = [s.split(' ', 2)[0] for s in commands.getoutput("/usr/sbin/postconf -d").split("\n")] ######################################
# Les différents réseaux # Les différents réseaux
local_networks = ["127.0.0.0/8", '[::1]/128'] local_networks = ["127.0.0.0/8", '[::1]/128']
@ -56,278 +54,270 @@ client_networks = ["138.231.136.0/21", "138.231.144.0/21", "138.231.148.0/22", "
@# Definition par securite (sinon il utilise gethostname) @# Definition par securite (sinon il utilise gethostname)
if nonadherent: if nonadherent:
myhostname = admhostname %myhostname admhostname
else: else:
myhostname = pubhostname %myhostname pubhostname
mydomain = "crans.org" @mydomain = crans.org
@# Origine des mails @# Origine des mails
myorigin = "crans.org" @myorigin = crans.org
@# Reseaux locaux @# Reseaux locaux
mynetworks = local_networks %mynetworks local_networks
if mx and not users: if mx and not users:
add(client_networks + adm_networks) out(" " + tostring(client_networks + adm_networks) + "\n")
elif users: elif users:
add(adm_networks) out(" " + tostring(adm_networks) + "\n")
elif tracker: elif tracker:
add(adm_networks) out(" " + tostring(adm_networks) + "\n")
if not mx: if not mx:
if tracker or corbeau: if tracker or corbeau:
@# Ecoute en local et sur adm (récupération des mails @tracker.adm.crans.org @# Ecoute en local et sur adm (récupération des mails @tracker.adm.crans.org
inet_interfaces = ["127.0.0.1", admip()] %inet_interfaces ["127.0.0.1", admip()]
else: else:
@# Ecoute en local uniquement @# Ecoute en local uniquement
inet_interfaces = "loopback-only" @inet_interfaces = loopback-only
if mx: if mx:
@# Destinations acceptees @# Destinations acceptees
mydestination = [hostname, "$myhostname", %mydestination [hostname, "$myhostname", "localhost", "localhost.$mydomain"]
"localhost", "localhost.$mydomain"]
if main or users: if main or users:
add(["$mydomain", out(" " + tostring(["$mydomain", "crans.ens-cachan.fr", "clubs.ens-cachan.fr", "install-party.ens-cachan.fr"]) + "\n")
"crans.ens-cachan.fr",
"clubs.ens-cachan.fr",
"install-party.ens-cachan.fr"])
if manage_ml: if manage_ml:
add(["lists.$mydomain"]) out(" " + tostring(["lists.$mydomain"]) + "\n")
@# Domaine relaye par ce MX @# Domaine relaye par ce MX
relay_domains = ["$mydestination"] @relay_domains = $mydestination
if secondary: if secondary:
add(["$mydomain", out(" " + tostring(["$mydomain", "crans.ens-cachan.fr", "clubs.ens-cachan.fr", "install-party.ens-cachan.fr"]) + "\n")
"crans.ens-cachan.fr",
"clubs.ens-cachan.fr",
"install-party.ens-cachan.fr"])
if public and not manage_ml: if public and not manage_ml:
add(["lists.$mydomain"]) out(" " + tostring(["lists.$mydomain"]) + "\n")
if not mx: if not mx:
if tracker: if tracker:
@# On accepte les mails destinés au tracker @# On accepte les mails destinés au tracker
mydestination = "tracker.adm.crans.org", @mydestination = tracker.adm.crans.org
if corbeau: if corbeau:
@# On accepte les mails destinés au corbeau @# On accepte les mails destinés au corbeau
mydestination = "crans.org" @mydestination = crans.org
@# Les mails sont envoyes au MX principal @# Les mails sont envoyes au MX principal
relayhost = "smtp.adm.crans.org", @relayhost = smtp.adm.crans.org
@# Etre notifie ou non de l'arrive de nouveaux mails @# Etre notifie ou non de l'arrive de nouveaux mails
biff = users %biff users
if mx: if mx:
@# Pour pouvoir tester sans tout casser, on active les soft bounces. @# Pour pouvoir tester sans tout casser, on active les soft bounces.
@# Ca permet aux mails de ne pas etre bounces en cas d'erreur, mais @# Ca permet aux mails de ne pas etre bounces en cas d'erreur, mais
@# a la place, de renvoyer une erreur non permanente. En production @# a la place, de renvoyer une erreur non permanente. En production
@# il faut enlever ca. @# il faut enlever ca.
soft_bounce = False @soft_bounce = no
if users: if users:
@# On delivre dans des maildir @# On delivre dans des maildir
mail_spool_directory = "/home/mail/" @mail_spool_directory = /home/mail/
@# +--------+ @# +--------+
@# | Divers | @# | Divers |
@# +--------+ @# +--------+
@# Delais pour les warnings @# Delais pour les warnings
delay_warning_time = "24h" @delay_warning_time = 24h
@# Esthetisme @# Esthetisme
smtpd_banner = "$myhostname ESMTP $mail_name (Debian/GNU)" @smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
if not mx: if not mx:
@# Reecriture des entetes: @host.crans.org -> @crans.org @# Reecriture des entetes: @host.crans.org -> @crans.org
canonical_maps = "regexp:/etc/postfix/canonical" @canonical_maps = regexp:/etc/postfix/canonical
if has("postfix.transport"): if has("postfix.transport"):
@# Par ou passer (notement pour la distrtibution des adresse @# Par ou passer (notement pour la distrtibution des adresse
@# locales par le serveur des adherents) @# locales par le serveur des adherents)
transport_maps = "hash:/etc/postfix/transport" @transport_maps = hash:/etc/postfix/transport
@# Une infinite d'adresses mail par personne @# Une infinite d'adresses mail par personne
recipient_delimiter = "+" @recipient_delimiter = +
@# +-----------------+ @# +-----------------+
@# | Bases d'adresse | @# | Bases d'adresse |
@# +-----------------+ @# +-----------------+
@# Les fichiers d'alias (pour newaliases) @# Les fichiers d'alias (pour newaliases)
alias_database = "hash:/etc/postfix/aliases" @alias_database = hash:/etc/postfix/aliases
if manage_ml: if manage_ml:
add("hash:/var/lib/mailman/data/aliases") @ hash:/var/lib/mailman/data/aliases
alias_maps = "$alias_database" @alias_maps = $alias_database
if mx:
@# Plus les alias dans la base de donnees
add(db_file("search"))
if mx:
@# On prend aussi en compte les utilisateurs de /etc/passwd
local_recipient_maps = "$alias_maps unix:passwd.byname"
if mx:
@# Les anciennes ML @crans.org, @crans.ens-cachan.fr -> @lists.crans.org
virtual_alias_maps = "hash:/etc/postfix/virtual"
# Pour les non-mx il n'y a plus rien d'interessant # Pour les non-mx il n'y a plus rien d'interessant
if not mx:
done()
@
@# +-------------+
@# | TLS et SASL |
@# +-------------+
@
@# TLS pour la reception
@smtpd_use_tls=yes
@smtpd_tls_security_level=may
@smtpd_tls_cert_file=/etc/ssl/certs/smtp.pem
@smtpd_tls_key_file=/etc/ssl/private/smtp.pem
@smtpd_tls_CAfile=/etc/ssl/certs/cacert.org.pem
@smtpd_tls_loglevel=0
@smtpd_tls_received_header=yes
@
@# On utilise aussi TLS pour envoyer les mails
@smtp_use_tls=yes
@smtp_tls_security_level=may
@smtp_tls_loglevel=1
@smtp_tls_cert_file=
@smtp_tls_key_file=
@smtp_tls_CAfile=/etc/ssl/certs/cacert.org.pem
@
@
@# On cache les sessions TLS car elles sont couteuses. Il parait que btree est mieux que sdbm,
@# a essayer quand on aura postfix > 2.2
@smtpd_tls_session_cache_database=btree:/var/lib/postfix/smtpd_tls_session_cache
@smtp_tls_session_cache_database=btree:/var/lib/postfix/smtp_tls_session_cache
@
@tls_random_source=dev:/dev/urandom
@
if main:
@# Auth que si tls pour eviter des pass en clair sur le reseau
@smtpd_tls_auth_only=yes
@# Authentification SASL pour relayer du mail
@smtpd_sasl_auth_enable=yes
@
@# +--------------------------+
@# | Filtrages et limitations |
@# +--------------------------+
@
if main:
@# Filtrage sur les sources de connexions
@smtpd_client_restrictions=permit_mynetworks
@
@# Reject the request when the client HELO or EHLO parameter has a bad hostname syntax.
@# reject_unknown_hostname value not recommended, because it may causes mail losting.
@# (for example: after paypal.com registration you don't receive activation mail! I've tried it.)
@#
smtpd_helo_restrictions = "permit_mynetworks, reject_invalid_hostname"
@## Limitation des messages envoyés par minute
@# On n'ignore que les messages venant d'adresses "protégées"
@smtpd_client_event_limit_exceptions=local_networks
if mx: if mx:
add(adm_networks) @# Plus les alias dans la base de donnees
@ out(" " + tostring(db_file("search")) + "\n")
@# On limite à 10 messages par minute @# On prend aussi en compte les utilisateurs de /etc/passwd
@smtpd_client_message_rate_limit=10 @local_recipient_maps = $alias_maps unix:passwd.byname
@ @# Les anciennes ML @crans.org, @crans.ens-cachan.fr -> @lists.crans.org
@## Filtrage au MAIL FROM @virtual_alias_maps = hash:/etc/postfix/virtual
@# Rejet si le domaine de l'envoyeur n'est pas dans un DNS
@smtpd_sender_restrictions=reject_unknown_sender_domain
@
@## Filtrage au RCPT TO
@# permet si le client est dans le reseau local
@smtpd_recipient_restrictions=permit_mynetworks
if main:
@# test contre cluebringer pour les quota / rate par utilisateur sasl
@# check_policy_service inet:127.0.0.1:10031
@# rejette les recipients sans nom de domaine totalement qualifie
add("reject_non_fqdn_recipient")
if main:
@# permet si le client est authentifie
add("permit_sasl_authenticated")
@# rejette les destinations non locales
add("reject_unauth_destination")
if public:
@# accepte si le champ contourneGreylist de la base est a OK
add("check_recipient_access " + db_file("sqlgrey"))
@# accepte si la greylist est d'accord
add("check_policy_service inet:127.0.0.1:2501")
@# jette le reste
@
if main:
@#smtpd_end_of_data_restrictions=check_policy_service inet:127.0.0.1:10031
@# Tailles maximales : 20Mo pour les msgs et 75 pour les mbox
message_size_limit = 20971520
mailbox_size_limit = 78643000
@# Obligation de specifier le nom de domaine complet
append_dot_mydomain = secondary
if main:
@#Ajout de cyrus pour l'authentification SMTP
smtpd_sasl_type = "cyrus"
@# Pieces jointes
mime_header_checks = "regexp:/etc/postfix/mime_header_checks"
@# Transport slow
@slow_destination_recipient_limit = 20
@slow_destination_concurrency_limit = 2
if not secondary:
@# +----------------------+
@# | Connexion de secours |
@# +----------------------+
@#POUR SECOURS
if not has("rescue-mode"):
out("#")
relayhost = "[ovh.adm.crans.org]:25"
if has("titanic"):
@relayhost=[ovh.adm.crans.org]:25
if main or secondary:
@# PostScreen configuration
@# Access List
@postscreen_access_list = cidr:/etc/postfix/postscreen_access.cidr
@## Tu es blacklisté ? VTFF
@postscreen_blacklist_action = drop
@ @
@# Bannière d'accueil multi valuée @# +-------------+
@postscreen_greet_banner = Bienvenue au crans, veuillez patienter quelques secondes. @# | TLS et SASL |
@## On droppe. @# +-------------+
@postscreen_greet_action = drop
@# RBL, le retour
@postscreen_dnsbl_sites =
@ zen.spamhaus.org*2
@ dnsbl.inps.de*2
@ b.barracudacentral.org*2
@ dnsbl-2.uceprotect.net*2
@ bl.spameatingmonkey.net
@ bl.spamcop.net
@ dnsbl.sorbs.net
@ psbl.surriel.com
@ bl.mailspike.net
@ swl.spamhaus.org*-2
@ list.dnswl.org=127.[0..255].[0..255].0*-1
@ list.dnswl.org=127.[0..255].[0..255].1*-2
@ list.dnswl.org=127.[0..255].[0..255].[2..255]*-3
@ @
@# Score >= 4 ? Bye bye @# TLS pour la reception
@postscreen_dnsbl_threshold = 4 @smtpd_use_tls=yes
@postscreen_dnsbl_action = enforce @smtpd_tls_security_level=may
@smtpd_tls_cert_file=/etc/ssl/certs/smtp.pem
@smtpd_tls_key_file=/etc/ssl/private/smtp.pem
@smtpd_tls_CAfile=/etc/ssl/certs/cacert.org.pem
@smtpd_tls_loglevel=0
@smtpd_tls_received_header=yes
@ @
@## Désactivé, pour éviter le fake greylisting de postscreen. @# On utilise aussi TLS pour envoyer les mails
@## Décommenter en cas de spam trop important. @smtp_use_tls=yes
@## Filtre utilisé par postfix, mis en amont via postscreen @smtp_tls_security_level=may
@#postscreen_non_smtp_command_enable = yes @smtp_tls_loglevel=1
@#postscreen_non_smtp_command_action = enforce @smtp_tls_cert_file=
@# @smtp_tls_key_file=
@#postscreen_bare_newline_enable = yes @smtp_tls_CAfile=/etc/ssl/certs/cacert.org.pem
@#postscreen_bare_newline_action = enforce @
@# @
@#postscreen_pipelining_enable = yes @# On cache les sessions TLS car elles sont couteuses. Il parait que btree est mieux que sdbm,
@#postscreen_pipelining_action = enforce @# a essayer quand on aura postfix > 2.2
@smtpd_tls_session_cache_database=btree:/var/lib/postfix/smtpd_tls_session_cache
@smtp_tls_session_cache_database=btree:/var/lib/postfix/smtp_tls_session_cache
@
@tls_random_source=dev:/dev/urandom
@
if main:
@# Auth que si tls pour eviter des pass en clair sur le reseau
@smtpd_tls_auth_only=yes
@# Authentification SASL pour relayer du mail
@smtpd_sasl_auth_enable=yes
@
@# +--------------------------+
@# | Filtrages et limitations |
@# +--------------------------+
@
if main:
@# Filtrage sur les sources de connexions
@smtpd_client_restrictions=permit_mynetworks
@
@# Reject the request when the client HELO or EHLO parameter has a bad hostname syntax.
@# reject_unknown_hostname value not recommended, because it may causes mail losting.
@# (for example: after paypal.com registration you don't receive activation mail! I've tried it.)
@#
@smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname
@## Limitation des messages envoyés par minute
@# On n'ignore que les messages venant d'adresses "protégées"
@smtpd_client_event_limit_exceptions = local_networks
if mx:
out(" " + tostring(adm_networks) + "\n")
@
@# On limite à 10 messages par minute
@smtpd_client_message_rate_limit = 10
@
@## Filtrage au MAIL FROM
@# Rejet si le domaine de l'envoyeur n'est pas dans un DNS
@smtpd_sender_restrictions = reject_unknown_sender_domain
@
@## Filtrage au RCPT TO
@# permet si le client est dans le reseau local
@smtpd_recipient_restrictions = permit_mynetworks
if main:
@# test contre cluebringer pour les quota / rate par utilisateur sasl
@# check_policy_service inet:127.0.0.1:10031
@# rejette les recipients sans nom de domaine totalement qualifie
@ reject_non_fqdn_recipient
if main:
@# permet si le client est authentifie
@ permit_sasl_authenticated
@# rejette les destinations non locales
@ reject_unauth_destination
if public:
@# accepte si le champ contourneGreylist de la base est a OK
@ permit_sasl_authenticated
out(" check_recipient_access " + tostring(db_file("sqlgrey")) + "\n")
@# accepte si la greylist est d'accord
@ check_policy_service inet:127.0.0.1:2501
@# jette le reste
@
if main:
@#smtpd_end_of_data_restrictions=check_policy_service inet:127.0.0.1:10031
@# Tailles maximales : 20Mo pour les msgs et 75 pour les mbox
@message_size_limit = 20971520
@mailbox_size_limit = 78643000
@# Obligation de specifier le nom de domaine complet
%append_dot_mydomain secondary
if main:
@#Ajout de cyrus pour l'authentification SMTP
@smtpd_sasl_type = cyrus
@# Pieces jointes
@mime_header_checks = regexp:/etc/postfix/mime_header_checks
@# Transport slow
@slow_destination_recipient_limit = 20
@slow_destination_concurrency_limit = 2
if not secondary:
@# +----------------------+
@# | Connexion de secours |
@# +----------------------+
@#POUR SECOURS
if not has("rescue-mode"):
out("#")
@relayhost = [ovh.adm.crans.org]:25
if has("titanic"):
@relayhost = [ovh.adm.crans.org]:25
if main or secondary:
@# PostScreen configuration
@# Access List
@postscreen_access_list = cidr:/etc/postfix/postscreen_access.cidr
@## Tu es blacklisté ? VTFF
@postscreen_blacklist_action = drop
@
@# Bannière d'accueil multi valuée
@postscreen_greet_banner = Bienvenue au crans, veuillez patienter quelques secondes.
@## On droppe.
@postscreen_greet_action = drop
@# RBL, le retour
@postscreen_dnsbl_sites =
@ zen.spamhaus.org*2
@ dnsbl.inps.de*2
@ b.barracudacentral.org*2
@ dnsbl-2.uceprotect.net*2
@ bl.spameatingmonkey.net
@ bl.spamcop.net
@ dnsbl.sorbs.net
@ psbl.surriel.com
@ bl.mailspike.net
@ swl.spamhaus.org*-2
@ list.dnswl.org=127.[0..255].[0..255].0*-1
@ list.dnswl.org=127.[0..255].[0..255].1*-2
@ list.dnswl.org=127.[0..255].[0..255].[2..255]*-3
@
@# Score >= 4 ? Bye bye
@postscreen_dnsbl_threshold = 4
@postscreen_dnsbl_action = enforce
@
@## Désactivé, pour éviter le fake greylisting de postscreen.
@## Décommenter en cas de spam trop important.
@## Filtre utilisé par postfix, mis en amont via postscreen
@#postscreen_non_smtp_command_enable = yes
@#postscreen_non_smtp_command_action = enforce
@#
@#postscreen_bare_newline_enable = yes
@#postscreen_bare_newline_action = enforce
@#
@#postscreen_pipelining_enable = yes
@#postscreen_pipelining_action = enforce