User Tools

Site Tools


zz_deprecated:howto_postfix

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
howto_postfix [2012/03/19 09:02] dodgerzz_deprecated:howto_postfix [2022/02/11 11:36] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== [HOWTO] Postfix+Courier+MySQL+PostfixAdmin+SpamAssassin+SASL+TLS+roundcube+Postgrey ======
 +
 ====== Descripcion ====== ====== Descripcion ======
 Este pretende ser un mega-HOWTO de postfix: Este pretende ser un mega-HOWTO de postfix:
Line 5: Line 7:
 ====== Software ====== ====== Software ======
 El nombre de los paquetes dependerán de la distribución usada, por supuesto. A modo general: El nombre de los paquetes dependerán de la distribución usada, por supuesto. A modo general:
-===== Instalación Mínima =====+===== Instalación Mí­nima =====
 Con los siguientes paquetes tendremos un servidor de correo básico pero con soporte para dominios: Con los siguientes paquetes tendremos un servidor de correo básico pero con soporte para dominios:
 <code> <code>
 aptitude install mysql-client mysql-server \ aptitude install mysql-client mysql-server \
       postfix postfix-mysql \       postfix postfix-mysql \
-           courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-ssl \ +      courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-ssl \ 
-   </code>+</code>
 ===== Instalación Completa con antivirus, ssl y antispam ===== ===== Instalación Completa con antivirus, ssl y antispam =====
 Principalmente con la instalación y configuración de esta parte conseguimos un servidor eficiente. Principalmente con la instalación y configuración de esta parte conseguimos un servidor eficiente.
Line 31: Line 33:
 ==== main.cf ==== ==== main.cf ====
 Opciones principales del fichero //main.cf// de postfix  (///etc/postfix/main.cf//): Opciones principales del fichero //main.cf// de postfix  (///etc/postfix/main.cf//):
-{| border=1 ; margin:0 0 1em 1em" +Variable Descripcion ^ 
- !Variable!!Descripcion +|<code>smtpd_banner = $myhostname ESMTP $mail_name</code>||Mensaje de bienvenida. Conviene no mostrar información acerca de distribución o versión de paquetes | 
- |----------------- +|<code>#myhostname= mail.example.com</code>||Comentar la variable con nuestro nombre, ya que será variable. | 
- |<code>smtpd_banner = $myhostname ESMTP $mail_name</code>||Mensaje de bienvenida. Conviene no mostrar información acerca de distribución o versión de paquetes +|<code>myorigin = /etc/mailname</code>||Puede ser el nombre del dominio, el fichero //mailname// o el nombre del smtp | 
- |----------------- +|<code>relayhost =</code>||Esta variable contiene nuestro **relay** (smarthost) si lo usamos o nada si emitimos los mails directamente desde nuestro servidor. | 
- |<code>#myhostname= mail.example.com</code>||Comentar la variable con nuestro nombre, ya que será variable. +|<code>inet_interfaces = all 
- |----------------- +mynetworks_style = host</code>||Recibimos emails desde cualquier interfaz pero solo confiamos en nuestro host. | 
- |<code>myorigin = /etc/mailname</code>||Puede ser el nombre del dominio, el fichero //mailname// o el nombre del smtp +|<code># how long if undelivered before sending warning update to sender 
- |----------------- +delay_warning_time = 4h 
- |<code>relayhost =</code>||Esta variable contiene nuestro **relay** (smarthost) si lo usamos o nada si emitimos los mails directamente desde nuestro servidor. +# will it be a permanent error or temporary 
- |----------------- +unknown_local_recipient_reject_code = 450 
- |<code>inet_interfaces = all +# how long to keep message on queue before return as failed. 
- mynetworks_style = host</code>||Recibimos emails desde cualquier interfaz pero solo confiamos en nuestro host. +# some have 3 days, I have 16 days as I am backup server for some people 
- |----------------- +# whom go on holiday with their server switched off. 
- |<code># how long if undelivered before sending warning update to sender +maximal_queue_lifetime = 7d 
- delay_warning_time = 4h +# max and min time in seconds between retries if connection failed 
- # will it be a permanent error or temporary +minimal_backoff_time = 1000s 
- unknown_local_recipient_reject_code = 450 +maximal_backoff_time = 8000s 
- # how long to keep message on queue before return as failed. +# how long to wait when servers connect before receiving rest of data 
- # some have 3 days, I have 16 days as I am backup server for some people +smtp_helo_timeout = 60s 
- # whom go on holiday with their server switched off. +# how many address can be used in one message. 
- maximal_queue_lifetime = 7d +# effective stopper to mass spammers, accidental copy in whole address list 
- # max and min time in seconds between retries if connection failed +# but may restrict intentional mail shots. 
- minimal_backoff_time = 1000s +smtpd_recipient_limit = 16 
- maximal_backoff_time = 8000s +# how many error before back off. 
- # how long to wait when servers connect before receiving rest of data +smtpd_soft_error_limit = 3 
- smtp_helo_timeout = 60s +# how many max errors before blocking it. 
- # how many address can be used in one message. +smtpd_hard_error_limit = 12 
- # effective stopper to mass spammers, accidental copy in whole address list +</code>||Varias variables referentes a la cola/descarte de mensajes |  
- # but may restrict intentional mail shots. +|<code># require proper helo at connections 
- smtpd_recipient_limit = 16 +smtpd_helo_required = yes 
- # how many error before back off. +# waste spammers time before rejecting them 
- smtpd_soft_error_limit = 3 +smtpd_delay_reject = yes 
- # how many max errors before blocking it. +disable_vrfy_command = yes</code>||Algunas restricciones referentes a la "entrada" al smtp | 
- smtpd_hard_error_limit = 12 +|<code>transport_maps = mysql:/etc/postfix/mysql_virtual_transport.cf 
- </code>||Varias variables referentes a la cola/descarte de mensajes +virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf 
- |----------------- +virtual_gid_maps = static:5000 
- |<code># require proper helo at connections +virtual_mailbox_base = /home/mail/mailboxes 
- smtpd_helo_required = yes +virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf 
- # waste spammers time before rejecting them +virtual_mailbox_limit = 51200000 
- smtpd_delay_reject = yes +virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf 
- disable_vrfy_command = yes</code>||Algunas restricciones referentes a la "entrada" al smtp +virtual_minimum_uid = 5000 
- |----------------- +virtual_transport = virtual 
- |<code>transport_maps = mysql:/etc/postfix/mysql_virtual_transport.cf +virtual_uid_maps = static:5000 
- virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf +virtual_create_maildirsize = yes 
- virtual_gid_maps = static:5000 +virtual_mailbox_extended = yes 
- virtual_mailbox_base = /home/mail/mailboxes +virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf 
- virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf +virtual_mailbox_limit_override = yes 
- virtual_mailbox_limit = 51200000 +virtual_maildir_limit_message = Sorry, the user's maildir has no space available in their inbox. 
- virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf +virtual_overquota_bounce = yes</code>||Configuración referente a mysql principalmente, sobre todo atención a la variable **virtual_mailbox_base** que ha de ser un directorio existente y con permisos para que postfix escriba en el mismo, lo realizamos en el siguiente paso. |
- virtual_minimum_uid = 5000 +
- virtual_transport = virtual +
- virtual_uid_maps = static:5000 +
- virtual_create_maildirsize = yes +
- virtual_mailbox_extended = yes +
- virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf +
- virtual_mailbox_limit_override = yes +
- virtual_maildir_limit_message = Sorry, the user's maildir has no space available in their inbox. +
- virtual_overquota_bounce = yes</code>||Configuración referente a mysql principalmente, sobre todo atención a la variable **virtual_mailbox_base** que ha de ser un directorio existente y con permisos para que postfix escriba en el mismo, lo realizamos en el siguiente paso. +
- |}+
  
- ===Operaciones adicionales ==== +==== Operaciones adicionales ==== 
- Generamos los alias necesarios para el correo interno, sobre todo hay que vigilar que el alias para root corresponde con un usuario real: +Generamos los alias necesarios para el correo interno, sobre todo hay que vigilar que el alias para root corresponde con un usuario real: 
- <code>cp /etc/aliases /etc/postfix/aliases +<code>cp /etc/aliases /etc/postfix/aliases 
- postalias /etc/postfix/aliases +postalias /etc/postfix/aliases 
- </code>+</code>
  
- Creación del directorio para las cuentas de correo: +Creación del directorio para las cuentas de correo: 
- <code> +<code> 
- mkdir -p /home/mail/mailboxes +mkdir -p /home/mail/mailboxes 
- groupadd virtual -g 5000 +groupadd virtual -g 5000 
- useradd virtual -u 5000 -g 5000 +useradd virtual -u 5000 -g 5000 
- chown -R virtual:virtual /home/mail/mailboxes +chown -R virtual:virtual /home/mail/mailboxes 
- </code>+</code>
  
- ===Configuración postfix-mysql ==== +==== Configuración postfix-mysql ==== 
- La configuración para mysql la baso en lo necesario para [[http://postfixadmin.sourceforge.net/|postfixadmin]] +La configuración para mysql la baso en lo necesario para [[http://postfixadmin.sourceforge.net/|postfixadmin]] 
  
- Como se puede apreciar en las opciones de más abajo, todos los ficheros cuentan con el mismo patrón: +Como se puede apreciar en las opciones de más abajo, todos los ficheros cuentan con el mismo patrón: 
- * hosts, dbname, user y password : Datos de conexion a Mysql +* hosts, dbname, user y password : Datos de conexion a Mysql 
- * table : Tabla de donde se obtienen los datos +* table : Tabla de donde se obtienen los datos 
- * select_field y  where_field : datos para ejecutar la query del tipo: +* select_field y  where_field : datos para ejecutar la query del tipo: 
- <code> +<code> 
- SELECT select_field FROM table WHERE where_field ; +SELECT select_field FROM table WHERE where_field ; 
- </code> +</code> 
- Postfix completa la query con algunos campos adicionales, por supuesto, se pueden apreciar en el "mail.log", esto deberá ser el sistema de debugar qué está haciendo postfix si vemos que las cosas no funcionan.+Postfix completa la query con algunos campos adicionales, por supuesto, se pueden apreciar en el "mail.log", esto deberá ser el sistema de debugar qué está haciendo postfix si vemos que las cosas no funcionan.
  
- {| border=1 ; margin:0 0 1em 1em" +Fichero Contenido Descripcion ^ 
- !Fichero!!Contenido!!Descripcion +|<code>vi mysql_relay_domains_maps.cf</code> | <code> 
- |----------------- +hosts = 127.0.0.1 
- |<code>vi mysql_relay_domains_maps.cf</code>||<code> +dbname = postfix 
- hosts = 127.0.0.1 +user = postfix 
- dbname = postfix +password = password 
- user = postfix +table = domain 
- password = password +select_field = domain 
- table = domain +where_field = domain 
- select_field = domain +</code> | Lista de relays para cada dominio | 
- where_field = domain +|<code>vi mysql_virtual_alias_maps.cf</code> | <code> 
- </code>||Lista de relays para cada dominio +hosts = 127.0.0.1 
- |----------------- +dbname = postfix 
- |<code>vi mysql_virtual_alias_maps.cf</code>||<code> +user = postfix 
- hosts = 127.0.0.1 +password = password 
- dbname = postfix +table = alias 
- user = postfix +select_field = goto 
- password = password +where_field = address 
- table = alias +</code>| Listado de alias | 
- select_field = goto +|<code>vi mysql_virtual_domains_maps.cf</code> | <code> 
- where_field = address +hosts = 127.0.0.1 
- </code>||Listado de alias +dbname = postfix 
- |----------------- +user = postfix 
- |<code>vi mysql_virtual_domains_maps.cf</code>||<code> +password = password 
- hosts = 127.0.0.1 +table = domain 
- dbname = postfix +select_field = domain 
- user = postfix +where_field = domain 
- password = password +</code> | Listado de dominios | 
- table = domain +|<code>vi mysql_virtual_mailbox_limit_maps.cf</code> | <code> 
- select_field = domain +hosts = 127.0.0.1 
- where_field = domain +dbname = postfix 
- </code>||Listado de dominios +user = postfix 
- |----------------- +password = password 
- |<code>vi mysql_virtual_mailbox_limit_maps.cf</code>||<code> +table = mailbox 
- hosts = 127.0.0.1 +select_field = quota 
- dbname = postfix +where_field = username 
- user = postfix +</code> | Cuota de cada usuario | 
- password = password +|<code>vi mysql_virtual_mailbox_maps.cf</code> | <code> 
- table = mailbox +hosts = 127.0.0.1 
- select_field = quota +dbname = postfix 
- where_field = username +user = postfix 
- </code>||Cuota de cada usuario +password = password 
- |----------------- +table = mailbox 
- |<code>vi mysql_virtual_mailbox_maps.cf</code>||<code> +select_field = maildir 
- hosts = 127.0.0.1 +where_field = username 
- dbname = postfix +</code>  | Directorio en linux del usuario de correo | 
- user = postfix +|<code>vi mysql_virtual_transport.cf</code> | <code> 
- password = password +hosts = 127.0.0.1 
- table = mailbox +dbname = postfix 
- select_field = maildir +user = postfix 
- where_field = username +password = password 
- </code>||Directorio en linux del usuario de correo +table = domain 
- |----------------- +select_field = transport 
- |<code>vi mysql_virtual_transport.cf</code>||<code> +where_field = domain 
- hosts = 127.0.0.1 +</code>  | Tipologá del dominio (virutal) |
- dbname = postfix +
- user = postfix +
- password = password +
- table = domain +
- select_field = transport +
- where_field = domain +
- </code>||Tipologá del dominio (virutal) +
- |}+
  
- ==Courier ===== +===== Courier ===== 
- Configuración inicial para courier bastante simplificada: +Configuración inicial para courier bastante simplificada: 
- <code>vi /etc/courier/authdaemonrc</code> +<code>vi /etc/courier/authdaemonrc</code> 
- <code> +<code> 
- #authmodulelist="authpam" +#authmodulelist="authpam" 
- authmodulelist="authmysql" +authmodulelist="authmysql" 
- DEBUG_LOGIN=2 +DEBUG_LOGIN=2 
- </code> +</code> 
- Es decir, le indicamos que vamos a usar mysql para autenticaión en vez de PAM y habilitamos el debug a syslog para posibles troubleshoots.+Es decir, le indicamos que vamos a usar mysql para autenticaión en vez de PAM y habilitamos el debug a syslog para posibles troubleshoots.
  
- Creamos el fichero de configuración de mysql; +Creamos el fichero de configuración de mysql; 
- <code>vi /etc/courier/authmysqlrc</code> +<code>vi /etc/courier/authmysqlrc</code> 
- <code> +<code> 
- MYSQL_SERVER            localhost +MYSQL_SERVER            localhost 
- MYSQL_USERNAME          postfix +MYSQL_USERNAME          postfix 
- MYSQL_PASSWORD          password +MYSQL_PASSWORD          password 
- MYSQL_PORT              0 +MYSQL_PORT              0 
- MYSQL_OPT               0 +MYSQL_OPT               0 
- MYSQL_DATABASE          postfix +MYSQL_DATABASE          postfix 
- MYSQL_USER_TABLE        mailbox +MYSQL_USER_TABLE        mailbox 
- MYSQL_CRYPT_PWFIELD     password +MYSQL_CRYPT_PWFIELD     password 
- MYSQL_LOGIN_FIELD       username +MYSQL_LOGIN_FIELD       username 
- MYSQL_NAME_FIELD        name +MYSQL_NAME_FIELD        name 
- MYSQL_UID_FIELD         '5000' +MYSQL_UID_FIELD         '5000' 
- MYSQL_GID_FIELD         '5000' +MYSQL_GID_FIELD         '5000' 
- MYSQL_HOME_FIELD        '/home/mail/mailboxes' +MYSQL_HOME_FIELD        '/home/mail/mailboxes' 
- MYSQL_MAILDIR_FIELD     maildir +MYSQL_MAILDIR_FIELD     maildir 
- </code> +</code> 
- Como se puede apreciar únicamente le proporcionamos los datos de conexion al servidor y datos básicos del sistema.+Como se puede apreciar únicamente le proporcionamos los datos de conexion al servidor y datos básicos del sistema.
  
  
- ==MySQL ===== +===== MySQL ===== 
- Para mysql únicamente crearemos el usuario y la bbdd ya que del resto se encargará el [[http://postfixadmin.sourceforge.net/|postfixadmin]]. +Para mysql únicamente crearemos el usuario y la bbdd ya que del resto se encargará el [[http://postfixadmin.sourceforge.net/|postfixadmin]]. 
- <code>msyql -p</code> +<code>msyql -p</code> 
- <code>create database postfix ; +<code>create database postfix ; 
- GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost'  IDENTIFIED BY 'password' ;</code> +GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost'  IDENTIFIED BY 'password' ;</code> 
- Logicamente es conveniente probar la conexion para cerciorarnos que el usuario está ok.+Logicamente es conveniente probar la conexion para cerciorarnos que el usuario está ok.
  
- ==PostfixAdmin ===== +===== PostfixAdmin ===== 
- Hay que descargar el PostfixAdmin: [[http://sourceforge.net/projects/postfixadmin/|http://sourceforge.net/projects/postfixadmin/]] +Hay que descargar el PostfixAdmin: [[http://sourceforge.net/projects/postfixadmin/|http://sourceforge.net/projects/postfixadmin/]] 
- La instalación es como la de cualquier aplicación php, no entraré en detalles por esa parte, me centro únicamente en la configuración del mismo. +La instalación es como la de cualquier aplicación php, no entraré en detalles por esa parte, me centro únicamente en la configuración del mismo. 
- Una vez lo tengamos descomprimido, cambiamos las opciones básicas para lanzar el wizard mediante web: +Una vez lo tengamos descomprimido, cambiamos las opciones básicas para lanzar el wizard mediante web: 
- <code>vi config.inc.php</code> +<code>vi config.inc.php</code> 
- {| border=1 ; margin:0 0 1em 1em" +Variable Descripcion ^ 
- !Variable!!Descripcion +|<code>$CONF[['configured']] = true;</code> |Hay que indicar que no somos un bot |  
- |----------------- +|<code>$CONF[['setup_password']] = //;</code> | El propio postfixadmin nos proporciona el hash que hay que poner aquí­ la primera vez que lo ejecutemos. | 
- |<code>$CONF[['configured']] = true;</code>||Hay que indicar que no somos un bot +|<code>$CONF[['default_language']] = 'en';</code> | Si queremos cambiar el Idioma por defecto |  
- |----------------- +|<code>$CONF[['database_type']] = 'mysql'; 
- |<code>$CONF[['setup_password']] = //;</code>||El propio postfixadmin nos proporciona el hash que hay que poner aquí la primera vez que lo ejecutemos. +$CONF[['database_host']] = 'localhost'; 
- |----------------- +$CONF[['database_user']] = 'postfix'; 
- |<code>$CONF[['default_language']] = 'en';</code>||Si queremos cambiar el Idioma por defecto +$CONF[['database_password']] = 'password'; 
- |----------------- +$CONF[['database_name']] = 'postfix'; 
- |<code>$CONF[['database_type']] = 'mysql'; +$CONF[['database_prefix']] = //;</code> | Todas las opciones para conexion a la bbdd, son las mismas que usamos para el postfix en sí­. |  
- $CONF[['database_host']] = 'localhost'; +Ahora ya podemos apuntar a la dirección web que contiene el setup, pej: 
- $CONF[['database_user']] = 'postfix'; +  * [[http://localhost/postfixadmin/setup|http://localhost/postfixadmin/setup]] 
- $CONF[['database_password']] = 'password'; +En este momento se crearán automáticamente todas las tablas necesarias para el funcionamiento tanto de postfix (usando la configuración anterior) como del postfixadmin en sí­
- $CONF[['database_name']] = 'postfix'; +Aparte, se nos da la posibilidad de crear el hash para el "setup_password" comentado anteriormente y la creación de usuarios administrativos. 
- $CONF[['database_prefix']] = //;</code>||Todas las opciones para conexion a la bbdd, son las mismas que usamos para el postfix en sí. +Logicamente hay que crear uno que será super user, que no será un mailbox, **unicamente es un login para el postfixadmin**.
- |} +
- Ahora ya podemos apuntar a la dirección web que contiene el setup, pej: +
- * [[http://localhost/postfixadmin/setup|http://localhost/postfixadmin/setup]] +
- En este momento se crearán automáticamente todas las tablas necesarias para el funcionamiento tanto de postfix (usando la configuración anterior) como del postfixadmin en sí+
- Aparte, se nos da la posibilidad de crear el hash para el "setup_password" comentado anteriormente y la creación de usuarios administrativos. +
- Logicamente hay que crear uno que será super user, que no será un mailbox, **unicamente es un login para el postfixadmin**.+
  
  
- ---- +---- 
- <font color=red>Con esto y la creación de una nueva cuenta de correo, estará finalizada la configuración básica del servidor, deberámos poder conectarnos y enviar emails. Cosa conveniente antes de pasar a la siguiente parte de la configuración.</font> +''Con esto y la creación de una nueva cuenta de correo, estará finalizada la configuración básica del servidor, deberámos poder conectarnos y enviar emails. Cosa conveniente antes de pasar a la siguiente parte de la configuración.'' 
- ----+----
  
- =Instalación Segura ====== +====== Instalación Segura ====== 
- Esta parte de la instalación trataré parámetros básicos de autenticación y SSL. Para mí es básico realizar estas operaciones como mínimo (sin contar la parte de antispam)+Esta parte de la instalación trataré parámetros básicos de autenticación y SSL. Para mí­ es básico realizar estas operaciones como mí­nimo (sin contar la parte de antispam)
  
- ==SASL ===== +===== SASL ===== 
- Usaremos la **"[[http://www.ietf.org/dyn/wg/charter/sasl-charter.html|Simple Authentication and Security Layer]]"** para tener el servicio smtpd con autenticación por usuario.+Usaremos la **"[[http://www.ietf.org/dyn/wg/charter/sasl-charter.html|Simple Authentication and Security Layer]]"** para tener el servicio smtpd con autenticación por usuario.
  
- ===Software ==== +==== Software ==== 
- <code>aptitude install sasl2-bin libpam-mysql +<code>aptitude install sasl2-bin libpam-mysql 
- </code> +</code> 
- ===Configuración ==== +==== Configuración ==== 
- <code> +<code> 
- mkdir -p /var/spool/postfix/var/run/saslauthd +mkdir -p /var/spool/postfix/var/run/saslauthd 
- </code> +</code> 
- Hacemos un backup y editamos el fichero de configuración: +Hacemos un backup y editamos el fichero de configuración: 
- <code> +<code> 
- mv /etc/default/saslauthd /etc/default/saslauthd.old +mv /etc/default/saslauthd /etc/default/saslauthd.old 
- vi /etc/default/saslauthd +vi /etc/default/saslauthd 
- </code> +</code> 
- Y añadimos nuestros parametros: +Y añadimos nuestros parametros: 
- <code> +<code> 
- START=yes +START=yes 
- MECHANISMS="pam" +MECHANISMS="pam" 
- MECH_OPTIONS="" +MECH_OPTIONS="" 
- THREADS=3 +THREADS=3 
- OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" +OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" 
- </code> +</code> 
- Cuidado con el número de threads, **3**, puede ser muy poco.+Cuidado con el número de threads, **3**, puede ser muy poco.
  
- Creamos la configuración de sistema (pam) para el smtpd: +Creamos la configuración de sistema (pam) para el smtpd: 
- <code> +<code> 
- vi /etc/pam.d/smtp +vi /etc/pam.d/smtp 
- </code> +</code> 
- <code> +<code> 
- auth    required   pam_mysql.so user=postfix passwd=password host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 +auth    required   pam_mysql.so user=postfix passwd=password host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 
- account sufficient pam_mysql.so user=postfix passwd=password host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 +account sufficient pam_mysql.so user=postfix passwd=password host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 
- </code> +</code> 
- Revisar las variables acostumbradas: +Revisar las variables acostumbradas: 
- * user +* user 
- * passwd +* passwd 
- * host +* host 
- * db +* db 
- * table +* table 
- * usercolum +* usercolum 
- * passwdcolumn+* passwdcolumn
  
- Ahora creamos la configuración de postfix/smptd: +Ahora creamos la configuración de postfix/smptd: 
- <code> +<code> 
- vi /etc/postfix/sasl/smtpd.conf +vi /etc/postfix/sasl/smtpd.conf 
- </code> +</code> 
- <code> +<code> 
- pwcheck_method: saslauthd +pwcheck_method: saslauthd 
- mech_list: plain login +mech_list: plain login 
- allow_plaintext: true +allow_plaintext: true 
- auxprop_plugin: mysql +auxprop_plugin: mysql 
- sql_hostnames: localhost +sql_hostnames: localhost 
- sql_user: postfix +sql_user: postfix 
- sql_passwd: password +sql_passwd: password 
- sql_database: postfix +sql_database: postfix 
- sql_select: select password from mailbox where username='%u@%r' and active = 1 +sql_select: select password from mailbox where username='%u@%r' and active = 1 
- </code>+</code>
  
- Añadimos el usuario postfix al grupo del sasl2 +Añadimos el usuario postfix al grupo del sasl2 
- <code>adduser postfix sasl</code>+<code>adduser postfix sasl</code>
  
- Bastará con reiniciar el servicio y comprobar la autenticación; como troubleshoot usarámos el //mail.log// y el //auth.log//.+Bastará con reiniciar el servicio y comprobar la autenticación; como troubleshoot usarámos el //mail.log// y el //auth.log//.
  
- ==SSL/TLS ===== +===== SSL/TLS ===== 
- Configuración ara SSL/TLS tanto en imap como smtp.+Configuración ara SSL/TLS tanto en imap como smtp.
  
- ===IMAP ==== +==== IMAP ==== 
- La configuración de imap-ssl ya la suele realizar por defecto debian cuando instalamos el paquete de courier-ssl. +La configuración de imap-ssl ya la suele realizar por defecto debian cuando instalamos el paquete de courier-ssl. 
- Hay que editar el fichero de configuración: +Hay que editar el fichero de configuración: 
- <code> +<code> 
- vi /etc/courier/imapd-ssl +vi /etc/courier/imapd-ssl 
- </code> +</code> 
- Y confirmar/verificar las siguientes opciones: +Y confirmar/verificar las siguientes opciones: 
- <code> +<code> 
- SSLPORT=993 +SSLPORT=993 
- SSLADDRESS=0 +SSLADDRESS=0 
- SSLPIDFILE=/var/run/courier/imapd-ssl.pid +SSLPIDFILE=/var/run/courier/imapd-ssl.pid 
- SSLLOGGEROPTS="-name=imapd-ssl" +SSLLOGGEROPTS="-name=imapd-ssl" 
- IMAPDSSLSTART=YES +IMAPDSSLSTART=YES 
- IMAPDSTARTTLS=YES +IMAPDSTARTTLS=YES 
- IMAP_TLS_REQUIRED=1 +IMAP_TLS_REQUIRED=1 
- COURIERTLS=/usr/bin/couriertls +COURIERTLS=/usr/bin/couriertls 
- TLS_PROTOCOL=SSL3 +TLS_PROTOCOL=SSL3 
- TLS_STARTTLS_PROTOCOL=TLS1 +TLS_STARTTLS_PROTOCOL=TLS1 
- TLS_CERTFILE=/etc/postfix/ssl/www.ciberterminal.net.pem +TLS_CERTFILE=/etc/postfix/ssl/www.ciberterminal.net.pem 
- TLS_VERIFYPEER=NONE +TLS_VERIFYPEER=NONE 
- TLS_CACHEFILE=/var/lib/courier/couriersslcache +TLS_CACHEFILE=/var/lib/courier/couriersslcache 
- TLS_CACHESIZE=524288 +TLS_CACHESIZE=524288 
- MAILDIRPATH=Maildir +MAILDIRPATH=Maildir 
- </code> +</code> 
- Las principales opciones a tener en cuenta son las siguentes: +Las principales opciones a tener en cuenta son las siguentes: 
- {| border=1 ; margin:0 0 1em 1em" +Variable Descripcion ^ 
- !Variable!!Descripcion +|<code>SSLPORT=993</code> | El puerto por donde se va a escuchar |  
- |----------------- +|<code>IMAP_TLS_REQUIRED=1</code> | Con esta variable se fuerza el SSL, eliminando la opción de transferencias sin encriptar | 
- |<code>SSLPORT=993</code>||El puerto por donde se va a escuchar +|<code>TLS_CERTFILE=/etc/postfix/ssl/www.ciberterminal.net.pem</code> | En mi caso uso el mismo certificado para smtp e imap, el pem es el key+crt |
- |----------------- +
- |<code>IMAP_TLS_REQUIRED=1</code>||Con esta variable se fuerza el SSL, eliminando la opción de transferencias sin encriptar +
- |----------------- +
- |<code>TLS_CERTFILE=/etc/postfix/ssl/www.ciberterminal.net.pem</code>||En mi caso uso el mismo certificado para smtp e imap, el pem es el key+crt +
- |}+
  
- ===SMPT ==== +==== SMPT ==== 
- Para smyp es "conveniente" habilitar tanto ssl como plain, principalmente por que roundcube suele dar problemas con TLS habilitado en smptd. Con capar el puerto 25 deberá valer, aunque no hay nada 100% seguro.+Para smyp es "conveniente" habilitar tanto ssl como plain, principalmente por que roundcube suele dar problemas con TLS habilitado en smptd. Con capar el puerto 25 deberá valer, aunque no hay nada 100% seguro.
  
- Editamos el fichero de configuración principal: +Editamos el fichero de configuración principal: 
- <code>vi /etc/postfix/main.cf</code> +<code>vi /etc/postfix/main.cf</code> 
- Y añadimos/modificamos los paŕametros: +Y añadimos/modificamos los paŕametros: 
- <code> +<code> 
- # TLS parameters +# TLS parameters 
- smtpd_use_tls=yes +smtpd_use_tls=yes 
- smtpd_tls_cert_file=/etc/postfix/ssl/www.ciberterminal.net.crt +smtpd_tls_cert_file=/etc/postfix/ssl/www.ciberterminal.net.crt 
- smtpd_tls_key_file=/etc/postfix/ssl/www.ciberterminal.net.key +smtpd_tls_key_file=/etc/postfix/ssl/www.ciberterminal.net.key 
- smtpd_tls_CAfile = /etc/postfix/ssl/ca.crt +smtpd_tls_CAfile = /etc/postfix/ssl/ca.crt 
- smtpd_tls_loglevel = 3 +smtpd_tls_loglevel = 3 
- smtpd_tls_received_header = yes +smtpd_tls_received_header = yes 
- smtpd_tls_session_cache_timeout = 3600s +smtpd_tls_session_cache_timeout = 3600s 
- tls_random_source = dev:/dev/urandom +tls_random_source = dev:/dev/urandom 
- smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache +smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache 
- smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache +smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache 
- </code>+</code>
  
- Después habilitamos el puerto para smtps: +Después habilitamos el puerto para smtps: 
- <code>vi /etc/postfix/master.cf</code> +<code>vi /etc/postfix/master.cf</code> 
- Y lo habilitamos: +Y lo habilitamos: 
- <code> +<code> 
- smtps     inet  n                               smtpd +smtps     inet  n                               smtpd 
- </code>+</code>
  
- =Instalación Complementaria ====== +====== Instalación Complementaria ====== 
- En esta última parte, trato temas adicionales como un gestor webmail, [[http://roundcube.net/|Roundcube]] muchísimo más avanzado que el famoso squirrelmail; antivirus, antispam y demás ...+En esta última parte, trato temas adicionales como un gestor webmail, [[http://roundcube.net/|Roundcube]] muchí­simo más avanzado que el famoso squirrelmail; antivirus, antispam y demás ...
  
- ==Roundcube ===== +===== Roundcube ===== 
- Descargamos la versión que queramos, stable o unstable, a gusto de cada uno: +Descargamos la versión que queramos, stable o unstable, a gusto de cada uno: 
- * [[http://roundcube.net/downloads|http://roundcube.net/downloads]] +* [[http://roundcube.net/downloads|http://roundcube.net/downloads]] 
- La configuración ha de hacerse igual que con cualquier aplicación web, intentando aseguralo todo lo máximo posible.+La configuración ha de hacerse igual que con cualquier aplicación web, intentando aseguralo todo lo máximo posible.
  
- Una vez estando descomprimido, basta seguir las instrucciones del INSTALL: +Una vez estando descomprimido, basta seguir las instrucciones del INSTALL: 
- * Crear bbdd +* Crear bbdd 
- * Crear usuario +* Crear usuario 
- * Hacer la importación inicial de datos. +* Hacer la importación inicial de datos. 
- En mi caso he decidido editar los ficheros de configuración, tal como dice el propio install. +En mi caso he decidido editar los ficheros de configuración, tal como dice el propio install. 
- ===db.inc.php ==== +===db.inc.php ==== 
- Lo único que hay que cambiar en este caso es la cadena de conexión: +Lo único que hay que cambiar en este caso es la cadena de conexión: 
- <code>$rcmail_config[['db_dsnw']] = 'mysql://roundcube:password@localhost/roundcubemail';</code> +<code>$rcmail_config[['db_dsnw']] = 'mysql://roundcube:password@localhost/roundcubemail';</code> 
- La cadena de conexión es la habitual: +La cadena de conexión es la habitual: 
- <code>mysql:<nowiki>//</nowiki>usuario:password@IP-SERVIDOR-MYSQL/NOMBRE_BBDD</code> +<code>mysql:<nowiki>//</nowiki>usuario:password@IP-SERVIDOR-MYSQL/NOMBRE_BBDD</code> 
- ===main.inc.php ==== +==== main.inc.php ==== 
- Aquí está la chicha de la configuración, en mi caso he realizado cambios en las siguientes variables: +Aquí­ está la chicha de la configuración, en mi caso he realizado cambios en las siguientes variables: 
- {| border=1 ; margin:0 0 1em 1em" +^Variable ^Descripcion ^ 
- !Variable!!Descripcion +|<code>$rcmail_config[['enable_caching']] = FALSE; </code> | Estando todo en el mismo host es innecesario cachear |  
- |----------------- +|<code>$rcmail_config[['force_https']] = TRUE; </code> | Forzamos https para ni siquiera dar la opción de plain http |  
- |<code>$rcmail_config[['enable_caching']] = FALSE; </code>||Estando todo en el mismo host es innecesario cachear +|<code>$rcmail_config[['default_host']] = 'ssl://localhost'; 
- |----------------- +$rcmail_config[['default_port']] = 993; </code> | Host y puerto del servidor IMAP, incluyendo protocolo |  
- |<code>$rcmail_config[['force_https']] = TRUE; </code>||Forzamos https para ni siquiera dar la opción de plain http +|<code>$rcmail_config[['imap_auth_type']] = plain; </code> | Metodo de autenticación para el IMAP |  
- |----------------- +|<code>$rcmail_config[['smtp_server']] = 'localhost'; 
- |<code>$rcmail_config[['default_host']] = 'ssl://localhost'; +$rcmail_config[['smtp_user']] = '%u';   
- $rcmail_config[['default_port']] = 993; </code>||Host y puerto del servidor IMAP, incluyendo protocolo +$rcmail_config[['smtp_pass']] = '%p';  
- |----------------- +$rcmail_config[['smtp_auth_type']] = 'LOGIN'; </code> | Host, user, pass y metodo de autenticacion para smtp |  
- |<code>$rcmail_config[['imap_auth_type']] = plain; </code>||Metodo de autenticación para el IMAP +|<code>$rcmail_config[['smtp_debug']] = true; </code> | En mi caso activé el modo debug de smtp para detectar ciertos problemas causados por ssl |  
- |----------------- +|<code>$rcmail_config[['useragent']] = 'Ciberterminal Webmail';  
- |<code>$rcmail_config[['smtp_server']] = 'localhost'; +$rcmail_config[['product_name']] = 'Ciberterminal Webmail'; </code> | Cadenas de texto que aparecerán en la web | 
- $rcmail_config[['smtp_user']] = '%u';   +
- $rcmail_config[['smtp_pass']] = '%p';  +
- $rcmail_config[['smtp_auth_type']] = 'LOGIN'; </code>||Host, user, pass y metodo de autenticacion para smtp +
- |----------------- +
- |<code>$rcmail_config[['smtp_debug']] = true; </code>||En mi caso activé el modo debug de smtp para detectar ciertos problemas causados por ssl +
- |----------------- +
- |<code>$rcmail_config[['useragent']] = 'Ciberterminal Webmail';  +
- $rcmail_config[['product_name']] = 'Ciberterminal Webmail'; </code>||Cadenas de texto que aparecerán en la web +
- |}+
  
- ==Configuracion de otro cliente ===== 
  
- {| border="1" cellpadding="1" +===== Configuracion de otro cliente =====
- | [[Archivo:Postfix_howto_01.jpg|border|400px|01]] || Descripcion +
- |----------------- +
- | [[Archivo:Postfix_howto_02.jpg|border|400px|02]] || Descripcion +
- |----------------- +
- | [[Archivo:Postfix_howto_03.jpg|border|400px|03]] || Descripcion +
- |}+
  
 +| [[Archivo:Postfix_howto_01.jpg|border|400px|01]] | Descripcion |
 +| [[Archivo:Postfix_howto_02.jpg|border|400px|02]] | Descripcion |
 +| [[Archivo:Postfix_howto_03.jpg|border|400px|03]] | Descripcion |
  
- ==Spamassassin ===== 
- Una vez instalado, es recomendable crear un usuario con home para que vaya guardando sus datos, por ejemplo: 
- <code> 
- useradd -u 111 -m -s /bin/false spamassassin 
- </code> 
- Ahor hay que habilitar el demonio: 
- <code>vi /etc/default/spamassassin</code> 
- Y cambiar la siguiente opción a //1//: 
- <code># /etc/default/spamassassin 
  
- # Change to one to enable spamd +===== Spamassassin ===== 
- ENABLED=1+Una vez instalado, es recomendable crear un usuario con home para que vaya guardando sus datos, por ejemplo: 
 +<code> 
 +useradd -u 111 -m -s /bin/false spamassassin 
 +</code> 
 +Ahor hay que habilitar el demonio: 
 +<code>vi /etc/default/spamassassin</code> 
 +Y cambiar la siguiente opción a //1//: 
 +<code># /etc/default/spamassassin
  
- Options +Change to one to enable spamd 
- # See man spamd for possible options. The -d option is automatically added.+ENABLED=1
  
- SpamAssassin uses a preforking model, so be careful! You need to +Options 
- make sure --max-children is not set to anything higher than 5, +See man spamd for possible options. The -d option is automatically added.
- # unless you know what you're doing.+
  
- OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamassassin"+# SpamAssassin uses a preforking model, so be careful! You need to 
 +# make sure --max-children is not set to anything higher than 5
 +# unless you know what you're doing.
  
- # Pid file +OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamassassin"
- # Where should spamd write its PID to file? If you use the -u or +
---username option above, this needs to be writable by that user. +
- # Otherwise, the init script will not be able to shut spamd down. +
- PIDFILE="/var/run/spamd.pid"+
  
- Set nice level of spamd +Pid file 
- NICE="--nicelevel 15"</code>+# Where should spamd write its PID to file? If you use the -u or 
 +--username option above, this needs to be writable by that user. 
 +# Otherwise, the init script will not be able to shut spamd down. 
 +PIDFILE="/var/run/spamd.pid"
  
 +# Set nice level of spamd
 +NICE="--nicelevel 15"</code>
  
  
  
- El fichero cuenta con otras opciones como el nice del proceso de spamassassin, número de threads y similar. 
- Ahora hay que editar el fichero de configuración principal de spamassassin. 
- Recomiendo usar la [[http://www.yrex.com/spam/spamconfig.php|siguiente herramienta para generar la configuración]] 
- Y sustituir el **/etc/spamassassin/local.cf** por defecto por el que generemos, por ejemplo en mi caso: 
- <code> 
- required_score           7.5 
- report_safe             1 
- use_bayes               1 
- bayes_auto_learn              0 
- skip_rbl_checks         0 
- use_razor2              1 
- use_dcc                 1 
- use_pyzor               1 
- ok_languages            all 
- ok_locales              en es 
- </code> 
  
- En el caso de haber añadido algún plugin, hay que habilitarlo en el fichero: +El fichero cuenta con otras opciones como el nice del proceso de spamassassinnúmero de threads y similar. 
- v310.pre+Ahora hay que editar el fichero de configuración principal de spamassassin. 
 +Recomiendo usar la [[http://www.yrex.com/spam/spamconfig.php|siguiente herramienta para generar la configuración]] 
 +Y sustituir el **/etc/spamassassin/local.cf** por defecto por el que generemos, por ejemplo en mi caso: 
 +<code> 
 +required_score           7.5 
 +report_safe             1 
 +use_bayes               1 
 +bayes_auto_learn              0 
 +skip_rbl_checks         0 
 +use_razor2              1 
 +use_dcc                 1 
 +use_pyzor               1 
 +ok_languages            all 
 +ok_locales              en es 
 +</code>
  
- Solo falta configurar postfix: +En el caso de haber añadido algún plugin, hay que habilitarlo en el fichero: 
- <code>vi /etc/postfix/master.cf</code> +* v310.pre
- Y cambiar la linea de configuración del smtpd a: +
- <code>smtp      inet  n                               smtpd -o content_filter=spamassassin</code> +
- Y añadir al final del fichero: +
- <code> +
- spamassassin          unix  -                               pipe +
-    user=spamassassin argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} +
-    </code>+
  
-    ===spampd ==== +Solo falta configurar postfix: 
-    spampd es un proxy de alto rendimiento para el préanalisis de mails+<code>vi /etc/postfix/master.cf</code> 
-    Es decir, se sitúa "por delante" de postfix, analiza el email y si no es spam, lo redirige de manera normal a postfix. Esto elimina el análisis en disco del mismo una vez aceptado por postfix incrementando mucho el rendimiento (al menos según los desarrolladores). +Y cambiar la linea de configuración del smtpd a: 
-    Algún dia trataré sobre el tema, mientras está la [[http://wiki.apache.org/spamassassin/IntegratePostfixViaSpampd|página oficial]]+<code>smtp      inet  n                               smtpd -o content_filter=spamassassin</code> 
 +Y añadir al final del fichero: 
 +<code> 
 +spamassassin          unix  -                               pipe 
 +user=spamassassin argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} 
 +</code>
  
-    =Debugging ====== +==== spampd ==== 
-    La mejor manera de debugar es leer los logs de postfix, será vuestro mejor amigo peor pesadilla. +spampd es un proxy de alto rendimiento para el préanalisis de mails. 
-    Desde que no os autentique cualquier cliente de correo hasta que spamassassin no funcione por permisos de sistema+Es decir, se sitúa "por delante" de postfix, analiza el email si no es spam, lo redirige de manera normal a postfix. Esto elimina el análisis en disco del mismo una vez aceptado por postfix incrementando mucho el rendimiento (al menos según los desarrolladores)
-    Siempre hay que tener abierto un: +Algún dia trataré sobre el tema, mientras está la [[http://wiki.apache.org/spamassassin/IntegratePostfixViaSpampd|página oficial]]
-    <code> +
-    tail -f /var/log/mail.log +
-    </code>+
  
 +====== Debugging ======
 +La mejor manera de debugar es leer los logs de postfix, será vuestro mejor amigo y peor pesadilla.
 +Desde que no os autentique cualquier cliente de correo hasta que spamassassin no funcione por permisos de sistema.
 +Siempre hay que tener abierto un:
 +<code>
 +tail -f /var/log/mail.log
 +</code>
  
-    =Troubleshooting ====== 
  
-    ==Roundcube ===== +====== Troubleshooting ======
-    En determinadas ocasiones, roundcube no consigue inicializar el protocolo ssl con imap, dando el siguiente error: +
-    <code>Jun 27 20:04:41 ks358028 imapd-ssl: couriertls: connect: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number</code> +
-    Para solucionarlo basta con cambiar la configuración del courier/imap-ssl a: +
-    {| border="1" cellpadding="1" +
-    !Fichero!!Valor +
-    |----------------- +
-    | <code>/etc/courier/imapd-ssl</code> || <code>TLS_PROTOCOL=SSL23</code> +
-    |}+
  
 +===== Roundcube =====
 +En determinadas ocasiones, roundcube no consigue inicializar el protocolo ssl con imap, dando el siguiente error:
 +<code>
 +Jun 27 20:04:41 ks358028 imapd-ssl: couriertls: connect: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
 +</code>
 +Para solucionarlo basta con cambiar la configuración del courier/imap-ssl a:
 +^ Fichero ^ Valor ^
 +| <code>/etc/courier/imapd-ssl</code> | <code>TLS_PROTOCOL=SSL23</code> |
  
- +====== Links ====== 
-    =Links ====== +  * [[http://www.postfix.org/documentation.html|Postfix official documentation]] 
-    * [[http://www.postfix.org/documentation.html|Postfix official documentation]] +  * [[http://trac.roundcube.net/|Roundcube wiki]] 
-    * [[http://trac.roundcube.net/|Roundcube wiki]] +  * [[http://flurdy.com/docs/postfix/|Howto más o menos igual que el mio]] 
-    * [[http://flurdy.com/docs/postfix/|Howto más o menos igual que el mio]] +  * [[http://postgrey.schweikert.ch/|Pagina de PostGrey]] 
-    * [[http://postgrey.schweikert.ch/|Pagina de PostGrey]] +  * [[http://wiki.apache.org/spamassassin/|Wiki de Spamassassin]] 
-    * [[http://wiki.apache.org/spamassassin/|Wiki de Spamassassin]] +  * [[http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix|Integracion spamd-postfix]] 
-    <nowiki>**</nowiki> [[http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix|Integracion spamd-postfix]] +  * [[http://wiki.apache.org/spamassassin/IntegratePostfixViaSpampd|Integracion spampd-postfix]] 
-    <nowiki>**</nowiki> [[http://wiki.apache.org/spamassassin/IntegratePostfixViaSpampd|Integracion spampd-postfix]] +  * [[http://razor.sourceforge.net/docs/|Razor: Red distribuida antispam]] 
-    * [[http://razor.sourceforge.net/docs/|Razor: Red distribuida antispam]] +  * [[http://www.rhyolite.com/dcc/|DCC: Red distribuida antispam]] 
-    * [[http://www.rhyolite.com/dcc/|DCC: Red distribuida antispam]] +  * [[http://sourceforge.net/apps/trac/pyzor/|Pyzor: Red distribuida antispam]] 
-    * [[http://sourceforge.net/apps/trac/pyzor/|Pyzor: Red distribuida antispam]] +
zz_deprecated/howto_postfix.1332147765.txt.gz · Last modified: 2012/03/19 09:02 by dodger