/etc/postfix/main.cf
.
mail.falcot.com
. Aquesta és l'única pregunta formulada per defecte, però la configuració a la qual condueix no és prou completa per a les necessitats de Falcot, per la qual cosa els administradors executen dpkg-reconfigure postfix
per tal de poder personalitzar més paràmetres.
localhost
, però el domini principal falcot.com
ha de ser afegit a mà. En general, aquesta pregunta s'ha de respondre normalment amb tots els noms de domini pels quals aquesta màquina hauria de servir com a servidor MX; en altres paraules, tots els noms de domini pels quals el DNS diu que aquesta màquina acceptarà el correu electrònic. Aquesta informació acaba a la variable mydestination
del fitxer de configuració principal de Postfix — /etc/postfix/main.cf
.
192.168.0.0/16
a la resposta per defecte. Si la pregunta no es fa, la variable rellevant en el fitxer de configuració és mynetworks
, com es veu a l'exemple següent.
procmail
. Aquesta eina permet als usuaris ordenar el seu correu electrònic entrant d'acord amb les regles emmagatzemades al seu fitxer ./.procmailrc
. Tant Postfix com Exim4 suggereixen procmail per defecte, però hi ha alternatives com ara maildrop o els filtres Sieve.
Exemple 11.1. Fitxer /etc/postfix/main.cf
inicial
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on # fresh installs. compatibility_level = 2 # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_security_level=may smtp_tls_CApath=/etc/ssl/certs smtp_tls_security_level=may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = mail.falcot.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = mail.falcot.com, falcot.com, localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/16 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all default_transport = smtp relay_transport = smtp inet_protocols = all myorigin = /etc/mailname
virtual_alias_domains
, i fent referència a un fitxer de correspondència d'adreces amb la variable virtual_alias_maps
.
virtual_alias_domains = falcotsbrand.com virtual_alias_maps = hash:/etc/postfix/virtual
/etc/postfix/virtual
descriu una correspondència amb una sintaxi bastant simple: cada línia conté dos camps separats per espais en blanc; el primer camp és el nom de l'àlies, el segon camp és una llista d'adreces de correu electrònic a on redirigeix. La sintaxi especial @domain.com
cobreix tots els àlies restants en un domini.
webmaster@falcotsbrand.com jean@falcot.com contact@falcotsbrand.com laure@falcot.com, sophie@falcot.com # L'àlies següent és genèric i abasta totes les adreces del domini # falcotsbrand.com que no s'explicitin en aquest fitxer. # Aquestes adreces redirigeixen el correu cap al mateix nom d'usuari # del domini falcot.com. @falcotsbrand.com @falcot.com
/etc/postfix/virtual
, la taula de postfix /etc/postfix/virtual.db
necessita ser actualitzada utilitzant l'ordre sudo postmap /etc/postfix/virtual
.
virtual_mailbox_domains
, i fer referència a un fitxer de correspondència de bústies a virtual_mailbox_maps
. El paràmetre virtual_mailbox_base
conté el directori sota el qual s'emmagatzemaran les bústies.
virtual_mailbox_domains = falcot.org virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_mailbox_base = /var/mail/vhosts
virtual_uid_maps
(i respectivament virtual_gid_maps
) fa referència al fitxer que conté la correspondència entre l'adreça de correu electrònic i l'usuari del sistema (i respectivament el grup) que «posseeix» la bústia corresponent. Per obtenir totes les bústies d'un mateix propietari/grup, la sintaxi static:5000
assigna un UID/GID fix (amb un valor de 5000 aquí).
/etc/postfix/vmailbox
és bastant senzilla: dos camps separats per espais en blanc. El primer camp és una adreça de correu electrònic dins d'un dels dominis virtuals, i el segon camp és la ubicació de la bústia associada (relativa al directori especificat a virtual_mailbox_base). Si el nom de la bústia acaba amb una barra (/
), els correus electrònics s'emmagatzemaran en el format maildir; en cas contrari, s'utilitzarà el format tradicional mbox. El format maildir utilitza tot un directori sencer per emmagatzemar una bústia, on cada missatge individual s'emmagatzema en un fitxer separat. En el format mbox, d'altra banda, tota la bústia s'emmagatzema en un sol fitxer, i cada línia que comença amb “From
” (From
seguit d'un espai) indica l'inici d'un nou missatge.
# El correu electrònic de Jean és desat com a maildir, # amb un fitxer per correu en un directori dedicat jean@falcot.org falcot.org/jean/ # El correu electrònic de Sophie és desat en un fitxer «mbox» # tradicional, amb tots els correus concanenats en un sol fitxer sophie@falcot.org falcot.org/sophie
soft_bounce = yes
. Al precedir una directiva de tipus rebuig amb warn_if_reject
només es generarà un missatge de registre en lloc de rebutjar la sol·licitud.
smtpd_client_restrictions
controla les màquines que tenen permès comunicar-se amb el servidor de correu electrònic.
Exemple 11.2. Restriccions basades en l'adreça del client
smtpd_client_restrictions = permit_mynetworks, warn_if_reject reject_unknown_client_hostname, check_client_access hash:/etc/postfix/access_clientip, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_reverse_client rhsbl.sorbs.net, reject_rbl_client zen.spamhaus.org, reject_rbl_client dnsbl.sorbs.net
permit_mynetworks
, utilitzada com a primera regla, accepta tots els correus electrònics procedents d'una màquina a la xarxa local (segons com es defineixi a la variable de configuraciómynetworks
).
warn_if_reject
la directiva reject_unknown_client
: aquest modificador converteix el rebuig en un simple avís desat als registres. Els administradors poden vigilar el nombre de missatges que es rebutjarien si la norma s'apliqués realment i prendre una decisió informada més tard si desitgen activar aquesta restricció.
check_client_access
directive allows the administrator to set up a blacklist and a whitelist of email servers, stored in the /etc/postfix/access_clientip
file. Servers in the whitelist are considered as trusted, and the emails coming from there therefore do not go through the following filtering rules.
HELO
(o EHLO
), seguida pel nom del servidor de correu electrònic que envia. Comprovar la validesa d'aquest nom pot ser interessant. Per aplicar plenament les restriccions llistades a smtpd_helo_restrictions
l'opció smtpd_helo_required
cal que estigui habilitada. En cas contrari, els clients podrien saltar-se les restriccions sense enviar cap comanda HELO
/EHLO
.
Exemple 11.3. Restriccions en el nom anunciat a EHLO
smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, warn_if_reject reject_unknown_helo_hostname, check_helo_access hash:/etc/postfix/access_helo, reject_rhsbl_helo multi.surbl.org
permit_mynetworks
permet que totes les màquines de la xarxa local es presentin lliurement. Això és important, perquè alguns programes de correu electrònic no respecten prou adequadament aquesta part del protocol SMTP, i poden presentar-se amb noms absurds.
reject_invalid_helo_hostname
rule rejects emails when the EHLO
announce lists a syntactically incorrect hostname. The reject_non_fqdn_helo_hostname
rule rejects messages when the announced hostname is not a fully-qualified domain name (including a domain name as well as a host name). The reject_unknown_helo_hostname
rule rejects messages if the announced name does not exist in the DNS. Since this last rule unfortunately leads to a lot of rejections, the administrators turned its effect to a simple warning with the warn_if_reject
modifier as a first step; they may decide to remove this modifier at a later stage, after auditing the results of this rule.
reject_rhsbl_helo
permet especificar una llista negra per comprovar el nom de l'amfitrió contra una RHSBL.
permit_mynetworks
com a primera regla té un efecte secundari interessant: les següents regles només s'apliquen als amfitrions fora de la xarxa local. Això permet rebutjar tots els amfitrions que s'anuncien com a part de la xarxa falcot.com
, per exemple afegint una línia falcot.com REJECT Tu no ets de la nostra xarxa!
a l'arxiu /etc/postfix/access_helo
.
MAIL FROM
del protocol SMTP; de nou, aquesta informació es pot validar de diverses maneres diferents.
Exemple 11.4. Comprovacions del remitent
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access_sender, reject_unknown_sender_domain, reject_unlisted_sender, reject_non_fqdn_sender, reject_rhsbl_sender rhsbl.sorbs.net
/etc/postfix/access_sender
assigna un tractament especial a alguns remitents. Això normalment significa tenir alguns remitents en una llista blanca o en una llista negra.
reject_unknown_sender_domain
rule requires a valid sender domain, since it is needed for a valid address. The reject_unlisted_sender
rule rejects local senders if the address does not exist; this prevents emails being sent from an invalid address in the falcot.com
domain, and messages emanating from joe.bloggs@falcot.com
are only accepted if such an address really exists.
reject_non_fqdn_sender
rebutja els correus electrònics que pretenen venir d'adreces sense un nom de domini plenament qualificat. A la pràctica, això significa rebutjar els correus electrònics procedents d'usuari@màquina
: l'adreça s'ha d'anunciar com usuari@màquina.exemple.com
o usuari@exemple.com
.
reject_rhsbl_sender
rebutja els remitents basats en un servei RHSBL (basat en domini).
RCPT TO
del protocol SMTP. Aquestes adreces també justifiquen validació, encara que això pugui ser menys rellevant que els controls realitzats en l'adreça del remitent.
Exemple 11.5. Comprovacions del destinatari
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_unlisted_recipient, reject_non_fqdn_recipient, permit
reject_unauth_destination
és la regla bàsica que requereix que els missatges externs siguin adreçats a nosaltres; els missatges enviats a una adreça no servida per aquest servidor són rebutjats. Sense aquesta regla, un servidor es converteix en un relé obert que permet als «spammers» enviar correus electrònics no sol·licitats; aquesta regla és, per tant, obligatòria, i s'inclourà preferiblement prop del començament de la llista, de manera que cap altra regla pot autoritzar el missatge abans que la seva destinació hagi estat verificada.
reject_unlisted_rerecipient
rebutja els missatges enviats a usuaris locals no existents, la qual cosa té sentit. Finalment, la regla reject_non_fqdn_recipient
rebutja adreces no completament qualificades; això fa que sigui impossible enviar un correu electrònic a jean
o jean@ordinador
, i requereix l'ús de l'adreça completa, com ara jean@ordinador.falcot.com
o jean@falcot.com
.
permit
al final no és necessària. Però pot ser útil al final d'una llista de restriccions per fer explícita la política per defecte.
DATA
de SMTP s'emet abans del contingut del missatge. No proporciona cap informació per se, a part d'anunciar què ve després. Tot i així pot sotmetre's a controls.
reject_unauth_pipelining
fan que el missatge sigui rebutjat si la part emissora envia una ordre abans que s'hagi tornat la resposta a l'ordre anterior. Això protegeix d'una optimització comuna usada pels robots dels «spammers», ja que normalment no els importen les respostes i només se centren en enviar tants correus com sigui possible en el menor temps possible.
RCPT TO
.
EHLO
, Postfix coneix el remitent i el destinatari quan anuncia el rebuig. Així pot registrar un missatge més explícit del que podria si la transacció s'hagués interromput des del principi. A més, hi ha una sèrie de clients SMTP que no esperen fallades en les ordres SMTP inicials, i aquests clients seran menys destorbats per aquest rebuig tardà.
smtpd_delay_reject
.
Exemple 11.7. Habilitació de filtres basats en el contingut
header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks
Exemple 11.8. Fitxer /etc/postfix/header_checks
d'exemple
/^X-Mailer: GOTO Sarbacane/ REJECT I fight spam (GOTO Sarbacane) /^Subject: *El vostre correu conté VIRUS / DESCARTAR la notificació de virus
GOTO Sarbacane
(un programari de correu electrònic massiu), el missatge és rebutjat. La segona expressió controla l'assumpte del missatge; si esmenta una notificació de virus, podem decidir no rebutjar el missatge, sinó descartar-lo immediatament.
check_policy_service
com a restricció addicional:
smtpd_recipient_restrictions = permit_mynetworks, [...] check_policy_service inet:127.0.0.1:10023
postgrey
daemon and send it information concerning the relevant message. On its side, Postgrey considers the IP address/sender/recipient triplet and checks in its database whether that same triplet has been seen recently. If so, Postgrey replies that the message should be accepted; if not, the reply indicates that the message should be temporarily rejected, and the triplet gets recorded in the database.
smtpd_rerestriction_classes
, i es defineixen de la mateixa manera que smtpd_recipient_restrictions
. La directiva check_recipient_access
defineix una taula que relaciona un destinatari concret amb un conjunt adequat de restriccions.
Exemple 11.9. Definició de les classes de restricció a main.cf
smtpd_restriction_classes = greylisting, aggressive, permissive greylisting = check_policy_service inet:127.0.0.1:10023 aggressive = reject_rbl_client sbl-xbl.spamhaus.org, check_policy_service inet:127.0.0.1:10023 permissive = permit smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_recipient_access hash:/etc/postfix/recipient_access
Exemple 11.10. El fitxer /etc/postfix/recipient_access
# Addresses no filtrades postmaster@falcot.com permissive support@falcot.com permissive sales-asia@falcot.com permissive # Filtratge agressiu per a alguns usuaris privilegiats joe@falcot.com aggressive # Regla especial per a l'administrador de la llista de correu sympa@falcot.com reject_unverified_sender # Per defecte ús de llista grisa falcot.com greylisting
clamav
from the homonymous package.
clamav-milter
. Un «milter» (abreviat de l'anglès «mail filter» o filtre de correu) és un programa de filtratge dissenyat especialment per interactuar amb servidors de correu electrònic. Un «milter» utilitza una interfície de programació d'aplicacions estàndard (API) que proporciona un rendiment molt millor que els filtres externs als servidors de correu electrònic. Aquests filtres van ser introduïts inicialment per Sendmail, però Postfix aviat en va seguir l'exemple.
dpkg-reconfigure clamav-milter
. Quan es demana per la “interfície de comunicació amb Sendmail”, responeu amb “inet:10002@127.0.0.1
”.
dpkg-reconfigure clamav-base
.
/etc/postfix/main.cf
:
# comprovació de virus amb clamav-milter smtpd_milters = inet:[127.0.0.1]:10002
systemctl reload postfix
perquè aquest canvi es tingui en compte.
include
directive it must have one.
Name: example.org Type: TXT TTL: 3600 Data: v=spf1 a mx -all
falcot.org
.
#
host -t TXT falcot.org
falcot.org descriptive text "v=spf1 ip4:199.127.61.96 +a +mx +ip4:206.221.184.234 +ip4:209.222.96.251 ~all"
postfix
pot comprovar el registre SPF dels correus entrants utilitzant el paquet postfix-policyd-spf-python, un agent “normatiu” escrit en Python. El fitxer /usr/share/doc/postfix-policyd-spf-python/README.Debian
descriu els passos necessaris per integrar l'agent amb postfix, així que no el repetirem aquí.
/etc/postfix-policyd-spf-python/policyd-spf.conf
, que està plenament documentat a policyd-spf.conf(5) i a /usr/share/doc/postfix-policyd-spf-python/policyd-spf.conf.commented.gz
. Els paràmetres de configuració principals són HELO_reject
i Mail_From_reject
, que configuren si els correus electrònics han de ser rebutjats (Fail
), o acceptats però amb una capçalera afegida (False
) si fallen les comprovacions. Aquest últim és útil sovint, quan el missatge és processat per un filtre de correu brossa.
Header_Type
ha de ser establert a AR
.
postfix
, afegeix una signatura digital associada amb el nom del domini a la capçalera dels correus sortints. La part receptora pot validar el cos del missatge i els camps de capçalera verificant la signatura contra una clau pública, que s'obté dels registres DNS del remitent.
opendkim-genkey -s SELECTOR -d DOMINI
. SELECTOR ha de ser un nom únic per a la clau. Pot ser tan simple com “correu” o la data de creació, si es planeja renovar les claus.
Exemple 11.11. Creació una clau privada per signar els correus de falcot.com
#
opendkim-genkey -s mail -d falcot.com -D /etc/dkimkeys
#
chown opendkim.opendkim /etc/dkimkeys/mail.*
/etc/dkimkeys/mail.private
i /etc/dkimkeys/mail.txt
i establirà la propietat adequadament. El primer fitxer conté la clau privada, i el segon la clau pública que s'ha d'afegir al DNS:
Name: mail._domainkey Type: TXT TTL: 3600 Data: "v=DKIM1; h=sha256; k=rsa; s=email; p=[...]"
-b 1024
per triar una mida de clau més petita. Si opendkim-testkey
té èxit, l'entrada s'ha configurat correctament. La sintaxi d'aquesta entrada s'explica aquí:
SOCKET
i RUNDIR
a /etc/default/opendkim
. Tingueu en compte que SOCKET
ha de ser accessible des de postfix
en el seu entorn «chroot». La configuració addicional es fa a /etc/opendkim.conf
. El següent és un extracte de configuració que s'assegura que el Domain
“falcot.com” i tots els subdominis (SubDomain
) estan signats pel Selector
“mail” i la clau privada (KeyFile
) /etc/dkimkeys/mail.private
. La “relaxada” Canonicalization
per a la capçalera i el cos tolera modificacions lleus (per exemple, per una llista de correu). El filtre s'executa tant en la signatura (“s”) com en la verificació (“v”) Mode
. Si una signatura no es valida (On-BadSignature
), el correu s'ha de posar en quarantena ("q").
[...] Domain falcot.com KeyFile /etc/dkimkeys/mail.private Selector mail [...] Canonicalization relaxed/relaxed Mode sv On-BadSignature q SubDomains yes [...] Socket inet:12345@localhost [...] UserID opendkim
KeyTable
), dominis (SigningTable
) i especificar amfitrions interns o de confiança (InternalHosts
, ExternalIgnoreList
), que poden enviar correu a través del servidor com un dels dominis de signatura sense credencials.
/etc/postfix/main.cf
fan que postfix
utilitzi el filtre:
milter_default_action = accept non_smtpd_milters = inet:localhost:12345 smtpd_milters = inet:localhost:12345
/etc/postfix/master.cf
.
/usr/share/doc/opendkim/
i a les pàgines del manual opendkim(8) i opendkim.conf(5).
_dmarc
i l'acció que s'ha de prendre quan els correus electrònics que contenen el vostre domini com a amfitrió d'enviament no passen la validació utilitzant DKIM i SPF.
#
host -t TXT _dmarc.gmail.com
_dmarc.gmail.com descriptive text "v=DMARC1; p=none; sp=quarantine; rua=mailto:mailauth-reports@google.com"
#
host -t TXT _dmarc.yahoo.com
_dmarc.yahoo.com descriptive text "v=DMARC1; p=reject; pct=100; rua=mailto:d@rua.agari.com; ruf=mailto:d@ruf.agari.com;"
rebutjar
tots els correus electrònics que fingeixen ser enviats des d'un compte de Yahoo però que manquen o fallen els controls DKIM i SPF. Google Mail (Gmail) propaga una política molt relaxada, en la qual aquests missatges del domini principal encara haurien de ser acceptats (p=none
). Per als subdominis s'han de marcar com a «spam» (sp=quarantine
). Les adreces donades a la clau rua
es poden utilitzar per enviar informes DMARC agregats. La sintaxi completa s'explica aquí:
postfix
també pot utilitzar aquesta informació. El paquet opendmarc conté el «milter» necessari. Com amb opendkim, SOCKET
i RUNDIR
s'han de decidir a /etc/default/opendmarc
(per a sòcols d'Unix haureu d'assegurar-vos que es troben dins del «chroot» del postfix). El fitxer de configuració /etc/opendmarc.conf
conté comentaris detallats i també s'explica a opendmarc.conf(5). Per defecte, els correus electrònics que no compleixin la validació DMARC no són rebutjats, sinó marcats, afegint un camp apropiat a la capçalera. Per canviar-ho, utilitzeu RejectFailures true
.
smtpd_milters
i non_smtpd_milters
. Si hem configurat els «milters» opendkim i opendmarc per funcionar en els ports 12345 i 54321, l'entrada de /etc/postfix/main.cf
seria així:
non_smtpd_milters = inet:localhost:12345,inet:localhost:54321 smtpd_milters = inet:localhost:12345,inet:localhost:54321
/etc/postfix/master.cf
.
saslpasswd2
, que agafa diversos paràmetres. L'opció -u
defineix el domini d'autenticació, que ha de coincidir amb el paràmetre smtpd_sasl_local_domain
a la configuració de Postfix. L'opció -c
permet crear un usuari, i -f
permet especificar el fitxer a utilitzar si la base de dades SASL necessita ser emmagatzemada en una ubicació diferent de la predeterminada (/etc/sasldb2
).
#
saslpasswd2 -u `postconf -h myhostname` -f /var/spool/postfix/etc/sasldb2 -c jean
[... type jean's password twice ...]
/etc/sasldb2
en un enllaç simbòlic que apunta a la base de dades utilitzada per Postfix, amb l'ordre ln -sf /var/spool/postfix/etc/sasldb2 /etc/sasldb2
.
postfix
ha de ser afegit al grup sasl
, de manera que pugui accedir a la base de dades del compte SASL. També es necessiten alguns paràmetres nous per permetre SASL, i el paràmetre smtpd_recipient_restrictions
s'ha de configurar per permetre que els clients autenticats amb SASL enviïn correus electrònics lliurement.
Exemple 11.12. Habilitar SASL a /etc/postfix/main.cf
# Activar l'autenticació amb SASL smtpd_sasl_auth_enable = yes # Defineix el domini d'autenticació SASL a usar smtpd_sasl_local_domain = $myhostname [...] # Afegir permit_sasl_authenticated abans de reject_unauth_destination # permet reencaminar el correu enviat pels usuaris autenticats amb SASL smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, [...]
/etc/postfix/master.cf
. Per desactivar l'autenticació al port 25 (servei smtpd
) afegiu la següent directiva:
smtp inet n - y - - smtpd [..] -o smtpd_sasl_auth_enable=no [..]
AUTH
(alguns clients de correu molt vells), la interoperabilitat amb ells es pot activar utilitzant la directiva broken_sasl_auth_clients
.