Este tutorial es Copyright (c) 2007 por Falko Timme. Se deriva de un tutorial de Christoph Haas que puede encontrar en http://workaround.org. Puede utilizar este tutorial bajo la licencia Creative Commons 2.5 o cualquier versión posterior.
Este documento describe cómo instalar un servidor de correo basado en Postfix que se basa en usuarios y dominios virtuales, es decir, usuarios y dominios que están en una base de datos MySQL. También demostraré la instalación y configuración de Courier (Courier-POP3, Courier-IMAP), para que Courier pueda autenticarse contra la misma base de datos MySQL que usa Postfix.
El servidor Postfix resultante es capaz de SMTP-AUTH y TLS y cuota (La cuota no está integrada en Postfix de forma predeterminada, le mostraré cómo parchear su Postfix de manera adecuada). Las contraseñas se almacenan en encriptadas formulario en la base de datos (la mayoría de los documentos que encontré trataban con contraseñas de texto sin formato, lo que es un riesgo de seguridad). Además de eso, este tutorial cubre la instalación de Amavisd , Asesino de spam y ClamAV para que los correos electrónicos se analicen en busca de spam y virus.
La ventaja de una configuración "virtual" de este tipo (usuarios y dominios virtuales en una base de datos MySQL) es que tiene mucho más rendimiento que una configuración basada en usuarios "reales" del sistema. Con esta configuración virtual, su servidor de correo puede manejar miles de dominios y usuarios. Además, es más fácil de administrar porque solo tiene que lidiar con la base de datos MySQL cuando agrega nuevos usuarios/dominios o edita los existentes. No más comandos postmap para crear archivos db, no más recargas de Postfix, etc. Para la administración de la base de datos MySQL, puede usar herramientas basadas en web como phpMyAdmin, que también se instalará en este tutorial. La tercera ventaja es que los usuarios tienen una dirección de correo electrónico como nombre de usuario (en lugar de un nombre de usuario + una dirección de correo electrónico) que es más fácil de entender y tener en cuenta.
Este howto pretende ser una guía práctica; no cubre los antecedentes teóricos. Se tratan en muchos otros documentos en la web.
¡Este documento viene sin garantía de ningún tipo! Quiero decir que esta no es la única forma de establecer un sistema de este tipo. Hay muchas maneras de lograr este objetivo, pero este es el camino que tomo. ¡No emito ninguna garantía de que esto funcione para usted!
1 nota preliminar
Este tutorial se basa en Ubuntu 6.10 (Edgy Eft), por lo que debe configurar una instalación básica de Ubuntu antes de continuar con este tutorial. El sistema debe tener una dirección IP estática. Uso 192.168.0.100 como mi dirección IP en este tutorial y server1.example.com como nombre de host.
Prefiero hacer todos los pasos aquí como usuario root. Entonces, si aún no ha creado un inicio de sesión raíz, debe hacerlo ahora:
sudo passwd root
Luego, inicie sesión como root:
su
Si desea trabajar como un usuario normal en lugar de root, recuerde poner sudo delante de todos los comandos que se muestran en este tutorial. Así que cuando ejecuto
apt-get update
deberías ejecutar
sudo apt-get update
en cambio, etc.
2 Instale Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
Antes de instalar estos paquetes, debemos modificar /etc/apt/sources.list y habilitar el repositorio del universo, así que asegúrese de tener habilitadas las siguientes líneas:
vi /etc/apt/sources.list
[...]
deb http://de.archive.ubuntu.com/ubuntu/ edgy universe
deb-src http://de.archive.ubuntu.com/ubuntu/ edgy universe
[...] |
Entonces corre
apt-get update
para actualizar su base de datos de paquetes.
Para instalar Postfix, Courier, Saslauthd, MySQL y phpMyAdmin, simplemente ejecutamos
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql
Se le harán algunas preguntas:
¿Crear directorios para la administración basada en web? <-- No
¿Tipo general de configuración? <-- Sitio de Internet
¿Nombre del correo? <-- server1.example.com
Certificado SSL requerido <-- Ok
3 Aplicar el parche de cuota a Postfix
Tenemos que obtener las fuentes de Postfix, parchearlo con el parche de cuota, crear nuevos paquetes .deb de Postfix e instalar esos paquetes .deb:
apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch libdb4.3-dev libmysqlclient15-dev
cd /usr/src
apt-get source postfix
(Asegúrese de usar la versión correcta de Postfix en los siguientes comandos. Tengo instalado Postfix 2.3.3. Puede encontrar su versión de Postfix ejecutando
postconf -d | grep mail_version
)
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.3.3-vda.patch.gz
gunzip postfix-2.3.3-vda.patch.gz
cd postfix-2.3.3
parche -p1 <../postfix-2.3.3-vda.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.3.3 -1_i386.deb
dpkg -i postfix-mysql_2.3.3-1_i386.deb
4 Crea la base de datos MySQL para Postfix/Courier
De manera predeterminada, MySQL se instala sin una contraseña de root, que cambiamos de inmediato (reemplace su contraseña de rootsql con la contraseña que desea usar):
mysqladmin -u root password yourrootsqlpassword
Ahora creamos una base de datos llamada correo:
mysqladmin -u root -p create mail
A continuación, vamos al shell de MySQL:
mysql -u root -p
En el shell de MySQL, creamos el usuario mail_admin con la contraseña mail_admin_password (reemplácela con su propia contraseña) que tiene privilegios SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR en la base de datos de correo. Este usuario será utilizado por Postfix y Courier para conectarse a la base de datos de correo:
CONCEDER SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR EN EL CORREO.* A 'mail_admin'@'localhost' IDENTIFICADO POR 'mail_admin_password';
CONCEDER SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR EN EL CORREO.* A 'mail_admin'@'localhost. localdomain' IDENTIFICADO POR 'mail_admin_password';
PRIVILEGIOS DE DESCARGA;
Todavía en el shell de MySQL, creamos las tablas que Postfix y Courier necesitan:
USE mail;
CREATE TABLE dominios (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
Reenvíos CREATE TABLE (
origen varchar(80) NOT NULL,
destino TEXT NOT NULL,
PRIMARY KEY (origen) )
TYPE=MyISAM;
CREATE TABLE usuarios (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
CLAVE PRIMARIA (email )
) TYPE=MiISAM;
CREATE TABLE transport (
dominio varchar(128) NOT NULL predeterminado '',
transport varchar(128) NOT NULL predeterminado '',
CLAVE ÚNICA dominio (dominio)
) TIPO =MiISAM;
quit;
Como habrás notado, con la renuncia; hemos dejado el shell de MySQL y estamos de vuelta en el shell de Linux.
Los dominios la tabla almacenará cada dominio virtual para el que Postfix debería recibir correos electrónicos (por ejemplo, example.com ).
dominio |
ejemplo.com |
Los reenvíos la tabla es para crear un alias de una dirección de correo electrónico a otra, p. reenviar correos electrónicos para [email protected] a [email protected] .
fuente | destino |
[correo electrónico protegido] | [correo electrónico protegido] |
Los usuarios La tabla almacena todos los usuarios virtuales (es decir, las direcciones de correo electrónico, porque la dirección de correo electrónico y el nombre de usuario son los mismos) y las contraseñas (en formato cifrado). form!) y un valor de cuota para cada casilla de correo (en este ejemplo, el valor predeterminado es 10485760 bytes, lo que significa 10 MB).
correo electrónico | contraseña | cuota |
[correo electrónico protegido] | No9.E4skNvGa. ("secreto" en forma encriptada) | 10485760 |
El transporte La tabla es opcional, es para usuarios avanzados. Permite reenviar correos para usuarios individuales, dominios completos o todos los correos a otro servidor. Por ejemplo,
dominio | transporte |
ejemplo.com | smtp:[1.2.3.4] |
reenviaría todos los correos electrónicos para example.com a través del protocolo smtp al servidor con la dirección IP 1.2.3.4 (los corchetes [] significa "no realizar una búsqueda del registro MX DNS" (lo que tiene sentido para las direcciones IP...). Si usa un nombre de dominio completo (FQDN) en su lugar, no usaría los corchetes).
Por cierto, (supongo que la dirección IP de su sistema de servidor de correo es 192.168.0.100) puede acceder a phpMyAdmin en http://192.168.0.100/phpmyadmin/ en un navegador e iniciar sesión como mail_admin. A continuación, puede echar un vistazo a la base de datos. Más tarde puede usar phpMyAdmin para administrar su servidor de correo.
5 Configurar postfijo
Ahora tenemos que decirle a Postfix dónde puede encontrar toda la información en la base de datos. Por lo tanto, tenemos que crear seis archivos de texto. Notará que le digo a Postfix que se conecte a MySQL en la dirección IP 127.0.0.1 en lugar de localhost. Esto se debe a que Postfix se está ejecutando en una cárcel chroot y no tiene acceso al socket MySQL, que intentaría conectar si le dijera a Postfix que use localhost. Si utilizo 127.0.0.1, Postfix utiliza la red TCP para conectarse a MySQL, lo que no supone ningún problema incluso en un chroot jail (la alternativa sería mover el socket de MySQL al chroot jail, lo que provoca otros problemas).
Asegúrese de que /etc/mysql/my.cnf contenga la siguiente línea:
vi /etc/mysql/my.cnf
[...]
bind-address = 127.0.0.1
[...] |
Si tuvo que modificar /etc/mysql/my.cnf, reinicie MySQL ahora:
/etc/init.d/mysql restart
Ejecutar
netstat -tap
para asegurarse de que MySQL esté escuchando en 127.0.0.1 (localhost.localdomain):
[email protected]:/usr/src# netstat -tap
Conexiones activas de Internet (servidores y establecidos)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID/Nombre del programa
tcp 0 0 localhost.localdo:mysql*:*escucha 4556/mysqld
tcp 0 0*:smtp*:*escucha 12994/maestro
tcp6 0 0*:imaps*:*escuchar 4816/couriertcpd
tcp6 0 0*:pop3s*:*escucha 4263/couriertcpd
tcp6 0 0*:pop3*:*escucha 4198/couriertcpd
tcp6 0 0*:imap2*:*escuchar 4761/couriertcpd
tcp6 0 0*:www*:*escucha 13283/apache2
tcp6 0 0*:ssh*:*escucha 3192/sshd
Ahora vamos a crear nuestros seis archivos de texto.
vi /etc/postfix/mysql-virtual_domains.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_forwardings.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailboxes.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_email2email.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_transports.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT transport FROM transport WHERE domain='%s'
hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT quota FROM users WHERE email='%s'
hosts = 127.0.0.1 |
Luego cambie los permisos y el grupo de estos archivos:
chmod o=/etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
Ahora creamos un usuario y un grupo llamados vmail con el directorio de inicio /home/vmail. Aquí es donde se almacenarán todos los buzones de correo.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
A continuación hacemos algo de configuración de Postfix. ¡Asegúrese de reemplazar server1.example.com con un FQDN válido, de lo contrario, su Postfix podría no funcionar correctamente!
postconf -e 'minombre de host =servidor1.ejemplo.com'
postconf -e 'midestino =servidor1.ejemplo.com, localhost, localhost.dominiolocal'
postconf -e 'misredes =127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e ' virtual_alias_maps =proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains =proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps =proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base =/home/vmail'
postconf -e 'virtual_uid_maps =static:5000'
postconf -e 'virtual_gid_maps =static:5000'
postconf -e ' smtpd_sasl_auth_enable =yes'
postconf -e 'broken_sasl_auth_clients =yes'
postconf -e 'smtpd_recipient_restrictions =permit_mynetworks, permit_sasl_authenticated, rechazó_unauth_destination'
postconf -e 'smtpd_use_tls =yes' -
e 'smtpd_tls_cer t_file =/etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file =/etc/postfix/smtpd.key'
postconf -e 'transport_maps =proxy:mysql:/etc/postfix/mysql -virtual_transports.cf'
postconf -e 'virtual_create_maildirsize =yes'
postconf -e 'virtual_maildir_extended =yes'
postconf -e 'virtual_mailbox_limit_maps =proxy:mysql:/etc/postfix/mysql- virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override =yes'
postconf -e 'virtual_maildir_limit_message ="El usuario al que intenta comunicarse supera la cuota".'
postconf -e 'virtual_overquota_bounce =yes'
postconf -e 'proxy_read_maps =$local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $mail_network_maps
Luego creamos el certificado SSL que se necesita para TLS:
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
<-- Ingrese el nombre de su país (por ejemplo, "DE").
<-- Ingrese el nombre de su estado o provincia.
<-- Ingrese su ciudad.
<-- Ingrese su organización Nombre (p. ej., el nombre de su empresa).
<-- Ingrese el nombre de su unidad organizativa (p. ej., "Departamento de TI").
<-- Ingrese el nombre de dominio completo del sistema (p. ej., " server1.example.com").
<-- Introduzca su dirección de correo electrónico.
Luego cambie los permisos de smtpd.key:
chmod o= /etc/postfix/smtpd.key
Primera ejecución
mkdir -p /var/spool/postfix/var/run/saslauthd
Luego edite /etc/default/saslauthd. Elimine el # delante de START=yes y agregue las líneas PARAMS="-m /var/spool/postfix/var/run/saslauthd -r" y PIDFILE="/var/spool/postfix/var/run/${ NOMBRE}/saslauthd.pid". El archivo debería verse así:
vi /etc/default/saslauthd
# This needs to be uncommented before saslauthd will be run automatically
START=yes
PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"
MECHANISMS="pam" |
Luego cree el archivo /etc/pam.d/smtp. Debe contener solo las siguientes dos líneas (asegúrese de completar los detalles correctos de su base de datos):
vi /etc/pam.d/smtp
auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |
A continuación, cree el archivo /etc/postfix/sasl/smtpd.conf. Debería verse así:
vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_admin
sql_passwd: mail_admin_password
sql_database: mail
sql_select: select password from users where email = '%u' |
Luego reinicie Postfix y Saslauthd:
/etc/init.d/postfix reiniciar
/etc/init.d/saslauthd reiniciar
Ahora tenemos que decirle a Courier que debe autenticarse en nuestra base de datos MySQL. Primero, edite /etc/courier/authdaemonrc y cambie el valor de authmodulelist para que diga:
vi /etc/courier/authdaemonrc
[...]
authmodulelist="authmysql"
[...] |
Luego haga una copia de seguridad de /etc/courier/authmysqlrc y vacíe el archivo antiguo:
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null> /etc/courier/authmysqlrc
Luego abra /etc/courier/authmysqlrc y coloque las siguientes líneas:
vi /etc/courier/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD mail_admin_password
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
#MYSQL_NAME_FIELD
MYSQL_QUOTA_FIELD quota |
Luego reinicie Courier:
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/ reinicio de init.d/courier-pop
/etc/init.d/reinicio de courier-pop-ssl
Al correr
telnet localhost pop3
puede ver si su servidor POP3 está funcionando correctamente. Debería devolver +OK Hola. (Escriba quit para volver al shell de Linux).
[email protected]:/etc/postfix# telnet localhost pop3
Probando 127.0.0.1...
Conectado a localhost.localdomain.
El carácter de escape es '^]'.
+OK Hola.
salir
+OK Mejor suerte la próxima vez.
Conexión cerrada por host externo.
8 Modificar /etc/aliases
Ahora debemos modificar /etc/aliases y especificar un alias para postmaster en él. Puede especificar una de sus direcciones de correo electrónico existentes para poder recibir notificaciones al administrador de correo. Además, cambie la línea raíz para que los correos para la raíz también se reenvíen al administrador de correos:
vi /etc/aliases
# Added by installer for initial user
root: postmaster
postmaster: [email protected] |
Siempre que modifique /etc/aliases, debe ejecutar
newaliases
después y reinicie Postfix:
/etc/init.d/postfix restart
9 Instale amavisd-new, SpamAssassin y ClamAV
Para instalar amavisd-new, spamassassin y clamav, ejecute el siguiente comando:
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax
Posteriormente debemos configurar amavisd-new. La configuración se divide en varios archivos que residen en el directorio /etc/amavis/conf.d. Eche un vistazo a cada uno de ellos para familiarizarse con la configuración. La mayoría de las configuraciones están bien, sin embargo, debemos modificar tres archivos:
Primero debemos habilitar ClamAV y SpamAssassin en /etc/amavis/conf.d/15-content_filter_mode descomentando las líneas @bypass_virus_checks_maps y @bypass_spam_checks_maps:
vi /etc/amavis/conf.d/15-content_filter_mode
El archivo debería verse así:
use strict;
# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.
#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
1; # insure a defined return |
Y luego debería echar un vistazo a la configuración de spam y las acciones para spam-/virus-mails en /etc/amavis/conf.d/20-debian_defaults. No es necesario cambiar nada si la configuración predeterminada le parece bien. El archivo contiene muchas explicaciones, por lo que no es necesario explicar la configuración aquí:
vi /etc/amavis/conf.d/20-debian_defaults
$QUARANTINEDIR = "$MYHOME/virusmails";
$log_recip_templ = undef; # disable by-recipient level-0 log entries
$DO_SYSLOG = 1; # log via syslogd (preferred)
$syslog_ident = 'amavis'; # syslog ident tag, prepended to all messages
$syslog_facility = 'mail';
$syslog_priority = 'debug'; # switch to info to drop debug output, etc
$enable_db = 1; # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 1; # enable use of libdb-based cache if $enable_db=1
$inet_socket_port = 10024; # default listenting socket
$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
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger
$sa_local_tests_only = 0; # only tests which do not require internet access?
[...]
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny = D_BOUNCE;
$final_bad_header_destiny = D_PASS; # False-positive prone (for spam)
[...] |
Finalmente, edite /etc/amavis/conf.d/50-user y agregue la línea $pax='pax'; en el medio:
vi /etc/amavis/conf.d/50-user
[...]
$pax='pax';
[...] |
Luego, ejecute estos comandos para agregar el usuario clamav al grupo amavis y reiniciar amavisd-new y ClamAV:
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
A continuación, debemos editar el archivo de configuración del daemon de Freshclam (ese es el daemon que obtiene de forma regular y automática las firmas de virus más recientes de un espejo de ClamAV) porque contiene un pequeño error. Abra /etc/clamav/freshclam.conf y modifique la línea NotifyClamd como se muestra a continuación:
vi /etc/clamav/freshclam.conf
[...]
NotifyClamd /etc/clamav/clamd.conf
[...] |
Luego reinicie Freshclam (asegúrese de que no se esté ejecutando ningún otro proceso de Freshclam (quizás de otra instalación de ClamAV) porque entonces nuestro Freshclam no podrá iniciarse):
/etc/init.d/clamav-freshclam restart
Ahora tenemos que configurar Postfix para canalizar el correo electrónico entrante a través de amavisd-new:
postconf -e 'content_filter =amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options =no_address_mappings'
Luego agregue las siguientes líneas a /etc/postfix/master.cf:
vi /etc/postfix/master.cf
[...]
amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_bind_address=127.0.0.1 |
Luego reinicie Postfix:
/etc/init.d/postfix restart
Ahora corre
netstat -tap
y debería ver Postfix (maestro) escuchando en el puerto 25 (smtp) y 10025, y amavisd-new en el puerto 10024:
[email protected]:/usr/local/sbin# netstat -tap
Conexiones activas de Internet (servidores y establecidos)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID/Nombre del programa
tcp 0 0 localhost.localdo:10024*:*escucha 16043 /amavisd (mast
tcp 0 0 localhost.localdo:10025*:*escucha 15794 /maestro
tcp 0 0 localhost.localdo:mysql* :*Escucha 4783 /mysqld
tcp 0 0*:smtp*:*escucha 15794 /maestro
tcp6 0 0*:imaps*:*escucha 13452 /couriertcpd
tcp6 0 0*:pop3s *:*Escucha 13517/couriertcpd
tcp6 0 0*:pop3*:*escucha 13480/courior ouriertcpd
tcp6 0 0*:www*:*escucha 4489/apache2
tcp6 0 0*:ssh*:*escucha 3193/sshd
Razor, Pyzor y DCC son filtros de spam que utilizan una red de filtrado colaborativo. Para instalarlos, ejecute
apt-get install razor pyzor dcc-client
Ahora tenemos que decirle a SpamAssassin que use estos tres programas. Edite /etc/spamassassin/local.cf y agréguele las siguientes líneas:
vi /etc/spamassassin/local.cf
[...]
# dcc
use_dcc 1
dcc_path /usr/bin/dccproc
dcc_add_header 1
dcc_dccifd_path /usr/sbin/dccifd
#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
pyzor_add_header 1
#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf
#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1 |
Reinicie amavisd-new después:
/etc/init.d/amavis restart
11 notificaciones de superación de cuota
Si desea recibir notificaciones sobre todas las cuentas de correo electrónico que superan la cuota, haga lo siguiente:
cd /usr/local/sbin/
wget http://puuhis.net/vhcs/quota.txt
mv cuota.txt cuota_notificar
chmod 755 cuota_notificar
Abra /usr/local/sbin/quota_notify y edite las variables en la parte superior. Más abajo en el archivo (hacia el final) hay dos líneas donde debe agregar un signo %:
vi /usr/local/sbin/quota_notify
[...]
my $POSTFIX_CF = "/etc/postfix/main.cf";
my $MAILPROG = "/usr/sbin/sendmail -t";
my $WARNPERCENT = 80;
my @POSTMASTERS = ('[email protected]');
my $CONAME = 'My Company';
my $COADDR = '[email protected]';
my $SUADDR = '[email protected]';
my $MAIL_REPORT = 1;
my $MAIL_WARNING = 1;
[...]
print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.\n";
[...]
print "Your mailbox: $luser is $lusers{$luser}% full.\n\n";
[...] |
Ejecutar
crontab -e
para crear un trabajo cron para ese script:
0 0 * * * /usr/local/sbin/quota_notify &> /dev/null |
(Nota (un poco fuera de tema):en Ubuntu crontab -e abrirá automáticamente el editor nano. Si está acostumbrado a trabajar con el editor vi (como yo), ejecute los siguientes comandos:
rm -f /etc/alternativas/editor
ln -s /usr/bin/vi /etc/alternativas/editor
Luego, ejecute crontab -e, y aparecerá vi.)
12 Postfijo de prueba
Para ver si Postfix está listo para SMTP-AUTH y TLS, ejecute
telnet localhost 25
Una vez que haya establecido la conexión con su servidor de correo Postfix, escriba
ehlo localhost
Si ves las líneas
250-STARTTLS
y
250-AUTH
todo está bien:
[email protected]:/usr/local/sbin# telnet localhost 25
Probando 127.0.0.1...
Conectado a localhost.localdomain.
El carácter de escape es '^]'.
220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250 -VRFY
250-ETRN
250-STARTTLS
250-AUTH INICIO DE SESIÓN
250-AUTH=INICIO DE SESIÓN
250-CÓDIGOS DE ESTADO MEJORADOS
250-8BITMIME
250 DSN
salir
221 2.0.0 Adiós
Conexión cerrada por host externo.
[email protected]:/usr/local/sbin#
Tipo
quit
para volver al shell del sistema.
13 Completar la base de datos y probar
Para llenar la base de datos, puede usar el shell de MySQL:
mysql -u root -p
UTILIZAR correo;
Al menos hay que crear entradas en las tablas domains y usuarios :
INSERTAR EN `dominios` (`dominio`) VALUES ('ejemplo.com');
INSERTAR EN `usuarios` (`correo electrónico`, `contraseña`, `cuota`) VALUES ('[email protected]', ENCRIPT('secreto'), 10485760);
(¡Tenga cuidado de utilizar la sintaxis ENCRYPT en la segunda instrucción INSERT para cifrar la contraseña!)
Si desea realizar entradas en las otras dos tablas, se vería así:
INSERTAR EN `reenvíos` (`fuente`, `destino`) VALORES ('[email protected]', '[email protected]');
INSERTAR EN `transporte` (`dominio`, `transporte`) VALORES ('ejemplo.com', 'smtp:mail.ejemplo.com');
Para salir del shell de MySQL, escriba
quit;
Para la mayoría de las personas es más fácil si tienen una interfaz gráfica para MySQL; por lo tanto, también puede usar phpMyAdmin (en este ejemplo bajo http://192.168.0.100/phpmyadmin/ o http://server1.example.com/phpmyadmin/) para administrar el correo base de datos. De nuevo, cuando cree un usuario, asegúrese de utilizar la función ENCRYPT para cifrar la contraseña:
No creo que tenga que explicar más la tabla de dominios y usuarios.
La tabla de reenvíos puede tener entradas como las siguientes:
fuente | destino | |
[correo electrónico protegido] | [correo electrónico protegido] | Redirige correos electrónicos de [email protected] a [email protected] |
@ejemplo.com | [correo electrónico protegido] | Crea una cuenta Catch-All para [email protected] Todos los correos electrónicos a example.com llegarán a [email protected], excepto aquellos que existen en la tabla de usuarios (es decir, si [email protected] existe en la tabla de usuarios, los correos electrónicos a [email protected] seguirán llegando a [email protected]). |
@ejemplo.com | @otrodominio.tld | Esto redirige todos los correos electrónicos a ejemplo.com al mismo usuario en otrodominio.tld. Por ejemplo, los correos electrónicos a [email protected] se reenviarán a [email protected] |
[correo electrónico protegido] | [correo electrónico protegido], [correo electrónico protegido] | Reenviar correos electrónicos para [email protected] a dos o más direcciones de correo electrónico. Todas las direcciones de correo electrónico enumeradas en destino reciben una copia del correo electrónico. |
La tabla de transporte puede tener entradas como estas:
dominio | transporte | |
ejemplo.com | : | Entrega correos electrónicos para example.com localmente. Esto es como si este registro no existiera en absoluto en esta tabla. |
ejemplo.com | smtp:mail.otrodominio.tld | Envía todos los correos electrónicos de example.com a través de smtp al servidor mail.anotherdomain.com. |
ejemplo.com | smtp:mail.otrodominio.tld:2025 | Envía todos los correos electrónicos de example.com a través de smtp al servidor mail.anotherdomain.com, pero en el puerto 2025, no en el 25, que es el puerto predeterminado para smtp. |
ejemplo.com |
smtp:[1.2.3.4] smtp:[1.2.3.4]:2025 smtp:[correo.otrodominio.tld] | Los corchetes evitan que Postfix realice búsquedas del registro MX DNS para la dirección entre corchetes. Tiene sentido para las direcciones IP. |
.ejemplo.com | smtp:mail.otrodominio.tld | El correo de cualquier subdominio de example.com se envía a mail.anotherdomain.tld. |
* | smtp:mail.otrodominio.tld | Todos los correos electrónicos se envían a mail.anotherdomain.tld. |
[email protected] | smtp:mail.anotherdomain.tld | Emails for [email protected] are delivered to mail.anotherdomain.tld. |
See
man transport
for more details.
Please keep in mind that the order of entries in the transport table is important! The entries will be followed from the top to the bottom.
Important: Postfix uses a caching mechanism for the transports, therefore it might take a while until you changes in the transport table take effect. If you want them to take effect immediately, run
postfix reload
after you have made your changes in the transport table.
14 References
- Tutorial:ISP-style Email Service with Debian-Sarge and Postfix 2.1:http://workaround.org/articles/ispmail-sarge/
- Postfix + Quota:http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
- Mail Passwords Encrypted using saslauthd:http://www.syscp.de/docs/public/contrib/cryptedmailpws
15 Links
- Postfix MTA:http://www.postfix.org/
- Postfix Quota Patch:http://web.onda.com.br/nadal/
- phpMyAdmin:http://www.phpmyadmin.net/
- Ubuntu:http://www.ubuntu.com/