Postfix/Configuración de un servidor

De doc.ubuntu-es
< Postfix(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Autenticación para SMTP (SMTP-AUTH))
 
(No se muestran 38 ediciones intermedias realizadas por 5 usuarios)
Línea 1: Línea 1:
{{Importante|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]] y [[ClamAv]].  
 +
 
  
Esta página proporciona ayuda para personas que quieren instalar y configurar un servidor [[w:Postfix|POSTFIX]]  en Ubuntu, incluyendo Postfixadmin, Mysql, Spamassassin, ClamAv
 
  
 
== Comprobar requisitos ==
 
== 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.
+
De primeras los únicos requisitos que debemos tener en cuenta son:
  
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.  
+
* Que tenemos el '''puerto 25''' del router dirigido al que va a ser nuestro [[servidores|servidor]] de correo.
  
Es importante también que la hora sea correcta, recomiendo instalar algún cliente como ntp para que se encargue de actualizar las hora.
+
* Determinar si el servidor '''resuelve nombres de dominio'''.
  
== Instalar lo básico para que postfix funcione ==
+
* 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 máquina podemos configurarlo después desde el propio fichero de configuración de Postfix.  
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 [[instalar aplicaciones|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.
+
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.
  
PostfixAdmin no esta en los repos, por lo tanto tendremos que instalarlo desde las fuentes. Es una operación realmente sencilla.
+
== Instalar lo básico para que postfix funcione ==
 +
 
 +
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
 
  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
 
  sudo tar zxvf postfixadmin-2.1.0.tar.gz -C /var/www
  
Ahora vamos a crear la estructura dentro de MySQL.
+
El resto de paquetes los podemos instalar con [[instalar aplicaciones|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
 +
 
 +
 
 +
{{nota|Con el paquete de '''postfix''' se nos preguntará qué tipo de instalación queremos hacer. Seleccionaremos la que esté '''por defecto''' ya que luego haremos una configuración a nuestro gusto editando el fichero manualmente.}}
 +
 
 +
 
 +
Seguidamente, crearemos la estructura dentro de MySQL:
  
 
  cd /var/www/postfixadmin-2.1.0
 
  cd /var/www/postfixadmin-2.1.0
 
  mysql -u root -p < DATABASE_MYSQL.TXT
 
  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 ==
+
{{nota | El password que nos pide es el que hemos introducido en el dialogo de configuración.}}
 +
 
 +
== Primeros pasos: configurando la base de datos MySQL ==
  
Lo primero será dar permisos a un usuario que maneje la BBDD de postfixadmin.
+
Lo primero será '''dar permisos a un usuario que maneje la BBDD''' (base de datos) de postfixadmin:
  
 
  $ mysql -u root -p
 
  $ mysql -u root -p
Línea 41: Línea 51:
 
  FLUSH PRIVILEGES ;
 
  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...
+
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 groupadd -g 1001 virtual
Línea 48: Línea 58:
 
  sudo chown -R virtual:virtual /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:
+
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
 
  sudo gedit /etc/php5/apache2/php.ini
Línea 56: Línea 66:
 
  extension=mysql.so
 
  extension=mysql.so
  
A continuación cambiamos los permisos de postfixadmin por seguridad.
+
A continuación, '''cambiaremos los permisos de postfixadmin''' por motivos de seguridad.
  
 
  cd /var/www/postfixadmin-2.1.0
 
  cd /var/www/postfixadmin-2.1.0
Línea 73: Línea 83:
 
  sudo chmod 640 *.php
 
  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).
+
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
 
  sudo gedit config.inc.php
Línea 85: Línea 95:
 
  $CONF['database_prefix'] = '';
 
  $CONF['database_prefix'] = '';
  
Una vez hemos terminado con ello vamos a borrar los ficheros que sobran.
+
Una vez hemos terminado con ello, '''borraremos los ficheros que sobran''':
  
 
  sudo rm -rf setup.php ; sudo rm -rf motd*
 
  sudo rm -rf setup.php ; sudo rm -rf motd*
  
y ya podemos acceder a postfixadmin desde la siguiente url
+
y ya podemos '''acceder a postfixadmin''' desde la siguiente url y desde cualquier navegador:
  
http://localhost/postfixadmin/admin
 
  
A continuación hago una lista de las rutas a las diferentes configuraciones.
+
{|align="center" style="font-size: 150%;"
 +
|http://localhost/postfixadmin/admin
 +
|}
  
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.
+
A continuación, haremos una '''lista de las rutas a las diferentes configuraciones'''.
  
Para el administrador global, la contraseña se pone con el htacces de apache:
+
:* Para el administrador global: http://localhost/postfixadmin/admin/
editamos el siguiente fichero y nos tiene que quedar así:
+
 
 +
:* 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 '''htaccess''' de [[apache]]. Para ello, tendremos que editar dicho fichero mediante el comando:
  
 
  sudo gedit /var/www/postfixadmin-2.1.0/admin/.htaccess
 
  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
 
  AuthUserFile /var/www/postfixadmin/admin/.htpasswd
Línea 114: Línea 133:
 
  </limit>
 
  </limit>
  
ahora nos metemos en la carpeta admin y ejecutamos lo siguiente:
+
Seguidamente, nos meteremos en la carpeta '''admin''' y ejecutamos lo siguiente:
 
   
 
   
 
  $ htpasswd .htpasswd usuario
 
  $ htpasswd .htpasswd usuario
  
Nota: El usuario es un usuario que nosotros queramos usar para acceder, no tiene porqué pertenecer al sistema.
+
 
 +
{{nota| El usuario es un usuario que nosotros queramos usar para acceder, no tiene porqué pertenecer al sistema.}}
 +
 
 +
 
  
 
== Empezamos con Postfix ==
 
== 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:
+
En postfix tenemos 2 ficheros importantes: '''main.cf''' y '''master.cf'''.
  
main.cf: Es el fichero principal para la configuración de postfix, aquí definimos cual es nuestro dominio, para que dominios aceptamos correo...
+
* '''main.cf:''' Es el fichero principal para la configuración de [[postfix]]. En él definimos cuál es nuestro dominio, para qué dominios aceptamos correo, etc.
master.cf: Es el fichero a través del que se configuran los demonios internos de postfix.
+
* '''master.cf:''' Es el fichero a través del que se configuran los [[Daemon|demonios]] internos de postfix.
  
Empecemos con el main.cf:
+
 
 +
=== Configuración de main.cf ===
 +
 
 +
Empezaremos abriendo el fichero correspondientea través de terminal:
  
 
  sudo gedit /etc/postfix/main.cf
 
  sudo gedit /etc/postfix/main.cf
 +
 +
El contenido del fichero debe quedar de la siguiente forma:
  
 
  myhostname = lomu.homelinux.org
 
  myhostname = lomu.homelinux.org
 
  mydomain = lomu.homelinux.org
 
  mydomain = lomu.homelinux.org
 
  myorigin = $mydomain
 
  myorigin = $mydomain
  mydestination = localhost, dominio.com
+
  mydestination = localhost
 
  mailbox_size_limit = 0
 
  mailbox_size_limit = 0
 
  recipient_delimiter = +
 
  recipient_delimiter = +
Línea 141: Línea 168:
 
  # parametros TLS
 
  # parametros TLS
  
  smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
+
  smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
  smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
+
  smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
 
   
 
   
 
  #MYSQL
 
  #MYSQL
Línea 162: Línea 189:
 
  virtual_overquota_bounce = yes
 
  virtual_overquota_bounce = yes
  
A continuación creamos la carpeta mysql para crear dentro los mapas para postfix.
+
A continuación, '''crearemos la carpeta''' '''mysql''' para crear dentro los '''mapas para postfix'''.
  
 
  sudo mkdir /etc/postfix/mysql
 
  sudo mkdir /etc/postfix/mysql
  
y ahora creamos los mapas necesarios para que postfix se entienda con mysql y postfixadmin.
+
Seguidamente, '''crearemos los mapas''' necesarios para que postfix se entienda con mysql y postfixadmin.
 +
 
 +
 
 +
==== Mapas para los Alias Virtuales ====
 +
 
 +
Editamos primero el fichero:
 +
 
 +
sudo gedit /etc/postfix/mysql/mapas_alias_virtuales_mysql.cf
 +
 
 +
y el contenido debe quedar de la siguiente forma:
  
'''sudo gedit /etc/postfix/mysql/mapas_alias_virtuales_mysql.cf'''
 
 
  user = postfix
 
  user = postfix
 
  password = mi_pass
 
  password = mi_pass
Línea 175: Línea 210:
 
  query = SELECT goto FROM alias WHERE address='%s' AND active = 1
 
  query = SELECT goto FROM alias WHERE address='%s' AND active = 1
  
  ''' sudo gedit /etc/postfix/mysql/mapas_dominios_virtuales_mysql.cf'''
+
Guardamos y cerramos.
 +
 
 +
 
 +
==== Mapas para los Dominios Virtuales ====
 +
 
 +
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
 
  user = postfix
 
  password = mi_pass
 
  password = mi_pass
Línea 182: Línea 227:
 
  query = SELECT domain FROM domain WHERE domain='%s'
 
  query = SELECT domain FROM domain WHERE domain='%s'
  
  ''' sudo vim /etc/postfix/mysql/mapas_mailbox_virtuales_mysql.cf'''ç
+
Guardamos y cerramos.
 +
 
 +
 
 +
==== Mapas para los Mailbox Virtuales ====
 +
 
 +
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
 
  user = postfix
 
  password = mi_pass
 
  password = mi_pass
Línea 189: Línea 244:
 
  query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
 
  query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
  
  '''sudo vim /etc/postfix/mysql/mapas_limites_virtuales_mailbox_mysql.cf'''
+
Guardamos y cerramos.
  ser = postfix
+
 
 +
 
 +
==== Mapas para los Límites Virtuales ====
 +
 
 +
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
 
  password = mi_pass
 
  hosts = 127.0.0.1
 
  hosts = 127.0.0.1
Línea 196: Línea 261:
 
  query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
 
  query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
  
 +
Guardamos y cerramos.
  
Reiniciamos Postfix
+
 
 +
 
 +
Una vez realizadas estas operaciones, '''reiniciaremos Postfix''':
  
 
  /etc/init.d/postfix restart
 
  /etc/init.d/postfix restart
  
Ahora ya podemos ir a crear nuestro dominio virtual con los usuarios a los que queramos dar correo.
+
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/
 
  
No explicaré como crear un dominio en postfixadmin porque creo que es muy sencillo de utilizar.
+
{|align="center" style="font-size: 150%;"
 +
|http://localhost/postfixadmin-2.1.0/admin/
 +
|}
  
Para saber si postfix está dando problemas podemos echar un vistazo a los siguientes ficheros de log.
+
 
 +
A partir de aquí, la administración de '''postfixadmin''' es muy sencilla e intuitiva, por lo que podremos crear domnios muy fácilmente.
 +
 
 +
 
 +
{{nota|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.err
 
  cat /var/log/mail.warn
 
  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 ;).
+
Postfix tiende a ser bastante claro con los errores, por lo que de tener alguno es sencillo encontrar lo que falle.}}
 
+
  
 
== POP3/S e IMAP/S con Dovecot ==
 
== 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:
+
Como servidor para descargar los correos vamos a utilizar [[Dovecot]] por su sencillez y eficacia.  
 +
 
 +
 
 +
=== Instalación de Dovecot ===
 +
 
 +
Debemos instalar los siguientes paquetes mediante el comando:
 
   
 
   
  dovecot-common dovecot-imapd dovecot-pop3d
+
  sudo aptitude install 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:
+
 
 +
=== Configurar Dovecot ===
 +
 
 +
Tendremos que '''configurar Dovecot para que hable con MySQL'''. Para ello, editaremos el achivo ''dovecot-sql.conf'':
  
 
  sudo gedit /etc/dovecot/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
 
  driver = mysql
  connect = dbname=postfix user=postfix host=localhost password=gesundheit
+
  connect = dbname=postfix user=postfix host=localhost password=mi_pass
 
  default_pass_scheme = CRYPT
 
  default_pass_scheme = CRYPT
 
  password_query = SELECT password FROM mailbox WHERE username = '%u'
 
  password_query = SELECT password FROM mailbox WHERE username = '%u'
 
  user_query = SELECT maildir, 1001 AS uid, 1001 AS gid 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í.
+
 
 +
La '''Configuración global de Dovecot''' está recogida en el fichero ''dovecot.conf'':
  
 
  sudo gedit /etc/dovecot/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
 
  protocols = imap imaps pop3 pop3s
Línea 257: Línea 342:
 
  ## AUTENTICACIÓN
 
  ## AUTENTICACIÓN
 
  auth default {
 
  auth default {
  mechanisms = plain
+
  mechanisms = plain login
 +
userdb sql {
 +
args = /etc/dovecot/dovecot-sql.conf
 +
}
 
  passdb sql {
 
  passdb sql {
 
  args = /etc/dovecot/dovecot-sql.conf
 
  args = /etc/dovecot/dovecot-sql.conf
 
  }
 
  }
 +
 
  user = root
 
  user = root
 
  socket listen {
 
  socket listen {
Línea 278: Línea 367:
 
  }
 
  }
  
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.
+
=== Añadiendo seguridad a POP3 ===
  
Creamos la llave en una nueva carpeta:
+
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
 
  cd /etc/ssl
Línea 287: Línea 378:
 
  openssl req -x509 -nodes -newkey rsa:1024 -days 3650 -out dovecot.crt -keyout dovecot.key
 
  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
+
Seguidamente, editaremos ''dovecot.conf'':
  
 
  sudo gedit /etc/dovecot/dovecot.conf
 
  sudo gedit /etc/dovecot/dovecot.conf
 +
 +
Y añadiremos las siguientes lineas:
  
 
  ssl_cert_file = /etc/ssl/correo/dovecot.crt
 
  ssl_cert_file = /etc/ssl/correo/dovecot.crt
 
  ssl_key_file = /etc/ssl/correo/dovecot.key
 
  ssl_key_file = /etc/ssl/correo/dovecot.key
 +
  
  
 
== Autenticación para SMTP (SMTP-AUTH) ==
 
== 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.
+
Uno de los grandes problemas de internet hoy en día es el problema del [http://es.wikipedia.org/wiki/Spam 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 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.
+
Para evitar esto, crearemos un sistema de autenticación mediante usuario y contraseña con [[SMTP-AUTH]].
  
libpam-mysql
+
Para seguir con la misma dinamica que antes trabajaremos sobre '''mysql''' para que el usuario empleado para enviar y recibir correos sea el mismo.
  
Ahora creamos el siguiente fichero con el contenido que veremos más abajo.
+
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
 
  sudo gedit /etc/pam.d/smtp
 +
 +
el contenido de este fichero será:
  
 
  auth required pam_permit.so pam_mysql.so
 
  auth required pam_permit.so pam_mysql.so
Línea 317: Línea 417:
 
  crypt=y
 
  crypt=y
  
Ahora instalamos los paquetes que se encargan de la autenticación a traves de Pam
+
Una vez hecho esto, instalaremos los paquetes que se encargan de la autenticación a traves de '''Pam'''.
  
  libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin
+
  sudo aptitude install libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin
  
Creamos el directorio en el que irá el [[w:Identificador_de_proceso| pid ]] del saslatuth
+
Tras la instalación, crearemos el directorio en el que irá el [[w:Identificador_de_proceso| pid ]] del '''saslauth''':
  
 
  sudo mkdir -p /var/spool/postfix/var/run/saslauthd
 
  sudo mkdir -p /var/spool/postfix/var/run/saslauthd
  
editamos el fichero de configuración para la configuración base:
+
y editaremos el fichero de configuración para la configuración base editando el fichero ''/etc/default/saslauthd'':
  
 
  sudo gedit /etc/default/saslauthd
 
  sudo gedit /etc/default/saslauthd
+
 
 +
y añadiendo en él el texto:
 +
 
 
  START=yes
 
  START=yes
 
  MECHANISMS="pam"
 
  MECHANISMS="pam"
 
  OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"
 
  OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"
  
Ahora tenemos que decir al fichero de arranque donde dejar el [[w:Identificador_de_proceso| pid ]] para ello lo modificamos y debe quedar así.
+
Tras guardar y cerrar, tendremos que '''decir al fichero de arranque donde dejar el [[w:Identificador_de_proceso| pid ]]'''. Para ello modificaremos ''/etc/init.d/saslauthd'':
  
 
  sudo gedit /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"
 
  PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
  
Ahora debemos crear el fichero de configuración para el servidor smtp.
+
Seguidamente, crearemos el '''fichero de configuración para el servidor smtp'''.
  
 
  sudo gedit /etc/postfix/sasl/smtpd.conf
 
  sudo gedit /etc/postfix/sasl/smtpd.conf
 +
 +
con el siguiente contenido:
 +
 
  pwcheck_method: saslauthd
 
  pwcheck_method: saslauthd
 
  mech_list: PLAIN LOGIN
 
  mech_list: PLAIN LOGIN
Línea 353: Línea 461:
 
  sql_select: select password from mailbox where username = '%u@%r'
 
  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.
+
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
 
  sudo gedit /etc/postfix/main.cf
 +
 +
donde añadiremos:
  
 
  smtpd_sasl_local_domain =
 
  smtpd_sasl_local_domain =
Línea 374: Línea 484:
 
  smtpd_sasl_type = dovecot
 
  smtpd_sasl_type = dovecot
 
  smtpd_sasl_path = private/auth
 
  smtpd_sasl_path = private/auth
disable_dns_lookups = yes
 
  
Ahora debemos crear el certificado y la llave para smtp
+
 
 +
Una vez hecho esto, '''crearemos el certificado y la llave para smtp''':
  
 
  mkdir /etc/postfix/ssl
 
  mkdir /etc/postfix/ssl
Línea 388: Línea 498:
 
  openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
 
  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.
+
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
 
  sudo /etc/init.d/postfix restart
  
 +
Si algo falla, siempre podremos recurrir a los logs para ver qué es lo que está fallando.
  
 +
== Instalación y configuración de SpamAssassin ==
  
 +
[[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
  
  
 +
{{nota|El '''''required score''''' es una puntuación que va de 0 a 10. Si la ponemos muy baja, podemos tener falsos positivos; es decir, que correos que no son SPAM podrían ser tratados como que sí lo fueran, 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 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
 +
 +
 +
=== Configurar Postfix para que emplee SpamAssasin ===
 +
 +
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.
 +
 +
 +
==== Cómo decimos a spamassassin qué es JAM y qué es SPAM ====
 +
 +
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.
 +
 +
Seguidamente, cuando hayamos metido correo bueno, necesitaremos '''restaurar los tokens'''.
 +
 +
sa-learn -C /etc/mail/spamassassin --showdots --rebuild
 +
 +
 +
{{nota|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.}}
 +
 +
== Instalando y configurando el antivirus ClamAV ==
 +
 +
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.
 +
 +
== Fuente ==
 +
* [http://lomu.homelinux.org Lomu's Blog]
 +
== Ver también ==
 +
* [[Postfix]]
 +
* [[ClamAV]]
 +
* [[Servidores#Servidores de correo|Servidores de correo]]
 +
 +
== Enlaces externos ==
 +
 +
* [http://www.postfix.org/start.html The Postfix Homepage] (en inglés) y sección de documentación [http://www.postfix.org/non-english.html en castellano].
 +
 +
 
[[Categoría:Servidores]]
 
[[Categoría:Servidores]]

Última revisión de 05:12 14 jun 2008

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


Contenido

[editar] Comprobar requisitos

De primeras los únicos requisitos que debemos tener en cuenta son:


  • 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.
  • 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 máquina podemos configurarlo después desde el propio fichero de configuración de Postfix.


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.

[editar] Instalar lo básico para que postfix funcione

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 


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


Seguidamente, crearemos la estructura dentro de MySQL:

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


Clip.png El password que nos pide es el que hemos introducido en el dialogo de configuración.

[editar] Primeros pasos: configurando la base de datos MySQL

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.


Clip.png 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


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


[editar] Empezamos con Postfix

En postfix tenemos 2 ficheros importantes: main.cf y master.cf.

  • main.cf: Es el fichero principal para la configuración de postfix. En él definimos cuál es nuestro dominio, para qué dominios aceptamos correo, etc.
  • master.cf: Es el fichero a través del que se configuran los demonios internos de postfix.


[editar] Configuración de main.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.


[editar] Mapas para los Alias Virtuales

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.


[editar] Mapas para los Dominios Virtuales

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.


[editar] Mapas para los Mailbox Virtuales

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.


[editar] Mapas para los Límites Virtuales

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.


Clip.png 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

Postfix tiende a ser bastante claro con los errores, por lo que de tener alguno es sencillo encontrar lo que falle.

[editar] POP3/S e IMAP/S con Dovecot

Como servidor para descargar los correos vamos a utilizar Dovecot por su sencillez y eficacia.


[editar] Instalación de Dovecot

Debemos instalar los siguientes paquetes mediante el comando:

sudo aptitude install dovecot-common dovecot-imapd dovecot-pop3d


[editar] Configurar Dovecot

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
    }
  }
}

[editar] Añadiendo seguridad a POP3

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


[editar] Autenticación para SMTP (SMTP-AUTH)

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.

[editar] Instalación y configuración de SpamAssassin

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


Clip.png El required score es una puntuación que va de 0 a 10. Si la ponemos muy baja, podemos tener falsos positivos; es decir, que correos que no son SPAM podrían ser tratados como que sí lo fueran, 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 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


[editar] Configurar Postfix para que emplee SpamAssasin

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.


[editar] Cómo decimos a spamassassin qué es JAM y qué es SPAM

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.

Seguidamente, cuando hayamos metido correo bueno, necesitaremos restaurar los tokens.

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


Clip.png 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.

[editar] Instalando y configurando el antivirus ClamAV

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.

[editar] Fuente

[editar] Ver también

[editar] Enlaces externos

Herramientas personales