GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Usuarios virtuales y dominios con Postfix, Courier y MySQL (Ubuntu 6.10 Edgy Eft)

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

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 ).

[...]

deb http://de.archive.ubuntu.com/ubuntu/ edgy universe

deb-src http://de.archive.ubuntu.com/ubuntu/ edgy universe

[...]

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] .

dominio
ejemplo.com

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).

fuente destino
[correo electrónico protegido] [correo electrónico protegido]

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,

correo electrónico contraseña cuota
[correo electrónico protegido] No9.E4skNvGa. ("secreto" en forma encriptada) 10485760

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
dominio transporte
ejemplo.com smtp:[1.2.3.4]

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
[...]

bind-address            = 127.0.0.1

[...]
vi /etc/postfix/mysql-virtual_forwardings.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_mailboxes.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_email2email.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_transports.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_mailbox_limit_maps.cf
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT transport FROM transport WHERE domain='%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

6 Configurar Saslauthd

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
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT quota FROM users WHERE email='%s'

hosts = 127.0.0.1

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
# 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"

A continuación, cree el archivo /etc/postfix/sasl/smtpd.conf. Debería verse así:

vi /etc/postfix/sasl/smtpd.conf
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

Luego reinicie Postfix y Saslauthd:

/etc/init.d/postfix reiniciar
/etc/init.d/saslauthd reiniciar

7 Configurar mensajería

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
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 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
[...]

authmodulelist="authmysql"

[...]

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
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

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í:

# Added by installer for initial user

root:   postmaster

postmaster: [email protected]

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
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

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
$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)

[...]

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
[...]

$pax='pax';

[...]

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
[...]

NotifyClamd /etc/clamav/clamd.conf

[...]

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

 

10 Instale Razor, Pyzor y DCC y configure SpamAssassin

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
[...]

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

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
[...]



# 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

Ejecutar

crontab -e

para crear un trabajo cron para ese script:

[...]

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";

[...]

(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:

0 0 * * * /usr/local/sbin/quota_notify &> /dev/null

La tabla de transporte puede tener entradas como estas:

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.

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

  • 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/

Ubuntu
  1. Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Ubuntu 14.04LTS)

  2. Alojamiento virtual con Proftpd y MySQL (incluida la cuota) en Ubuntu 14.04LTS

  3. Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Ubuntu 13.10)

  4. Usuarios virtuales y dominios con Sendmail

  5. Servidor de correo con usuarios y dominios virtuales usando Postfix y Dovecot en un CentOS 6 VPS

Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Ubuntu 12.10)

Alojamiento virtual con vsftpd y MySQL en Ubuntu 12.10

Alojamiento virtual con Proftpd y MySQL (incluida la cuota) en Ubuntu 12.10

Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Debian Wheezy)

Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (CentOS 6.3 x86_64)

Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Fedora 18 x86_64)

    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.