View
628
Download
0
Category
Preview:
DESCRIPTION
por acá les dejo un how to para elaborar un correo multidominio... espero les guste...
Citation preview
Servidor de Correo Multidominio
SERVIDOR DE CORREO MULTIDOMINIO
Problemática:
Al analizar la demanda de sus servicios de correo electrónico, una empresa de hosting se da cuenta que posee recursos de sobra, y decide empezar a vender servicios de hosting de correo electrónico. Por tanto necesita configurar servicios de correo tolerantes a fallos, que sean capaces de responder a múltiples dominios y que autentique a sus clientes en una base de datos de credenciales (LDAP). El servicio de correo que se brinde dependerá de la clasificación de los clientes, permitiéndoles determinadas casillas de correo, espacio de almacenamiento, antispam y antivirus, correo electrónico seguro, y otros elementos, en función del tipo de contrato que se establezca.
Para solucionar esta problemática se ha realizado un servidor multidominio utilizando las siguientes herramientas:
LDAP como base de datos para almacenar la información de los diferentes dominios y usuarios que se tendrán.
POSTFIX como agente de transferencia de correo.
COURIER como servidor IMAP
Apache2
BIND para DNS
Squirrelmail como web mail
Spamassassin para controlar el spam
El siguiente es un esquema de red de nuestro servidor:
HOW TO
Para comenzar nuestro servidor de correo debemos configurar nuestro DNS:
DNS
Domain Name System o DNS (sistema de nombres de dominio) es un sistema de nomenclatura jerárquica para computadoras, servicios o cualquier recurso conectado a Internet o a una red privada
Instalamos
#apt-get install bind9
De Nuevo vemos en que Puerto está escuchando
#netstat -tapn
Primero creamos la zona para el dominio que deseamos crear en el archivo #/etc/bind/named.conf.local
Y agregamos la zona con este formato:
zone "mailhosting.com.sv"{
type master;
file "/etc/bind/db.mailhosting";
};
Ahora creamos el archivo de la zona que lleva por nombre db.mailhosting, podemos copiar uno que ya existe en los archivos de bind de esta manera:
# cp /etc/bind/db.local /etc/bind/db.mailhosting
Y nos quedaria el archive modificado de la siguiente manera:
; archivo de configuracion de la zona
;
$TTL 604800
@ IN SOA mailhosting.com.sv. dns.mailhosting.com.sv. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS mailhosting.com.sv.
@ IN A aqui va al ip
www IN CNAME mailhosting.com.sv.
@ IN MX 10 mailhosting.com.sv.
La configuración de este archivo depende de nuestra configuración y de nuestra ip que tenemos asignada.
Luego reiniciamos el servicio
#/etc/init.d/bind9 restart
Luego ponemos en el archivo #nano /etc/resolv.conf y agregamos la línea
nameserver “y la ip que se tiene asignada”
Para probar los archivos de la zona se utiliza el comando named-checkconf –z aquí nos muestra los errores que nuestro archivo tiene.
Para probar si nos resuelve el dns hacemos ping y el dominio y veremos si nos responde y pone la ip que tiene asignada.
El siguiente paso es crear las zonas inversas
Creamos una nueva zona en el archivo
#/etc/bind/named.conf.local
zone "1.168.192.in-addr.arpa"{
type master;
file "/etc/bind/db.192”;
};
Ahora creamos el archivo para la zona inversa
#nano /etc/bind/db.192
;
; archive de la zona inversa
;
$TTL 604800
@ IN SOA mailhosting.com.sv. dns.mailhosting.com.sv. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
2 IN PTR mailhosting.com.sv.
Reiniciamos de Nuevo el servicio
#/etc/init.d/bind restart
Y se pueden verificar los archivos de la zona de Nuevo y hacer ping con nuestra ip para ver si resuelve la zona inversa.
POSTFIX
Postfix es un servidor de correo de software libre, un programa informático para el enrutamiento y envío de correo electrónico,
Configurando POSTFIX:
Instalar Postfix al instalarlo pedirá el nombre del dominio:
#apt-get install postfix
Luego vemos si está escuchando #netstat –tapn | grep LISTEN
Agregamos un grupo para postfix
# addgroup -gid 1005 vmail (el numero de id de grupo es importante)
Ahora creamos la carpeta donde se irán a almacenar los archivos
#mkdir /home/vmail
Ahora creamos un usuario en el grupo vmail este usuario será el encargado de la entrega de los correos.
#useradd –d /home/vmail –g 1005 –u 1005 vmail
Le demos permisos
# chown -R vmail:vmail /home/vmail/
Ahora se configura en archivo principal de configuración de Postfix
# nano /etc/postfix/main.cf
Se agregan las siguientes líneas al archivo de configuración para utilizar dominios virtuales:
virtual_mailbox_domain= /etc/postfix/vhost.txt
virtual_mailbox_base= /home/vmail
virtual_mailbox_maps= hash:/etc/postfix/maps.txt
virtual_uid_maps= static:1005
virtual_gid_maps= static:1005
Ahora vamos a crear los archivos vhost.txt y maps.txt
#nano /etc/postfix/vhost.txt (este archivo llevara en nombre del dominio)
#nano /etc/postfix/maps.txt (es importante que lleve la pleca al final la dirección)
juan@protocolos.com protocolos.com/juan/
Ahora vamos a hacer que el archivo maps.txt lo pueda leer postfix como hash
# postmap -f /etc/postfix/maps.txt
Ahora reiniciamos el servicio para que se lleven a acabo todos los cambios.
# /etc/init.d/postfix restart
Ahora ya podemos realizar una prueba para ver si está bien el archivo
# postmap -q juan@protocolos.com hash:/etc/postfix/maps.txt
Esto nos debe de devolver el mailbox de la siguiente manera: protocolos.com/juan/
Ahora vamos a probar mandar correos para que cree las carpetas correspondientes
# telnet localhost 25
Trying 127.0.0.1...
Connected to protocolos.mailhosting.com.sv.
Escape character is '^]'.
220 protocolos.mailhosting.com.sv ESMTP Postfix (Debian/GNU)
mail fromcualquiercosa@cualquiercosa.com>
250 2.1.0 Ok
rcpt tojuan@protocolos.com>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
holaaa
.
250 2.0.0 Ok: queued as E0CE46FC77
quit
Para verificar que mando el correo se deben de ver si creo las carpetas del usuario en este caso juan@protocolos.com las carpetas están en /home/vmail/protocolos/juan
También se puede verificar en el log /var/log/mail.log
LDAP
LDAP son las siglas de Lightweight Directory Access Protocol (Protocolo Ligero de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación el cual permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también es considerado una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.
Antes de configurar ldap se debe cambiar el nombre del dominio (protocolos.mailhosting.com.sv)
Configurar ldap:
Instalar (slapd, ldap-utils)
Pide la contraseña de administración de ldap
Para ver en qué puerto está escuchando ldap se pone
#netstat -tapn | grep LISTEN
Se detiene slapd
#/etc/init.d/slapd stop
Luego instalamos Courier-authlib-ldap para obtener el esquema
Luego de que se baje se descomprime gzip –d
#gzip –d /usr/share/doc/Courier-authlib-ldap/authldap.schema.gz
Al descomprimir copiamos el esquema a los esquemas de ldap
#cp /usr/share/doc/Courier-auth-ldap/authldap /etc/ldap/schema.
Ahora agregamos el esquema:
Antes de agregar el esquema tenemos que verificar que nuestro árbol si está bien con esta instrucción:
# ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"
Ahora hay que pasar el esquema a ldif pero antes vemos el esquema authldap.schema y vemos las dependencias del esquema al verlo vemos
que este depende de nis.schema el cual depende de cosine.schema.
En el esquema se deben de descomentar las siguientes líneas si no causara conflictos:
#attributetype ( 1.3.6.1.4.1.10018.1.1.14 NAME 'mailhost'
# DESC 'Host to which incoming POP/IMAP connections should be proxied'
# EQUALITY caseIgnoreIA5Match
# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
Ahora hay que crear un archivo que incluya todos los schemas debemos tener en cuenta las dependencias. El archivo se creara en /tmp y tener cualquier nombre por ejemplo /tmp/archivo.conf el archivo tendrá lo siguiente:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/authldap.schema
Ahora se crea el directorio /tmp/directorio
Luego haremos un slapdtest
#slaptest -f /tmp/archivo.conf -F /tmp/directorio
Luego lo copiamos a los esquemas de ldap de esta manera
#cp/tmp/directorio/cn\=config/cn\=schema/cn\=\{4\}authldap.ldif /etc/ldap/slapd.d/cn\=config/cn\=schema/
Luego damos los permisos convenientes para ldap y reiniciamos ldap # chown openldap:openldap /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{4\}authldap.ldif # /etc/init.d/slapd restart
Para crear los usuarios creamos un archivo con lo siguiente:
//Este usuario lector solo se utilizara con permisos de lectura
dn: cn=lector,dc=mailhosting,dc=com,dc=sv
cn: lector
objectclass: person
objectclass: simpleSecurityObject
objectclass: top
sn: lector
userpassword: {MD5}3TgaBQ8Zh+e1x7cylv1JpQ==
dn: o=administradores,dc=mailhosting,dc=com,dc=sv
o: administradores
objectclass: organization
objectclass: top
dn: o=Dominios,dc=mailhosting,dc=com,dc=sv
o: Dominios
objectclass: organization
objectclass: top
Luego se agregan entidades en nuestro árbol en este caso se crearan dos una para dominios y una para administradores:
#ldapadd -D "cn=admin,dc=mailhosting,dc=com,dc=sv" -W -f Escritorio/base.ldif
Ahora vamos a crear un usuario para cada parte de nuestro árbol para dominios vamos a crear protocolos.com , vamos a crear un usuario Beatriz para el dominios protocolos.com
dn: uid=administrador@protocolos.com,o=administradores,dc=mailhosting,dc=com,dc=sv
cn: protocolos.com
objectclass: person
objectclass: shadowAccount
objectclass: top
shadowflag: 1
sn: protocolos.com
uid: administrador@protocolos.com
userpassword: {MD5}gTaWsOiOoF1FOAwf11tAcA==
dn: dc=protocolos.com,o=Dominios,dc=mailhosting,dc=com,dc=sv
businesscategory: 3
dc: protocolos.com
l: activa
o: protocolos.com
objectclass: dcObject
objectclass: organization
objectclass: top
dn:uid=beatriz@protocolos.com,dc=protocolos.com,o=Dominios,dc=mailhosting,dc=com,dc=sv
cn: beatriz
disableshared: activa
homedirectory: /home/vmail
mail: beatriz@protocolos.com
mailbox: protocolos.com/beatriz/
objectclass: CourierMailAccount
objectclass: person
objectclass: top
sn: nick
uid: beatriz@protocolos.com
userpassword: {MD5}MjJCCXNoV35vOqwDxtzttg==
Luego agregamos el archivo a ldap
#ldapadd -D "cn=admin,dc=mailhosting,dc=com,dc=sv" -W -f Escritorio/dominio.ldif
UNIR LDAP CON POSTFIX
Se instala el paquete postfix-ldap
#apt-get install postfix-ldap
Creamos una carpeta dentro de postfix para guardar los archivos de consulta a ldap.
#mkdir /etc/postfix/ldap
Ahora vamos a crear un archivo .cf para poner los dominios desde ldap.
#nano /etc/postfix/ldap/dominios.cf
server_host = 127.0.0.1
server_port = 389
version = 3
ldap_bind= yes
bind_dn = cn=lector,dc=mailhosting,dc=com,dc=sv
bind_pw = lector
search_base = o=Dominios,dc=mailhosting,dc=com,dc=sv
query_filter = (&(objectClass=dcObject)(l=activa)(dc=%s))
result_attribute = dc
También se crea un archive .cf para los usuarios
#nano /etc/postfix/ldap/maps.cf
server_host = 127.0.0.1
server_port = 389
version = 3
ldap_bind= yes
bind_dn = cn=lector,dc=mailhosting,dc=com,dc=sv
bind_pw = lector
search_base = o=Dominios,dc=mailhosting,dc=com,dc=sv
query_filter = (&(objectClass=CourierMailAccount)(disableshared=activa)(mail=%s))
result_attribute = mailbox
Ahora hay que modificar el archivo main.cf de postfix para que trabaje con ldap:
# nano /etc/postfix/main.cf
virtual_mailbox_domains=ldap:/etc/postfix/ldap/dominios.cf
virtual_mailbox_maps= ldap:/etc/postfix/ldap/maps.cf
Otra vez para probar se puede mandar correo mediante telnet y ver el log.
SERVIDOR IMAP
Instalar Courier
#apt-get install courier-imap Courier-pop
Luego hará una pregunta y se contesta que no:
Luego vemos en que puerto esta escuchanto
#netstat –tapn
Ahora nos vamos al archivo de configuración de courier
# nano /etc/courier/authdaemonrc
Y cambiaremos esta línea
authmodulelist="authpam"
por esta
authmodulelist="authpam authldap" para que este ligado con ldap pero si existe algún problema esto se puede modificar, el DEBUG_LOGIN=1 para ver los errores.
Luego vamos al archivo de configuración
# nano /etc/courier/authldaprc
LDAP_URI ldap://localhost (aquí se pone la dirección de nuestro ldap en nuestro caso localhost)
LDAP_BASEDN o=Dominios,dc=mailhosting,dc=com,dc=sv (en esta se modifica la base donde se ira a buscar)
LDAP_BINDPW sucontraseña (y aquí se pone la contraseña para ldap)
LDAP_MAIL mail (esta es la respuesta que queremos en nuestro caso en mail )
Descomentamos estas línea:
# LDAP_FILTER (objectClass=CourierMailAccount)
# LDAP_GLOB_UID vmail
# LDAP_GLOB_GID vmail
# LDAP_MAILDIRQUOTA quota
Y colocamos el query
LDAP_FILTER (&(objectClass=CourierMailAccount)(disableshared=activa))
Comentar esta linea:
#LDAP_DEFAULTDELIVERY defaultDelivery
Ahora se reinicia
# /etc/init.d/Courier-authdaemond restart
Ahora se puede probar:
# telnet localhost 110
Trying 127.0.0.1...
Connected to protocolos.mailhosting.com.sv.
Escape character is '^]'.
+OK Hello there.
user beatriz@protocolos.com
+OK Password required.
pass beatriz
+OK logged in.
HTTP
Se instala:
#apt-get install apache2-mpm-prefork
ahora vamos a crear sitios virtuales los cuales nos serviran para el ordenamiento de nuestor servidor.
Copiamos el sitio por default que tiene apache para crear nuestro sitios todo esto lo hacemos en sites-available
# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/malihosting
Ahora modificamos el archivo
# /etc/apache2/sites-available/mailhosting
Se deja el archivo de la siguiente manera
ServerAdmin webmaster@localhost
ServerName www.mailhosting.com.sv
ServerAlias mailhosting.com.sv
DocumentRoot /var/www/mailhosting
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/mailhosting/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Creamos el archivo donde ira a buscar nuestra pagina a mostrar
#mkdir /var/www/mailhosting
Habilitamos el dominio virtual
# a2ensite mailhosting
Ahora recargaremos el servidor apache
# /etc/init.d/apache2 reload
Copiamos una pagina inicial para que aparezca en nuestro dominio
#cp /var/www/index.html /var/www/mailhosting/
WEB MAIL
Un webmail es un cliente de correo electrónico, que provee una interfaz web por la que acceder al correo electrónico.
Es esta ocasión utilizamos el web mail Squirrelmail
Instalamos
#apt-get install squirrelmail
Luego lo configuramos
# squirrelmail-configure:
Aparece el siguiente menú:
Luego aparece esta pantalla y elegimos Courier:
Ahora necesitamos crear un link para que se pueda entrar a squirrelmail
Entramos a la carpeta del dominio #cd /var/www/mailhosting
Y creamos ahí el link #ln -s /usr/share/squirrelmail/ correo
Ya con esto podemos entrar a un navegador y entrar al correo que hemos creado.
Configuración para reconocer Spam
Instalar el paquete de spamassassin
#apt-get install spamassassin spamc
vamos a crear un usuario específico y un grupo de spamassassin
#groupadd -g 5001 spamd #useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd #mkdir /var/lib/spamassassin #chown spamd:spamd /var/lib/spamassassin
Ahora, tenemos que cambiar algunos parámetros en / etc / default / spamassassin y debe de quedar de la siguiente manera:
ENABLED=1
SAHOME=”/var/lib/spamassassin/”
OPTIONS=”—creat-prefs –max-children 5 –username spamd –helper-home-
Dir ${SAHOME} –s ${SAHOME}spamd.log”
PIDFILE=”${SAHOME}spamd.pid”
vamos a editar el archivo / etc / spamassassin / local.cf y hacer que se parezca a lo siguiente:
#Enable the Bayes system
Use_bayes 1
Use_bayes_rules 1
#Eneble Bayes auto-learning
Bayes_auto_learn 1
#Enable or disable network checks
Skip_rb1_checks 0
Use_razor2 0
Use_dcc 0
Use_pyzor 0
Iniciamos el servicio
#/etc/init.d/spamassassin start
Ahora, tenemos que decirle a postfix para va a usar spamassassin. En nuestro caso,spamassassin va a ser invocado una vez postfix ha terminado con el correo electrónico. para decirle a postfix que va a usar spamassassin, vamos a editar el archivo / etc / postfix /master.cf y cambiar la línea:
Smtp inet n - - - - smtp
Y que aparezca esto:
Smtp inet n - - - - smtp -o content_filter=spamassassin
Y agregamos las siguientes lineas
Spamassassin unix - n n - - pipe
User=spamd argv=/usr/bin/spamc –f –e
/usr/sbin/sendmail –io –f $(sender) $(recipient)
Y al final reiniciamos postfix
#/etc/init.d/postfix reload
Recommended