Postfix/Configuración de un servidor

De doc.ubuntu-es
< Postfix(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Instalando y configurando SpamAssassin)
Línea 404: Línea 404:
  
 
  sudo gedit /etc/spamassassin/local.cf
 
  sudo gedit /etc/spamassassin/local.cf
+
 
 
  # Con esto reescribimos el asunto del mensaje
 
  # Con esto reescribimos el asunto del mensaje
 
  rewrite_header Subject *****SPAM*****
 
  rewrite_header Subject *****SPAM*****

Revisión de 09:45 29 ene 2008

Important.png Este articulo esta siendo creado en estos momentos, por favor un poco de paciencia.

Esta página proporciona ayuda para personas que quieren instalar y configurar un servidor POSTFIX en Ubuntu, incluyendo Postfixadmin, Mysql, Spamassassin, ClamAv

Contenido

Comprobar requisitos

De primeras los únicos requisitos que debemos tener en cuenta es que tenemos el puerto 25 del router dirigido al que va a ser nuestro servidor de correo.

Ver que el servidor Resuelve DNS-s.

Comprobar que nuestro servidor tiene un nombre que este dentro de los requisitos de FQDN (Fully Qualified domain name) recogidos en el RFC821. Básicamente el formato sería mail.dominio.com. En caso de no querer cambiar el nombre a nuestra maquina podemos configurarlo después desde el propio fichero de configuración de Postfix.

Es importante también que la hora sea correcta, recomiendo instalar algún cliente como ntp para que se encargue de actualizar las hora.

Instalar lo básico para que postfix funcione

A continuación vamos a instalar los paquetes para que postfix y postfixadmin funcionen adecuadamente. Para los que no lo sepan postfixadmin es un administrador web para poder crear dominios y cuentas de manera sencilla. Los podeis instalar con cualquier método

postfix postfix-mysql mysql-server apache2 libapache2-mod-php5 php5 php5-mysql 

Nota: Con el paquete de postfix nos preguntará que tipo de instalación queremos hacer. Seleccionamos la que esté por defecto ya que luego haremos una configuración a nuestro gusto editando el fichero manualmente.

PostfixAdmin no esta en los repos, por lo tanto tendremos que instalarlo desde las fuentes. Es una operación realmente sencilla.

wget ftp://ftp.logos-bg.net/pub/Nikola/Postfixadmin/postfixadmin-2.1.0.tar.gz
sudo tar zxvf postfixadmin-2.1.0.tar.gz -C /var/www

Ahora vamos a crear la estructura dentro de MySQL.

cd /var/www/postfixadmin-2.1.0
mysql -u root -p < DATABASE_MYSQL.TXT

Nota: La password que nos pide es la que hemos introducido en el dialogo de configuración.

Primeros pasos: configurando la base

Lo primero será dar permisos a un usuario que maneje la BBDD de postfixadmin.

$ mysql -u root -p
mysql> GRANT USAGE ON *.* TO 'postfix'@'localhost' IDENTIFIED BY 'mi_pass' ;
mysql> GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost' WITH GRANT OPTION ;
FLUSH PRIVILEGES ;

Con esto ya tenemos el usuario creado para poder acceder a leer y escribir los datos necesarios en la BBDD. A continuación vamos a configurar el sistema y a añadir un usuario que se encargue de crear los buzones...

sudo groupadd -g 1001 virtual
sudo useradd -g virtual -d /usr/local/virtual -s /bin/false -u 1001 virtual
sudo mkdir /usr/local/virtual
sudo chown -R virtual:virtual /usr/local/virtual

Ahora tenemos que dar soporte mysql a php5 mediante el fichero php.ini abrimos el fichero:

sudo gedit /etc/php5/apache2/php.ini

y añadimos la siguiente línea:

extension=mysql.so

A continuación cambiamos los permisos de postfixadmin por seguridad.

cd /var/www/postfixadmin-2.1.0
sudo cp config.inc.php.sample config.inc.php
sudo chown -R www-data.www-data *
sudo chmod 640 *.php *.css
cd admin
sudo chmod 640 *.php .ht*
cd ../images
sudo chmod 640 *
cd ../languages
sudo chmod 640 *.lang
cd ../templates
sudo chmod 640 *.tpl
cd ../users
sudo chmod 640 *.php

Ahora editamos el fichero de configuración para que se comunique con nuestra BBDD (Modificar las siguientes lineas según convenga).

sudo gedit config.inc.php
$CONF['default_language'] = 'es';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'mi_pass';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = ;

Una vez hemos terminado con ello vamos a borrar los ficheros que sobran.

sudo rm -rf setup.php ; sudo rm -rf motd*

y ya podemos acceder a postfixadmin desde la siguiente url

http://localhost/postfixadmin/admin

A continuación hago una lista de las rutas a las diferentes configuraciones.

Para el administrador global: http://localhost/postfixadmin/admin/
Administrador del dominio: http://localhost/postfixadmin/index.php
Para los usuarios: http://localhost/postfixadmin/users

Nota: De momento no crearemos ningún dominio. Los crearemos una vez terminada la configuración de postfix.

Para el administrador global, la contraseña se pone con el htacces de apache: editamos el siguiente fichero y nos tiene que quedar así:

sudo gedit /var/www/postfixadmin-2.1.0/admin/.htaccess
AuthUserFile /var/www/postfixadmin/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Postfix Admin"
AuthType Basic
<limit GET POST>
require valid-user
</limit>

ahora nos metemos en la carpeta admin y ejecutamos lo siguiente:

$ htpasswd .htpasswd usuario

Nota: El usuario es un usuario que nosotros queramos usar para acceder, no tiene porqué pertenecer al sistema.

Empezamos con Postfix

En postfix tenemos 2 ficheros importantes, main.cf y master.cf ahora haré una breve descripción de cada uno de ellos:

main.cf: Es el fichero principal para la configuración de postfix, aquí definimos cual es nuestro dominio, para que dominios aceptamos correo... master.cf: Es el fichero a través del que se configuran los demonios internos de postfix.

Empecemos con el main.cf:

sudo gedit /etc/postfix/main.cf
myhostname = lomu.homelinux.org
mydomain = lomu.homelinux.org
myorigin = $mydomain
mydestination = localhost, dominio.com
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
# parametros TLS
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

#MYSQL
virtual_alias_maps = mysql:/etc/postfix/mysql/mapas_alias_virtuales_mysql.cf
virtual_gid_maps = static:1001
virtual_mailbox_base = /usr/local/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mapas_dominios_virtuales_mysql.cf
virtual_mailbox_limit = 0
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mapas_mailbox_virtuales_mysql.cf
virtual_minimum_uid = 1001
virtual_transport = virtual
virtual_uid_maps = static:1001
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mapas_limites_virtuales_mailbox_mysql.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = El buzón del usuario está lleno.
virtual_overquota_bounce = yes

A continuación creamos la carpeta mysql para crear dentro los mapas para postfix.

sudo mkdir /etc/postfix/mysql

y ahora creamos los mapas necesarios para que postfix se entienda con mysql y postfixadmin.

sudo gedit /etc/postfix/mysql/mapas_alias_virtuales_mysql.cf
user = postfix
password = mi_pass
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
 sudo gedit /etc/postfix/mysql/mapas_dominios_virtuales_mysql.cf
user = postfix
password = mi_pass
hosts = 127.0.0.1
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'
 sudo vim /etc/postfix/mysql/mapas_mailbox_virtuales_mysql.cfç
user = postfix
password = mi_pass
hosts = 127.0.0.1
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
sudo vim /etc/postfix/mysql/mapas_limites_virtuales_mailbox_mysql.cf
 ser = postfix
password = mi_pass
hosts = 127.0.0.1
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1


Reiniciamos Postfix

/etc/init.d/postfix restart

Ahora ya podemos ir a crear nuestro dominio virtual con los usuarios a los que queramos dar correo.

http://localhost/postfixadmin-2.1.0/admin/

No explicaré como crear un dominio en postfixadmin porque creo que es muy sencillo de utilizar.

Para saber si postfix está dando problemas podemos echar un vistazo a los siguientes ficheros de log.

cat /var/log/mail.err
cat /var/log/mail.warn

Nota: Postfix tiende a ser bastante claro con los errores, por lo tanto de tener alguno leer con tranquilidad los logs para encontrar lo que falla ;).


POP3/S e IMAP/S con Dovecot

Como servidor para descargar los correos vamos a utilizar dovecot por su sencillez y eficacia. Debemos instalar los siguientes paquetes:

dovecot-common dovecot-imapd dovecot-pop3d

Ahora vamos a pasar a la configuración para que dovecot hable con MySQL, en el fichero que vamos a editar hay demasiadas lineas y bastará con dejar las siguientes:

sudo gedit /etc/dovecot/dovecot-sql.conf
driver = mysql
connect = dbname=postfix user=postfix host=localhost password=gesundheit
default_pass_scheme = CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1001 AS uid, 1001 AS gid FROM mailbox WHERE username = '%u'

Configuración global de Dovecot, lo mismo que antes, el fichero es enorme pero bastará con las lineas que dejo aquí.

sudo gedit /etc/dovecot/dovecot.conf
protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
default_mail_env = maildir:/usr/local/virtual/%u/
mail_extra_groups = mail
disable_plaintext_auth = no
ssl_cert_file = /etc/ssl/correo/dovecot.crt
ssl_key_file = /etc/ssl/correo/dovecot.key
## IMAP/IMAPS
protocol imap {
login_executable = /usr/lib/dovecot/imap-login
mail_executable = /usr/lib/dovecot/imap
login_greeting_capability = yes
}
## POP3 / POP3S
protocol pop3 {
login_executable = /usr/lib/dovecot/pop3-login
mail_executable = /usr/lib/dovecot/pop3
pop3_enable_last = no
pop3_uidl_format = %08Xu%08Xv
}
## AUTENTICACIÓN
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = virtual
group = virtual
}
client {
path = /var/spool/postfix/private/auth
user = postfix
group = postfix
mode = 0660
    }
  }
}

Como ya sabéis la mayoría de los servidores de correo funcionan por pop3 en texto plano, esto es un gran problema de seguridad ya que si alguien accede a la red, puede ver no ya solo el user/pass de los usuarios de correo sino también leer sus correos con el ataque a la intimidad que esto supone, para evitar esto vamos a crear llaves para poder utilizar conexiones seguras con SSL.

Creamos la llave en una nueva carpeta:

cd /etc/ssl
mkdir correo
cd correo
openssl req -x509 -nodes -newkey rsa:1024 -days 3650 -out dovecot.crt -keyout dovecot.key

Y a continuación añadimos las siguientes lineas en el dovecot.conf

sudo gedit /etc/dovecot/dovecot.conf
ssl_cert_file = /etc/ssl/correo/dovecot.crt
ssl_key_file = /etc/ssl/correo/dovecot.key


Autenticación para SMTP (SMTP-AUTH)

Uno de los grandes problemas de internet hoy en día es como ya sabréis el problema del SPAM o correo basura, esto en ocasiones sucede porque dejamos el relay abierto, lo que significa que dejamos que cualquier persona pueda enviar correo a traves de nuestro servidor sin ningún tipo de restricción, esto hará que nos metan en listas negras y que muchos servidores rechacen nuestros correos por considerarlos SPAM. Para evitar esto vamos a crear un sistema de autenticación mediante usuario y contraseña con SMTP-AUTH.

Para seguir con la misma dinamica que antes trabajaremos sobre mysql para que el usuario para enviar y recibir correos sea el mismo. Instalamos el siguiente paquete.

libpam-mysql

Ahora creamos el siguiente fichero con el contenido que veremos más abajo.

sudo gedit /etc/pam.d/smtp
auth required pam_permit.so pam_mysql.so
host=127.0.0.1
db=postfix
user=postfix
passwd=mi_pass
table=mailbox
usercolumn=username
passwdcolumn=password
crypt=y

Ahora instalamos los paquetes que se encargan de la autenticación a traves de Pam

libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin

Creamos el directorio en el que irá el pid del saslatuth

sudo mkdir -p /var/spool/postfix/var/run/saslauthd

editamos el fichero de configuración para la configuración base:

sudo gedit /etc/default/saslauthd
START=yes
MECHANISMS="pam"
OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"

Ahora tenemos que decir al fichero de arranque donde dejar el pid para ello lo modificamos y debe quedar así.

sudo gedit /etc/init.d/saslauthd
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"

Ahora debemos crear el fichero de configuración para el servidor smtp.

sudo gedit /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
allow_plaintext: true
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: 127.0.0.1:
sql_user: postfix
sql_passwd: mi_pass
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'

Ahora tenemos que añadir las siguientes lineas al main.cf para que sepa que los usuarios deben autenticarse para enviar correo.

sudo gedit /etc/postfix/main.cf
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,reject_unauth_destination
smtpd_tls_auth_only = no
smtpd_use_tls = yes
smtp_use_tls=yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file=/etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
disable_dns_lookups = yes

Ahora debemos crear el certificado y la llave para smtp

mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Ahora reiniciamos postfix y probamos a enviar algún correo para ver que es necesario introducir user/pass para poder enviar correos. Recordad que si algo falla tenemos los logs para ver que es lo que está fallando.

sudo /etc/init.d/postfix restart


Instalando y configurando SpamAssassin

Ahora vamos a instalar el que a mi parecer es el mejor sistema AntiSpam que existe, tanto comercial como freeware... Ya que aparte de tener un sistema bayesiano muy bueno SpamAssassin tiene plugins muy interesantes como puedan ser el filtro por idiomas... Bueno, al turrón. Instalamos los siguientes paquetes

spamassassin spamc

Empezamos con la configuración

sudo gedit /etc/spamassassin/local.cf
# Con esto reescribimos el asunto del mensaje
rewrite_header Subject *****SPAM*****
# Puntuacion maxima de no spam (La puntuación a partir de la cual spamassassin dice que un correo es SPAM). 
required_score 5.0
# Le decimos que nos mande el correo de spam de manera adjunta.
report_safe 1
# Son valores por defecto, pero es bueno resaltarlo:
use_bayes 1
bayes_auto_learn 1
bayes_learn_during_report 1
# Estas líneas se ponen para evitar que las cabeceras de los ISP se tomen como spam
bayes_ignore_header X-Upstream-Spamfilter
bayes_ignore_header X-Upstream-SomethingElse
# directorio de las BBDD bayesianas
bayes_path /etc/spamassassin/bayes/bayes
## Better hit rates, but databases 10 veces mas grandes:
bayes_use_hapaxes 1
## IDIOMAS
ok_languages es en
ok_locales es en
## PUNTUACIONES PARA EL IDIOMA
score UNWANTED_LANGUAGE_BODY 9 9 9 9
score UNDESIRED_LANGUAGE_BODY 9 9 9 9

Nota: El required score es una puntuación va de 0 a 10, si la ponemos muy baja, podemos tener falsos positivos, es decir que correos q no son spam podría tratarlos como que sí lo son, y si la puntuación es muy alta, nos tomará como correo bueno lo que es SPAM, lo ideal es dejarlo entre 3.5 y 5.0

Con esto ya tenemos configurado el spamassassin, ahora vamos a crear la carpeta en la que se guardará la BBDD bayesiana

mkdir /etc/spamassassin/bayes

Listo, reiniciamos spamassassin para que coja la nueva configuración.

/etc/init.d/spamassassin restart

Ahora tenemos que configurar postfix para que los correos sean pasados por el filtro antispam. Eso lo hacemos en el fichero master.cf

sudo gedit /etc/postfix/master.cf
## Añadimos lo siguiente en la linea de smtp para que quede así, es tal cual, el -o va en la siguiente linea.
smtp    inet n      -    -   -     -    smtpd
    -o content_filter=spamassassin:dummy

Y al final del fichero añadimos estas lineas:

### LINEAS PARA SPAMASSASSIN
spamassassin unix - n n - - pipe user=spamd
       argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} -- ${recipient}

Ahora reiniciamos postfxix y ya lo tenemos listo.

/etc/init.d/postfix restart

Bueno, ahora queda la parte tediosa de todo esto, enseñar a la BBDD lo que es SPAM (Correo basura) o JAM (Correo bueno). Los expertos dicen que lo óptimo es entrenar a la BBDD con 1000 correos JAM y 700 de SPAM. Es importante que los correos no hayan sido tratados previamente por ningún sistema antispam o antivirus, lo que yo recomiendo es que creemos en nuestro servidor un buzón llamado basura@dominio.com y registrar esa cuenta en todas las páginas de publicidad que nos sea posible, eso sí comentad en el master.cf las lineas de spamassassin para que el correo no sea analizado. Una vez conseguido en el buzón el numero de correos que queramos cargamos la BBDD y descomentamos las lineas para que todo funcione ok.

¿Y como decimos a spamassassin que es bueno y que es malo? Pues es bastante sencillo, lo hacemos de la siguiente manera:

Para correo malo:

sudo sa-learn --spam -C /etc/mail/spamassassin --showdots /ruta/carpeta/con_spam

Para correo bueno:

sudo sa-learn --ham -C /etc/mail/spamassassin --showdots --no-rebuild /ruta/correo/bueno.

y cuando hayamos metido correo bueno necesitamos restaurar los tokens.

sa-learn -C /etc/mail/spamassassin --showdots --rebuild

Es MUY IMPORTANTE que no mezclemos el correo bueno con el malo porque sino spamassassin no funcionará bien y será un poco caotico...

Herramientas personales