lunes, 10 de septiembre de 2007

Mi Servidor de Correo perfecto tipo ISP ( debian etch 4.0, postfix, dovecot, mysql, amavis, spamassassin, Squirrelmail y clamav

Actualizado y probado al 12 de Octubre del 2007.

Este tutorial esta basado en el excelente tutorial publicado en workaround.

Paso 1- Instalación de los paquetes necesarios
$> aptitude install postfix-mysql
$>
aptitude install mysql-server-5.0
$> aptitude install dovecot-pop3d
$> aptitude install dovecot-imapd
$> aptitude install amavisd-new
$> aptitude install spamassassin clamav-daemon cpio arj zoo nomarch lzop cabextract pax
$> aptitude install openssl
$> aptitude install squirrelmail
$> aptitude install libapache2-mod-php5 php5-mysql
$> aptitude install telnet
$> aptitude install mutt
$> aptitude install ruby ruby1.8-dev irb rdoc rubygems

Paso 2- Creación de la BD que gestionara las cuentas de correo electrónico.

$> mysqladmin password TuPasswordVaAqui
gt; mysqladmin password TuPasswordVaAqui
gt; mysqladmin password TuPasswordVaAqui
gt; mysqladmin password TuPasswordVaAqui
gt; mysqladmin password TuPasswordVaAqui
gt; mysqladmin password TuPasswordVaAqui
$> mysqladmin -p create correo_production
gt; mysqladmin -p create correo_production
gt; mysqladmin -p create correo_production
gt; mysqladmin -p create correo_production
gt; mysqladmin -p create correo_production
gt; mysqladmin -p create correo_production
$> mysql -p
gt; mysql -p
gt; mysql -p
gt; mysql -p
gt; mysql -p
gt; mysql -p

cuando veas el prompt de mysql ingresa la siguiente sentencia SQL para crear
los privilegios necesarios del usuario que gestionara la BD.

mysql>
GRANT SELECT ON correo_production.*
TO adminuser@localhost IDENTIFIED BY 'PasswdDelUsuarioAdmin';
exit

Paso 3- Descargar y ejecutar la aplicación del correo electrónico.

Descargar la aplicación desde Aqui. e Instalar Rails

$> gem install -r rails -y
$> wget -c http://web-admin-email-server-isp-style.googlecode.com/files/correo_admin_v0.01-07091001.tar.bz2
$> tar xjf correo_v0.01-07090701.tar.bz2
$> cd correo

editar el fichero de configuracion y personalizar la parte de production, esta será la que utilizaremos.
$> vi config/database.yml

Al finalizar migraremos nuestro squema de BD de la aplicación hacia la BD con el siguiente comando.

$> rake db:migrate RAILS_ENV=production
gt; rake db:migrate RAILS_ENV=production
gt; rake db:migrate RAILS_ENV=production
gt; rake db:migrate RAILS_ENV=production
gt; rake db:migrate RAILS_ENV=production
gt; rake db:migrate RAILS_ENV=production

Paso 4- Configurar ficheros utilizados por postfix para interactuar con nuestra BD en MYSQL.

Crear el directorio mysql

$> mkdir /etc/postfix/mysql

Crear y editar el siguiente fichero

$> vi /etc/postfix/mysql/email2email.cf

Añadir lo siguiente.

user = root
password = YourPasswd
hosts = 127.0.0.1
dbname = correo_production
query = SELECT email FROM vista_usuarios WHERE email = '%s'

Guardar y salir.

Crear y editar el siguiente fichero

$> vi /etc/postfix/mysql/virtual_alias_maps.cf

Añadir lo siguiente

user = root
password = YourPasswd
hosts = 127.0.0.1
dbname = correo_production
query = SELECT destino FROM vista_alias WHERE email = '%s'


Crear y editar el siguiente fichero

$> vi /etc/postfix/mysql/virtual_lists_transport.cf

Añadir lo siguiente

user = root
password = YourPasswd
hosts = 127.0.0.1
dbname = correo_production
table = vista_listas
select_field = transport
where_field = domain


Crear y editar el siguiente fichero
$> vi /etc/postfix/mysql/virtual_mailbox_domains.cf

user = root
password = YourPasswd
hosts = 127.0.0.1
dbname = correo_production
query = SELECT 1 FROM dominios WHERE nombre='%s'


Crear y editar el siguiente fichero

$> vi /etc/postfix/mysql/virtual_mailbox_maps.cf

Añadir lo siguiente

user = root
password = YourPasswd
hosts = 127.0.0.1
dbname = correo_production
query = SELECT path FROM vista_usuarios WHERE email='%s'


Crear y editar el siguiente fichero

$> vi /etc/postfix/mysql/virtual_redirect_maps.cf

Añadir lo siguiente

user = root
password = YourPasswd
hosts = 127.0.0.1
dbname = correo_production
query = SELECT destino FROM vista_reenvios WHERE email = '%s'


Paso 5- Configurar postif para interactuar con la BD mysql

Añadir lo siguiente a nuestro /etc/postfix/main.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf

virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf

virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,
mysql:/etc/postfix/mysql/virtual_redirect_maps.cf,
mysql:/etc/postfix/mysql/email2email.cf

virtual_mailbox_base = /home/vmail/
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

# SASL Config.
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
smtpd_sasl_auth_enable=yes

virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
content_filter=smtp-amavis:[127.0.0.1]:10024
receive_override_options=no_address_mappings

#mailman add
transport_maps = mysql:/etc/postfix/mysql/virtual_lists_transport.cf
relay_domains = PonAquiElDominioDeMailMan


Edita ahora master.cf y verfica si estas estas lineas, si no estan añadirlas...

mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}

dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

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_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks


Paso 6- Configurar dovecot
Les adjunto las opciones seleccionadas en mi archivo de configuración.

Editar /etc/dovecot/dovecot.conf

protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n

namespace private {
separator = .
prefix = INBOX.
inbox = yes
}

mail_extra_groups = mail

protocol imap {
mail_plugins = quota imap_quota
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
mail_plugins = quota
}

protocol lda {
log_path = /home/vmail/dovecot-deliver.log
postmaster_address = webadmin@ucc.edu.ni
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = cmusieve quota
global_script_path = /home/vmail/globalsieverc
}

auth default {
mechanisms = plain login digest-md5 cram-md5
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}

user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
group = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}

plugin {
sieve = /home/vmail/%d/%n/sieve
trash = /etc/dovecot/trash.conf
}


Paso 7- Configuar el acceso a Dovecot a tu BD SQL.

Editar /etc/dovecot/dovecot-sql.conf y añadir lo siguiente

driver = mysql
connect = host=127.0.0.1 dbname=correo_production user=root password=tupasswordaqui
default_pass_scheme = PLAIN-MD5
password_query = select email as user, password from vista_usuarios where
email = '%u';
user_query = SELECT home, uid, gid, quota FROM vista_quotas WHERE email = '%u'

Paso 8- Arrancar tu aplicación.

$> /etc/init.d/postfix restart
$> /etc/init.d/dovecot restart
$> /etc/init.d/amavis restart
$> /etc/init.d/spamassassin restart
$> /etc/init.d/clamav-daemon restart
$> cd /opt/correo/
$> script/console production
>> dom = Dominio.new
>> dom.nombre = "test.com"
>> dom.save
>> adm = Usuario.new
>> adm.usuario = "UsuarioAdmin"
>> adm.nombre = "Nombre Completo del Usuario"
>> adm.admin = true
>> adm.dominio = dom
>> adm.password = "Tu Password Aqui"
>> adm.save
>> exit


Paso 9- Arrancar tu aplicación.

$> script/server -e production

En los mensajes que salen despues de ingresar este comando se puede visualizar el puerto
al que puedes conectarte para iniciar con la administración de las cuentas, normalmente el puerto
es el 3000 y te conectas utilizando firefox de la siguiente forma.

http://ipdetuservidor:3000

Este puerto lo puedes cambiar utilizando la instrucción

$> script/server -e production -p #puerto


Suerte.

1 comentario:

Jaime dijo...

Muy bueno, ya lo probe y funciona, te falto en la parte de las instalaciones poner el mailman