/etc/postfix/main.cf
.
mail.falcot.com
. Esta es la única pregunta que se hace de forma predeterminada, pero la configuración que genera no es lo suficientemente completa para las necesidades de Falcot, por lo que los administradores deben ejecutar dpkg-reconfigure
para poder personalizar más parámetros.
localhost
, pero el dominio principal falcot.com
tiene que ser agregado de forma manual. En general se deberían añadir todos los dominios para los que esta máquina debe ejercer como servidor MX; en otras palabras, todos los dominios para los cuales el DNS anuncie que esta máquina aceptará correo. Esta información acaba siendo escrita en la variable mydestination
del archivo de configuración principal de Postfix — /etc/postfix/main.cf
.
192.168.0.0/16
al valor predeterminado. Si no se realiza esta pregunta durante la instalación, la variable de configuración correspondiente es mynetworks
, tal y como puede verse en el ejemplo siguiente.
procmail
. Esta herramienta permite a los usuarios clasificar su correo en función de reglas contenidas en su archivo ~/.procmailrc
.
Ejemplo 11.1. Archivo /etc/postfix/main.cf
inicial
# Revise /usr/share/postfix/main.cf.dist para una versión completa # y con comentarios # Específico a Debian: determine el nombre del archivo cuya # primera línea será utilizada como nombre. El valor predeterminado # en Debian es /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # agragar .dominio es trabajo del MUA. append_dot_mydomain = no # Descomente la siguiente línea para generar advertencias sobre # «correo demorado» #delay_warning_time = 4h readme_directory = no # Parámetros TLS smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # Revise /usr/share/doc/postfix/TLS_README.gz en el paquete postfix-doc # para más información sobre cómo habilitar SSL en el cliente smtp. 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 myorigin = /etc/mailname 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_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all
virtual_alias_domains
y establezca un archivo de traducción de direcciones en la variable virtual_alias_maps
.
Ejemplo 11.2. Directivas a agregar en el archivo /etc/postfix/main.cf
virtual_alias_domains = falcotsbrand.com virtual_alias_maps = hash:/etc/postfix/virtual
/etc/postfix/virtual
describe la relación con una sintaxis muy sencilla: cada línea contiene dos campos separados por espacios en blanco; el primer campo es el nombre del alias y el segundo es una lista de las direcciones de correo a las que se redirigen. La sintaxis especial @dominio.com
abarca todos los alias pertenecientes a un dominio.
Ejemplo 11.3. Archivo /etc/postfix/virtual
de ejemplo
webmaster@falcotsbrand.com jean@falcot.com contact@falcotsbrand.com laure@falcot.com, sophie@falcot.com # El alias siguiente es genérico y abarca todas las direcciones # del dominio falcotsbrand.com que no están incluidas explícitamente # en este archivo. # Estas direcciones reenvían el correo al usuario con el mismo nombre # pero del dominio falcot.com @falcotsbrand.com @falcot.com
virtual_mailbox_domains
y hacer referencia a un archivo de asociación de casillas en virtual_mailbox_maps
. El parámetro virtual_mailbox_base
contiene el directorio en el que se almacenarán todas las casillas.
virtual_uid_maps
(o virtual_gid_maps
respectivamente) hace referencia al archivo que contiene la asociación entre las direcciones de correo y el usuario de sistema (o grupo respectivamente) «dueño» de la casilla correspondiente. Para lograr que todas las casillas pertenezcan al mismo usuario/grupo, la sintaxis static:5000
asigna un UID/GID fijo (aquí el valor 5000).
Ejemplo 11.4. Directivas a agregar en el archivo /etc/postfix/main.cf
virtual_mailbox_domains = falcot.org virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_mailbox_base = /var/mail/vhosts
/etc/postfix/vmailbox
es bastante directo: dos campos separados con espacios en blanco. El primer campo es una dirección de correo en alguno de los dominios virtuales y el segundo campo es la ubicación de la casilla asociada (relativa al directorio especificado en virtual_mailbox_base). Si el nombre de la casilla finaliza con una barra (/
), se almacenarán los correos en formato maildir; de lo contrario se utilizará el formato mbox tradicional. El formato maildir utiliza un directorio completo para almacenar una casilla, cada mensaje individual es almacenado en un archivo separado. Por el otro lado, en el formato mbox se almacena toda la casilla en un archivo y cada línea que comience con «From
(From
es seguido por un espacio) indica el comienzo de un nuevo mensaje.
Ejemplo 11.5. El archivo /etc/postfix/vmailbox
# Se almacena el correo de Jean como maildir, con # un archivo por correo en un directorio dedicado jean@falcot.org falcot.org/jean/ # Se almacena el correo de Sophie en un archivo # «mbox» tradicional con todos los correos # en un solo archivo sophie@falcot.org falcot.org/sophie
smtpd_client_restrictions
controla qué máquinas pueden comunicarse con el servidor de correo.
Ejemplo 11.6. Restricciones basadas en la dirección del cliente
smtpd_client_restrictions = permit_mynetworks, warn_if_reject reject_unknown_client, check_client_access hash:/etc/postfix/access_clientip, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client list.dsbl.org
permit_mynetworks
, como primera regla, acepta todos los correos que provienen de equipos en la red local (definida por la variable de configuración mynetworks).
warn_if_reject
antes de la directiva reject_unkown_client
: este modificado convierte el rechazo en una simple advertencia guardada en los registros. Los administradores pueden revisar la cantidad de mensajes que hubiesen sido rechazados si esta regla hubiese sido aplicada y luego tomar decisiones informadas si desean activarla.
/etc/postfix/access_clientip
. Se consideran confiables aquellos servidores en la lista blanca y, por lo tanto, sus correos no pasarán por las siguientes reglas de filtrado.
HELO
(o EHLO
) seguida del nombre del servidor que envía el correo; puede ser interesante validar este nombre.
Ejemplo 11.7. Restricciones en el nombre anunciado con EHLO
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, check_helo_access hash:/etc/postfix/access_helo, reject_non_fqdn_hostname, warn_if_reject reject_unknown_hostname
permit_my_networks
permite que todas las máquinas en la red local se presenten libremente. Esto es importante ya que algunos programas de correo no respetan esta parte del protocolo SMTP de forma suficientemente correcta y pueden presentarse a sí mismos con nombres sin sentido.
reject_invalid_hostname
rechaza los correos cuando el anuncio EHLO
enumere un nombre sintácticamente incorrecto. La regla reject_non_fqdn_hostname
rechaza mensajes cuando el nombre anunciado no es un nombre de dominio completamente calificado (incluye un nombre de dominio así como también el nombre del equipo). La regla reject_unkown_hostname
rechaza los mensajes si el nombre anunciado no existe en su DNS. Los administradores hicieron que los efectos de esta regla sean sólo una advertencia con el modificador warn_if_reject
debido a que, lamentablemente, genera demasiados rechazos. Esto es sólo un primer paso, pueden decidir eliminar el modificador en el futuro luego de analizar los resultados de esta regla.
permit_mynetworks
como la primera regla tiene un efecto secundario interesante: las reglas siguientes sólo serán aplicadas a los equipos fuera de la red local. Esto permite rechazar todos los equipos que se anuncien a sí mismos como parte de falcot.com
, por ejemplo agregando una línea falcot.com REJECT ¡No es parte de nuestra red!
en el archivo /etc/postfix/access_helo
.
MAIL FROM
del protocolo SMTP; nuevamente, puede validar esta información de varias formas.
Ejemplo 11.8. Verificación de remitente
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access_sender, reject_unknown_sender_domain, reject_unlisted_sender, reject_non_fqdn_sender
/etc/postfix/access_sender
asocia algún tratamiento especial a algunos remitentes. Esto generalmente significa enumerar algunos remitentes en una lista negra o blanca.
reject_unknown_sender_domain
requiere un remitente con dominio válido, ya que es necesario en una dirección válida. La regla reject_unlisted_sender
rechaza remitentes locales si la dirección no existe; esto evita que se envíen correos desde una dirección inválida en el dominio falcot.com
y los mensajes de joe.bloggs@falcot.com
sólo son aceptados si existe dicha dirección.
reject_non_fqdn_sender
rechaza los correos que dicen provenir de direcciones sin un nombre de dominio completamente calificado. En la práctica significa rechazar correos que provienen de usuario@equipo
: la dirección debe anunciarse como usuario@equipo.example.com
o usuario@example.com
.
RCPT TO
en el protocolo SMTP. Estas direcciones también requieren validación, aún si pueden ser menos relevantes que las verificaciones realizadas en la dirección del remitente.
Ejemplo 11.9. Verificación de receptor
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_unlisted_recipient, reject_non_fqdn_recipient
reject_unauth_destination
es la regla básica que requiere que los mensajes externos estén destinados a nosotros; se rechazarán los mensajes que sean enviados a una dirección que no sea gestionada por este servidor. Sin esta regla, el servidor se convierte en una forma abierta de reenvío que permite que los spammers envíen correos no solicitados; por lo tanto esta regla es obligatoria y preferentemente debe estar ubicada cerca del principio de la lista para evitar que otras reglas autoricen el mensaje antes que se verifique su destino.
reject_unlisted_recipient
rechaza los mensajes enviados a usuarios locales que no existen, lo que tiene sentido. Finalmente, la regla reject_non_fqdn_recipient
rechaza direcciones que no sean completamente calificadas; esto hace imposible enviar un correo a jean
o jean@equipo
y necesita, en cambio, utilizar la dirección completa como literal@equipo.falcot.com
o jean@falcot.com
.
DATA
en SMTP antes del contenido del mensaje. No provee ninguna información en sí misma además de anunciar lo que seguirá. Todavía puede ser sujeta a verificación.
reject_unauth_pipelining
causa que se rechace el mensaje si el remitente envía una orden antes que se envía la respuesta a la orden anterior. Esto previene una optimización común utilizada por los robots de spammers ya que no tienen el menor interés en las respuestas y sólo están interesados en enviar tantos correos como sea posible en el menor tiempo posible.
RCPT TO
.
EHLO
no válida, Postfix conoce el remitente y el receptor cuando anuncia un rechazo. Luego puede registrar un mensaje más explícito de lo que podría si se hubiera interrumpido la transacción al comienzo. Además, una cantidad de clientes SMTP no esperan fallos en las primeras órdenes de SMTP y estos clientes no se molestarán tanto por este rechazo tardío.
Ejemplo 11.11. Habilitación de filtros basados en contenido
header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks
Ejemplo 11.12. Archivo /etc/postfix/header_checks
de ejemplo
/^X-Mailer: GOTO Sarbacane/ REJECT I fight spam (GOTO Sarbacane) /^Subject: *Su email contiene VIRUS/ DESCARTAR notificación de virus
GOTO Sarbacane
(un software en correo masivo), el mensaje es rechazado. La segunda expresión revisa el asunto del mensaje; si menciona una notificación de virus podemos decidir no rechazar el mensaje sino, en cambio, descartarlo inmediatamente.
check_policy_service
como una restricción adicional:
smtpd_recipient_restrictions = permit_mynetworks, [...] check_policy_service inet:127.0.0.1:10023
postgrey
y le enviará la información del mensaje en cuestión. Por su parte, Postgrey considerará la terna compuesta por la dirección IP, el remitente y el receptor y revisará en su base de datos si ésta fue intentada recientemente. En caso que así sea, Postgrey responderá que el mensaje debe ser aceptado; de lo contrario, la respuesta indicará que el mensaje deberá ser rechazado temporalmente y agregará la terna a su base de datos.
smtpd_restriction_classes
de la misma forma que smtpd_recipient_restrictions
. La directiva check_recipient_access
define luego una tabla que asocia un receptor dado con el conjunto de restricciones apropiadas.
Ejemplo 11.13. Definición de clases de restricción en 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
Ejemplo 11.14. El archivo /etc/postfix/recipient_access
# Direcciones sin filtro postmaster@falcot.com permissive support@falcot.com permissive sales-asia@falcot.com permissive # Filtros agresivos para algunos usuarios privilegiados joe@falcot.com aggressive # Regla especial para el administrador de la lista de correos sympa@falcot.com reject_unverified_sender # Listas grises de forma predeterminada falcot.com greylisting
clamav
como su antivirus libre. El paquete principal es clamav, pero tambien instalaron algunos paquetes adicionales como arj, unzoo, unrar y lha ya que son necesarios para que el antivirus analice archivos adjuntos en alguno de estos formatos.
clamav-milter
. Un «milter» (apócope de «filtro de correo»: «mail filter») es un programa de filtrado diseñado especialmente para interactuar con servidores de correo. Un milter utiliza una interfaz de programación de aplicaciones (API: «Application Programming Interface») que provee un rendimiento mucho mejor que los filtros ajenos a los servidores de correo. Sendmail introdujo inicialmente a los milters, pero Postfix los implementó poco después.
dpkg-reconfigure clamav-milter
. Cuando se le pregunte por la «Interfaz de comunicación con Sendmail», responda «inet:10002@127.0.0.1
».
dpkg-reconfigure clamav-base
.
/etc/postfix/main.cf
:
# Revisión de virus con clamav-milter smtpd_milters = inet:[127.0.0.1]:10002
service postfix reload
para que se tenga en cuenta el cambio.
saslpasswd2
que toma varios parámetros. La opción -u
define el dominio de autenticación, que debe coincidir con el parámetro smtpd_sasl_local_domain
en la configuración de Postfix. La opción -c
permite crear un usuario y la opción -f
permite especificar el archivo a utilizar si necesita almacenar la base de datos SALS en una ubicación diferente a la predeterminada (/etc/sasldb2
).
#
saslpasswd2 -u `postconf -h myservidor` -f /var/spool/postfix/etc/sasldb2 -c jean
[... ingrese la contraseña de jean dos veces ...]
/etc/sasldb2
en un enlace simbólico que apunta a la base de datos utilizada por Postfix con ln -sf /var/spool/postfix/etc/sasldb2 /etc/sasldb2
.
postfix
al grupo sasl
para que pueda acceder a la base de datos SASL. También necesitará agregar algunos parámetros nuevos para activar SASL y necesita configurar el parámetro smtpd_recipient_restrictions
para permitir que los clientes autenticados por SASL puedan enviar correos libremente.
Ejemplo 11.15. Activación de SASL en /etc/postfix/main.cf
# Activar autenticación SASL smtpd_sasl_auth_enable = yes # Definir el dominio de autenticación SASL smtpd_sasl_local_domain = $myhostname [...] # Agregar permit_sasl_authenticated antes de reject_unauth_destination # permite reenviar correos enviados por usuarios autenticados por SASL smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, [...]