Tabla de contenidos
|
Introduccion
Desde hace ya varios años que vengo instalando servidores de correo sobre alguna distribucion de Linux, pero siempre tengo que estar buscando por la red los tips para refrescar la memoria. Y ahora casualmente y por motivos de trabajo tengo que hacer un howto, entonces es hora de aprovechar la oportunidad.
Requerimientos
Paquetes
Repositorios
Antes de echar manos a la obra, es buena idea verificar que la configuracion del APT de nuestro Debian contengan los repositorios contrib y non-free.
deathbian:~# vim /etc/apt/sources.list
deb http://ftp.debian.org/debian/ etch main contrib non-free deb-src http://ftp.debian.org/debian/ etch main contrib non-free deb http://security.debian.org/ etch/updates main contrib non-free deb-src http://security.debian.org/ etch/updates main contrib non-free
Instalacion Courier base
Para poner nuestro servidor de correo en marcha es necesario instalar estos paquetes
- Courier
- Spamassassin
- Clamcour
de la siguiente manera;
deathbian:~# apt-get install courier-mta deathbian:~# apt-get install courier-imap deathbian:~# apt-get install courier-imap-ssl deathbian:~# apt-get install courier-maildrop deathbian:~# apt-get install spamassassin deathbian:~# apt-get install clamcour
Archivos de configuracion
ClamAV
Al instalar los paquetes del clam antivirus automaticamente nuestro Linux Debian los configura, (aca encontraran parametros para tunear la instalacion). Sin embargo, y ya que deseamos que nuestro servicio de correo pueda vacunar el contenido antes de llegar a las casillas de los usuarios, debemos crear el archivo /usr/bin/clamscan.sh, con el siguiente contenido
archivo: /usr/bin/clamscan.sh |
#!/bin/bash # Created by Tom Walsh, slim at ala.net # slightly modified by Wolfgang Ziegler, nuppla at gmx.at RUN=clamscan # Enable this line, if you are using the clamav-daemon. # RUN=clamdscan #start MSG=$(< /proc/self/fd/0) # stdin -> $MSG SCAN=$(echo "$MSG" | $RUN - --stdout --disable-summary) EXIT="$?" VIRUS=$(echo "$SCAN" | awk '{print $2}') SUBJECT=$(echo "$MSG" | reformail -x Subject:) if [ "$EXIT" == "1" ]; then SUBJECT="**VIRUS** [$VIRUS] $SUBJECT" MSG=$(echo "$MSG" | reformail -i"X-Virus-Status: INFECTED") MSG=$(echo "$MSG" | reformail -i"Subject: $(echo "$SUBJECT")") else MSG=$(echo "$MSG" | reformail -i"X-Virus-Status: CLEAN") fi echo "$MSG" exit 0 |
No olviden volver el archivo ejecutable…
chmod +x /usr/bin/clamscan.sh
SpamAssassin
Para realizar la configuracion del SpamAssassin, corremos el shell de perl, con el siguiente comando:
perl -MCPAN -e shell
ya dentro del shell, tecleamos:
install Mail::SpamAssassin
y opcionalmente
install Mail::SPF::Query
install IP::Country::Fast
Si la interfaz de instalacion les pregunta si desean correr las pruebas de Razor2 o DCC, solo presionen enter para seleccionar NO. Al terminar tecleen q y presionen enter para terminar.
Ahora editemos el archivo /etc/mail/spamassassin/local.cf de la siguiente manera:
archivo: /etc/mail/spamassassin/local.cf |
# # Created by Luis Fernando Gramajo, fher98 at guatewireless.net # v.1.0 report_safe 0 trusted_networks 10.0.1/24 #Las redes en las cuales confiamos required_hits 6.0 #Puntuacion requerida por un correo para ser catalogado como spam whitelist_from *@guatewireless.net #dominio en el cual confiamos y no esperamos spam use_bayes 1 bayes_path /var/lib/spamassassin/bayes #El directorio /var/lib/spamassassin sera necesario crearlo auto_whitelist_path /var/lib/spamassassin/auto-whitelist bayes_auto_learn_threshold_nonspam -0.1 skip_rbl_checks 0 use_razor2 1 razor_config /etc/razor/razor-agent.conf use_dcc 1 use_pyzor 0 pyzor_options --homedir /etc/pyzor #Solo es necesario si cambian use_pyzor 1 dns_available yes header LOCAL_RCVD Received =~ /.*(S+.domain.coms+[.*])/ describe LOCAL_RCVD Received from local machine score LOCAL_RCVD -50 ## Aumentos de puntuacion -- opcionales score DCC_CHECK 2.500 #Un buen valor esta entre 2.500 y 4.000, pero depende del dominio score SPF_FAIL 10.000 score SPF_HELO_FAIL 10.000 score RAZOR2_CHECK 2.500 score BAYES_99 4.300 score BAYES_95 3.500 score BAYES_80 3.000 ## Reduccion de puntuacion -- opcionales, pero muy utiles score DK_SIGNED -1.000 score DK_VERIFIED -2.500 score SPF_PASS -2.500 |
En esta version de spamassassin tenemos que editar el archivo /etc/mail/spamassassin/v310.pre, y eliminamos el # de las dos lineas a continuacion
# DCC - perform DCC message checks. # # DCC is disabled here because it is not open source. See the DCC # license for more details. # loadplugin Mail::SpamAssassin::Plugin::DCC # Razor2 - perform Razor2 message checks. # # Razor2 is disabled here because it is not available for unlimited free # use. It is currently free for personal use, subject to capacity # constraints. See the Cloudmark SpamNet Service Policy for more details. # loadplugin Mail::SpamAssassin::Plugin::Razor2
Set de reglas
Vean el sitio de [Custom Rulesets page] para encontrar una serie de reglas especiales para instalar en tu sistema. Para instalar un rulset, simplemente se copia al directorio /etc/mail/spamassassin .
Verificacion de la configuracion
Es importante estar seguros que la configuracion del SpamAssassin esta correcta. Al terminar, tecleamos
spamassassin --debug --lint
Lo cual nos despliega una lista de la informacion de la configuracion que nos dice si hay algun tipo de error. Hay una gran cantidad de informacion en esta lista. Delen una revisada a cada linea de la lista para ver si todo esta en orden.
Maildrop
Maildrop es una herramienta nativa de Courier, diseñada para realizar avanzadas tareas de filtrado. Por el momento tan solo vamos a configurar Courier para que entrege los correos a traves de maildrop.
Para poder filtrar los correos a traves de maildrop editamos el archivo /etc/courier/courierd, buscamos el DEFAULTDELIVERY y lo cambiamos por
archivo: /etc/courier/courierd |
DEFAULTDELIVERY="| /usr/bin/maildrop" |
Filtrando con ClamAV y SpamAssassin
Este es el archivo general de maildrop para todo el sistema. Lo que escribamos aca afectara a todos los correos entrantes de los usuarios, y es por esta razon, que dentro de este archivo escribimos el script para poder filtrar los virus/spam con ClamAV y SpamAssassin.
archivo: /etc/courier/courierd |
#/etc/courier/maildroprc #Courier-ClamAV local scan #Por Luis Fernando Gramajo P. 23/11/06 #fher98 at gmail DOT com # Nuestro shell SHELL="/bin/bash" # El path por default DEFAULT = "$HOME/Maildir" #Tomando el nombre del usuario #import USER # El archivo de log logfile "/var/log/maildrop" # Verbosidad del log VERBOSE="5" # Solo se verifican con antivirus mails menores de VSCANSIZE VSCANSIZE="20000000" # Los mails pasan por las capas de los filtros antispam solo si con menores que SCANSPAMSIZE SCANSPAMSIZE="20000000" ############################################################################### # # Haciendo uso de ClamAV para eliminar virus. # ############################################################################### if( $SIZE < $VSCANSIZE ) { exception { xfilter "/usr/bin/clamscan.sh" } } if(/^X-Virus-Status:.*INFECTED/) { `test -d $DEFAULT/.Quarantine` if ( $RETURNCODE == 1 ) { `/usr/bin/maildirmake -f Quarantine $DEFAULT` `echo INBOX.Quarantine >> $DEFAULT/courierimapsubscribed` } exception { #to "$DEFAULT/.Quarantine/" to "/dev/null" } } # Esto es agregado sobre cada registro en la bitacora. # Tan solo una simple ayuda visual. log "--------------------------------------------------" ############################################################################### # # Haciendo uso de SpamAssassin para eliminar el spam. # ############################################################################### if( $SIZE < $SCANSPAMSIZE ) { xfilter "/usr/bin/spamc -u $USER -s $SCANSPAMSIZE" } if (/^X-Spam-Flag: YES/:h || /^X-Spam-Status: Yes/:h) { #Se crea el directorio para el spam `test -d $DEFAULT/.Spam` if( $RETURNCODE == 1 ) { `/usr/bin/maildirmake -f Spam $DEFAULT` `echo INBOX.Spam >> $DEFAULT/courierimapsubscribed` } exception { to "$DEFAULT/.Spam/" } } |
Courier
Los archivos de configuracion de Courier se encuentran en /etc/courier
/etc/courier/courierd
- La configuracion por default utiliza el formato mbox y no ./Maildir. Anteriormente hicimos el cambio para ser entregados via Maildrop.
archivo: /etc/courier/courierd |
######################################################################## # ##NAME: DEFAULTDELIVERY:0 # # Specify default delivery instructions by setting DEFAULTDELIVERY # One of the following definitions of DEFAULTDELIVERY should be # uncommented. # Ahora los correos se entregan dentro de ./Maildir, via maildrop DEFAULTDELIVERY="| /usr/bin/maildrop" |
/etc/courier/esmtpd
archivo: /etc/courier/esmtpd |
BOFHCHECKDNS=1 BOFHNOEXPN=1 BOFHNOVRFY=1 ESMTPAUTH="LOGIN" BLACKLISTS="-block=relays.ordb.org,BLOCK -block=sbl-xbl.spamhaus.org,BLOCK -block=bl.spamcop.net,BLOCK" |
/etc/courier/esmtphelo
- Aca tecleamos el FQDN de nuestro servidor de correo. La mayoria de servidores de correo no aceptan correos si el FQDN del remitente no esta debidamente registrado.
echo "host.dominio.tld" >/etc/courier/esmtphelo
/etc/courier/me
- En este archivo tambien debemos ingresar el nombre FQDN de nuestro servidor de correo (tambien puede ser el nombre local de la maquina).
echo "host.dominio.tld" >/etc/courier/me
/etc/courier/aliaes/dominio.tld
- fher98 es un usuario local del sistema.
archivo: /etc/courier/aliaes/dominio.tld |
[email protected]: fher98 |
/etc/courier/esmtpacceptmailfor.dir/dominio.tld
archivo: /etc/courier/esmtpacceptmailfor.dir/dominio.tld |
dominio.tld |
/etc/courier/hosteddomains/domain.tld
archivo: /etc/courier/hosteddomains/domain.tld |
dominio.tld host.dominio.tld<tab>dominio.tld |
/etc/courier/bofh
archivo: /etc/courier/bofh |
opt BOFHSPFMAILFROM=none,pass,neutral,unknown opt BOFHSPFFROM=mailfromok,all opt BOFHSPFTRUSTME=1 opt BOFHBADMIME=accept opt BOFHCHECKHELO=0 |
Iniciar los Servicios
Courier MTA
- Aca levantamos los servicios del Courier.
deathbian:~# /etc/init.d/courier-mta restart deathbian:~# /etc/init.d/courier-imap restart deathbian:~# /etc/init.d/courier-authdaemon restart
Sistema de Filtrado Antivirus/AntiSpam
- Tan facil como:
deathbian:~# /etc/init.d/spamd start deathbian:~# /etc/init.d/clamd start deathbian:~# /etc/init.d/courier restart deathbian:~# filterctl start clamcour
Verifiquen la bitacora (log) del correo para ver la activacion del clamcour.
Preciso: lo que NO RESPONDE es telnet usando la dirección IP:
telnet 25
Luis
En serio estas ejecutando “telnet 25” solo asi?
No, por supuesto que no. Lo que quiero decir es
que telnet al puerto 25 de la dirección IP de mi servidor no responde.
Al enviar el mensaje parece que se eliminó del comentario lo de la
“dirección IP” al ponerla entre los sÃmbolos (mayor y menor).
Sucedi{o en mis dos comentarios, el grande y el pequeño
Mmmm, reiniciaste el courier-mta despues de la config? y ejecutaste lo que dice desde /etc/courier/esmtpd ???
Hola,
Hice lo que recomiendas -y otras cosas más- y no cambia la situación.
Alguna información adicional sobre el asunto:
1. Verificando IPTABLES
myhostname:/home/luis# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
No parece que iptables sea el problema.
2. Verificando NETSTAT:
myhostname:/home/luis# netstat -lp | grep pop
tcp6 0 0 [::]:pop3 [::]:* LISTEN 2699/couriertcpd
myhostname:/home/luis# netstat -lp | grep imap
tcp6 0 0 [::]:imap2 [::]:* LISTEN 2659/couriertcpd
myhostname:/home/luis# netstat -lp | grep smtp
tcp 0 0 localhost:smtp *:* LISTEN 2690/couriertcpd ¡¡¡¡ OJO !!!!
Nótese que esta última respuesta es consistente con mi problema:
“localhost:smtp” en vez de “[::]:smtp”.
3. WRAPPERS:
Los ficheros /etc/hosts.allow y /etc/hosts.deny están como vienen por defecto: vacÃos.
4. INETD
El fichero /etc/inetd.conf está como vienen por defecto: sólo una linea referida a swat.
5. telnet –IP address– 25 – sigue sin responder.
Por alguna razón el servidor smtp de courier simplemente no está escuchando o rechaza todo
request al puerto 25 que provenga de una fuente externa.
Gracias,
Luis Capó
Mi recomendación: Instalá Zimbra (www.zimbra.com) y vas a tener menos clavos.
Acá un manual que realizó Manuel.
http://configuracionlinux.blogspot.com/2010/02/instalacion-de-zimbra-zcs-6-en-debian.html
Si, me parece muy interesante la propuesta de Zimbra. De hecho, me entusiasma, pero….
la voz de mi conciencia técnica me exige saber por qué (aquà va una mala palabra) mi servidor
rechaza solicitudes externas al puerto 25.
Preciso mi problema:
1. Con synaptic instalé la suite de Courier en mi servidor (Debian Lenny) usando los
paquetes .deb del repositorio oficial.
2. Una vez instalada y supuestamente configurada, al probarla tengo los
siguientes resultados:
telnet localhost 25 – responde bien
telnet 127.0.0.1 25 – responde bien
telnet hostname 25 – responde bien
telnet hostname.domainname.tld 25 -responde bien
Pero:
telnet 25 – simplemente NO RESPONDE, nunca, ni haciendo
la prueba desde la misma máquina ni desde otra máquina en la misma red.
Configurando en rsyslog.conf: *.debug /mi_log no reporta nada sobre el asunto.
Los telnet a los puertos 110 and 143 SIEMPRE responden bien como quiera que
los haga. También responde bien squirrelmail.
En esmtpd tengo BOFHCHECKDNS=0, y agregué “-nodnslookup -noidentlookup”
a TCPDOPTS.
He ejecutado mkesmtpaccess sin fichero alguno en /etc/courier/smtpaccess/(no file).
Según la página oficial de couriertcpd(8): “An access file is optional. Without
an access file *couriertcpd* accepts a connection from any IP address.”
Nada cambia, mi puerto 25 sigue rechazando las solicitudes de acceso usando
la dirección IP. Simplemente ya no se me ocurre más nada.
Disculpen la insistencia, y gracias de antemano por la atención.
Luis
Ratifico lo útil del trabajo de fehr98.
Mi problema es semejante al de Jaime. Es decir, mi servidor NO acepta recibir de servidores
externos a mi red y que van destinados a usuarios virtuales en mi servidor courier.
El error que recibe el servidor remitente es el siguiente:
Winsock Error 10061 El otro host está fuera de servicio o se ha negado a conectarse con esa IP y/o ese puerto.
Mis fciheros de configuración son iguales en lo esencial al de Jaime; y por supuesto, corrà los comandos
make…
En los logs relacionados con mail o con el kernel no hay ninguna traza de lo sucedido.
Acepto sugerencias.
René
La verdad no se a que se refiere este error despues de que corri el comando spamassassin –debug –lint
[5399] dbg: check: tests=MISSING_DATE,MISSING_HEADERS,MISSING_SUBJECT,NO_RECEIVED,NO_RELAYS
[5399] dbg: check: subtests=__GATED_THROUGH_RCVD_REMOVER,__HAS_MSGID,__MISSING_REF,__MSGID_OK_DIGITS,__MSGID_OK_HOST,__MSOE_MID_WRONG_CASE,__NONEMPTY_BODY,__SANE_MSGID,__UNUSABLE_MSGID
Gracias….
Ademas me gustarea saber si alguien sabe configurar el servidor de nombres con una ip dinamica ya que no tengo una ip fija estoy iniciando en Debian lenny 5
Disculpo por aver escrito mi email mal
Gracias
Excelente guia de configuracion la verdad esta bien exlicada.
Bien, luego de este mensaje ejecute los siguientes comandos y agregue las siguientes lineas y ya envio y recibo mail, obviamente faltan otras cositas para agregar como el spamassassin y el clamav. Pero ya es un avance.
#makesmtpaccess
#makehosteddomains
#makeacceptmailfor
/etc/courier/smtpaccess
127.0.0.1 allow,RELAYCLIENT
10.0 allow,RELAYCLIENT
172.16 allow,RELAYCLIENT
192.168 allow,RELAYCLIENT
10.0.0.6 allow,RELAYCLIENT
10.0.0.15 allow,RELAYCLIENT
/etc/courier/hosteddomains/midominio.com
midominio.com
mail.midominio.com # nombre especifico para mail IP1
server.midominio.com # nombre especifico para el server IP2
localhost
/etc/courier/esmtpacceptmailfor.dir
midominio.com
En /etc/courier/courierd
MAILDROPDEFAULT=./Maildir
De momento esa, pero supongo que tendré que usar para el spamassassin o el clamav, aun no se. Pero con esta configuración ya se envia y recibe mail
DEFAULTDELIVERY=”| /usr/bin/maildrop”
Seguiré documentando lo que suceda.
A eso iba con el smtpacces,.. tambien en el esmtpacceptmailfor. Porque de seguro tu DNS apuntaba a la IP del server pero el courier pensaba que era pasarela para hacer relay a otro. Por cierto, el courier con el clamav no te consume mucho CPU?
En realidad aun no lo instalo, y no se como hacerlo porque vos usas maildrop (aproposito para que sirve?) y veré como unir el clamav con courier y con spamassassin.
Otra cosa es que algunos usuarios presentaban el siguiente error en /var/log/mail.log
456 Address temporarily unavailable
Solamente ejecuté:
# courier clear all
y ya jaleas.
Mi archivo /etc/default/spamassassin
———
# /etc/default/spamassassin
# Duncan Findlay
# WARNING: please read README.spamd before using.
# There may be security risks.
# Change to one to enable spamd
ENABLED=1
# Options
# See man spamd for possible options. The -d option is automatically added.
# SpamAssassin uses a preforking model, so be careful! You need to
# make sure –max-children is not set to anything higher than 5,
# unless you know what you’re doing.
OPTIONS=”-x –nocreate-prefs -m 64 -i 127.0.0.1 -A 127.0.0.1″
#OPTIONS=”–create-prefs –max-children 5 –helper-home-dir”
# Pid file
# Where should spamd write its PID to file? If you use the -u or
# –username option above, this needs to be writable by that user.
# Otherwise, the init script will not be able to shut spamd down.
PIDFILE=”/var/run/spamd.pid”
# Set nice level of spamd
#NICE=”–nicelevel 15″
———-
Mi archivo /etc/courier/maildroprc
———
if (/^Received: from .* \(.*\[.*\]\) \(AUTH: (LOGIN|PLAIN).*\) by mail.usac.edu.gt with esmtp; .* id .*/:hD || /^Received: from localhost \(localhost \[127\.0\.0\.1\]\) \(.*\) by mail.usac.edu.gt with (local|dsn); .* id .*/:hD)
{
echo “Not filtered: local email.”
}
else
{
if ($SIZE < 4096000)
{
#
xfilter “/usr/bin/spamc -x -d 127.0.0.1 -s 4096000”
if (/^X-Spam-Flag: YES/:D || /^X-Spam-Status: Yes/:D)
{
to /dev/null
}
#
}
}
———-
Para probar si el spamassassin está funcionando se envia un email con el codigo de esta pagina:
http://spamassassin.apache.org/gtube/
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Y esto asigna 1000 puntos al correo con lo que deberÃa aparecer como bloqueado en los logs y no llegar a los Maildir de los users.
Mi archivo /etc/courier/bofh
————–
maxrcpts 100000
opt BOFHBADMIME=accept
# HELO/EHLO check
opt BOFHCHECKHELO=0
#opt BOFHCHECKHELO=1
# Sender Policy Framework (SPF)
opt BOFHSPFNOVERBOSE=1
opt BOFHSPFTRUSTME=1
opt BOFHSPFHARDERROR=fail
opt BOFHSPFHELO=off
#opt BOFHSPFHELO=pass,none,neutral,unknown
opt BOFHSPFMAILFROM=pass,none,failsafe,neutral,unknown,softfail
opt BOFHSPFFROM=mailfromok,pass,none,failsafe,neutral,unknown
————-
–jaimeco
Estoy usando esta config de base mas otras que ya tenia de backup.
En este momento de la configuración mi server puede enviar correo, digamos a a gmail.com pero de gmail.com a mi dominio no.
En este tail se ve que desde gmail a usac hay un problema.
#tail -f /var/log/mail.log|grep jaimeco
Feb 6 09:14:27 ixil courieresmtpd: error,relay=::ffff:64.233.170.191,from=,to=: 513 Relaying denied.
Gracias por cualquier orientación.
Ok, dame un segundo que ya tengo bastante tiempo de no utilizar courier.
Vos si podes recibir correo interno?
Siendo correo entrante revisate el archivo smtpaccess-default
Ya corriste el comando makesmtpaccess.
Es correcto en /etc/courier/smtpaccess/default tengo:
127.0.0.1 allow,RELAYCLIENT
10.0 allow,RELAYCLIENT
172.16 allow,RELAYCLIENT
192.168 allow,RELAYCLIENT
10.0.0.6 allow,RELAYCLIENT
10.0.0.15 allow,RELAYCLIENT
Que son mis redes y unos servers y a huevos ya corrà makesmtpaccess, pero yo entiendo que eso es para los clientes internos, donde puedo encontrar una configuración parecida para aquellos que envian correo a usac.edu.gt como destinatario?
La verdad tengo todos estos datos correctos pero me muestra el siguiente mensaje:
[6467] dbg: config: warning: score set for non-existent rule DK_POLICY_SIGNSOME 0.26408
[6467] dbg: config: warning: score set for non-existent rule DK_SIGNED 0.00046
[6467] dbg: config: warning: score set for non-existent rule DK_POLICY_SIGNALL 0.00064
[6467] dbg: config: warning: score set for non-existent rule DK_VERIFIED 0.00246
[6467] dbg: config: warning: score set for non-existent rule DK_POLICY_TESTING 0.0012
Y como hago para verificar si el DomainKeys esta funcionando.
GRacias
Hola esta muy interesante y completo tu articulo, pero me salio un problema al momento de correr el debug de spamassassing.
[1343] warn: config: warning: score set for non-existent rule DK_SIGNED
[1343] warn: config: warning: score set for non-existent rule DK_VERIFIED
la verdad q le e dado sus buenas vueltas y aun no veo el como arreglar eso
si me pudieras dar una ayuda te lo agradesco de antemano
Saludos
Cristhian:
Como habras leido en el articulo, le instalamos varios plugins al spamassassin para eliminar el spam, esto me suena a que algo hizo falta.
# DomainKeys
ifplugin Mail::SpamAssassin::Plugin::DomainKeys
score DK_POLICY_SIGNALL 0.001
score DK_POLICY_SIGNSOME 0.001
score DK_POLICY_TESTING 0.001
score DK_SIGNED 0.001
score DK_VERIFIED -0.001
endif # Mail::SpamAssassin::Plugin::DomainKeys
Tecleaste estos comandos?
perl -MCPAN -e shell
ya dentro del shell, tecleamos:
install Mail::SpamAssassin
install Mail::SPF::Query
install IP::Country::Fast
Bueno, dale y nos cuentas, y gracias por tu consulta,….. Saludos!!!