¡¡AVISO. Esta entrada es un borrador y puede contener errores técnicos y tipográficos!!
INSTALACIÓN O.S.
Debian lenny i386 'netinstall'
IP: 192.168.1.12
Hostname: mail.trustnone.es
ntp: Muy importante para el sistema de correo
Instalación del sistema base
Kernel 2.6
CONFIGURACIÓNES PREVIAS A NIVEL O.S.
apt-get install openssh-server
apt-get install ntp
Comprobar sincronización horaria
ps aux | grep ntp
date
Comprobar archivo hosts
mail:~# cat /etc/hosts
127.0.0.1 localhost
192.168.1.12 mail.trustnone.es mail
Comprobar conectividad a/desde Internet
Repositorios obligatorios ('/etc/apt/sources.list')
deb http://ftp.fr.debian.org/debian/ lenny main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ lenny main non-free contrib
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
Aplicar actualizaciones de seguridad:
apt-get update
apt-gte upgrade
MYSQL SERVER (5.0)
apt-get install mysql-server mysql-client
Usuario: root, contraseña: root
Asegurarse que el servicio arranca con el sistema
update-rc.d mysql defaults
Tunning MySQL
/etc/init.d/mysql stop
Sustituir el archivo "/etc/mysql/my.cnf" por el contenido de "/usr/share/doc/mysql-server-5.0/examples/my-medium.cnf.gz". Deja más memoria para caché y mejora rendimiento. Es una configuración de ejemplo hecha por los mantenedores de Debian que funciona muy bien.
Editar "/etc/mysql/my.cnf" para activar el motor "InnoDB":
[...]
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M <- Estos valores se deben ajustar de acuerdo a las características de la máquina
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size <- Estos valores se deben ajustar de acuerdo a las características de la máquina
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[...]
Editar "/etc/mysql/my.cnf" para activar el 'log' de consultas. Esto se vuelve a dejar igual al terminar, pero en configuración es muy util para saber qué se está consultando en la base de datos:
[...]
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
log = /var/log/mysql/mysql.log <- Archivo de log
#
# Error logging goes to syslog. This is a Debian improvement :)
#
# Here you can see queries with especially long duration <- Archivo de log
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
[...]
APACHE2 + PHP5
apt-get install apache2 php5 php5-mysql php5-imap
Por alguna razón, no carga correctamente el módulo php en la instalación. Se soluciona reiniciando 'apache'.
/etc/init.d/apache2 restart
Es muy buena idea habilitar las conexiones SSL. Ver anexo a final.
Comprobar que los scripts "php" se ejecutan correctamente.
POSTFIXADMIN (2.3)
Descargar la versión 2.3 de la web pfadmin: http://postfixadmin.sourceforge.net/
wget http://downloads.sourceforge.net/[...]/postfixadmin_2.3.tar.gz[...]
Descomprimir
tar xvfz postfixadmin_2.3.tar.gz
Mover a un lugar visible por el servidor web
mv postfixadmin-2.3 /var/www/postfixadmin
Cambiar propietario:grupo de los archivos a 'www-data'
chown -R www-data:www-data /var/www/postfixadmin/
Seguir las instrucciones de '/var/www/postfixadmin/INSTALL.TXT
Conectarse al gestor MySQL
mysql -u root -p
Crear una base de datos MySQL de nombre 'postfix' para el usuario 'postfix'
create database postfix;
create user 'postfix'@'localhost' IDENTIFIED BY 'postfix';
grant all privileges on `postfix`.* to 'postfix'@'localhost';
flush privileges;
Editar archivo de configuración '/var/www/postfixadmin/config.inc.php'
[...]
$CONF['configured'] = true;
[...]
# Este es el password de setup. Está 'hasheado'. Se puede obtener cargando el "setup.php" de pfadmin, generándolo y pegando aquí el resultado
$CONF['setup_password'] = 'a4dbfc3f2c8a1cfa40ff7ec75098aa5f:c9f36703be092127f59806137efc3e3039b4ddd5';
[...]
$CONF['postfix_admin_url'] = 'http://192.168.1.12/postfixadmin';
[...]
$CONF['default_language'] = 'es';
[...]
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';
[...]
$CONF['encrypt'] = 'md5crypt';
[...]
$CONF['domain_path'] = 'YES';
[...]
$CONF['domain_in_mailbox'] = 'NO';
[...]
$CONF['emailcheck_resolve_domain']='NO';
[...]
Editar el archivo de configuración '/var/www/postfixadmin/config.inc.php' para asignar correctamente todas las direcciones de correo de administración:
[...]
$CONF['admin_email'] = 'josem@trustnone.es';
[...]
'abuse' => 'josem@trustnone.es',
'hostmaster' => 'josem@trustnone.es',
'postmaster' => 'josem@trustnone.es',
'webmaster' => 'josem@trustnone.es'
[...]
Visitar: http://192.168.1.12/postfixadmin/setup.php
Generar el hash del setup password para ponerlo en en archivo config.inc.php
Comprobar que todo está OK
Visitar (de nuevo): http://192.168.1.12/postfixadmin/setup.php
Generar un administrador del sistema de correo. Es buena idea que sea un email que luego exista realmente
Borrar 'setup.php'
Visitar: http://192.168.1.12/postfixadmin
Acceder con el administrador creado antes y generar el primero dominio y usuario/s, coincidiendo con los del administrador de setup del paso anterior.
Comprobar que los registros se han añadido a las tablas de MySQL.
POSTFIX
Desinstalar el MTA que por defecto instala Debian; Exim4
apt-get remove --purge exim4 exim4-config exim4-daemon-light
El paquete postfix que incluye lenny no está preparado para soportar 'quotas' de usuario. Hay que parchearlo y compilarlo para que lo soporte
Parcheo/Compilación
Instalar el paquete original de postfix de lenny (solo se usará para hacer la configuración inicial, además de para saber que versión es y conseguir el parche específico
apt-get install postfix postfix-mysql
>Internet Site
>System mail name: mail.trustnone.es
Parar el demonio
/etc/init.d/postfix stop
Comprobar la versión que dispone lenny (2.5.5).
postconf -d | grep -i mail_version
Paquetes de desarrollo necesarios para la compilación y otras dependencias específicas para compilar postfix
apt-get install dpkg-dev
apt-get install debhelper po-debconf lsb-release libdb-dev libldap2-dev libpcre3-dev libmysqlclient15-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev hardening-wrapper
Descarga de los fuentes
cd /usr/src
apt-get source postfix
Descargar el parche correspondiente a la versión de postfix (2.5.5) de 'http://vda.sourceforge.net
wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
Descomprimir y parchear (desde /usr/src/)
gunzip postfix-2.5.5-vda-ng.patch.gz
cd postfix-2.5.5
patch -p1 < ../postfix-2.5.5-vda-ng.patch
Compilar
dpkg-buildpackage
Los paquetes .deb resultantes están en '/usr/src'.
Instalar 'postfix' y 'postfix-mysql'
cd /usr/src
dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb
Comprobar que 'uid' y 'gid' tienen en el sistema el usuario y grupo postfix. Esto se utilizará para que postfix le otorgue estos permisos a los mailboxes.
id postfix -> uid=104(postfix) gid=107(postfix)
Comprobar que la configuración actual de postfix es similar a la siguiente.
/etc/postfix/main.cf (ARCHIVO COMPLETO)
#CONFIGURACION GLOBAL GENERICA
smtpd_banner = $myhostname ESMTP $mail_name -POSTFIX-
biff = no
append_dot_mydomain = no
readme_directory = no
myhostname = mail.trustnone.es
mydomain = trustnone.es
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.trustnone.es, localhost.trustnone.es, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Configuración virtual-mysql para postfix
/etc/postfix/main.cf
[...]
#MYSQL VIRTUAL DOMAINS
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_gid_maps = static:107
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_minimum_uid = 104
virtual_transport = virtual
virtual_uid_maps = static:104
[...]
mkdir /etc/postfix/mysql
/etc/postfix/mysql/virtual_alias_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
/etc/postfix/mysql/virtual_domains_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
/etc/postfix/mysql/virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Crear directorio para los buzones y darle permisos
mkdir /home/vmail
chown postfix:postfix /home/vmail
chmod 700 /home/vmail
Reiniciar postfix
/etc/init.d/postfix restart
Comprobar configuración hasta aquí. Se debería poder conectar vía SMTP (puerto tcp:25) sin autentificación y enviar correos a los mailboxes de los dominios locales. También hacia el exterior, pero posíblemente ningún otro servidor SMTP quiera 'hablar' con este aún. Además, postfix deberá crear automáticamente el mailbox del usuario. ¡¡OJO!!, el sistema ahora es un 'OpenRelay'.
COURIER POP,IMAP
Instalación de paquetes necesarios
apt-get install courier-base courier-authlib-mysql courier-pop courier-imap
Create directories for web-based administration? -> No
Editar archivos de configuración
/etc/courier/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authuserdb authpam authpgsql authldap authmysql authcustom authpipe"
daemons=5
authdaemonvar=/var/run/courier/authdaemon
DEBUG_LOGIN=1
DEFAULTOPTIONS=""
LOGGEROPTS=""
/etc/courier/authmysqlrc
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 104
MYSQL_GID_FIELD 107
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/home/vmail'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
/etc/courier/pop3d
PIDFILE=/var/run/courier/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
POP3AUTH=""
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
POP3AUTH_TLS_ORIG="LOGIN PLAIN"
POP3_PROXY=0
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=YES
MAILDIRPATH=Maildir
/etc/courier/imapd
ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=20
PIDFILE=/var/run/courier/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_KEYWORDS=1
IMAP_ACL=1
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_MAILBOX_SANITY_CHECK=1
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/etc/courier/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=YES
MAILDIRPATH=Maildir
Reiniciar los servicios del 'courier'
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart
Asegurarse que los servicios arrancan al inicio
update-rc.d courier-authdaemon defaults
update-rc.d courier-pop defaults
update-rc.d courier-imap defaults
Comprobar que se puede conectar tanto vía IMAP (tcp:143) como POP3 (tcp:110) y obtener el correo del mailbox.
COURIER POPS, IMAPS (Servicios seguros de conexión a los servicios POP e IMAP)
La transmisión de datos se realiza cifrada mediante SSL. Para esto son necesarios certificados, pero 'apt' los creará automáticamente (uno para SPOP y otro para IMAPS). Después pueden ser sustituidos por otros firmados/autofirmados.
Instalación de paquetes para POPS
apt-get install courier-ssl courier-pop-ssl
Instalación de paquetes para IMAPS
apt-get install courier-imap-ssl
Asegurarse que los servicios seguros arrancan al inicio del sistema
update-rc.d courier-pop-ssl defaults
update-rc.d courier-imap-ssl defaults
El servicio IMAPS escucha por el puerto tcp:993
El servico POPS escucha por el puerto tcp:995
SASL-AUTH Autentificación SMTP
Instalación de paquetes
apt-get install libsasl2-2 sasl2-bin libsasl2-modules libsasl2-modules-sql
Configuración de 'saslauth' para que postfix pueda ver el servicio. Postfix corre en una jaula 'chroot' que cuelga de '/var/spool/postfix'.
/etc/init.d/saslauthd stop
rm -fr /var/run/saslauthd
mkdir -p /var/spool/postfix/var/run/saslauthd
chgrp sasl /var/spool/postfix/var/run/saslauthd
ln -s /var/spool/postfix/var/run/saslauthd /var/run
adduser postfix sasl
Editar los archivos de configuración
/etc/default/saslauthd
START=yes
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
/etc/postfix/sasl/smtpd.conf (Este archivo ha de ser creado Y PERMISOS)
pwcheck_method: saslauthd
mech_list: login plain cram-md5 digest-md5
auxprop_plugin: sql
sql_engine:mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_database: postfix
sql_passwd: postfix
sql_select: select password from mailbox where username = '%u@%r'
log_level: 10
/etc/postfix/main.cf
[...]
#SASL auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
[...]
Instalar la extensión 'mysql' de 'pam'. La autentificación pasa por 'pam'
apt-get install libpam-mysql
Editar '/etc/pam.d/smtp'
auth required pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 md5=1
account sufficient pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password cryp=1 md5=1
Reiniciar servicios
/etc/init.d/saslauthd restart
/etc/init.d/postfix restart
Comprobar que 'saslauth' arranca al inicio del sistema
update-rc.d saslauthd defaults
El nombre de usuario para la autentificación es la dirección completa de correo electrónico
POSTFIX TLS - SMTPD. Permite que las conexiones de clientes 'smtp' con el servidor estén cifradas. Permitirá conectarse con o sin TLS, a elección del cliente.
Utiliza un certificado. Se puede generar uno firmado/autofirmado o utilizar alguno de los que ya están en el sistema, con el 'snakeoil'
Editar /etc/postfix/main.cf
[...]
#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
[...]
Reiniciar 'postfix'
/etc/init.d/postfix restart
QUOTAs. Previamente se ha parcheado/recompilado 'postfix' para que soporte quotas
Instalar 'maildrop'. Se encarga de actualizar el archivo 'maildirsize' desde la BD
apt-get install maildrop
Configurar 'postfixadmin' para que gestione las quotas en la base de datos
/var/www/postfixadmin/config.inc.php
[...]
$CONF['quota_multiplier'] = '1024000'; <- Medida por defecto (1MB)
$CONF['maxquota'] = '10'; <- Maximo 10 MB
$CONF['quota'] = 'YES';
[...]
Configurar quotas a los usuarios en 'postfixadmin' (0 = ilimitado). Confirmar que los datos se actualizan en la tabla ('mailbox')
Configurar postfix para que lea las quotas de la DB
/etc/postfix/mysql/virtual_mailbox_quota.cf
user = postfix
password = postfix
dbname = postfix
hosts = 127.0.0.1
query = SELECT quota FROM mailbox WHERE username='%s'
/etc/postfix/main.cf
#QUOTA
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/virtual_mailbox_quota.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "The user you are trying to reach is over quota."
virtual_overquota_bounce = yes
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_maildir_extended = yes
Ahora 'postfix' lee las quotas en la base de datos y las actualiza en el archivo 'maildirsize' del buzón.
TUNNING POSTFIX: Algunas opciones de configuración a tener en cuenta
/etc/postfix/main.cf
[...]
#TUNNING
#Tamaño máximo de mensaje con 'envoltorios' (10MB)
message_size_limit = 10240000
#Timeout
#Número máximo de procesos postfix
default_process_limit = 20
#Tiempos de reintento (reprocesado de cola)
queue_run_delay = 300s
#Validez de mensajes en cola (Tiempo máximo que se intenta entregar un msg)
maximal_queue_lifetime = 2d
bounce_queue_lifetime = 2d
#Ratios de envío
#Número máximo de conexiones simultaneas de un cliente smtp
smtpd_client_connection_count_limit = 50
#Número máximo de conexiones de un cliente por unidad de tiempo (60s)
smtpd_client_connection_rate_limit = 150
#Número máximo de mensajes de un cliente por unidad de tiempo (60s)
smtpd_client_message_rate_limit = 100
#Número máximo de destinatarios que puede contener un mensaje
smtpd_recipient_limit = 1000
[...]
VACATION - AUTORESPONDER
No es muy recomendable, porque reponderá a los correos de SPAM, confirmando que somos una dirección válida, aunque para correo del trabajo empresas es muy util.
La característica viene incluida en 'postfixadmin'. Se puede seguir la guia INSTALL
Instalación de software necesario:
apt-get install libdbi-perl libdbd-mysql-perl libmail-sendmail-perl libemail-valid-perl libmime-perl libmime-charset-perl libmime-encwords-perl libmail-sender-perl liblog-log4perl-perl
Creación del usuario/grupo vacation
addgroup --gid 65501 vacation
useradd -c "Virtual Vacation" -d /var/spool/vacation -u 65501 -g 65501 -s /sbin/false vacation
Localización/configuración del script "vacation.pl". Este script es el que hace "la magia"
mkdir /var/spool//vacation
cp /var/www/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/
chown -R vacation:vacation /var/spool/vacation/
chmod 755 /var/spool/vacation
chmod 711 /var/spool/vacation/vacation.pl
chmod -x /var/spool/vacation/vacation.pl
/var/spool/vacation/vacation.pl
[...]
# db_type - uncomment one of these
#our $db_type = 'Pg';
our $db_type = 'mysql';
[...]
# connection details
our $db_username = 'postfix';
our $db_password = 'postfix';
our $db_name = 'postfix';
[...]
our $vacation_domain = 'autoreply.trustnone.es'; "RECORDAR ESTO"
[...]
/etc/postfix/transport (El archivo debe ser creado)
autoreply.trustnone.es vacation:
postmap /etc/postfix/transport
/etc/postfix/master.cf:
vacation unix - n n - - pipe
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}
/etc/postfix/main.cf
#VACATION
transport_maps = hash:/etc/postfix/transport
vacation_destination_recipient_limit = 1
/var/www/postfixadmin/config.inc.php
[...]
$CONF['vacation'] = 'YES';
[...]
$CONF['vacation_domain'] = 'autoreply.trustnone.es';
[...]
$CONF['vacation_control'] ='YES';
[...]
$CONF['vacation_control_admin'] = 'YES';
[...]
LISTAS NEGRAS DE REMITENTES - BLACK LISTs ( de INTERNET)
Internet dispone de algunos listados de IPs y remitentes "malignos" que podemos utilizar para bloquearlos en nuestro servidor. Se presupone que el uso de estas listas negras puede evitar hasta un 70% de SPAM.
Los más interesantes son "spamcop" y "spamhaus". Para que postfix compruebe en ellos si la IP del remitente es "oscura", se edita la entrada "smtpd_recipient_restrictions" de esta forma:
/etc/postfix/main.cf
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org, <- Linea de blacklist
reject_rbl_client bl.spamcop.net <- Linea de blacklist
[...]
Las lineas de listas negras deben ir al final o lo más al final posible. Siempre después de "permit_sasl_authenticated"
LISTAS NEGRAS DE REMITENTES - BLACK LISTs (LOCALES)
Si deseamos bloquear ciertos remitentes que no aparecen en las listas negras de SPAM.
Crear un archivo de texto con los remitentes/IPs que se desea bloquear
/etc/postfix/black_list_senders
[...]
spammer@domain.tld REJECT <- Entre ambos campos debe ir un tabulador
[...]
80.50.22.0 REJECT
[...]
Mapear el archivo:
postmap /etc/postfix/black_list_senders
Añadir la restricción a la entrada "smtpd_recipient_restrictions" de esta forma:
/etc/postfix/main.cf
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
[...]
check_sender_access hash:/etc/postfix/black_list_senders <- La entrada debe ir lo más al final posible
[...]
Cada vez que un nuevo "remitente" se añade al archivo "black_list_senders" se debe ejecutar el mapeo del archivo para que postfix lo tenga en cuenta:
postmap /etc/postfix/black_list_senders
COMPROBACIÓN DEL REGISTRO 'SPF' DEL SERVIDOR REMOTO
Postfix no implementa nativamente la comprobación SPF, pero se pueden utilizar plugins hechos por terceros.
Descargar de "http://openspf.org" el "appliance": postfix-policyd.spf-perl. Existen otros escritos para otros MTA y en otros lenguajes.
wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.007.tar.gz
Descomprimir/desempaquetar
tar xvfz postfix-policyd-spf-perl-2.007.tar.gz
Copiar "./postfix-policyd-spf-perl-2.007/postfix-policyd-spf-perl" en "/usr/lib/postfix"
cp postfix-policyd-spf-perl-2.007/postfix-policyd-spf-perl /usr/lib/postfix
Añadir el nuevo servicio a "/etc/postfix/master.cf"
/etc/postfix/master.cf
[...]
policy unix - n n - 0 spawn
user=nobody argv=/usr/local/lib/policyd-spf-perl
[...]
Añadir la política a la entrada "smtpd_recipient_restrictions" de esta forma:
/etc/postfix/main.cf
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
[...]
reject_unauth_destination,
check_policy_service unix:private/policy <- Debe ir después de "reject_unauth_destination"
[...]
Añadir un límite al tiempo de espera para la política
/etc/postfix/main.cf
[...]
policy_time_limit = 3600,
[...]
COMPROBACIÓN DE LA RESOLUCIÓN INVERSA DEL SERVIDOR REMOTO
En la actualidad la mayoría de servidores de correo en Internet hacen esta comprobación, que permite retener un gran número de correos SPAM
Se activa añadiendo una nueva linea a la entrada "smtpd_recipient_restrictions" de esta forma:
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_unknown_reverse_client_hostname, <- Linea de comprobación de rDNS
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net
[...]
AMAVISD-NEW + SPAMASSASSIN + CLAMAV
¿Qué queremos que suceda con el spam y los virus?
Los correos con virus no deberían llegar a ningún mailbox. Deben pasar a la carpeta de cuarentena y el 'postmaster' o el destinatario original recibir una notificación
Los correos considerados SPAM deben ir a parar a un 'folder' especial llamdo 'SPAM'.
Instalación de software:
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop rar unrar lha arj ripole cabextract pax tnef
El servicio AMAVISD-NEW escucha en el puerto 'tcp:10024'. Comprobarlo: "netstat -an | grep 10024" y asegurarse de que se inicia con el arranque del sistema
Añadir el usuario 'clamav' al grupo 'amavis'
adduser clamav amavis
Enlazar 'postfix' con 'amavisd'.
Crear los servicios en 'master.cf' añadiendo las entradas:
/etc/postfix/master.cf
[...]
# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
[...]
Especificar en 'main.cf' que los correos se envíen primero a 'amavis'
/etc/postfix/main.cf
[...]
content_filter = scan:127.0.0.1:10024
receive_override_options = no_address_mappings
[...]
Reiniciar 'postfix'
/etc/init.d/postfix restart
Ahora los correos ya pasan por "amavis", pero por defecto no hace ningún test sobre el mensaje
Activar filtro antivirus
/etc/amavis/conf.d/15-content_filter_mode <- Eliminar los comentarios de las siguientes lineas.
[...]
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
[...]
Activar filtro de SPAM
/etc/amavis/conf.d/15-content_filter_mode <- Eliminar los comentarios de las siguientes lineas.
[...]
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
[...]
Para que SpamAssassin reescriba el "subject" de los correos, debe reconocer los dominios locales como tales. Para ello hay que definir la variable '@local_domains_maps' para que contenga todos los dominios locales que el servidor maneja. Como son varios y pueden variar, definimos la variable como '@local_domains_maps = (1)' en el archivo:
/etc/amavis/conf.d/20-debian_defaults
[...]
@local_domains_maps = (1)
[...]
Si queremos que los correos detectados como SPAM sean marcados en el subject, definir las variables:
/etc/amavis/conf.d/20-debian_defaults
[...]
$sa_spam_subject_tag = '*SPAM*> ';
[...]
$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
[...]
Indicar a "Amavis" que el correo llegue al destino (aunque marcado), ya que por defecto lo devuelve
/etc/amavis/conf.d/20-debian_defaults
[...]
#$final_spam_destiny = D_BOUNCE; <- Esto es lo que había originalmente.
$final_spam_destiny = D_PASS; <- Este el el comportamiento que queremos
[...]
Poner los correos con virus en un directorio de cuarentena y notificar al administrador del sistema que se ha recibido un virus
/etc/amavis/conf.d/20-debian_defaults
[...]
$mailfrom_notify_admin = 'AMAVIS\@trustnone.es'; <- Remitentes de los correos de notificación que envia AMAVIS
$mailfrom_notify_recip = 'AMAVIS\@trustnone.es'; <- Remitentes de los correos de notificación que envia AMAVIS
$mailfrom_notify_spamadmin = 'AMAVIS\@trustnone.es'; <- Remitentes de los correos de notificación que envia AMAVIS
[...]
$QUARANTINEDIR = "$MYHOME/virusmails"; <- Directorio de cuarentena: "/var/lib/amavis/virusmails". Debería ser algo separado que se pueda controlar.
[...]
$virus_admin = 'josem\@trustnone.es <- A quien se envían las notificaciones de que se ha recibido VIRUS
[...]
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine) <- El correo no llegará al destinatario
[...]
$X_HEADER_LINE = "Scanned with ClamAV-AmavisNew at $mydomain"; <- Linea que aparecerá en el encabezamiento del correo
[...]
¡OJO!. Los correos en cuarentena no se eliminan automaticamente. Se debe escribir un script que se ejecute automáticamente y controle que el directorio de cuarentena no bloquee el FS.
Reiniciar todos los servicios
/etc/init.d/clamav-daemon restart
/etc/init.d/amavis restart
Mensaje de prueba SPAM
Se puede enviar un correo que contenga la cadena:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Una regla específica de SPAMASSASSIN debería reconocerla para marcar el correo como SPAM a modo de prueba
Mensaje de prueba VIRUS
Se puede descargar un archivo de prueba desde: http://www.eicar.org/anti_virus_test_file.htm
El archivo se puede adjuntar a un correo para comprobar que el sistema lo detecta como VIRUS y lo pone en cuarentena, además de avisar al administrador.
Actualizació nde la base de datos de SpamAssassin
Para actualizar desde Internet
sa-update
/etc/init.d/amavis restart
No se ejecuta automáticamente, de forma que se debe añadir una linea al 'crontab'
Actualización de la base de datos de Virus para ClamAV
Clamav utiliza el servicio "freshclam" que se encarga de actualizar la base de datos de virus desde Internet (cada hora). Comprobar que está ejecutándose y que arranca al inicio.
El archivo de configuración de "freshclam" donde se configura esto es: "/etc/clamav/freshclam.conf"
El servicio deja un log en "/var/log/clamav/freshclam.log"
El proceso es automático
SQUIRRELMAIL
Descargar el paquete de squirrelmail (Last Release is 1.4.19)
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fprdownloads.sourceforge.net%2Fsquirrelmail%2Fsquirrelmail-1.4.19.tar.gz
tar xvfz squirrelmail-1.4.19.tar.gz
mv squirrelmail-1.4.19 /var/www/squirrelmail
chown -R www-data:www-data /var/www/squirrelmail
Ejecutar el script de configuración
cd /var/www/squirrelmail
./configure
[...]
Comprobar la configuración: https://IPMAILSERVER/squirrelmail/src/configtest.php
Acceder al webmail: http://IPMAILSERVER/squirrelmail
Plugins y herramientas insteresantes; descargables desde la web de 'squirrelmail' y fáciles de instalar
compatibility: Necesario para instalar otros módulos
check_quota: Muestra la cuota de buzón asignada/ocupada
html_mail: Permite escribir mensajes en HTML con 'fckeditor'
calendar: Incluido en SQM
jsclock: Hora mediante un JavaScript
timeout_user: Desconecta la sesión después de un tiempo (configurable) de inactividad.
Idiomas internacionales (es_ES). Ojo; para que funcione la traducción hay que cambiar todo a utf-8. Ver este enlace:
http://www.ubuntu-es.org/?q=node/33800
ROUNDCUBEMAIL
Descargar paquete de RoundCubeMail (Last Release is 0.3.1)
wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.3.1/roundcubemail-0.3.1.tar.gz?use_mirror=surfnet
tar xvfz roundcubemail-0.3.1.tar.gz
mv roundcubemail-0.3.1 /var/www/roundcubemail
Crear una base de datos en MySQL para la aplicación
mysql -u root -p
create database roundcubemail;
create user 'roundcubemail'@'localhost' IDENTIFIED BY 'roundcubemail';
grant all privileges on `roundcubemail`.* to 'roundcubemail'@'localhost';
flush privileges;
Ejecutar el instalador
https://IPMAILSERVER/roundcubemail/installer/
APENDICE I: Configurar SSL en Debian Lenny
Activar módulo 'ssl' de apache2
a2enmod ssl
/etc/init.d/apache2 restart
Activar 'default-ssl' site
a2ensite default-ssl
/etc/init.d/apache2 reload
En este momento el servidor escucha tanto por el puerto http:80 como por el https:443
Para hacer que las peticiones 'http:80' se redirijan a 'https:443'
a2enmod rewrite
/etc/apache2/sites-available/default
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*) https://192.168.1.11
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
[...]
APENDICE II: Archivos de Log más importantes:
/var/log/mail.info -> Log general de todo el sistema de correo. Por defecto, todos los mensajes llegarán aquí
/var/log/mail.err -> Errores en postfix
/var/log/mail.warn -> Avisos
/var/log/clamav/clamav.log -> Log del antivirus
/var/log/clamav/freshclam.log -> Log del actualizador del antivirus
APENDICE III: "Maildrop y filtros maildroprc"
Se desea que los correos marcados como Spam por Amavis lleguen a una carpeta IMAP especial llamada SPAM, que además deberá crearse automáticamente en caso de que no exista.
Instalar "Maildrop" en caso de que no estuviera instalado.
apt-get install maildrop
Crear un usuario y un grupo "vmail" que será el que ahora posea los "maildirs". Especificar 'uid' y 'gid' cualquiera libre y recordarlo.
groupadd vmail -g 6060
useradd vmail -u 6060 -g 6060
Comprobar que el usuario 'vmail' pertenece al grupo 'vmail'
id vmail
Editar el servicio 'maildrop' en 'master.cf'
/etc/postfix/master.cf (ORIGINAL)
[...]
#maildrop unix - n n - - pipe
# flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
[...]
/etc/postfix/master.cf (MODIFICADO)
[...]
maildrop unix - n n - - pipe
flags=ODRhu user=vmail argv=/usr/bin/maildrop -w 90 -d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop}
[...]
El directorio socket de "saslauth" debe ser 777
chmod 777 /var/run/courier/authdaemon/
Reconfigurar postfix para que la entrega final de los correos la realice 'maildrop' en lugar de 'virtual'. Se modifican varias cosas del archivo 'main.cf' original
/etc/postfix/main.cf (ORIGINAL)
[...]
#MYSQL
virtual_transport = virtual
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_uid_maps = static:104
virtual_gid_maps = static:107
virtual_minimum_uid = 104
virtual_mailbox_base = /home/vmail
[...]
/etc/postfix/main.cf (MODIFICADO)
[...]
#MYSQL VIRTUAL DOMAINS
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_gid_maps = static:6060
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_minimum_uid = 6060
virtual_transport = maildrop
virtual_uid_maps = static:6060
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
[...]
Reconfigurar permisos de los buzones:
chown -R vmail:vmail /home/vmail
chmod -R 700 /home/vmail
Reconfigurar 'saslauthdaemon'
/etc/courier/authmysqlrc
[...]
MYSQL_UID_FIELD 6060 <- Originalmente estaban en 104
MYSQL_GID_FIELD 6060 <- Originalmente estaban en 107
[...]
Reiniciar todos los servicios. La experiencia dice que aquí sería buena idea un reinicio completo de la máquina
Comprobar que se puede acceder vía imap/smtp a los buzones y que los filtros de spam y correo funcionan (deberían funcionar)
Editar el archivo de configuración de maildrop: Es el que decide su modo de funcionamiento y donde se especifican las reglas de filtrado
/etc/maildroprc
HOME_DIR="/home/vmail"
logfile "/var/log/maildroprc.log"
EXTENSION="$1"
RECIPIENT=tolower("$2")
USER="$3"
HOST="$4"
SENDER="$5"
#Si es Spam, ponerlo en el folder de "SPAM"
if (/^X-Spam-Flag: YES*/)
{
log "Filtro Maildrop Activado /home/vmail/$DEFAULT/.SPAM"
to "/home/vmail/$DEFAULT/.SPAM"
}
Quotas (¡OJO!, con esto no es necesario el parcheo del paquete postfix):
Si "maildrop" está compilado para soportar cuotas, hará uso de ellas si hay un archivo "maildirsize"
Para comprobar si maildrop tiene soporte de quotas:
> maildrop -v
[...]
Maildir quota extension enabled.
[...]
NOTA: Los archivos de quota especifican esta con entradas tipo 1000000S , que significa 1000000 bytes o 1000C , que significa 1000 mensajes.
Se puede probar a añadir una cuota a un maildir ya creado con la orden de ejemplo (maildirmake -q 100000S /home/vmail/DOMAIN/MAILDIR). Los archivos 'maildirsize' deben pertenecer a 'vmail:vmail' y tener permisos 700. Crear uno y probar que funciona.
Crear el archivo de 'log' para que 'maildrop' pueda escribir
touch /var/log/maildroprc.log
chown vmail:vmail /var/log/maildroprc.log
Creacion de mailboxes desde postfixadmin
Instalar 'sudo'
apt-get install sudo
./config.inc.php
[...]
$CONF['mailbox_postcreation_script']='sudo -u vmail sh /usr/local/bin/postfixadmin-mailbox-postcreation.sh';
[...]
$CONF['mailbox_postedit_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postedit.sh';
[...]
/etc/sudoers
[...]
www-data ALL=(vmail) NOPASSWD: ALL ¿?¿?¿??¿?¿?¿?¿¿?¿?¿?
[...]
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin
/usr/local/bin/postfixadmin-mailbox-postcreation.sh
[...]
basedir=/home/vmail/
[...]
maildirmake -f SPAM "$maildir"
maildirmake -f Trash "$maildir"
maildirmake -f Sent "$maildir"
maildirmake -f Drafts "$maildir"
maildirmake -q $4S "$maildir"
echo "INBOX.Trash" >> $maildir/courierimapsubscribed
echo "INBOX.SPAM" >> $maildir/courierimapsubscribed
echo "INBOX.Sent" >> $maildir/courierimapsubscribed
echo "INBOX.Drafts" >> $maildir/courierimapsubscribed
exit 0
/usr/local/bin/postfixadmin-mailbox-postedit.sh <- Script completo
#!/bin/sh
basedir=/home/vmail
maildir="${basedir}/$3"
maildirmake -q $4S "$maildir"
exit 0
chmod +x /usr/local/bin/postfixadmin-mailbox-post*
NOTA: Es responsabilidad de los programas que acceden por imap modificar el archivo 'maildirsize' cuando crean o borran algo. De esta forma, cuando la bandeja esta llena y cerca del límite, al eliminar algo el archivo de cuota debe modificarse automáticamente para indicar los cambios.
Automatizar el envio de los buzones eliminados a un lugar de cuarentena antes de eliminarlo
Editar '/var/www/postfixadmin/config.php.inc
[...]
$CONF['mailbox_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';
[...]
$CONF['domain_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-domain-postdeletion.sh';
[...]
No es necesario generar los scripts, ya que vienen de muestra con 'postfixadmin'
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin
chmod +x /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
chmod +x /usr/local/bin/postfixadmin-domain-postdeletion.sh
Editar /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
[...]
# Change this to where you keep your virtual mail users' maildirs.
basedir=/home/vmail
# Change this to where you would like deleted maildirs to reside.
trashbase=/home/vmail/RETIRADOS
[...]
Editar /usr/local/bin/postfixadmin-domain-postdeletion.sh
[...]
# Change this to where you keep your virtual mail users' maildirs.
basedir=/home/vmail
# Change this to where you would like deleted maildirs to reside.
trashbase=/home/vmail/RETIRADOS
[...]
mkdir RETIRADOS
chown vmail:vmail /home/vmail/RETIRADOS/ <- Suponiendo que queremos enviarlos a este path
chmod 700 /home/vmail/RETIRADOS/
APENDICE IV: Estadísticas de correo
-MAILGRAPH-
apt-get install mailgraph
Por defecto utilizar los logs estandar de correo (/var/log/mail.log, etc) para saber lo que ha ocurrido con los correos.
Las estadísticas se pueden ver vía navegador desde: http://IPSERVIDOR/cgi-bin/mailgraph.cgi
-ISOQLOG-
apt-get install isoqlog
Tipo servidor -> Postfix
Salida -> /var/www/isoqlog
Dominios -> todos los que maneje postfix
Añadir linea de ejecución con 'isoqlog' a 'cron'
crontab -e
[...]
*/10 * * * * /usr/bin/isoqlog
[...]
Las estadísticas se pueden ver vía navegador desde: http://IPSERVIDOR/isoqlog
Se pueden añadir dominios a posteriori en el archivo '/etc/isoqlog/isoqlog.domains'
APENDICE V: Bloquear la actualización de un paquete
Util para evitar que una actualización actualice un paquete que hemos retocado a mano sin darnos cuenta.
Obtener una lista etiquetada de los paquetes instalados en el sistema y exportarla a un archivo:
dpkg --get-selections \* > /root/lista_packages.list
Editar el archivo modificando la etiqueta de los paquetes que se desea mantener a "hold":
/root/lista_packages.list <- ORIGINAL
[...]
portmap install
postfix install
postfix-mysql install
procps install
psmisc install
[...]
/root/lista_packages.list <- MODIFICADO PARA RETENER 'postfix' y 'postfix-mysql'
[...]
portmap install
postfix hold
postfix-mysql hold
procps install
psmisc install
[...]
Recargar el listado de paquetes con sus nuevos estados
dpkg --set-selections < /root/lista_packages.list
APENDICE VI: Creando un alias de 'root'
vi /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
clamav: root
root: admin@trustnone.es <- Para que los correos enviados a root se dirijan a una cuenta real en postfix
Ejecutar 'newaliases'
/usr/bin/newaliases
APENDICE VII: Aprendizaje de spamassasin.
Util. Plugin 'spam_buttons' de spamassasin.
Se pueden generar en cada maildir, dos carpetas, una llamada 'SPAM' y otra llamada 'NO-SPAM'. Un script se debe encargar de recorrer estas carpetas y actuar de la siguiente forma:
Si encuentra un mensaje en la carpeta 'SPAM' que no esté etiquetado como tal, significa que el usuario lo ha dejado ahí. Debe escanearse con "sa-learn --spam".
Si encuentra un mensaje en la carpeta 'NO-SPAM' que está etiquetado como SPAM, significa que el usuario lo ha dejado ahí. Debe escanearse como "sa-learn --ham" y pasarlo a la bandeja de entrada.
De esta forma el usuario puede refiltrar mensajes para que el sistema aprenda de ello.
El script se debe ejecutar cada determinado tiempo:
APENDICE VIII: Saber si estamos en listas de spam
Utilizar las herramientas "rblcheck" y "amispammer"
rblcheck
apt-get install rblcheck
rblcheck xxx.xxx.xxx.xxx
amispammer
apt-get install libmail-sender-perl
wget http://www.lorenzomartinez.es/projs/amispammer/amispammer_v2.zip
unzip amispammer_v2.zip
mv amISpammer.pl /usr/local/bin
perl /usr/local/bin/amISpammer.pl -i -v0 -f emailfrom@from.com -t emailto@to.com
También util: http://www.blacklistalert.org/
APENDICE IX: Benchmark
Comprobar que están instaladas las herramietnas "smtp-sink" y "smtp-source"
Para postfix
/etc/init.d/postfix stop
Poner "smtp-sink" a escuchar peticiones de correo:
smtp-sink -4c -u :25 1024
Bombardear el servicio desde local (10000 mensajes de 25KB cada uno con una concurrencia de 256)
smtp-source -4dNcm 10000 -s 256 -l 25000 -f foo@bar.com -t bar@foo.com localhost:25
Bombardear el servicio desde remoto. Es necesaria otra máquina en red que disponga de "smtp-source"
smtp-source -4dNcm 10000 -s 256 -l 25000 -f foo@bar.com -t bar@foo.com:25
APENDICE X: Configuración del DNS
Configurar correctamente el servidor DNS es fundamental para que el correo funcione.
Ejemplo de configuración de BIND9 para un dominio ficticio: "trustnone.es"
Registros MX: Intercambiadores de correo (con prioridades)
/etc/bind/trustnone.es
[...]
MX 10 mail1.trustnone.es.
MX 20 mail2.trustnone.es. ;
[...]
mail1 A 192.168.196.4
mail2 A 192.168.196.48
[...]
Registro spf: Intercambiadores MX certificados.
[...]
trustnone.com. IN TXT "v=spf1 a mx ~all"
[...]
Resolución inversa (DEBE ESTAR DELEGADA POR EL ISP)
[...]
[...]
APENDICE XII: SenderID Hotmail
Sender ID es un listado de redes/hosts autorizados que mantiene microsoft.
Para evitar problemas, además de establecer el registro SPF del dominio, se debe dar de alta en:
https://postmaster.live.com/snds/addnetwork.aspx
Web para solicitar información de porque nos están filtrando
https://support.msn.com/eform.aspx?productKey=edfsmsbl&ct=eformts
APENDICE XIII: MAILMAN (Listas de correo)
apt-get install mailman lynx
-> [*] Español
export LC_ALL=C <- definirlas en un profile al inicio
export LANG=C
check_perms -v -f (x2)
cd /var/lib/mailman
chown list:list *
editar "/etc/mailman/mm_cfg.py"
[...]
DEFAULT_EMAIL_HOST = 'mail.trustnone.es'
DEFAULT_URL_HOST = 'mail.trustnone.es'
[...]
DEFAULT_SERVER_LANGUAGE = 'es'
[...]
editar "/etc/postfix/master.cf"
[...]
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
[...]ASEGURARSE DE QUE ESTA LINEA ESTÁ TAL Y COMO APARECE AQUÍ. SOBRETODO LA PRIMERA 'n'
Configurar Apache2
/etc/apache2/mods-available/mailman.conf
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
Alias /pipermail/ /var/lib/mailman/archives/public/
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Alias /archives/ /var/lib/mailman/archives/public/
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
cd /etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/mailman.conf /etc/apache2/mods-enabled
/etc/init.d/apache2 restart
+ postfix
/etc/postfix/transport
[...]
lists.trustnone.es mailman:
[...]
cd /etc/postfix
postmap transport
Reiniciar todos los servicios afectados
/etc/init.d/apache2 restart
/etc/init.d/postfix restart
/etc/init.d/mailman restart
Crear la lista principal:
newlist mailman
-> Usuario administrador de la lista: "admin@trustnone.es"
-> Password para el admin: "admin"
Introducir todos los alias en la MySQL, tabla "alias".
mailman@trustnone.es mailman@lists.trustnone.es
mailman-admin@trustnone.es mailman-admin@lists.trustnone.es
mailman-bounces@trustnone.es mailman-bounces@lists.trustnone.es
mailman-confirm@trustnone.es mailman-confirm@lists.trustnone.es
mailman-join@trustnone.es mailman-join@lists.trustnone.es
mailman-leave@trustnone.es mailman-leave@lists.trustnone.es
mailman-owner@trustnone.es mailman-owner@lists.trustnone.es
mailman-request@trustnone.es mailman-request@lists.trustnone.es
mailman-subscribe@trustnone.es mailman-subscribe@lists.trustnone.es
mailman-unsubscribe@trustnone.es mailman-unsubscribe@lists.trustnone.es
Crear una lista operativa pública:
newlist pruebas
-> Usuario administrador de la lista: "admin@trustnone.es"
-> Password para el admin: "admin"
Introducir todos los alias en la MySQL, tabla "alias".
pruebas@trustnone.es pruebas@lists.trustnone.es
pruebas-admin@trustnone.es pruebas-admin@lists.trustnone.es
pruebas-bounces@trustnone.es pruebas-bounces@lists.trustnone.es
pruebas-confirm@trustnone.es pruebas-confirm@lists.trustnone.es
pruebas-join@trustnone.es pruebas-join@lists.trustnone.es
pruebas-leave@trustnone.es pruebas-leave@lists.trustnone.es
pruebas-owner@trustnone.es pruebas-owner@lists.trustnone.es
pruebas-request@trustnone.es pruebas-request@lists.trustnone.es
pruebas-subscribe@trustnone.es pruebas-subscribe@lists.trustnone.es
pruebas-unsubscribe@trustnone.es pruebas-unsubscribe@lists.trustnone.es
Web del administrador de la lista:
http://mail.trustnone.es/cgi-bin/mailman/admin/pruebas
Web de la propia lista:
http://mail.trustnone.es/cgi-bin/mailman/listinfo/pruebas
Archivos:
http://mail.trustnone.es/pipermail/pruebas/
VER: http://freemars.org/howto/mailman.html#ins
TODO:
Ojo, comprobar que se puede poner quota 0 (ilimitada) o 100MB
Borrado de correo antiguos
Borrado de la carpeta SPAM y Papelera
Agenda compartida LDAP
DomainKeys <-
listadmin <- mailman
open relay check -> http://www.cyberciti.biz/tips/test-mail-server-for-an-open-relay.html
Debian lenny i386 'netinstall'
IP: 192.168.1.12
Hostname: mail.trustnone.es
ntp: Muy importante para el sistema de correo
Instalación del sistema base
Kernel 2.6
CONFIGURACIÓNES PREVIAS A NIVEL O.S.
apt-get install openssh-server
apt-get install ntp
Comprobar sincronización horaria
ps aux | grep ntp
date
Comprobar archivo hosts
mail:~# cat /etc/hosts
127.0.0.1 localhost
192.168.1.12 mail.trustnone.es mail
Comprobar conectividad a/desde Internet
Repositorios obligatorios ('/etc/apt/sources.list')
deb http://ftp.fr.debian.org/debian/ lenny main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ lenny main non-free contrib
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
Aplicar actualizaciones de seguridad:
apt-get update
apt-gte upgrade
MYSQL SERVER (5.0)
apt-get install mysql-server mysql-client
Usuario: root, contraseña: root
Asegurarse que el servicio arranca con el sistema
update-rc.d mysql defaults
Tunning MySQL
/etc/init.d/mysql stop
Sustituir el archivo "/etc/mysql/my.cnf" por el contenido de "/usr/share/doc/mysql-server-5.0/examples/my-medium.cnf.gz". Deja más memoria para caché y mejora rendimiento. Es una configuración de ejemplo hecha por los mantenedores de Debian que funciona muy bien.
Editar "/etc/mysql/my.cnf" para activar el motor "InnoDB":
[...]
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M <- Estos valores se deben ajustar de acuerdo a las características de la máquina
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size <- Estos valores se deben ajustar de acuerdo a las características de la máquina
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[...]
Editar "/etc/mysql/my.cnf" para activar el 'log' de consultas. Esto se vuelve a dejar igual al terminar, pero en configuración es muy util para saber qué se está consultando en la base de datos:
[...]
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
log = /var/log/mysql/mysql.log <- Archivo de log
#
# Error logging goes to syslog. This is a Debian improvement :)
#
# Here you can see queries with especially long duration <- Archivo de log
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
[...]
APACHE2 + PHP5
apt-get install apache2 php5 php5-mysql php5-imap
Por alguna razón, no carga correctamente el módulo php en la instalación. Se soluciona reiniciando 'apache'.
/etc/init.d/apache2 restart
Es muy buena idea habilitar las conexiones SSL. Ver anexo a final.
Comprobar que los scripts "php" se ejecutan correctamente.
POSTFIXADMIN (2.3)
Descargar la versión 2.3 de la web pfadmin: http://postfixadmin.sourceforge.net/
wget http://downloads.sourceforge.net/[...]/postfixadmin_2.3.tar.gz[...]
Descomprimir
tar xvfz postfixadmin_2.3.tar.gz
Mover a un lugar visible por el servidor web
mv postfixadmin-2.3 /var/www/postfixadmin
Cambiar propietario:grupo de los archivos a 'www-data'
chown -R www-data:www-data /var/www/postfixadmin/
Seguir las instrucciones de '/var/www/postfixadmin/INSTALL.TXT
Conectarse al gestor MySQL
mysql -u root -p
Crear una base de datos MySQL de nombre 'postfix' para el usuario 'postfix'
create database postfix;
create user 'postfix'@'localhost' IDENTIFIED BY 'postfix';
grant all privileges on `postfix`.* to 'postfix'@'localhost';
flush privileges;
Editar archivo de configuración '/var/www/postfixadmin/config.inc.php'
[...]
$CONF['configured'] = true;
[...]
# Este es el password de setup. Está 'hasheado'. Se puede obtener cargando el "setup.php" de pfadmin, generándolo y pegando aquí el resultado
$CONF['setup_password'] = 'a4dbfc3f2c8a1cfa40ff7ec75098aa5f:c9f36703be092127f59806137efc3e3039b4ddd5';
[...]
$CONF['postfix_admin_url'] = 'http://192.168.1.12/postfixadmin';
[...]
$CONF['default_language'] = 'es';
[...]
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';
[...]
$CONF['encrypt'] = 'md5crypt';
[...]
$CONF['domain_path'] = 'YES';
[...]
$CONF['domain_in_mailbox'] = 'NO';
[...]
$CONF['emailcheck_resolve_domain']='NO';
[...]
Editar el archivo de configuración '/var/www/postfixadmin/config.inc.php' para asignar correctamente todas las direcciones de correo de administración:
[...]
$CONF['admin_email'] = 'josem@trustnone.es';
[...]
'abuse' => 'josem@trustnone.es',
'hostmaster' => 'josem@trustnone.es',
'postmaster' => 'josem@trustnone.es',
'webmaster' => 'josem@trustnone.es'
[...]
Visitar: http://192.168.1.12/postfixadmin/setup.php
Generar el hash del setup password para ponerlo en en archivo config.inc.php
Comprobar que todo está OK
Visitar (de nuevo): http://192.168.1.12/postfixadmin/setup.php
Generar un administrador del sistema de correo. Es buena idea que sea un email que luego exista realmente
Borrar 'setup.php'
Visitar: http://192.168.1.12/postfixadmin
Acceder con el administrador creado antes y generar el primero dominio y usuario/s, coincidiendo con los del administrador de setup del paso anterior.
Comprobar que los registros se han añadido a las tablas de MySQL.
POSTFIX
Desinstalar el MTA que por defecto instala Debian; Exim4
apt-get remove --purge exim4 exim4-config exim4-daemon-light
El paquete postfix que incluye lenny no está preparado para soportar 'quotas' de usuario. Hay que parchearlo y compilarlo para que lo soporte
Parcheo/Compilación
Instalar el paquete original de postfix de lenny (solo se usará para hacer la configuración inicial, además de para saber que versión es y conseguir el parche específico
apt-get install postfix postfix-mysql
>Internet Site
>System mail name: mail.trustnone.es
Parar el demonio
/etc/init.d/postfix stop
Comprobar la versión que dispone lenny (2.5.5).
postconf -d | grep -i mail_version
Paquetes de desarrollo necesarios para la compilación y otras dependencias específicas para compilar postfix
apt-get install dpkg-dev
apt-get install debhelper po-debconf lsb-release libdb-dev libldap2-dev libpcre3-dev libmysqlclient15-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev hardening-wrapper
Descarga de los fuentes
cd /usr/src
apt-get source postfix
Descargar el parche correspondiente a la versión de postfix (2.5.5) de 'http://vda.sourceforge.net
wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
Descomprimir y parchear (desde /usr/src/)
gunzip postfix-2.5.5-vda-ng.patch.gz
cd postfix-2.5.5
patch -p1 < ../postfix-2.5.5-vda-ng.patch
Compilar
dpkg-buildpackage
Los paquetes .deb resultantes están en '/usr/src'.
Instalar 'postfix' y 'postfix-mysql'
cd /usr/src
dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb
Comprobar que 'uid' y 'gid' tienen en el sistema el usuario y grupo postfix. Esto se utilizará para que postfix le otorgue estos permisos a los mailboxes.
id postfix -> uid=104(postfix) gid=107(postfix)
Comprobar que la configuración actual de postfix es similar a la siguiente.
/etc/postfix/main.cf (ARCHIVO COMPLETO)
#CONFIGURACION GLOBAL GENERICA
smtpd_banner = $myhostname ESMTP $mail_name -POSTFIX-
biff = no
append_dot_mydomain = no
readme_directory = no
myhostname = mail.trustnone.es
mydomain = trustnone.es
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.trustnone.es, localhost.trustnone.es, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Configuración virtual-mysql para postfix
/etc/postfix/main.cf
[...]
#MYSQL VIRTUAL DOMAINS
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_gid_maps = static:107
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_minimum_uid = 104
virtual_transport = virtual
virtual_uid_maps = static:104
[...]
mkdir /etc/postfix/mysql
/etc/postfix/mysql/virtual_alias_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
/etc/postfix/mysql/virtual_domains_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
/etc/postfix/mysql/virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Crear directorio para los buzones y darle permisos
mkdir /home/vmail
chown postfix:postfix /home/vmail
chmod 700 /home/vmail
Reiniciar postfix
/etc/init.d/postfix restart
Comprobar configuración hasta aquí. Se debería poder conectar vía SMTP (puerto tcp:25) sin autentificación y enviar correos a los mailboxes de los dominios locales. También hacia el exterior, pero posíblemente ningún otro servidor SMTP quiera 'hablar' con este aún. Además, postfix deberá crear automáticamente el mailbox del usuario. ¡¡OJO!!, el sistema ahora es un 'OpenRelay'.
COURIER POP,IMAP
Instalación de paquetes necesarios
apt-get install courier-base courier-authlib-mysql courier-pop courier-imap
Create directories for web-based administration? -> No
Editar archivos de configuración
/etc/courier/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authuserdb authpam authpgsql authldap authmysql authcustom authpipe"
daemons=5
authdaemonvar=/var/run/courier/authdaemon
DEBUG_LOGIN=1
DEFAULTOPTIONS=""
LOGGEROPTS=""
/etc/courier/authmysqlrc
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 104
MYSQL_GID_FIELD 107
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/home/vmail'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
/etc/courier/pop3d
PIDFILE=/var/run/courier/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
POP3AUTH=""
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
POP3AUTH_TLS_ORIG="LOGIN PLAIN"
POP3_PROXY=0
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=YES
MAILDIRPATH=Maildir
/etc/courier/imapd
ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=20
PIDFILE=/var/run/courier/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_KEYWORDS=1
IMAP_ACL=1
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_MAILBOX_SANITY_CHECK=1
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/etc/courier/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=YES
MAILDIRPATH=Maildir
Reiniciar los servicios del 'courier'
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart
Asegurarse que los servicios arrancan al inicio
update-rc.d courier-authdaemon defaults
update-rc.d courier-pop defaults
update-rc.d courier-imap defaults
Comprobar que se puede conectar tanto vía IMAP (tcp:143) como POP3 (tcp:110) y obtener el correo del mailbox.
COURIER POPS, IMAPS (Servicios seguros de conexión a los servicios POP e IMAP)
La transmisión de datos se realiza cifrada mediante SSL. Para esto son necesarios certificados, pero 'apt' los creará automáticamente (uno para SPOP y otro para IMAPS). Después pueden ser sustituidos por otros firmados/autofirmados.
Instalación de paquetes para POPS
apt-get install courier-ssl courier-pop-ssl
Instalación de paquetes para IMAPS
apt-get install courier-imap-ssl
Asegurarse que los servicios seguros arrancan al inicio del sistema
update-rc.d courier-pop-ssl defaults
update-rc.d courier-imap-ssl defaults
El servicio IMAPS escucha por el puerto tcp:993
El servico POPS escucha por el puerto tcp:995
SASL-AUTH Autentificación SMTP
Instalación de paquetes
apt-get install libsasl2-2 sasl2-bin libsasl2-modules libsasl2-modules-sql
Configuración de 'saslauth' para que postfix pueda ver el servicio. Postfix corre en una jaula 'chroot' que cuelga de '/var/spool/postfix'.
/etc/init.d/saslauthd stop
rm -fr /var/run/saslauthd
mkdir -p /var/spool/postfix/var/run/saslauthd
chgrp sasl /var/spool/postfix/var/run/saslauthd
ln -s /var/spool/postfix/var/run/saslauthd /var/run
adduser postfix sasl
Editar los archivos de configuración
/etc/default/saslauthd
START=yes
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
/etc/postfix/sasl/smtpd.conf (Este archivo ha de ser creado Y PERMISOS)
pwcheck_method: saslauthd
mech_list: login plain cram-md5 digest-md5
auxprop_plugin: sql
sql_engine:mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_database: postfix
sql_passwd: postfix
sql_select: select password from mailbox where username = '%u@%r'
log_level: 10
/etc/postfix/main.cf
[...]
#SASL auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
[...]
Instalar la extensión 'mysql' de 'pam'. La autentificación pasa por 'pam'
apt-get install libpam-mysql
Editar '/etc/pam.d/smtp'
auth required pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 md5=1
account sufficient pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password cryp=1 md5=1
Reiniciar servicios
/etc/init.d/saslauthd restart
/etc/init.d/postfix restart
Comprobar que 'saslauth' arranca al inicio del sistema
update-rc.d saslauthd defaults
El nombre de usuario para la autentificación es la dirección completa de correo electrónico
POSTFIX TLS - SMTPD. Permite que las conexiones de clientes 'smtp' con el servidor estén cifradas. Permitirá conectarse con o sin TLS, a elección del cliente.
Utiliza un certificado. Se puede generar uno firmado/autofirmado o utilizar alguno de los que ya están en el sistema, con el 'snakeoil'
Editar /etc/postfix/main.cf
[...]
#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
[...]
Reiniciar 'postfix'
/etc/init.d/postfix restart
QUOTAs. Previamente se ha parcheado/recompilado 'postfix' para que soporte quotas
Instalar 'maildrop'. Se encarga de actualizar el archivo 'maildirsize' desde la BD
apt-get install maildrop
Configurar 'postfixadmin' para que gestione las quotas en la base de datos
/var/www/postfixadmin/config.inc.php
[...]
$CONF['quota_multiplier'] = '1024000'; <- Medida por defecto (1MB)
$CONF['maxquota'] = '10'; <- Maximo 10 MB
$CONF['quota'] = 'YES';
[...]
Configurar quotas a los usuarios en 'postfixadmin' (0 = ilimitado). Confirmar que los datos se actualizan en la tabla ('mailbox')
Configurar postfix para que lea las quotas de la DB
/etc/postfix/mysql/virtual_mailbox_quota.cf
user = postfix
password = postfix
dbname = postfix
hosts = 127.0.0.1
query = SELECT quota FROM mailbox WHERE username='%s'
/etc/postfix/main.cf
#QUOTA
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/virtual_mailbox_quota.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "The user you are trying to reach is over quota."
virtual_overquota_bounce = yes
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_maildir_extended = yes
Ahora 'postfix' lee las quotas en la base de datos y las actualiza en el archivo 'maildirsize' del buzón.
TUNNING POSTFIX: Algunas opciones de configuración a tener en cuenta
/etc/postfix/main.cf
[...]
#TUNNING
#Tamaño máximo de mensaje con 'envoltorios' (10MB)
message_size_limit = 10240000
#Timeout
#Número máximo de procesos postfix
default_process_limit = 20
#Tiempos de reintento (reprocesado de cola)
queue_run_delay = 300s
#Validez de mensajes en cola (Tiempo máximo que se intenta entregar un msg)
maximal_queue_lifetime = 2d
bounce_queue_lifetime = 2d
#Ratios de envío
#Número máximo de conexiones simultaneas de un cliente smtp
smtpd_client_connection_count_limit = 50
#Número máximo de conexiones de un cliente por unidad de tiempo (60s)
smtpd_client_connection_rate_limit = 150
#Número máximo de mensajes de un cliente por unidad de tiempo (60s)
smtpd_client_message_rate_limit = 100
#Número máximo de destinatarios que puede contener un mensaje
smtpd_recipient_limit = 1000
[...]
VACATION - AUTORESPONDER
No es muy recomendable, porque reponderá a los correos de SPAM, confirmando que somos una dirección válida, aunque para correo del trabajo empresas es muy util.
La característica viene incluida en 'postfixadmin'. Se puede seguir la guia INSTALL
Instalación de software necesario:
apt-get install libdbi-perl libdbd-mysql-perl libmail-sendmail-perl libemail-valid-perl libmime-perl libmime-charset-perl libmime-encwords-perl libmail-sender-perl liblog-log4perl-perl
Creación del usuario/grupo vacation
addgroup --gid 65501 vacation
useradd -c "Virtual Vacation" -d /var/spool/vacation -u 65501 -g 65501 -s /sbin/false vacation
Localización/configuración del script "vacation.pl". Este script es el que hace "la magia"
mkdir /var/spool//vacation
cp /var/www/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/
chown -R vacation:vacation /var/spool/vacation/
chmod 755 /var/spool/vacation
chmod 711 /var/spool/vacation/vacation.pl
chmod -x /var/spool/vacation/vacation.pl
/var/spool/vacation/vacation.pl
[...]
# db_type - uncomment one of these
#our $db_type = 'Pg';
our $db_type = 'mysql';
[...]
# connection details
our $db_username = 'postfix';
our $db_password = 'postfix';
our $db_name = 'postfix';
[...]
our $vacation_domain = 'autoreply.trustnone.es'; "RECORDAR ESTO"
[...]
/etc/postfix/transport (El archivo debe ser creado)
autoreply.trustnone.es vacation:
postmap /etc/postfix/transport
/etc/postfix/master.cf:
vacation unix - n n - - pipe
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}
/etc/postfix/main.cf
#VACATION
transport_maps = hash:/etc/postfix/transport
vacation_destination_recipient_limit = 1
/var/www/postfixadmin/config.inc.php
[...]
$CONF['vacation'] = 'YES';
[...]
$CONF['vacation_domain'] = 'autoreply.trustnone.es';
[...]
$CONF['vacation_control'] ='YES';
[...]
$CONF['vacation_control_admin'] = 'YES';
[...]
LISTAS NEGRAS DE REMITENTES - BLACK LISTs ( de INTERNET)
Internet dispone de algunos listados de IPs y remitentes "malignos" que podemos utilizar para bloquearlos en nuestro servidor. Se presupone que el uso de estas listas negras puede evitar hasta un 70% de SPAM.
Los más interesantes son "spamcop" y "spamhaus". Para que postfix compruebe en ellos si la IP del remitente es "oscura", se edita la entrada "smtpd_recipient_restrictions" de esta forma:
/etc/postfix/main.cf
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org, <- Linea de blacklist
reject_rbl_client bl.spamcop.net <- Linea de blacklist
[...]
Las lineas de listas negras deben ir al final o lo más al final posible. Siempre después de "permit_sasl_authenticated"
LISTAS NEGRAS DE REMITENTES - BLACK LISTs (LOCALES)
Si deseamos bloquear ciertos remitentes que no aparecen en las listas negras de SPAM.
Crear un archivo de texto con los remitentes/IPs que se desea bloquear
/etc/postfix/black_list_senders
[...]
spammer@domain.tld REJECT <- Entre ambos campos debe ir un tabulador
[...]
80.50.22.0 REJECT
[...]
Mapear el archivo:
postmap /etc/postfix/black_list_senders
Añadir la restricción a la entrada "smtpd_recipient_restrictions" de esta forma:
/etc/postfix/main.cf
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
[...]
check_sender_access hash:/etc/postfix/black_list_senders <- La entrada debe ir lo más al final posible
[...]
Cada vez que un nuevo "remitente" se añade al archivo "black_list_senders" se debe ejecutar el mapeo del archivo para que postfix lo tenga en cuenta:
postmap /etc/postfix/black_list_senders
COMPROBACIÓN DEL REGISTRO 'SPF' DEL SERVIDOR REMOTO
Postfix no implementa nativamente la comprobación SPF, pero se pueden utilizar plugins hechos por terceros.
Descargar de "http://openspf.org" el "appliance": postfix-policyd.spf-perl. Existen otros escritos para otros MTA y en otros lenguajes.
wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.007.tar.gz
Descomprimir/desempaquetar
tar xvfz postfix-policyd-spf-perl-2.007.tar.gz
Copiar "./postfix-policyd-spf-perl-2.007/postfix-policyd-spf-perl" en "/usr/lib/postfix"
cp postfix-policyd-spf-perl-2.007/postfix-policyd-spf-perl /usr/lib/postfix
Añadir el nuevo servicio a "/etc/postfix/master.cf"
/etc/postfix/master.cf
[...]
policy unix - n n - 0 spawn
user=nobody argv=/usr/local/lib/policyd-spf-perl
[...]
Añadir la política a la entrada "smtpd_recipient_restrictions" de esta forma:
/etc/postfix/main.cf
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
[...]
reject_unauth_destination,
check_policy_service unix:private/policy <- Debe ir después de "reject_unauth_destination"
[...]
Añadir un límite al tiempo de espera para la política
/etc/postfix/main.cf
[...]
policy_time_limit = 3600,
[...]
COMPROBACIÓN DE LA RESOLUCIÓN INVERSA DEL SERVIDOR REMOTO
En la actualidad la mayoría de servidores de correo en Internet hacen esta comprobación, que permite retener un gran número de correos SPAM
Se activa añadiendo una nueva linea a la entrada "smtpd_recipient_restrictions" de esta forma:
[...]
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_unknown_reverse_client_hostname, <- Linea de comprobación de rDNS
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net
[...]
AMAVISD-NEW + SPAMASSASSIN + CLAMAV
¿Qué queremos que suceda con el spam y los virus?
Los correos con virus no deberían llegar a ningún mailbox. Deben pasar a la carpeta de cuarentena y el 'postmaster' o el destinatario original recibir una notificación
Los correos considerados SPAM deben ir a parar a un 'folder' especial llamdo 'SPAM'.
Instalación de software:
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop rar unrar lha arj ripole cabextract pax tnef
El servicio AMAVISD-NEW escucha en el puerto 'tcp:10024'. Comprobarlo: "netstat -an | grep 10024" y asegurarse de que se inicia con el arranque del sistema
Añadir el usuario 'clamav' al grupo 'amavis'
adduser clamav amavis
Enlazar 'postfix' con 'amavisd'.
Crear los servicios en 'master.cf' añadiendo las entradas:
/etc/postfix/master.cf
[...]
# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
[...]
Especificar en 'main.cf' que los correos se envíen primero a 'amavis'
/etc/postfix/main.cf
[...]
content_filter = scan:127.0.0.1:10024
receive_override_options = no_address_mappings
[...]
Reiniciar 'postfix'
/etc/init.d/postfix restart
Ahora los correos ya pasan por "amavis", pero por defecto no hace ningún test sobre el mensaje
Activar filtro antivirus
/etc/amavis/conf.d/15-content_filter_mode <- Eliminar los comentarios de las siguientes lineas.
[...]
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
[...]
Activar filtro de SPAM
/etc/amavis/conf.d/15-content_filter_mode <- Eliminar los comentarios de las siguientes lineas.
[...]
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
[...]
Para que SpamAssassin reescriba el "subject" de los correos, debe reconocer los dominios locales como tales. Para ello hay que definir la variable '@local_domains_maps' para que contenga todos los dominios locales que el servidor maneja. Como son varios y pueden variar, definimos la variable como '@local_domains_maps = (1)' en el archivo:
/etc/amavis/conf.d/20-debian_defaults
[...]
@local_domains_maps = (1)
[...]
Si queremos que los correos detectados como SPAM sean marcados en el subject, definir las variables:
/etc/amavis/conf.d/20-debian_defaults
[...]
$sa_spam_subject_tag = '*SPAM*> ';
[...]
$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
[...]
Indicar a "Amavis" que el correo llegue al destino (aunque marcado), ya que por defecto lo devuelve
/etc/amavis/conf.d/20-debian_defaults
[...]
#$final_spam_destiny = D_BOUNCE; <- Esto es lo que había originalmente.
$final_spam_destiny = D_PASS; <- Este el el comportamiento que queremos
[...]
Poner los correos con virus en un directorio de cuarentena y notificar al administrador del sistema que se ha recibido un virus
/etc/amavis/conf.d/20-debian_defaults
[...]
$mailfrom_notify_admin = 'AMAVIS\@trustnone.es'; <- Remitentes de los correos de notificación que envia AMAVIS
$mailfrom_notify_recip = 'AMAVIS\@trustnone.es'; <- Remitentes de los correos de notificación que envia AMAVIS
$mailfrom_notify_spamadmin = 'AMAVIS\@trustnone.es'; <- Remitentes de los correos de notificación que envia AMAVIS
[...]
$QUARANTINEDIR = "$MYHOME/virusmails"; <- Directorio de cuarentena: "/var/lib/amavis/virusmails". Debería ser algo separado que se pueda controlar.
[...]
$virus_admin = 'josem\@trustnone.es <- A quien se envían las notificaciones de que se ha recibido VIRUS
[...]
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine) <- El correo no llegará al destinatario
[...]
$X_HEADER_LINE = "Scanned with ClamAV-AmavisNew at $mydomain"; <- Linea que aparecerá en el encabezamiento del correo
[...]
¡OJO!. Los correos en cuarentena no se eliminan automaticamente. Se debe escribir un script que se ejecute automáticamente y controle que el directorio de cuarentena no bloquee el FS.
Reiniciar todos los servicios
/etc/init.d/clamav-daemon restart
/etc/init.d/amavis restart
Mensaje de prueba SPAM
Se puede enviar un correo que contenga la cadena:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Una regla específica de SPAMASSASSIN debería reconocerla para marcar el correo como SPAM a modo de prueba
Mensaje de prueba VIRUS
Se puede descargar un archivo de prueba desde: http://www.eicar.org/anti_virus_test_file.htm
El archivo se puede adjuntar a un correo para comprobar que el sistema lo detecta como VIRUS y lo pone en cuarentena, además de avisar al administrador.
Actualizació nde la base de datos de SpamAssassin
Para actualizar desde Internet
sa-update
/etc/init.d/amavis restart
No se ejecuta automáticamente, de forma que se debe añadir una linea al 'crontab'
Actualización de la base de datos de Virus para ClamAV
Clamav utiliza el servicio "freshclam" que se encarga de actualizar la base de datos de virus desde Internet (cada hora). Comprobar que está ejecutándose y que arranca al inicio.
El archivo de configuración de "freshclam" donde se configura esto es: "/etc/clamav/freshclam.conf"
El servicio deja un log en "/var/log/clamav/freshclam.log"
El proceso es automático
SQUIRRELMAIL
Descargar el paquete de squirrelmail (Last Release is 1.4.19)
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fprdownloads.sourceforge.net%2Fsquirrelmail%2Fsquirrelmail-1.4.19.tar.gz
tar xvfz squirrelmail-1.4.19.tar.gz
mv squirrelmail-1.4.19 /var/www/squirrelmail
chown -R www-data:www-data /var/www/squirrelmail
Ejecutar el script de configuración
cd /var/www/squirrelmail
./configure
[...]
Comprobar la configuración: https://IPMAILSERVER/squirrelmail/src/configtest.php
Acceder al webmail: http://IPMAILSERVER/squirrelmail
Plugins y herramientas insteresantes; descargables desde la web de 'squirrelmail' y fáciles de instalar
compatibility: Necesario para instalar otros módulos
check_quota: Muestra la cuota de buzón asignada/ocupada
html_mail: Permite escribir mensajes en HTML con 'fckeditor'
calendar: Incluido en SQM
jsclock: Hora mediante un JavaScript
timeout_user: Desconecta la sesión después de un tiempo (configurable) de inactividad.
Idiomas internacionales (es_ES). Ojo; para que funcione la traducción hay que cambiar todo a utf-8. Ver este enlace:
http://www.ubuntu-es.org/?q=node/33800
ROUNDCUBEMAIL
Descargar paquete de RoundCubeMail (Last Release is 0.3.1)
wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.3.1/roundcubemail-0.3.1.tar.gz?use_mirror=surfnet
tar xvfz roundcubemail-0.3.1.tar.gz
mv roundcubemail-0.3.1 /var/www/roundcubemail
Crear una base de datos en MySQL para la aplicación
mysql -u root -p
create database roundcubemail;
create user 'roundcubemail'@'localhost' IDENTIFIED BY 'roundcubemail';
grant all privileges on `roundcubemail`.* to 'roundcubemail'@'localhost';
flush privileges;
Ejecutar el instalador
https://IPMAILSERVER/roundcubemail/installer/
APENDICE I: Configurar SSL en Debian Lenny
Activar módulo 'ssl' de apache2
a2enmod ssl
/etc/init.d/apache2 restart
Activar 'default-ssl' site
a2ensite default-ssl
/etc/init.d/apache2 reload
En este momento el servidor escucha tanto por el puerto http:80 como por el https:443
Para hacer que las peticiones 'http:80' se redirijan a 'https:443'
a2enmod rewrite
/etc/apache2/sites-available/default
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*) https://192.168.1.11
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
[...]
APENDICE II: Archivos de Log más importantes:
/var/log/mail.info -> Log general de todo el sistema de correo. Por defecto, todos los mensajes llegarán aquí
/var/log/mail.err -> Errores en postfix
/var/log/mail.warn -> Avisos
/var/log/clamav/clamav.log -> Log del antivirus
/var/log/clamav/freshclam.log -> Log del actualizador del antivirus
APENDICE III: "Maildrop y filtros maildroprc"
Se desea que los correos marcados como Spam por Amavis lleguen a una carpeta IMAP especial llamada SPAM, que además deberá crearse automáticamente en caso de que no exista.
Instalar "Maildrop" en caso de que no estuviera instalado.
apt-get install maildrop
Crear un usuario y un grupo "vmail" que será el que ahora posea los "maildirs". Especificar 'uid' y 'gid' cualquiera libre y recordarlo.
groupadd vmail -g 6060
useradd vmail -u 6060 -g 6060
Comprobar que el usuario 'vmail' pertenece al grupo 'vmail'
id vmail
Editar el servicio 'maildrop' en 'master.cf'
/etc/postfix/master.cf (ORIGINAL)
[...]
#maildrop unix - n n - - pipe
# flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
[...]
/etc/postfix/master.cf (MODIFICADO)
[...]
maildrop unix - n n - - pipe
flags=ODRhu user=vmail argv=/usr/bin/maildrop -w 90 -d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop}
[...]
El directorio socket de "saslauth" debe ser 777
chmod 777 /var/run/courier/authdaemon/
Reconfigurar postfix para que la entrega final de los correos la realice 'maildrop' en lugar de 'virtual'. Se modifican varias cosas del archivo 'main.cf' original
/etc/postfix/main.cf (ORIGINAL)
[...]
#MYSQL
virtual_transport = virtual
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_uid_maps = static:104
virtual_gid_maps = static:107
virtual_minimum_uid = 104
virtual_mailbox_base = /home/vmail
[...]
/etc/postfix/main.cf (MODIFICADO)
[...]
#MYSQL VIRTUAL DOMAINS
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_gid_maps = static:6060
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_minimum_uid = 6060
virtual_transport = maildrop
virtual_uid_maps = static:6060
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
[...]
Reconfigurar permisos de los buzones:
chown -R vmail:vmail /home/vmail
chmod -R 700 /home/vmail
Reconfigurar 'saslauthdaemon'
/etc/courier/authmysqlrc
[...]
MYSQL_UID_FIELD 6060 <- Originalmente estaban en 104
MYSQL_GID_FIELD 6060 <- Originalmente estaban en 107
[...]
Reiniciar todos los servicios. La experiencia dice que aquí sería buena idea un reinicio completo de la máquina
Comprobar que se puede acceder vía imap/smtp a los buzones y que los filtros de spam y correo funcionan (deberían funcionar)
Editar el archivo de configuración de maildrop: Es el que decide su modo de funcionamiento y donde se especifican las reglas de filtrado
/etc/maildroprc
HOME_DIR="/home/vmail"
logfile "/var/log/maildroprc.log"
EXTENSION="$1"
RECIPIENT=tolower("$2")
USER="$3"
HOST="$4"
SENDER="$5"
#Si es Spam, ponerlo en el folder de "SPAM"
if (/^X-Spam-Flag: YES*/)
{
log "Filtro Maildrop Activado /home/vmail/$DEFAULT/.SPAM"
to "/home/vmail/$DEFAULT/.SPAM"
}
Quotas (¡OJO!, con esto no es necesario el parcheo del paquete postfix):
Si "maildrop" está compilado para soportar cuotas, hará uso de ellas si hay un archivo "maildirsize"
Para comprobar si maildrop tiene soporte de quotas:
> maildrop -v
[...]
Maildir quota extension enabled.
[...]
NOTA: Los archivos de quota especifican esta con entradas tipo 1000000S , que significa 1000000 bytes o 1000C , que significa 1000 mensajes.
Se puede probar a añadir una cuota a un maildir ya creado con la orden de ejemplo (maildirmake -q 100000S /home/vmail/DOMAIN/MAILDIR). Los archivos 'maildirsize' deben pertenecer a 'vmail:vmail' y tener permisos 700. Crear uno y probar que funciona.
Crear el archivo de 'log' para que 'maildrop' pueda escribir
touch /var/log/maildroprc.log
chown vmail:vmail /var/log/maildroprc.log
Creacion de mailboxes desde postfixadmin
Instalar 'sudo'
apt-get install sudo
./config.inc.php
[...]
$CONF['mailbox_postcreation_script']='sudo -u vmail sh /usr/local/bin/postfixadmin-mailbox-postcreation.sh';
[...]
$CONF['mailbox_postedit_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postedit.sh';
[...]
/etc/sudoers
[...]
www-data ALL=(vmail) NOPASSWD: ALL ¿?¿?¿??¿?¿?¿?¿¿?¿?¿?
[...]
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin
/usr/local/bin/postfixadmin-mailbox-postcreation.sh
[...]
basedir=/home/vmail/
[...]
maildirmake -f SPAM "$maildir"
maildirmake -f Trash "$maildir"
maildirmake -f Sent "$maildir"
maildirmake -f Drafts "$maildir"
maildirmake -q $4S "$maildir"
echo "INBOX.Trash" >> $maildir/courierimapsubscribed
echo "INBOX.SPAM" >> $maildir/courierimapsubscribed
echo "INBOX.Sent" >> $maildir/courierimapsubscribed
echo "INBOX.Drafts" >> $maildir/courierimapsubscribed
exit 0
/usr/local/bin/postfixadmin-mailbox-postedit.sh <- Script completo
#!/bin/sh
basedir=/home/vmail
maildir="${basedir}/$3"
maildirmake -q $4S "$maildir"
exit 0
chmod +x /usr/local/bin/postfixadmin-mailbox-post*
NOTA: Es responsabilidad de los programas que acceden por imap modificar el archivo 'maildirsize' cuando crean o borran algo. De esta forma, cuando la bandeja esta llena y cerca del límite, al eliminar algo el archivo de cuota debe modificarse automáticamente para indicar los cambios.
Automatizar el envio de los buzones eliminados a un lugar de cuarentena antes de eliminarlo
Editar '/var/www/postfixadmin/config.php.inc
[...]
$CONF['mailbox_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';
[...]
$CONF['domain_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-domain-postdeletion.sh';
[...]
No es necesario generar los scripts, ya que vienen de muestra con 'postfixadmin'
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin
chmod +x /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
chmod +x /usr/local/bin/postfixadmin-domain-postdeletion.sh
Editar /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
[...]
# Change this to where you keep your virtual mail users' maildirs.
basedir=/home/vmail
# Change this to where you would like deleted maildirs to reside.
trashbase=/home/vmail/RETIRADOS
[...]
Editar /usr/local/bin/postfixadmin-domain-postdeletion.sh
[...]
# Change this to where you keep your virtual mail users' maildirs.
basedir=/home/vmail
# Change this to where you would like deleted maildirs to reside.
trashbase=/home/vmail/RETIRADOS
[...]
mkdir RETIRADOS
chown vmail:vmail /home/vmail/RETIRADOS/ <- Suponiendo que queremos enviarlos a este path
chmod 700 /home/vmail/RETIRADOS/
APENDICE IV: Estadísticas de correo
-MAILGRAPH-
apt-get install mailgraph
Por defecto utilizar los logs estandar de correo (/var/log/mail.log, etc) para saber lo que ha ocurrido con los correos.
Las estadísticas se pueden ver vía navegador desde: http://IPSERVIDOR/cgi-bin/mailgraph.cgi
-ISOQLOG-
apt-get install isoqlog
Tipo servidor -> Postfix
Salida -> /var/www/isoqlog
Dominios -> todos los que maneje postfix
Añadir linea de ejecución con 'isoqlog' a 'cron'
crontab -e
[...]
*/10 * * * * /usr/bin/isoqlog
[...]
Las estadísticas se pueden ver vía navegador desde: http://IPSERVIDOR/isoqlog
Se pueden añadir dominios a posteriori en el archivo '/etc/isoqlog/isoqlog.domains'
APENDICE V: Bloquear la actualización de un paquete
Util para evitar que una actualización actualice un paquete que hemos retocado a mano sin darnos cuenta.
Obtener una lista etiquetada de los paquetes instalados en el sistema y exportarla a un archivo:
dpkg --get-selections \* > /root/lista_packages.list
Editar el archivo modificando la etiqueta de los paquetes que se desea mantener a "hold":
/root/lista_packages.list <- ORIGINAL
[...]
portmap install
postfix install
postfix-mysql install
procps install
psmisc install
[...]
/root/lista_packages.list <- MODIFICADO PARA RETENER 'postfix' y 'postfix-mysql'
[...]
portmap install
postfix hold
postfix-mysql hold
procps install
psmisc install
[...]
Recargar el listado de paquetes con sus nuevos estados
dpkg --set-selections < /root/lista_packages.list
APENDICE VI: Creando un alias de 'root'
vi /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
clamav: root
root: admin@trustnone.es <- Para que los correos enviados a root se dirijan a una cuenta real en postfix
Ejecutar 'newaliases'
/usr/bin/newaliases
APENDICE VII: Aprendizaje de spamassasin.
Util. Plugin 'spam_buttons' de spamassasin.
Se pueden generar en cada maildir, dos carpetas, una llamada 'SPAM' y otra llamada 'NO-SPAM'. Un script se debe encargar de recorrer estas carpetas y actuar de la siguiente forma:
Si encuentra un mensaje en la carpeta 'SPAM' que no esté etiquetado como tal, significa que el usuario lo ha dejado ahí. Debe escanearse con "sa-learn --spam".
Si encuentra un mensaje en la carpeta 'NO-SPAM' que está etiquetado como SPAM, significa que el usuario lo ha dejado ahí. Debe escanearse como "sa-learn --ham" y pasarlo a la bandeja de entrada.
De esta forma el usuario puede refiltrar mensajes para que el sistema aprenda de ello.
El script se debe ejecutar cada determinado tiempo:
APENDICE VIII: Saber si estamos en listas de spam
Utilizar las herramientas "rblcheck" y "amispammer"
rblcheck
apt-get install rblcheck
rblcheck xxx.xxx.xxx.xxx
amispammer
apt-get install libmail-sender-perl
wget http://www.lorenzomartinez.es/projs/amispammer/amispammer_v2.zip
unzip amispammer_v2.zip
mv amISpammer.pl /usr/local/bin
perl /usr/local/bin/amISpammer.pl -i
También util: http://www.blacklistalert.org/
APENDICE IX: Benchmark
Comprobar que están instaladas las herramietnas "smtp-sink" y "smtp-source"
Para postfix
/etc/init.d/postfix stop
Poner "smtp-sink" a escuchar peticiones de correo:
smtp-sink -4c -u
Bombardear el servicio desde local (10000 mensajes de 25KB cada uno con una concurrencia de 256)
smtp-source -4dNcm 10000 -s 256 -l 25000 -f foo@bar.com -t bar@foo.com localhost:25
Bombardear el servicio desde remoto. Es necesaria otra máquina en red que disponga de "smtp-source"
smtp-source -4dNcm 10000 -s 256 -l 25000 -f foo@bar.com -t bar@foo.com
APENDICE X: Configuración del DNS
Configurar correctamente el servidor DNS es fundamental para que el correo funcione.
Ejemplo de configuración de BIND9 para un dominio ficticio: "trustnone.es"
Registros MX: Intercambiadores de correo (con prioridades)
/etc/bind/trustnone.es
[...]
MX 10 mail1.trustnone.es.
MX 20 mail2.trustnone.es. ;
[...]
mail1 A 192.168.196.4
mail2 A 192.168.196.48
[...]
Registro spf: Intercambiadores MX certificados.
[...]
trustnone.com. IN TXT "v=spf1 a mx ~all"
[...]
Resolución inversa (DEBE ESTAR DELEGADA POR EL ISP)
[...]
[...]
APENDICE XII: SenderID Hotmail
Sender ID es un listado de redes/hosts autorizados que mantiene microsoft.
Para evitar problemas, además de establecer el registro SPF del dominio, se debe dar de alta en:
https://postmaster.live.com/snds/addnetwork.aspx
Web para solicitar información de porque nos están filtrando
https://support.msn.com/eform.aspx?productKey=edfsmsbl&ct=eformts
APENDICE XIII: MAILMAN (Listas de correo)
apt-get install mailman lynx
-> [*] Español
export LC_ALL=C <- definirlas en un profile al inicio
export LANG=C
check_perms -v -f (x2)
cd /var/lib/mailman
chown list:list *
editar "/etc/mailman/mm_cfg.py"
[...]
DEFAULT_EMAIL_HOST = 'mail.trustnone.es'
DEFAULT_URL_HOST = 'mail.trustnone.es'
[...]
DEFAULT_SERVER_LANGUAGE = 'es'
[...]
editar "/etc/postfix/master.cf"
[...]
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
[...]ASEGURARSE DE QUE ESTA LINEA ESTÁ TAL Y COMO APARECE AQUÍ. SOBRETODO LA PRIMERA 'n'
Configurar Apache2
/etc/apache2/mods-available/mailman.conf
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
Alias /pipermail/ /var/lib/mailman/archives/public/
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Alias /archives/ /var/lib/mailman/archives/public/
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
cd /etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/mailman.conf /etc/apache2/mods-enabled
/etc/init.d/apache2 restart
+ postfix
/etc/postfix/transport
[...]
lists.trustnone.es mailman:
[...]
cd /etc/postfix
postmap transport
Reiniciar todos los servicios afectados
/etc/init.d/apache2 restart
/etc/init.d/postfix restart
/etc/init.d/mailman restart
Crear la lista principal:
newlist mailman
-> Usuario administrador de la lista: "admin@trustnone.es"
-> Password para el admin: "admin"
Introducir todos los alias en la MySQL, tabla "alias".
mailman@trustnone.es mailman@lists.trustnone.es
mailman-admin@trustnone.es mailman-admin@lists.trustnone.es
mailman-bounces@trustnone.es mailman-bounces@lists.trustnone.es
mailman-confirm@trustnone.es mailman-confirm@lists.trustnone.es
mailman-join@trustnone.es mailman-join@lists.trustnone.es
mailman-leave@trustnone.es mailman-leave@lists.trustnone.es
mailman-owner@trustnone.es mailman-owner@lists.trustnone.es
mailman-request@trustnone.es mailman-request@lists.trustnone.es
mailman-subscribe@trustnone.es mailman-subscribe@lists.trustnone.es
mailman-unsubscribe@trustnone.es mailman-unsubscribe@lists.trustnone.es
Crear una lista operativa pública:
newlist pruebas
-> Usuario administrador de la lista: "admin@trustnone.es"
-> Password para el admin: "admin"
Introducir todos los alias en la MySQL, tabla "alias".
pruebas@trustnone.es pruebas@lists.trustnone.es
pruebas-admin@trustnone.es pruebas-admin@lists.trustnone.es
pruebas-bounces@trustnone.es pruebas-bounces@lists.trustnone.es
pruebas-confirm@trustnone.es pruebas-confirm@lists.trustnone.es
pruebas-join@trustnone.es pruebas-join@lists.trustnone.es
pruebas-leave@trustnone.es pruebas-leave@lists.trustnone.es
pruebas-owner@trustnone.es pruebas-owner@lists.trustnone.es
pruebas-request@trustnone.es pruebas-request@lists.trustnone.es
pruebas-subscribe@trustnone.es pruebas-subscribe@lists.trustnone.es
pruebas-unsubscribe@trustnone.es pruebas-unsubscribe@lists.trustnone.es
Web del administrador de la lista:
http://mail.trustnone.es/cgi-bin/mailman/admin/pruebas
Web de la propia lista:
http://mail.trustnone.es/cgi-bin/mailman/listinfo/pruebas
Archivos:
http://mail.trustnone.es/pipermail/pruebas/
VER: http://freemars.org/howto/mailman.html#ins
TODO:
Ojo, comprobar que se puede poner quota 0 (ilimitada) o 100MB
Borrado de correo antiguos
Borrado de la carpeta SPAM y Papelera
Agenda compartida LDAP
DomainKeys <-
listadmin <- mailman
open relay check -> http://www.cyberciti.biz/tips/test-mail-server-for-an-open-relay.html