Instalar dovecot con Qmail

Dovecot es un servidor IMAP y POP ligero y rápido. Vamos a ver como instalarlo en un servidor qmail con vpopmail.

Desde site oficial de dovecot se puede descargar el paquete, una vez descomprimido lo configuramos según el siguiente configure:

./configure --disable-ipv6 --with-mysql \
      --with-sql=yes --with-sql-drivers

Al finalizar el configure tenemos que asegurarnos que ha detectado el vpopmail en las lineas de “user database modules” y “password lookup modules“:

Install prefix …………………. : /usr/local
File offsets …………………… : 64bit
I/O loop method ………………… : epoll
File change notification method ….. : inotify
Building with SSL support ……….. : yes (OpenSSL)
Building with IPv6 support ………. : no
Building with pop3 server ……….. : yes
Building with mail delivery agent .. : yes
Building with GSSAPI support …….. : no
Building with user database modules . : static prefetch passwd passwd-file sql vpopmail nss
Building with password lookup modules : passwd passwd-file shadow checkpassword sql vpopmail
Building with SQL drivers …………: mysql

Continuamos compilando e instalando:

make && make install

Añadimos un usuario para el daemon:

useradd dovecot

A continuación passamos a configurar el daemon con los siguientes ficheros:

  • /usr/local/etc/dovecot.conf:
    mail_location = maildir:/home/vpopmail/domains/%d/%n/Maildir
    
    ssl_disable=yes
    disable_plaintext_auth=no
    
    verbose_proctitle = yes
    first_valid_uid = 89
    last_valid_uid = 89
    
    protocol imap {
    	listen = *:143
    }
    
    auth default {
    
    	passdb vpopmail {
    	}
    
    	userdb vpopmail {
    	}
    }
  • /usr/local/etc/dovecot-sql.conf
    • No aparecen los correos

      dovecot: IMAP(ejemplo@systemsadmins.es): mkdir(/home/systemsadmins.es/ejemplo/Maildir/cur) failed: Permission denied

      Esto puede ser debido a que dovecot lo busca en un path incorrecto. Comprueba que /home/systemsadmins.es/ejemplo/Maildir/cur exista, y si no es así, modifica el parametro mail_location según corresponda.

    • Fallo de autenticación

      dovecot: auth(default): vmysql: sql error[3]: MySQL server has gone away

      Este error aparece quando se ha reiniciado el mysql. Debes reiniciar el dovecot

  • driver=mysql
    connect = host=/tmp/mysql.sock user=vpopmail password=vpopmailpassword dbname=vpopmail
    default_pass_scheme = PLAIN
    password_query = SELECT CONCAT(pw_name, '@', pw_domain) AS user, pw_clear_passwd AS password FROM vpopmail WHERE pw_name = '%n' AND pw_domain = '%d'
    user_query = SELECT pw_dir as home, 64020 AS uid, 64020 AS gid FROM vpopmail WHERE pw_name = '%n' AND pw_domain = '%d'

    Para iniciar el daemon sólo hace falta ejecutar «dovecot» sin parámetros, peró recomendamos su uso combinado con las daemontools. Su fichero runsupervise sería: para el

    #!/bin/bash
    exec /usr/local/sbin/dovecot -F

    Problemas freqüentes de dovecot

    Algunos de sus problemas freqüentes són:

No aparecen los correos

dovecot: IMAP(ejemplo@systemsadmins.es): mkdir(/home/systemsadmins.es/ejemplo/Maildir/cur) failed: Permission denied

Esto puede ser debido a que dovecot lo busca en un path incorrecto. Comprueba que /home/systemsadmins.es/ejemplo/Maildir/cur exista, y si no es así, modifica el parametro mail_location según corresponda.

Fallo de autenticación

dovecot: auth(default): vmysql: sql error[3]: MySQL server has gone away

Este error aparece quando se ha reiniciado el mysql. Debes reiniciar el dovecot

Fuente: http://systemadmin.es

Estadísticas de Qmail en Plesk con Isoqlog

Que es Isoqlog?

Isoqlog es un analizador de logs de MTA escrito en C. Esta desarrollado para trabajar con los logs de qmail, postfix,

sendmail and exim y genera estadísticas en formato HTML.

//www.enderunix.org/isoqlog/isoqlog.gif

Algunas características
Soporte Multi MTA, Multi dominio, estadísticas de envió y de recepción, estadísticas por tiempo, estadísticas por tamaño, traducción a varios idiomas incluido el español. http://www.enderunix.org/isoqlog/output/ Y vea un ejemplo de los resultados que genera.

1) Descargelo

wget http://www.enderunix.org/isoqlog/isoqlog-2.2.1.tar.gz

2) Descomprimalo

tar -zxvf isoqlog-2.1.1.tar.gz
cd isoqlog-2.1.1

3) Compile, instale y limpie

./configure

make
make install
make clean

4) Cree un enlace de rcpthosts (Solo Qmail)

ln -s /var/qmail/control/rcpthosts /usr/local/etc/isoqlog.domains

5) Cree el directorio de salida

mkdir /home/httpd/vhosts/domain.com/httpdocs/mailstats

6) En el directorio de salida copie algunos archivos necesarios

cp -pr /usr/local/share/isoqlog/htmltemp/images /usr/local/share/isoqlog/htmltemp/library mailstats/

7) Configúrelo

cd /usr/local/etc/

7.1) Configuracion general de isoqlog

cp isoqlog.conf-dist isoqlog.conf
vi /usr/local/etc/isoqlog.conf
=================Isoqlog.conf==============================
#Este es mi archivo de configuración /usr/local/etc/isoqlog.conf
logtype = "qmail-syslog" # log type qmai-multilog, qmail-syslog, sendmail, postfix
logstore = "/usr/local/psa/var/log/maillog"
domainsfile = "/usr/local/etc/isoqlog.domains"
outputdir = "/home/httpd/vhosts/domain.com/httpdocs/mailstats"
htmldir = "/usr/local/share/isoqlog/htmltemp"
langfile = "/usr/local/share/isoqlog/lang/spanish"
hostname = "server.domain.com"
maxsender = 100
maxreceiver = 100
maxtotal = 100
maxbyte = 100
======================================

7.1) Configuracion de lista de dominios

cd /usr/local/etc/
cp isoqlog.domains-dist isoqlog.domains
vi /usr/local/etc/isoqlog.domains
===================Isoqlog.domais========
domain1.com
domainz.net
domainzxe.org
====================================

Ejecútelo manualmente

/usr/local/bin/isoqlog

9) Programelo editando su crontab y agregue la siguiente línea (En mi caso lo tengo en prueba cada 59 Minutos)

vi /etc/crontab
*/59 * * * * root /usr/local/bin/isoqlog 1>/dev/null 2>/dev/null

10) Observe que interesante reporte

http://domain.com/mailstats/

Pdt1: Lo probé con ensim y sendmail y funciona solo que la sumas de tamaños generales quedan en 0
Pdt2: Primera version; Puede tener errores; Bienvenidas las mejoras

Trucos útiles de configuración .htaccess

Tras leer un artículo en www.thomsonchemmanoor.com paso a traducirlo/adaptarlo y adaptarlo pues puede ser útil en algún momento para desarrolladores, programadores y administradores de sitios web. Se trata de una colección de directivas y configuraciones disponibles dentro de los ficheros .htaccess para realizar tareas cotidianas en sitios web de gran utilidad.
Crear una página de error 404 personalizada

Mediante .htaccess en un servidor linux bajo apache es una tarea sencilla. Usando un editor de texto simplemente crea un fichero con el nombre .htaccess. Las páginas de error personalizadas dan a tu sitio web mayor profesionalidad permitiendo redirigir los errores a un lugar que permita al usuario volver a la página principal, facilitar ayuda, etc.

Añade las siguientes líneas a tu fichero .htaccess, teniendo en cuenta que las páginas personalizadas de error se encuentran en /error/

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

Configurar la zona horaria del servidor

SetEnv TZ America/Houston

Bloquear IPs usando .htaccess

En ciertos momentos suele ser necesario bloquear el acceso al sitio web o determinados directorios de u una IP o rangos, para hacerlo simplemente añade lo siguiente a tu fichero .htaccess configurando las IPs que desees:

allow from all
deny from 145.186.14.122
deny from 124.15

Redirecciones amigables para SEO con redirects 301 permanentes

Esto es útil para direcciones ya no disponibles, antiguas o movidas a otra URL:

Redirect 301 /d/file.html http://www.htaccesselite.com/r/file.html

Configurar el email del administrador del servidor

ServerSignature EMail
SetEnv SERVER_ADMIN default@domain.com

Bloquear Hotlink con .htaccess

Muy útil para evitar que otros sitios webs utilicen las imagenes de tu servidor y consuman tu ancho de banda, ten en cuenta que si usas RSS tendrás que permitirle la recogida de imagenes:

Options +FollowSymlinks
# Protect Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domainname\.com/ [nc]
RewriteRule .*\.(gif|jpg|png)$ http://domainname.com/img/hotlink_f_o.png [nc]

Bloquear acceso de un determinado User Agent

Un agente de usuario es una aplicación informática que funciona como cliente en un protocolo de red; el nombre se aplica generalmente para referirse a aquellas aplicaciones que acceden a la World Wide Web. Los agentes de usuario que se conectan a la Web pueden ser desde navegadores web hasta los web crawler de los buscadores, pasando por teléfonos móviles, lectores de pantalla y navegadores en Braille usados por personas con discapacidades.
Wikipedia

## .htaccess Code :: BEGIN
## Block Bad Bots by user-Agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]

Order Allow,Deny
Allow from all
Deny from env=bad_bot

## .htaccess Code :: END

Redirigir a los visitantes a otro sitio diferente excepto ciertas IPs

Muy útil para cuando el webmaster está realizando tareas de mantenimiento, redirige a todos los visitantes a la página temporal de mantenimiento mientras que desde su IP sigue trabajando en la página web normal:

ErrorDocument 403 http://www.youdomain.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

Evitar mostrar el cuadro de solicitud de descarga

Con este código evitas que al pinchar en un enlace (por ejemplo un pdf o pelicula) evitas que salga el cuadro preguntando si quieres descargarlo.

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

Cambiar el tipo de fichero a una extensión

Podemos hacer que un determinado tipo de fichero actue como si fuera otro, por ejemplo podemos hacer que las imágenes jpg, los index.html o default.cgi actuen como php

ForceType application/x-httpd-php
SetHandler application/x-httpd-php

Bloquear acceso al fichero .htaccess

El título lo dice todo, bloquear accesos indeseados a nuestro fichero .htaccess, redirigiendolos a un error 403

# secure htaccess file

order allow,deny
deny from all

Proteger acceso a un determinado tipo de fichero

Si por ejemplo quisieramos que nadie pudiera acceder a un fichero llamado default.jpg

# prevent access of a certain file

order allow,deny
deny from all

Evitar la navegación de directorios

Si un determinado directorio no tiene página “index” válida, es probable que nos deje listar los ficheros de la carpeta, para evitar esto podemos cortar la opción de navegación de directorios y mostrar un “Forbidden”:

# disable directory browsing
Options All -Indexes

Cambiar página de inicio o por defecto

Si por ejemplo en vez de index.html queremos que la página de inicio sea default.html:

# serve alternate default index page
DirectoryIndex default.html

Proteger directorios o ficheros con password

Con esta opción podemos solicitar usuario/clave para acceder a una determinada sección de la página web. Existen multitud de webs que hacen esto por tí automáticamente y te facilitan el código, por ejemplo .htaccess Generator. Aquí un ejemplo:

# to protect a file

AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user

# password-protect a directory resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user

Redirigir viejo dominio a uno nuevo

Simple y efectivo, si hemos cambiado el nombre de dominio de nuestra página web redirigiremos todo el tráfico que siga llegando al viejo hacia el nuevo:

# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

Evitar ataques DoS a apache con mod_evasive

El ataque DoS (Denegación de Servicio / Denial of Service) o DDoS (Distributed Denial of Service, denegación de servicio distribuida), es un ataque a un sistema de servidores o red que causa que un servicio o recurso sea inaccesible a usuarios legítimos. El flujo masivo de peticiones (a través del protocolo TCP/IP) al servidor y los ataques de fuerza bruta provocan el colapso de la red, o la saturación del servidor en cuestión.

En esta entrada vamos a tratar de paliar los ataques DoS centrados en el servicio Apache, que consiste básicamente en lanzar peticiones al servidor web de forma masiva hasta colapsar el mismo. Gracias al módulo de apache mod_evasive conseguiremos redirigir el tráfico de esta peticiones ilegítimas hacia un error 403 (prohibido).

La última versión estable de mod_evasive puede descargarse en este enlace.
Compilación:

cd /root/descargas
wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar -zxf mod_evasive_1.10.1.tar.gz
cd mod_evasive

Si usamos apache1, deberemos compilar su módulo correspondiente (adecuad la siguiente línea a vuestra ruta de apache):

/usr/local/apache/bin/apxs -cia mod_evasive.c

Si usamos apache2, deberemos compilar su módulo correspondiente:

/usr/local/apache/bin/apxs -cia mod_evasive20.c

Veremos que tras la compilación, automáticamente ya carga el módulo en nuestro httpd.conf:

LoadModule evasive_module libexec/mod_evasive.so

Configuración:

El fichero de configuración (muestro los valores por defecto) lo cargaremos en un fichero aparte y lo llamaremos desde el httpd.conf (podéis cargar las opciones directamente en el httpd.conf, yo lo pongo separado para una mejor estructuración) :

Include «/usr/local/apache/conf/mod_evasive.conf»

Y el fichero que incluye las configuraciones del módulo:

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify correo@dominio.com
DosWhitelist 98.54.48.14 # Ip ficticia

Vamos a explicar un poco lo que es cada opción:

Podemos ver lo que es cada cosa en:

DOSHashTableSize

Cuanto más grande sea el tamaño de la tabla de Hash, más memoria requerirá, pero el rastreo de Ips será más rápido. Es útil aumentar su tamaño si nuestro servidor recibe una gran cantidad de peticiones, pero así mismo la memoria del servidor deberá ser también mayor.

DOSPageCount

Número de peticiones a una misma página para que una IP sea añadida a la lista de bloqueo, dentro del intervalo de bloqueo en segundos especificado en el parámetro DOSPageInterval

DOSSiteCount

Igual que ‘DOSPageCount’, pero corresponde al número de peticiones al sitio en general, usa el intervalo de segundos especificado en ‘DOSSiteInterval’.

DOSPageInterval
Intervalo en segundos para el parámetro umbral de DOSPageCount.

DOSSiteInterval
Intervalo en segundos para el parámetro umbral DOSSiteCount.

DOSBlockingPeriod
Periodo de bloqueo para una IP si se supera alguno de los umbrales anteriores.El usuario recibirá un error403 (Forbidden) cuando sea bloqueado, si el atacante lo sigue intentando, este contador se reseteará automáticamente, haciendo que siga más tiempo bloqueada la IP.

DOSEmailNotify
Dirección de correo electrónico que recibirá información sobre los ataques.

DosWhitelist
Podemos especificar una IP o rango que será excluido del rastreo por mod_evasive.

Si alguna de estas opciones no os han quedado claras, indicadmelo y trataré de explicarlo de otra forma. Es fácil comprenderlo en inglés, pero su traducción se hace complicada.

Finalmente reiniciamos apache y ejecutamos el script en perl de testeo (test.pl) que viene incluido en el .tar.gz . Si todo ha ido bien, veremos que al cabo de unas cuantas peticiones, bloqueará el acceso al servicio web:

HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden

HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden

Con esto ya tendríamos un protector de ataques DDoS a apache funcionando. No obstante, os puede ser de utilidad el siguiente comando, que nos indicará el nº de peticiones al puerto 80 por cada IP en el momento que lo ejecutemos:

netstat -plan|grep :80 | awk {‘print $5’}|cut -d: -f 1|sort|uniq -c|sort -n

Si solo queremos ver las establecidas:

netstat -plan|grep :80 | grep ESTABLISHED | awk {‘print $5’}|cut -d: -f 1|sort|uniq -c|sort -n

Esto es muy útil, pues a partir de dichos comandos, podemos averiguar rápidamente si una o varias IPs están haciendo un exceso de peticiones al servicio apache (fuerza bruta), y directamente filtrar la IP que queramos en nuestro firewall, por ejemplo en APF:

/usr/local/sbin/apf -d

De este modo, junto a la instalación de APF y BFD, nuestro servidor será menos vulnerable a ataques.

Como instalar y configurar BFD (Brute Force Detector)

BFD (Brute Force Detection), es un script en shell que parsea los logs de los diferentes servicios (ssh, ftp, apache, exim…) y chequea en busca de fallos repetitivos de autenticación, exceso de conexiones desde determinadas IPs, etc.

Combinado con APF (click aquí para acceder a una guía de instalación y configuración) forman un sistema de protección realmente bueno para nuestro sistema, ya que BFD le indicará a APF que IPs debe bloquear para que su acceso al servidor sea denegado (lo explicamos ahora):

Instalación de BFD:

La instalación es extremadamente sencilla:

cd /root/descargas
wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz
tar -xvzf bfd-current.tar.gz
cd bfd-0.7
./install.sh

Una vez hecho esto, nos indicará las rutas a ejecutables y ficheros de configuración:

.: BFD installed
Install path: /usr/local/bfd
Config path: /usr/local/bfd/conf.bfd
Executable path: /usr/local/sbin/bfd

Configuración de BFD:

Editamos el fichero de configuración con nuestro editor favorito:

vi /usr/local/bfd/conf.bfd

Activamos las alertas de ataque (cambiamos de 0 a 1), y configuramos que nos envíe un email por cada una:

ALERT_USR=»1″
EMAIL_USR=»tucuenta@tudominio.com»

Para evitar que el sitema bloquee nuestra IP local, la añadimos al fichero que guarda las IPs a ignorar en el rastreo, añadiremos p.ej. 192.168.1.1 en:

vi /usr/local/bfd/ignore.hosts

Ejecutamos el programa:

/usr/local/sbin/bfd -s

BFD chequeará los logs cada X tiempo, el que le indiquemos en su cron, por defecto cada 10 minutos:

[root@localhost ~]# cat /etc/cron.d/bfd
MAILTO=
SHELL=/bin/sh
#*/5 * * * * root /usr/local/sbin/bfd -q

Una vez comprendido esto, podéis personalizar las reglas que vienen por defecto para cada servicio, se encuentra en la siguiente ubicación:

/usr/local/bfd/rules

Con lo que más podéis jugar es con el valor “TRIG”, que indica el nº de conexiones o intentos permitidos para cada servicio, configuradlo en función de las necesidades de cada servicio:

TRIG=»45″

Con un poco más de paciencia, y estudiando cada regla puede personalizarse completamente, no obstante la seguridad de nuestro servidor, teniendo BFD + APF ha mejorado notablemente.

Fuente: rm-rf.es