zz_deprecated:howto_postfix
Differences
This shows you the differences between two versions of the page.
Previous revision | |||
— | zz_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 ====== | ||
+ | Este pretende ser un mega-HOWTO de postfix: | ||
+ | > | ||
+ | |||
+ | ====== Software ====== | ||
+ | El nombre de los paquetes dependerán de la distribución usada, por supuesto. A modo general: | ||
+ | ===== Instalación Mínima ===== | ||
+ | Con los siguientes paquetes tendremos un servidor de correo básico pero con soporte para dominios: | ||
+ | < | ||
+ | aptitude install mysql-client mysql-server \ | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | ===== Instalación Completa con antivirus, ssl y antispam ===== | ||
+ | Principalmente con la instalación y configuración de esta parte conseguimos un servidor eficiente. | ||
+ | < | ||
+ | aptitude install libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl \ | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ====== Instalación Basica ====== | ||
+ | Como primer paso habrá que cerrar el firewall a todos los nuevos servicios para que nadie marranee antes de terminar la configuración. | ||
+ | |||
+ | ===== Postfix ===== | ||
+ | Editamos nuestro servidor de correo: | ||
+ | < | ||
+ | vi / | ||
+ | </ | ||
+ | Sustituyendo el nombre por nuestro // | ||
+ | |||
+ | ==== main.cf ==== | ||
+ | Opciones principales del fichero //main.cf// de postfix | ||
+ | ^ Variable ^ Descripcion ^ | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | mynetworks_style = host</ | ||
+ | |< | ||
+ | delay_warning_time = 4h | ||
+ | # will it be a permanent error or temporary | ||
+ | unknown_local_recipient_reject_code = 450 | ||
+ | # how long to keep message on queue before return as failed. | ||
+ | # 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. | ||
+ | maximal_queue_lifetime = 7d | ||
+ | # max and min time in seconds between retries if connection failed | ||
+ | minimal_backoff_time = 1000s | ||
+ | maximal_backoff_time = 8000s | ||
+ | # how long to wait when servers connect before receiving rest of data | ||
+ | smtp_helo_timeout = 60s | ||
+ | # how many address can be used in one message. | ||
+ | # effective stopper to mass spammers, accidental copy in whole address list | ||
+ | # but may restrict intentional mail shots. | ||
+ | smtpd_recipient_limit = 16 | ||
+ | # how many error before back off. | ||
+ | smtpd_soft_error_limit = 3 | ||
+ | # how many max errors before blocking it. | ||
+ | smtpd_hard_error_limit = 12 | ||
+ | </ | ||
+ | |< | ||
+ | smtpd_helo_required = yes | ||
+ | # waste spammers time before rejecting them | ||
+ | smtpd_delay_reject = yes | ||
+ | disable_vrfy_command = yes</ | ||
+ | |< | ||
+ | virtual_alias_maps = mysql:/ | ||
+ | virtual_gid_maps = static:5000 | ||
+ | virtual_mailbox_base = / | ||
+ | virtual_mailbox_domains = mysql:/ | ||
+ | virtual_mailbox_limit = 51200000 | ||
+ | virtual_mailbox_maps = mysql:/ | ||
+ | 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:/ | ||
+ | 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</ | ||
+ | |||
+ | ==== 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: | ||
+ | < | ||
+ | postalias / | ||
+ | </ | ||
+ | |||
+ | Creación del directorio para las cuentas de correo: | ||
+ | < | ||
+ | mkdir -p / | ||
+ | groupadd virtual -g 5000 | ||
+ | useradd virtual -u 5000 -g 5000 | ||
+ | chown -R virtual: | ||
+ | </ | ||
+ | |||
+ | ==== Configuración postfix-mysql ==== | ||
+ | La configuración para mysql la baso en lo necesario para [[http:// | ||
+ | |||
+ | 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 | ||
+ | * table : Tabla de donde se obtienen los datos | ||
+ | * select_field y where_field : datos para ejecutar la query del tipo: | ||
+ | < | ||
+ | SELECT select_field FROM table WHERE where_field ; | ||
+ | </ | ||
+ | Postfix completa la query con algunos campos adicionales, | ||
+ | |||
+ | ^ Fichero ^ Contenido ^ Descripcion ^ | ||
+ | |< | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | user = postfix | ||
+ | password = password | ||
+ | table = domain | ||
+ | select_field = domain | ||
+ | where_field = domain | ||
+ | </ | ||
+ | |< | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | user = postfix | ||
+ | password = password | ||
+ | table = alias | ||
+ | select_field = goto | ||
+ | where_field = address | ||
+ | </ | ||
+ | |< | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | user = postfix | ||
+ | password = password | ||
+ | table = domain | ||
+ | select_field = domain | ||
+ | where_field = domain | ||
+ | </ | ||
+ | |< | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | user = postfix | ||
+ | password = password | ||
+ | table = mailbox | ||
+ | select_field = quota | ||
+ | where_field = username | ||
+ | </ | ||
+ | |< | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | user = postfix | ||
+ | password = password | ||
+ | table = mailbox | ||
+ | select_field = maildir | ||
+ | where_field = username | ||
+ | </ | ||
+ | |< | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | user = postfix | ||
+ | password = password | ||
+ | table = domain | ||
+ | select_field = transport | ||
+ | where_field = domain | ||
+ | </ | ||
+ | |||
+ | ===== Courier ===== | ||
+ | Configuración inicial para courier bastante simplificada: | ||
+ | < | ||
+ | < | ||
+ | # | ||
+ | authmodulelist=" | ||
+ | DEBUG_LOGIN=2 | ||
+ | </ | ||
+ | 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; | ||
+ | < | ||
+ | < | ||
+ | MYSQL_SERVER | ||
+ | MYSQL_USERNAME | ||
+ | MYSQL_PASSWORD | ||
+ | MYSQL_PORT | ||
+ | MYSQL_OPT | ||
+ | MYSQL_DATABASE | ||
+ | MYSQL_USER_TABLE | ||
+ | MYSQL_CRYPT_PWFIELD | ||
+ | MYSQL_LOGIN_FIELD | ||
+ | MYSQL_NAME_FIELD | ||
+ | MYSQL_UID_FIELD | ||
+ | MYSQL_GID_FIELD | ||
+ | MYSQL_HOME_FIELD | ||
+ | MYSQL_MAILDIR_FIELD | ||
+ | </ | ||
+ | Como se puede apreciar únicamente le proporcionamos los datos de conexion al servidor y datos básicos del sistema. | ||
+ | |||
+ | |||
+ | ===== MySQL ===== | ||
+ | Para mysql únicamente crearemos el usuario y la bbdd ya que del resto se encargará el [[http:// | ||
+ | < | ||
+ | < | ||
+ | GRANT ALL PRIVILEGES ON `postfix`.* TO ' | ||
+ | Logicamente es conveniente probar la conexion para cerciorarnos que el usuario está ok. | ||
+ | |||
+ | ===== PostfixAdmin ===== | ||
+ | Hay que descargar el 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. | ||
+ | Una vez lo tengamos descomprimido, | ||
+ | < | ||
+ | ^ Variable ^ Descripcion ^ | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | $CONF[[' | ||
+ | $CONF[[' | ||
+ | $CONF[[' | ||
+ | $CONF[[' | ||
+ | $CONF[[' | ||
+ | Ahora ya podemos apuntar a la dirección web que contiene el setup, pej: | ||
+ | * [[http:// | ||
+ | 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 " | ||
+ | Logicamente hay que crear uno que será super user, que no será un mailbox, **unicamente es un login para el postfixadmin**. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | '' | ||
+ | ---- | ||
+ | |||
+ | ====== 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) | ||
+ | |||
+ | ===== SASL ===== | ||
+ | Usaremos la **" | ||
+ | |||
+ | ==== Software ==== | ||
+ | < | ||
+ | </ | ||
+ | ==== Configuración ==== | ||
+ | < | ||
+ | mkdir -p / | ||
+ | </ | ||
+ | Hacemos un backup y editamos el fichero de configuración: | ||
+ | < | ||
+ | mv / | ||
+ | vi / | ||
+ | </ | ||
+ | Y añadimos nuestros parametros: | ||
+ | < | ||
+ | START=yes | ||
+ | MECHANISMS=" | ||
+ | MECH_OPTIONS="" | ||
+ | THREADS=3 | ||
+ | OPTIONS=" | ||
+ | </ | ||
+ | Cuidado con el número de threads, **3**, puede ser muy poco. | ||
+ | |||
+ | Creamos la configuración de sistema (pam) para el smtpd: | ||
+ | < | ||
+ | vi / | ||
+ | </ | ||
+ | < | ||
+ | auth required | ||
+ | account sufficient pam_mysql.so user=postfix passwd=password host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 | ||
+ | </ | ||
+ | Revisar las variables acostumbradas: | ||
+ | * user | ||
+ | * passwd | ||
+ | * host | ||
+ | * db | ||
+ | * table | ||
+ | * usercolum | ||
+ | * passwdcolumn | ||
+ | |||
+ | Ahora creamos la configuración de postfix/ | ||
+ | < | ||
+ | vi / | ||
+ | </ | ||
+ | < | ||
+ | pwcheck_method: | ||
+ | mech_list: plain login | ||
+ | allow_plaintext: | ||
+ | auxprop_plugin: | ||
+ | sql_hostnames: | ||
+ | sql_user: postfix | ||
+ | sql_passwd: password | ||
+ | sql_database: | ||
+ | sql_select: select password from mailbox where username=' | ||
+ | </ | ||
+ | |||
+ | Añadimos el usuario postfix al grupo del sasl2 | ||
+ | < | ||
+ | |||
+ | Bastará con reiniciar el servicio y comprobar la autenticación; | ||
+ | |||
+ | ===== SSL/TLS ===== | ||
+ | Configuración ara SSL/TLS tanto en imap como smtp. | ||
+ | |||
+ | ==== IMAP ==== | ||
+ | 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: | ||
+ | < | ||
+ | vi / | ||
+ | </ | ||
+ | Y confirmar/ | ||
+ | < | ||
+ | SSLPORT=993 | ||
+ | SSLADDRESS=0 | ||
+ | SSLPIDFILE=/ | ||
+ | SSLLOGGEROPTS=" | ||
+ | IMAPDSSLSTART=YES | ||
+ | IMAPDSTARTTLS=YES | ||
+ | IMAP_TLS_REQUIRED=1 | ||
+ | COURIERTLS=/ | ||
+ | TLS_PROTOCOL=SSL3 | ||
+ | TLS_STARTTLS_PROTOCOL=TLS1 | ||
+ | TLS_CERTFILE=/ | ||
+ | TLS_VERIFYPEER=NONE | ||
+ | TLS_CACHEFILE=/ | ||
+ | TLS_CACHESIZE=524288 | ||
+ | MAILDIRPATH=Maildir | ||
+ | </ | ||
+ | Las principales opciones a tener en cuenta son las siguentes: | ||
+ | ^ Variable ^ Descripcion ^ | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |||
+ | ==== SMPT ==== | ||
+ | Para smyp es " | ||
+ | |||
+ | Editamos el fichero de configuración principal: | ||
+ | < | ||
+ | Y añadimos/ | ||
+ | < | ||
+ | # TLS parameters | ||
+ | smtpd_use_tls=yes | ||
+ | smtpd_tls_cert_file=/ | ||
+ | smtpd_tls_key_file=/ | ||
+ | smtpd_tls_CAfile = / | ||
+ | smtpd_tls_loglevel = 3 | ||
+ | smtpd_tls_received_header = yes | ||
+ | smtpd_tls_session_cache_timeout = 3600s | ||
+ | tls_random_source = dev:/ | ||
+ | smtpd_tls_session_cache_database = btree: | ||
+ | smtp_tls_session_cache_database = btree: | ||
+ | </ | ||
+ | |||
+ | Después habilitamos el puerto para smtps: | ||
+ | < | ||
+ | Y lo habilitamos: | ||
+ | < | ||
+ | smtps | ||
+ | </ | ||
+ | |||
+ | ====== Instalación Complementaria ====== | ||
+ | En esta última parte, trato temas adicionales como un gestor webmail, [[http:// | ||
+ | |||
+ | ===== Roundcube ===== | ||
+ | Descargamos la versión que queramos, stable o unstable, a gusto de cada uno: | ||
+ | * [[http:// | ||
+ | La configuración ha de hacerse igual que con cualquier aplicación web, intentando aseguralo todo lo máximo posible. | ||
+ | |||
+ | Una vez estando descomprimido, | ||
+ | * Crear bbdd | ||
+ | * Crear usuario | ||
+ | * Hacer la importación inicial de datos. | ||
+ | En mi caso he decidido editar los ficheros de configuración, | ||
+ | ===db.inc.php ==== | ||
+ | Lo único que hay que cambiar en este caso es la cadena de conexión: | ||
+ | < | ||
+ | La cadena de conexión es la habitual: | ||
+ | < | ||
+ | ==== main.inc.php ==== | ||
+ | Aquí está la chicha de la configuración, | ||
+ | ^Variable ^Descripcion ^ | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | $rcmail_config[[' | ||
+ | |< | ||
+ | |< | ||
+ | $rcmail_config[[' | ||
+ | $rcmail_config[[' | ||
+ | $rcmail_config[[' | ||
+ | |< | ||
+ | |< | ||
+ | $rcmail_config[[' | ||
+ | |||
+ | |||
+ | ===== Configuracion de otro cliente ===== | ||
+ | |||
+ | | [[Archivo: | ||
+ | | [[Archivo: | ||
+ | | [[Archivo: | ||
+ | |||
+ | |||
+ | ===== Spamassassin ===== | ||
+ | Una vez instalado, es recomendable crear un usuario con home para que vaya guardando sus datos, por ejemplo: | ||
+ | < | ||
+ | useradd -u 111 -m -s /bin/false spamassassin | ||
+ | </ | ||
+ | Ahor hay que habilitar el demonio: | ||
+ | < | ||
+ | Y cambiar la siguiente opción a //1//: | ||
+ | < | ||
+ | |||
+ | # Change to one to enable spamd | ||
+ | ENABLED=1 | ||
+ | |||
+ | # Options | ||
+ | # See man spamd for possible options. The -d option is automatically added. | ||
+ | |||
+ | # 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. | ||
+ | |||
+ | OPTIONS=" | ||
+ | |||
+ | # Pid file | ||
+ | # 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="/ | ||
+ | |||
+ | # Set nice level of spamd | ||
+ | NICE=" | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | El fichero cuenta con otras opciones como el nice del proceso de spamassassin, | ||
+ | Ahora hay que editar el fichero de configuración principal de spamassassin. | ||
+ | Recomiendo usar la [[http:// | ||
+ | Y sustituir el **/ | ||
+ | < | ||
+ | required_score | ||
+ | report_safe | ||
+ | use_bayes | ||
+ | bayes_auto_learn | ||
+ | skip_rbl_checks | ||
+ | use_razor2 | ||
+ | use_dcc | ||
+ | use_pyzor | ||
+ | ok_languages | ||
+ | ok_locales | ||
+ | </ | ||
+ | |||
+ | En el caso de haber añadido algún plugin, hay que habilitarlo en el fichero: | ||
+ | * v310.pre | ||
+ | |||
+ | Solo falta configurar postfix: | ||
+ | < | ||
+ | Y cambiar la linea de configuración del smtpd a: | ||
+ | < | ||
+ | Y añadir al final del fichero: | ||
+ | < | ||
+ | spamassassin | ||
+ | user=spamassassin argv=/ | ||
+ | </ | ||
+ | |||
+ | ==== spampd ==== | ||
+ | spampd es un proxy de alto rendimiento para el préanalisis de mails. | ||
+ | Es decir, se sitúa "por delante" | ||
+ | Algún dia trataré sobre el tema, mientras está la [[http:// | ||
+ | |||
+ | ====== 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: | ||
+ | < | ||
+ | tail -f / | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Troubleshooting ====== | ||
+ | |||
+ | ===== Roundcube ===== | ||
+ | En determinadas ocasiones, roundcube no consigue inicializar el protocolo ssl con imap, dando el siguiente error: | ||
+ | < | ||
+ | Jun 27 20:04:41 ks358028 imapd-ssl: couriertls: connect: error: | ||
+ | </ | ||
+ | Para solucionarlo basta con cambiar la configuración del courier/ | ||
+ | ^ Fichero ^ Valor ^ | ||
+ | | < | ||
+ | |||
+ | ====== Links ====== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// |