(→Instalar lo básico para que postfix funcione: enlace interno) |
(→Comprobar requisitos: enlace interno) |
||
| Línea 8: | Línea 8: | ||
| − | * Que tenemos el '''puerto 25''' del router dirigido al que va a ser nuestro servidor de correo. | + | * Que tenemos el '''puerto 25''' del router dirigido al que va a ser nuestro [[servidor]] de correo. |
* Determinar si el servidor '''resuelve nombres de dominio'''. | * Determinar si el servidor '''resuelve nombres de dominio'''. | ||
| Línea 16: | Línea 16: | ||
Es importante también que '''la hora sea correcta''', por lo que es recomendable instalar algún cliente como [[ntp]] para que se encargue de actualizar las hora regularmente. | Es importante también que '''la hora sea correcta''', por lo que es recomendable instalar algún cliente como [[ntp]] para que se encargue de actualizar las hora regularmente. | ||
| − | |||
| − | |||
== Instalar lo básico para que postfix funcione == | == Instalar lo básico para que postfix funcione == | ||
Esta página proporciona ayuda para personas que quieren instalar y configurar un servidor Postfix en Ubuntu, incluyendo Postfixadmin, Mysql, Spamassassin y ClamAv.
De primeras los únicos requisitos que debemos tener en cuenta son:
Es importante también que la hora sea correcta, por lo que es recomendable instalar algún cliente como ntp para que se encargue de actualizar las hora regularmente.
A continuación vamos a instalar los paquetes para que postfix y postfixadmin funcionen adecuadamente.
Postfixadmin es un administrador web para poder crear dominios y cuentas de manera sencilla. Este paquete no está en los repositorios, por lo que tendremos que instalarlo desde las fuentes. Ésta 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
El resto de paquetes los podemos instalar con cualquier método. A través de consola sería:
sudo aptitude install postfix postfix-mysql mysql-server apache2 libapache2-mod-php5 php5 php5-mysql
Seguidamente, crearemos la estructura dentro de MySQL:
cd /var/www/postfixadmin-2.1.0 mysql -u root -p < DATABASE_MYSQL.TXT
| El password que nos pide es el que hemos introducido en el dialogo de configuración. |
Lo primero será dar permisos a un usuario que maneje la BBDD (base de datos) 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. Para ello abrimos el fichero con privilegios de administrador:
sudo gedit /etc/php5/apache2/php.ini
y añadimos la siguiente línea:
extension=mysql.so
A continuación, cambiaremos los permisos de postfixadmin por motivos de 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
Una vez hecho esto, editaremos 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, borraremos los ficheros que sobran:
sudo rm -rf setup.php ; sudo rm -rf motd*
y ya podemos acceder a postfixadmin desde la siguiente url y desde cualquier navegador:
| http://localhost/postfixadmin/admin |
A continuación, haremos una lista de las rutas a las diferentes configuraciones.
| 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 htaccess de apache. Para ello, tendremos que editar dicho fichero mediante el comando:
sudo gedit /var/www/postfixadmin-2.1.0/admin/.htaccess
por lo que htaccess nos tendrá que quedar así:
AuthUserFile /var/www/postfixadmin/admin/.htpasswd AuthGroupFile /dev/null AuthName "Postfix Admin" AuthType Basic <limit GET POST> require valid-user </limit>
Seguidamente, nos meteremos en la carpeta admin y ejecutamos lo siguiente:
$ htpasswd .htpasswd usuario
| El usuario es un usuario que nosotros queramos usar para acceder, no tiene porqué pertenecer al sistema. |
En postfix tenemos 2 ficheros importantes: main.cf y master.cf.
Empezaremos abriendo el fichero correspondientea través de terminal:
sudo gedit /etc/postfix/main.cf
El contenido del fichero debe quedar de la siguiente forma:
myhostname = lomu.homelinux.org mydomain = lomu.homelinux.org myorigin = $mydomain mydestination = localhost mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all
# parametros TLS
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache smtp_tls_session_cache_database = btree:/var/lib/postfix/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, crearemos la carpeta mysql para crear dentro los mapas para postfix.
sudo mkdir /etc/postfix/mysql
Seguidamente, crearemos los mapas necesarios para que postfix se entienda con mysql y postfixadmin.
Editamos primero el fichero:
sudo gedit /etc/postfix/mysql/mapas_alias_virtuales_mysql.cf
y el contenido debe quedar de la siguiente forma:
user = postfix password = mi_pass hosts = 127.0.0.1 dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1
Guardamos y cerramos.
Editamos primero el fichero:
sudo gedit /etc/postfix/mysql/mapas_dominios_virtuales_mysql.cf
y el contenido debe quedar de la siguiente forma:
user = postfix password = mi_pass hosts = 127.0.0.1 dbname = postfix query = SELECT domain FROM domain WHERE domain='%s'
Guardamos y cerramos.
Editamos primero el fichero:
sudo vim /etc/postfix/mysql/mapas_mailbox_virtuales_mysql.cf
y el contenido debe quedar de la siguiente forma:
user = postfix password = mi_pass hosts = 127.0.0.1 dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
Guardamos y cerramos.
Editamos primero el fichero:
sudo vim /etc/postfix/mysql/mapas_limites_virtuales_mailbox_mysql.cf
y el contenido debe quedar de la siguiente forma:
user = postfix password = mi_pass hosts = 127.0.0.1 dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
Guardamos y cerramos.
Una vez realizadas estas operaciones, reiniciaremos Postfix:
/etc/init.d/postfix restart
Ahora ya podreemos ir a crear nuestro dominio virtual con los usuarios a los que queramos dar correo. Para ello, accederemos a postfix desde la siguiente url y desde cualquier navegador de internet:
| http://localhost/postfixadmin-2.1.0/admin/ |
A partir de aquí, la administración de postfixadmin es muy sencilla e intuitiva, por lo que podremos crear domnios muy fácilmente.
Como servidor para descargar los correos vamos a utilizar Dovecot por su sencillez y eficacia.
Debemos instalar los siguientes paquetes mediante el comando:
sudo aptitude install dovecot-common dovecot-imapd dovecot-pop3d
Tendremos que configurar Dovecot para que hable con MySQL. Para ello, editaremos el achivo dovecot-sql.conf:
sudo gedit /etc/dovecot/dovecot-sql.conf
En este fichero que vamos a editar, hay demasiadas lineas. Bastará con dejar las siguientes:
driver = mysql connect = dbname=postfix user=postfix host=localhost password=mi_pass 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'
La Configuración global de Dovecot está recogida en el fichero dovecot.conf:
sudo gedit /etc/dovecot/dovecot.conf
y al igual que antes, el fichero es enorme, pero bastará dejar con las lineas siguientes:
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 login
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
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
}
}
}
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, podrá ver, no sólo el user/pass de los usuarios de correo, si no que también también podrá leer sus correos. Esto supone un ataque a la intimidad de los usuarios. Para evitar esto, crearemos llaves para poder utilizar conexiones seguras con SSL.
Crearemos 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
Seguidamente, editaremos dovecot.conf:
sudo gedit /etc/dovecot/dovecot.conf
Y añadiremos las siguientes lineas:
ssl_cert_file = /etc/ssl/correo/dovecot.crt ssl_key_file = /etc/ssl/correo/dovecot.key
Uno de los grandes problemas de internet hoy en día es el problema del SPAM o correo basura. Esto sucede a veces debido a que 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 provocará en última instancia que introduzcan nuestro servidor de correo en listas negras y que muchos servidores de correo rechacen nuestros correos por considerarlos SPAM.
Para evitar esto, crearemos 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 empleado para enviar y recibir correos sea el mismo.
El primer paso será instalar el paquete libpam-mysql:
sudo aptitude install libpam-mysql
Seguidamente, crearemos el fichero /etc/pam.d/smtp con determinados parámetros en su interior:
sudo gedit /etc/pam.d/smtp
el contenido de este fichero será:
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
Una vez hecho esto, instalaremos los paquetes que se encargan de la autenticación a traves de Pam.
sudo aptitude install libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin
Tras la instalación, crearemos el directorio en el que irá el pid del saslauth:
sudo mkdir -p /var/spool/postfix/var/run/saslauthd
y editaremos el fichero de configuración para la configuración base editando el fichero /etc/default/saslauthd:
sudo gedit /etc/default/saslauthd
y añadiendo en él el texto:
START=yes MECHANISMS="pam" OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"
Tras guardar y cerrar, tendremos que decir al fichero de arranque donde dejar el pid . Para ello modificaremos /etc/init.d/saslauthd:
sudo gedit /etc/init.d/saslauthd
y añadiremos la siguiente línea:
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
Seguidamente, crearemos el fichero de configuración para el servidor smtp.
sudo gedit /etc/postfix/sasl/smtpd.conf
con el siguiente contenido:
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'
Tendremos que añadir una serie de líneas a main.cf para que sepa que los usuarios deben autenticarse para enviar correo:
sudo gedit /etc/postfix/main.cf
donde añadiremos:
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
Una vez hecho esto, crearemos 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
Finalmente, reiniciaremos postfix y probaremos a enviar algún correo para ver que es necesario introducir user/pass para poder enviar correos.
sudo /etc/init.d/postfix restart
Si algo falla, siempre podremos recurrir a los logs para ver qué es lo que está fallando.
SpamAssasin es considerado el mejor sistema AntiSpam que existe, tanto comercial como freeware, como libre..., ya que aparte de tener un sistema bayesiano muy bueno, SpamAssassin tiene plugins muy interesantes como puede ser el filtro por idiomas.
Para instalar SpamAssasin instalaremos los siguientes paquetes mediante el comando:
sudo aptitude install spamassassin spamc
Queremos que se ejecute con una cuenta sin privilegios, añadimos un usuario spamd y su grupo:
sudo groupadd spamd sudo useradd -g spamd -s /bin/false -d /var/log/spamassassin spamd sudo mkdir /var/log/spamassassin sudo chown spamd:spamd /var/log/spamassassin
El directorio de log de spamassassin es /var/log/spamassassin
Editamos /etc/default/spamassassin para que el demonio inicie:
ENABLED=1
SAHOME="/var/log/spamassassin/"
OPTIONS="--create-prefs --max-children 2 --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log"
Para configurarlo, tendremos que abrir para editar el fichero de configuración:
sudo gedit /etc/spamassassin/local.cf
Y lo tendremos que dejar de la siguiente forma:
# 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
Con estas modificaciones ya tenemos configurado Spamassassin. Ahora tendremos que crear la carpeta en la que se guardará la BBDD bayesiana:
mkdir /etc/spamassassin/bayes
Finalmente, reiniciaremos spamassassin para que se inicie con la nueva configuración:
/etc/init.d/spamassassin restart
Necesitamos configurar postfix para que los correos sean pasados por el filtro antispam. Esto lo conseguiremos editando el fichero master.cf:
sudo gedit /etc/postfix/master.cf
Añadiremos lo siguiente en la linea de smtp para que quede de la siguiente forma (el parámetro -o va en la siguiente linea):
smtp inet n - - - - smtpd
-o content_filter=spamassassin:dummy
Y al final del fichero añadiremos estas lineas:
spamassassin unix - n n - - pipe user=spamd
argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} -- ${recipient}
Finalmente, reiniciaremos postfix.
/etc/init.d/postfix restart
por último, tendremos que 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.
Una buena idea 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í, comentaremos en 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, cargaremos la BBDD y descomentaremos las lineas para que todo funcione bien.
Lo hacemos de la siguiente manera:
sudo sa-learn --spam -C /etc/mail/spamassassin --showdots /ruta/carpeta/con_spam
sudo sa-learn --ham -C /etc/mail/spamassassin --showdots --no-rebuild /ruta/correo/bueno.
Seguidamente, cuando hayamos metido correo bueno, necesitaremos restaurar los tokens.
sa-learn -C /etc/mail/spamassassin --showdots --rebuild
| Es muy importante que no mezclemos el correo bueno con el correo malo, ya que si no, spamassassin no funcionará bien y será un poco caótico. |
Lo primero una vez más, será instalar ClamAV instalando los paquetes necesarios mediante el comando:
sudo aptitude install clamav clamsmtp clamav-freshclam nfk
Una vez instalado, procederemos a su configuración editando el fichero clamsmtpd.conf:
sudo gedit /etc/clamsmtpd.conf
dejándolo de la siguiente forma:
# Direccion para enviar los correos escaneados: OutAddress: 10026 # Puerto en el que escucha Listen: 127.0.0.1:10025 # Lugar donde escucha el clamd ClamAddress: /var/run/clamav/clamd.ctl # Añadir esta cabecera a los correos escaneados Header: X-AV-Checked: ClamAV using ClamSMTP # Localización del pid PidFile: /var/run/clamsmtp/clamsmtpd.pid # Numero máximo de conexiones simultaneas a escanear. Por defecto no se pone nada #MaxConnections: 64 # Lugar donde dejar los ficheros temporales TempDirectory: /var/spool/clamsmtp # El usuario con el que lanzarlo User: clamsmtp # Acción a realizar en caso de detectar virus. VirusAction: /usr/local/bin/virusalert.sh
Seguidamente, tendremos que crear el fichero virusalert.sh, que será quien defina lo que haremos en caso de encontrar un virus en el correo.
sudo gedit /usr/local/bin/virusalert.sh
No olvide darle permisos de ejecución, y en él escribiremos:
#!/bin/sh FROM='Sistema antivirus <antivirus@lomu.homelinux.org>' TO=$RECIPIENTS MAILER='/usr/sbin/sendmail -it' SUBJECT=`/bin/echo "El correo contiene un virus" | /usr/bin/nkf -jMB` $MAILER <<EOM From: $FROM To: $TO Subject: =?ISO-2022-JP?B?$SUBJECT?= Se ha detectado codigo malicioso en el adjunto que contenía el correo. Pongase en contacto con el administrador de su sistema, si está seguro/a de que no es un virus, pida a la persona que le envía el fichero que por favor lo ponga en un fichero comprimido protegido por una contraseña. Disculpe las molestias. [Virus] $VIRUS [De] $SENDER [Para] $RECIPIENTS EOM exit 0
La última fase de configuración será decirle a postfix que procese los correos a traves de ClamAV. Para ello, editaremos master.cf:
sudo gedit /etc/postfix/master.cf
y añadiremos estas lineas al final del fichero:
## FILTRO ANTIVIRUS
## Filtro antivirus usado por content filter
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no
# Para inyectar el correo a postfix una vez analizado
127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Seguidamente, necesitaremos editar el fichero main.cf:
sudo gedit /etc/postfix/main.cf
en el que tendremos que añadir las siguientes líneas al final del fichero:
## ANTIVIRUS content_filter = scan:[127.0.0.1]:10025
Finalmente reiniciaremos los servicios para que se inicien con la nueva configuración:
/etc/init.d/clamsmtp restart /etc/init.d/postfix restart
Llegados a este punto, ya tendremos nuestro sistema de correo seguro.