Sunteți pe pagina 1din 22

########################################################################

# Instalar/upgradear sistema antes de trabajar


########################################################################

# apt-get update
# apt-get upgrade
# apt-get dist-upgrade

########################################################################
# Utilitarios
########################################################################

Antes de instalar algo debemos instalar los utilitarios básicos o herramientas que
necesitaremos para nuestro trabajo:

# apt-get install arj bzip2 cabextract cpio file gzip nomarch pax rar unrar
unzip zoo zip p7zip-full mc

########################################################################
# Grupo y usuario
########################################################################

Comenzamos con añadir el grupo de nuestros sistema de correo al que llamaré vmail:

# groupadd -g 5000 vmail

Usuario del sistema:

# useradd -d /home/vmail -s /bin/false -m -u 5000 -g 5000 -c "Virtual Mailbox


Storage" vmail

########################################################################
# Soporte Web
########################################################################

# apt-get install apache2 php5 php5-mcrypt php5-mysql php5-imap php5-memcache


memcached php-pear php5-intl mariadb-server phpmyadmin

Configurar Apache2 y PHP5

Apache2 -> /etc/apache2/conf-enabled/security

Cambiar:

ServerSignature On, ponerlo a Off


ServerTokens OS cambiar por Minimal
TraceEnable Off
Header set X-Content-Type-Options: "nosniff"
Header set X-Frame-Options: "sameorigin"

Activar el módulo headers:

# a2enmod headers

Para evitar mostrar la version de Apache así como algún otro detalle importante a
cualquier atacante...

PHP5 -> /etc/php5/apache2/php.ini


Cambiar expose_php = Off para evitar mostrar la version de PHP

Editar la variable date.timezone, para ajustarla a nuestro país

date.timezone = "America/Havana"

# /etc/init.d/apache2 restart

Si deseamos securizar un poco más a Apache:

# a2enmod rewrite ssl


# a2ensite default-ssl.conf

Creamos un archivo htaccess en /var/www/html:

# touch /var/www/html/.htaccess

Con el siguiente contenido:

RewriteEngine On
# Redirect all HTTP traffic to HTTPS.
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Esto hará que todo tráfico hacia nuestro sitio, sea con ssl.

Ahora crearemos un virtualhosting para roundcube, que veremos más adelante:

En /etc/apache/sites-available/ crear el archivo webmail.conf y añadirle el


siguiente contenido:

<webmail.conf>

<VirtualHost *:443>
ServerName webmail.nauta.cu

ServerAdmin webmaster@localhost
DocumentRoot /usr/share/roundcube

<Directory /usr/share/roundcube>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

LogLevel info

ErrorLog ${APACHE_LOG_DIR}/webmail-error.log
CustomLog ${APACHE_LOG_DIR}/webmail-access.log combined

</VirtualHost>

</webmail.conf>

añadir el nuevo virtualhost:

# a2ensite webmail.conf

Y listo, a reiniciar Apache se ha dicho:


# /etc/init.d/apache2 restart

Añadir webmail.nauta.cu a tu configuración de DNS[bind9], reiniciar DNS y entrar en


https://webmail.nauta.cu/

MySQL

Editar/Agregar en /etc/mysql/my.cnf

max_connections = 100
max_user_connections = 100

query_cache_limit = 10M
query_cache_size = 64M

general_log_file = /var/log/mysql/mysql.log
general_log = 1

Guardar, y salir. Mover logs de /var/log a var/log/mysql/

# mv /var/log/mysql.log /var/log/mysql/
# mv /var/log/mysql.err /var/log/mysql/

# /etc/init.d/mysql restart

Loguearnos en PHPMyAdmin.

Crear usuario y base de datos para:


- PostfixAdmin
- Roundcube

Ir a Privilegios/Agregar nuevo usuario:


nombre: postfix
servidor: localhost
password: **********
confirmar password: **********
marcar: Crear base de datos con el mismo nombre y otorgar todos los
privilegios

Hacer el mismo proceso para la base de datos de Roundcube

########################################################################
# SASL
########################################################################

# apt-get install sasl2-bin libsasl2-modules libpam-mysql libsasl2-modules-


sql

Como bien nos dice el instalador de saslauthd debe iniciar con el sistema por lo
que debemos
hacerlo en /etc/default/saslauthd

START=yes

Guardamos y salimos
Ahora debemos modificar la carpeta donde va a trabajar Postfix con SASL, hay que
hacerle algunos pequeños ajustes:

# mkdir -p /var/spool/postfix/var/run/saslauthd
# rm -rf /var/run/saslauthd
# ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd

Ahora bien, debemos crear el fichero para extraer las contraseñas encriptadas de la
base de datos con los datos del
usuario, contraseña, base de datos, tabla, la columna donde se encuentra el usuario
y la columna donde se encuentra
la contraseña.

# touch /etc/pam.d/smtp

<smtp>

auth required pam_mysql.so user=postfix passwd=password_usuario_mysql


host=127.0.0.1 db=postfix table=mailbox usercolumn=name passwdcolumn=password
crypt=1 md5=1

account sufficient pam_mysql.so user=postfix passwd=password_usuario_mysql


host=127.0.0.1 db=postfix table=mailbox usercolumn=name passwdcolumn=password
crypt=1 md5=1

</smtp>

Cada sentencia anterior debe ir en una sola línea. Es decir, el fichero smtp sólo
debe contener dos líneas.

Y por supuesto, los permisos:

# chmod 640 /etc/pam.d/smtp

Y reiniciamos SASL

# /etc/init.d/saslauthd restart

########################################################################
# PostfixAdmin
########################################################################

Después de descargarlo de Sourceforge:

# tar xfv postfixadmin-2.93.tar.gz


# mv postfixadmin-2.93 postfixadmin
# mv postfixadmin /usr/share/
# cd /usr/share/postfixadmin
# chmod -R 755 *; chown -R root:root *
# chmod -R 777 templates_c
# mkdir -p /etc/postfixadmin
# mv /usr/share/postfixadmin/config.inc.php /etc/postfixadmin/
# ln -s /etc/postfixadmin/config.inc.php
/usr/share/postfixadmin/config.inc.php
# echo "Alias /postfixadmin /usr/share/postfixadmin" >
/etc/postfixadmin/postfixadmin.conf
# ln -s /etc/postfixadmin/postfixadmin.conf /etc/apache2/conf-
enabled/postfixadmin.conf
# /etc/init.d/apache2 restart
Editar la configuración:

Directivas...

$CONF['configured'] = true;

$CONF['default_language'] = 'es';

$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';

$CONF['quota'] = 'YES';

$CONF['quota_multiplier'] = '1048576';

Esta directiva se usa cuando aún no se tiene nombre de dominio así el postfixadmin
no
chequea el dominio de email del administrador que sea válido. Se usa para pruebas
solamente...
$CONF['emailcheck_resolve_domain']='YES';

$CONF['used_quotas'] = 'YES';

Esta directiva se usa desde Dovecot 1.2 o superior, si usted tiene dovecot >=1.1
poner a NO
$CONF['new_quota_table'] = 'YES';

Abrir el navegador e ir a http://ip_del_server/postfixadmin/setup.php


- Rellenar el campo del setup password
- Rellenar los campos del setup con los datos del formulario anterior
- Editar el config.inc.php y setear la variable $CONF['setup_password'] con
el valor dado en la instalación
- Añadir el email del administrador y listo

En el navegador ir a http://ip_del_server/postfixadmin/
- Loguearnos con la info del administrador del sitio
- Lo primero es ir a "Lista de dominios/Nuevo dominio" y rellenar los datos
- Después ir a "Lista de direcciones virtuales/Añadir buzón" y rellenar los
datos
- Añadir cuantos buzones sean necesarios...
- Listo!

Seguridad:
Denegar el acceso al setup.php después de haberlo configurado totalmente
touch /usr/share/postfixadmin/.htaccess

<Files "setup.php">
deny from all
</Files>

########################################################################
# Roundcube
########################################################################

Después de descargarlo de Sourceforge:


# tar xfv roundcubemail-1.1.4-complete.tar.gz
# mv roundcubemail-1.1.4 roundcube
# mv roundcube /usr/share/
# cd /usr/share/roundcube/
# chmod -R 755 *; chown -R root:root *
# mkdir -p /etc/roundcube
# mv config /etc/roudcube
# ln -s /etc/roundcube/config /usr/share/roundcube/
# chmod 755 .htaccess; chown root:root .htaccess
# chmod 777 logs
# chmod 777 temp
# echo "Alias /roundcube /usr/share/roundcube" >
/etc/roundcube/roundcube.conf
# ln -s /etc/roundcube/roundcube.conf /etc/apache2/conf-
enabled/roundcube.conf
# /etc/init.d/apache2 restart

Abrir el navegador e ir a http://ip_del_server/roundcube/installer/


- Revisar que todos los valores necesarios están en "ON" y hacer click en
"NEXT"
- Revisar los campos del setup y editar según nuestras preferencias. En este
punto solo deberíamos
editar "identities_level" dejándolo en "one identity with possibility to edit
only signature"
- Configurar la conexion a MySQL en el apartado "Database setup"
- En el apartado "username_domain" debemos poner nuestro dominio
- Idioma "es_ES", y rellenar cualquier info necesaria en dependencia de
nuestras necesidades y hacer
click en "NEXT"
- Copiar/guardar la config en nuestro directorio de configuración
/etc/roundcube/config/config.inc.php

NOTA:
En caso de usar "*" en los password debemos editar la config y arreglar ese
detalle puesto que php nos genera
el caracter html para el * y cuando roundcube intenta conectarse a la base de
datos no va a poder

-Dar click en "Continue" e inicializar la base de datos, recuerde hacer los


cambios pertinentes a la config
antes de dar siguiente.
- Inicializar la base de datos dando click en el boton "Initialize database"
- Si todo ha ido bien[si no, reintentar instalar desde el principio], solo
nos restará borrar el instalador
# rm -rf /usr/share/roundcube/installer

Plugin de cambio de password


En config.inc.php:

-
$config['plugins'] = array('password');
-
Ir a /usr/share/roundcube/plugins/password y renombrar config.inc.php.dist
-
# mv config.inc.php.dist config.inc.php
-
Editar:
$config['password_driver'] = 'sql';
$rcmail_config['password_db_dsn'] =
'mysql://postfix:contraseña_de_postfixdb@localhost/postfix';
$rcmail_config['password_query'] = 'UPDATE mailbox SET password=
%c,modified=NOW() WHERE username=%u LIMIT 1';
Ahora, cuando un usuario desee cambiarse el password solamente debe ir a
"Configuración/Contraseña", rellenar los
campos y listo.

NOTA: Si usted tiene implementada la politica de correos nacionalese


internacionales[muy comun en Cuba], debe cambiar en
la configuración de roundcube[config.inc.php] el
default_host[$config['default_host'] = 'localhost';] por el ip de su server
de correo así obliga al usuario a hacer login por el ip no por localhost, y postfix
lo reconoce como una ip externa a 127.0.0.1.

########################################################################
# Dovecot
########################################################################

# apt-get install dovecot-pop3d dovecot-imapd dovecot-core dovecot-mysql


dovecot-sieve

Dovecot antes nos creaba un certificado autofirmado válido por 10 años[ya NO].
Existe un script en /usr/share/dovecot llamado mkcert.sh
que se encarga de esa tarea, pero la primera vez que instalé Dovecot no sabía esto
y usé openssl directamente para crearlo:

# openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout dovecot.pem
-out /etc/dovecot/dovecot.pem

Y después de completar toda la info que nos pide openssl para crear el certificado,
lo tendremos disponible en:

/etc/dovecot/dovecot.pem

El cual usaremos para nuestra configuración[es de prueba, no? :D]...

Nota: Dovecot divide en varios archivos la configuración, yo acostumbro a poner


todo en un mismo archivo
para no perderme después.

Algunos cambios antes de configurar Dovecot

# mkdir -p /var/log/dovecot/

# touch /var/log/dovecot/dovecot.log
# touch /var/log/dovecot/dovecot-info.log
# touch /var/log/dovecot/dovecot-deliver.log
# touch /var/log/dovecot/dovecot-debug.log

Debido a que Dovecot a cambiado mucho no es posible adaptarle una config


anterior[si, me pasó cuando migré
de Dovecot 1.1 a 2.1], por lo que debemos hacer lo siguiente:

# doveconf -n > /etc/dovecot/dovecot.conf

Doveconf genera una configuración bastante acertada, pero demasiado pobre, por lo
que hay que pasarle la mano
para que quede a nuestro gusto.

La configuración de Dovecot:
<dovecot.conf>

# 2.2.13: /etc/dovecot/dovecot.conf
# OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.3 ext4

listen = *
protocols = imap pop3

login_log_format = %$: %s
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
deliver_log_format = msgid=%m: %$ : Subject: %s
mail_access_groups = vmail
mail_location = maildir:/home/vmail/%d/%n/Maildir:INDEX=/home/vmail/%d/
%n/Maildir
mail_log_prefix = "%Us(%u): "
maildir_stat_dirs = yes

log_path = /var/log/dovecot/dovecot.log
info_log_path = /var/log/dovecot/dovecot-info.log
log_timestamp = "%Y-%m-%d %H:%M:%S "

ssl = required
ssl_protocols = !SSLv2 !SSLv3
# Good bye SSLv3
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-
SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-
GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-
ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-
SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-
RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-
SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-
SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-
SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-
RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/dovecot.pem
verbose_proctitle = no
verbose_ssl = no

mail_plugins = quota expire mailbox_alias mail_log notify acl

mail_temp_dir = /tmp
disable_plaintext_auth = yes
auth_username_chars =
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_mechanisms = plain login
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
auth_verbose_passwords = plain
# For debbugging purposes only, set to yes
mail_debug = no
debug_log_path = /var/log/dovecot/dovecot-debug.log

login_greeting = Dovecot ready OK+.

first_valid_gid = 2
first_valid_uid = 2
last_valid_gid = 5000
last_valid_uid = 5000

service imap-login {
inet_listener imap {
address = *
port = 143
}
inet_listener imaps {
address = *
port = 993
ssl = yes
}
service_count = 1
}

service imap {
process_limit = 512
vsz_limit = 1 G
}

service pop3-login {
inet_listener pop3 {
address = *
port = 110
}
inet_listener pop3s {
address = *
port = 995
}
service_count = 1
}

service pop3 {
process_limit = 512
vsz_limit = 1 G
}

service dict {
unix_listener dict {
mode = 0600
user = vmail
group = vmail
}
}

namespace {
type = private
separator = /
prefix =
#location defaults to mail_location.
inbox = yes

# Refer to document for more details about alias mailbox:


# http://wiki2.dovecot.org/MailboxSettings
#
# Sent
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
auto = no
special_use = \Sent
}
mailbox "Sent Items" {
auto = no
special_use = \Sent
}

mailbox Drafts {
auto = subscribe
special_use = \Drafts
}

# Trash
mailbox Trash {
auto = subscribe
special_use = \Trash
}

mailbox "Deleted Messages" {


auto = no
special_use = \Trash
}

# Junk
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Spam {
auto = no
special_use = \Junk
}
mailbox "Junk E-mail" {
auto = no
special_use = \Junk
}

# Archive
mailbox Archive {
auto = subscribe
special_use = \Archive
}
mailbox Archives {
auto = no
special_use = \Archive
}
}

protocol imap {
mail_max_userip_connections = 10
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins imap_quota imap_acl
imap_client_workarounds = tb-extra-mailbox-sep
}
protocol pop3 {
mail_max_userip_connections = 10
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
hostname = correo.nauta.cu
lda_mailbox_autocreate = yes
info_log_path = /var/log/dovecot/dovecot-deliver.log
log_path = /var/log/dovecot/dovecot.log
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins
postmaster_address = postmaster@nauta.cu
sendmail_path = /usr/lib/sendmail
}

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf
}

service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-master {
group = vmail
mode = 0660
user = vmail
}
user = root
}

userdb {
args = /etc/dovecot/dovecot-sql.conf
driver = sql
}

dict {
quotadict = mysql:/etc/dovecot/dovecot-quota.conf
}

quota_full_tempfail = yes

plugin {
quota = dict:User quota::proxy::quotadict
quota_rule = *:storage=10M:messages=1000
quota_rule2 = Trash:storage=+10%

# New & WORKS!!!


quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=90%% quota-warning 90 %u
quota_warning3 = storage=85%% quota-warning 85 %u
quota_grace = 10%%
trash = /etc/dovecot/trash.conf
mail_log_events = delete undelete expunge copy mailbox_delete
mailbox_rename
mail_log_fields = uid box msgid size

service quota-warning {
executable = script /etc/dovecot/scripts/quota-warning.sh
user = vmail
unix_listener quota-warning {
user = vmail
}
}

</dovecot.conf>

Conexión a MySQL y obtener de datos

<dovecot-sql.conf>

driver = mysql
connect = host=localhost dbname=db_name user=db_user
password=db_user_password
default_pass_scheme = md5-crypt

password_query = SELECT password FROM mailbox WHERE username = '%u' AND


active='1'

user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=',


quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1'

</dovecot-sql.conf>

Obtener la quota

<dovecot-quota.conf>

connect = host=localhost dbname=db_name user=db_user


password=db_user_password

map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}

map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}

</dovecot-quota.conf>

<trash.conf>
1 Spam
2 Trash

</trash.conf>

En caso de no necesitar todo esto sólo diríjase a


http://wiki2.dovecot.org/QuickConfiguration
para configurar Dovecot rápido y sin dolor... No lo recomiendo, estudie un poquito,
diga NO a la neuroapatía.

########################################################################
# Postfix
########################################################################

# apt-get install postfix postfix-pcre postfix-mysql mlock mailutils postfix-


policyd-spf-perl

Debemos agregar a postfix las directivas smtpd_tls_dh1024_param_file y


smtpd_tls_dh512_param_file que lo que hacen es añadir ECC
con el fin de mejorar la seguridad de nuestro servidor:

smtpd_tls_dh1024_param_file = /etc/postfix/certs/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/postfix/certs/dh_512.pem

Y para generar los certificados:

# mkdir /etc/postfix/certs
# cd /etc/postfix/certs
# openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout postfix.pem
-out postfix.pem
# openssl gendh -out /etc/postfix/certs/dh_1024.pem -2 1024
# openssl gendh -out /etc/postfix/certs/dh_512.pem -2 512

Después de hecho esto, debemos crear el fichero smtpd.conf dentro de la carpeta


sasl de Postfix
para indicarle el método de autenticación smtp con sasl.

# touch /etc/postfix/sasl/smtpd.conf

<smtpd.conf>

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 7
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: password_usuario_mysql
sql_database: postfix
sql_select: select password from mailbox where username = '%u'

</smtpd.conf>

Y los permisos:

root@happyharry: # chmod 644 /etc/postfix/sasl/smtpd.conf


Si tenemos alguna duda instalando postfix recomiendo hacer un dpkg-reconfigure
postfix y analizar el instalador...

Como estamos instalando postfix contra mysql debemos crear los archivos que
vinculen a postfix con mysql

# mkdir -p /etc/postfix/sql
# cd /etc/postfix/sql/

# touch mysql_sender_login_maps.cf
Nota: Este fichero va a contener la query que chequea y evita la suplantación de
identidad

<mysql_sender_login_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
port = 3306
dbname = postfix
query = SELECT mailbox.username FROM mailbox,domain WHERE
mailbox.username='%s' AND mailbox.domain='%d' AND mailbox.domain=domain.domain AND
mailbox.active=1 AND domain.backupmx=0 AND domain.active=1

</mysql_sender_login_maps.cf>

# touch mysql_virtual_alias_domainaliases_maps.cf
Nota: Este fichero va a contener la query de los alias de dominio

<mysql_virtual_alias_domainaliases_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE
alias_domain.alias_domain = '%d' AND alias.address=concat('%u', '@',
alias_domain.target_domain) AND alias.active = 1

</mysql_virtual_alias_domainaliases_maps.cf>

# touch mysql_virtual_alias_maps.cf
Nota: Este fichero va a contener la query de los alias de correo virtuales

<mysql_virtual_alias_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'

</mysql_virtual_alias_maps.cf>

#touch mysql_virtual_domains_maps.cf
Nota: Este fichero va a contener la query de los dominios de correo virtuales
<mysql_virtual_domains_maps.cf>
user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
</mysql_virtual_domains_maps.cf>

# touch mysql_virtual_mailbox_domainaliases_maps.cf
Nota: Este fichero va a contener la query de los alias de buzón virtuales

<mysql_virtual_mailbox_domainaliases_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
query = SELECT maildir FROM mailbox, alias_domain WHERE
alias_domain.alias_domain = '%d' AND mailbox.username=concat('%u', '@',
alias_domain.target_domain ) AND mailbox.active = 1

</mysql_virtual_mailbox_domainaliases_maps.cf>

# touch mysql_virtual_mailbox_maps.cf
Nota: Este fichero va a contener la query de los buzones virtuales

<mysql_virtual_mailbox_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
query = SELECT maildir FROM mailbox, alias_domain WHERE
alias_domain.alias_domain = '%d' AND mailbox.username=concat('%u', '@',
alias_domain.target_domain ) AND mailbox.active = 1

</mysql_virtual_mailbox_maps.cf>

Ahora pasaremos a configurar postfix:

<main.cf>

###################################################
# Banner y configs aleatorias[GENERALES]
###################################################

smtpd_banner = $myhostname ESMTP $mail_name

biff = no

# Appending domain is the MUA's job.


append_dot_mydomain = no

readme_directory = no
# Correos de error
bounce_template_file = /etc/postfix/warn/bounce.msg

###################################################
# Notificaciones [ESPECIFICO]
###################################################

notify_classes = resource, software, bounce, delay, policy

###################################################
# Network Config [ESPECIFICO]
###################################################

mynetworks_style = subnet
# host
mynetworks = 127.0.0.0/8

inet_interfaces = all
inet_protocols = ipv4
# all -> for ipv4 & ipv6

###################################################
# Configuraciones del relayhost[ESPECIFICO]
###################################################

#relayhost =

###################################################
# Configuraciones del dominio[ESPECIFICO]
###################################################

mydomain = nauta.cu
myhostname = correo.$mydomain
myorigin = /etc/mailname
mydestination = $myorigin, $myhostname, localhost, localhost.$mydomain,
$myorigin

###################################################
# Configuracion de los usuarios virtuales@MySQL[ESPECIFICO]
###################################################

virtual_minimum_uid = 5000
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot

virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
mysql:/etc/postfix/sql/mysql_virtual_alias_domainaliases_maps.cf
virtual_mailbox_domains =
mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
mysql:/etc/postfix/sql/mysql_virtual_mailbox_domainaliases_maps.cf

show_user_unknown_table_name = no

# Do not set virtual_alias_domains.


virtual_alias_domains =
###################################################
# Message/Inbox config [ESPECIFICO]
###################################################

#NEW, testing

strict_rfc821_envelopes = yes
invalid_hostname_reject_code = 554
multi_recipient_bounce_reject_code = 554
non_fqdn_reject_code = 554
relay_domains_reject_code = 554
unknown_address_reject_code = 554
unknown_client_reject_code = 554
unknown_hostname_reject_code = 554
unknown_relay_recipient_reject_code = 554
unknown_virtual_alias_reject_code = 554
unknown_virtual_mailbox_reject_code = 554
unverified_recipient_reject_code = 554
unverified_sender_reject_code = 554

recipient_delimiter = +
enable_original_recipient = no
mailbox_size_limit = 0
message_size_limit = 1572864

# 1MB -> 1048576


# 1.5MB -> 1572864

# Cantidad maxima de destinatarios para un mensaje


smtpd_recipient_limit = 15

# Dovecot
dovecot_destination_recipient_limit = 1

# Tiempo en cola de los mensajes


bounce_queue_lifetime = 4d

# Tiempo maximo de vida en la cola


maximal_queue_lifetime = 7d

# Tiempo minimo y maximo de reconexion cuando la conexion falla


minimal_backoff_time = 1000s
maximal_backoff_time = 8000s

# Enviar alertas sobre correo demorado


delay_warning_time = 4h
smtpd_error_sleep_time = 1s

# Limite de entrega simultanea a un mismo usuario local


local_destination_concurrency_limit = 15

###################################################
# Chequeos de mensajes[ESPECIFICO] con RE
###################################################

body_checks = pcre:/etc/postfix/rules/body_checks,
regexp:/etc/postfix/rules/avchk, pcre:/etc/postfix/rules/avchkre
header_checks = pcre:/etc/postfix/rules/header_checks,
pcre:/etc/postfix/rules/headerchkmsg
mime_header_checks = pcre:/etc/postfix/rules/mime_header_checks

###################################################
# Parametros de seguridad SASL/TLS[GENERALES]
###################################################

smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_sasl_auth_enable = no
smtpd_reject_unlisted_recipient = yes
smtpd_reject_unlisted_sender = yes
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes

# Dovecot SASL support.

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth

#smtpd_sasl_path = smtpd
smtpd_sasl_local_domain = nauta.cu

smtpd_sasl_security_options = noanonymous

#siempre poner esta proxima en no, puede dar errores con otras configs
smtpd_tls_auth_only = yes
smtpd_enforce_tls = yes
smtpd_use_tls = yes
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_note_starttls_offer = yes

smtpd_tls_loglevel = 0
smtp_tls_loglevel = 0
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s

############################################################################
# Config TLS/SSL protocols[ESPECIFICO]
############################################################################

smtpd_tls_CAfile = /etc/postfix/certs/postfix.pem
smtpd_tls_cert_file = /etc/postfix/certs/postfix.pem
smtpd_tls_key_file = /etc/postfix/certs/postfix.pem

tls_random_source = dev:/dev/urandom

smtpd_tls_protocols = !SSLv2 !SSLv3


smtp_tls_protocols = !SSLv2 !SSLv3
lmtp_tls_protocols = !SSLv2 !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2 !SSLv3
smtp_tls_mandatory_protocols = !SSLv2 !SSLv3
lmtp_tls_mandatory_protocols = !SSLv2 !SSLv3

# Good bye SSLv3 and fuck you POODLE!!!


############################################################################
# Config TLS/SSL Fix Lockjam attack [ESPECIFICO]
############################################################################

smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH,


EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
smtpd_tls_dh1024_param_file = /etc/postfix/certs/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/postfix/certs/dh_512.pem

###################################################
# Parametros de seguridad[GENERALES]
###################################################

# Disable the SMTP VRFY command. This stops some techniques used to
# harvest email addresses.
disable_vrfy_command = yes

###################################################
# EVITAR SUPLANTACION DE IDENTIDAD AL ENVIAR
###################################################

smtpd_sender_login_maps = mysql:/etc/postfix/sql/mysql_sender_login_maps.cf

###################################################
# Restricciones de envio[n/i]/recepcion/suplantacion
###################################################

smtpd_restriction_classes = cu-in, cu-out, int-in, int-out

cu-in = check_sender_access regexp:/etc/postfix/rules/cu, reject


cu-out = check_recipient_access regexp:/etc/postfix/rules/cu, reject
int-in = check_sender_access regexp:/etc/postfix/rules/int, reject
int-out = check_recipient_access regexp:/etc/postfix/rules/int, reject

###################################################
# Parametros de seguridad[RESTRICCIONES]
###################################################

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated

smtpd_helo_required = yes

smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated,


reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname,
reject_unknown_sender_domain, reject_invalid_hostname,
check_helo_access pcre:/etc/postfix/rules/helo_checks,
permit

smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated,


reject_sender_login_mismatch, reject_unknown_sender_domain,
reject_non_fqdn_sender,
reject_unlisted_sender, check_sender_access
hash:/etc/postfix/rules/spamaddress,
check_recipient_access hash:/etc/postfix/rules/access-in,

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,


reject_unknown_sender_domain, reject_unknown_recipient_domain,
reject_unlisted_recipient, check_sender_access
hash:/etc/postfix/rules/access-out,
reject_unauth_destination, check_policy_service unix:private/policy-spf,
check_sender_mx_access cidr:/etc/postfix/rules/bogus_mx,
reject_rbl_client dsn.rfc-ignorant.org,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client ix.dnsbl.manitu.net,
reject_rbl_client combined.rbl.msrbl.net,
reject_rbl_client rabl.nuclearelephant.com

policy-spf_time_limit = 3600s

smtpd_data_restrictions = reject_unauth_pipelining,
reject_multi_recipient_bounce

smtpd_etrn_restrictions = reject

###################################################
# Configuracion de ID en los mensajes[ESPECIFICO]
###################################################

enable_long_queue_ids = yes

###################################################
# Configuracion de SMTP[GENERALES]
###################################################

smtp_mx_address_limit = 5
# from 0 to 5

smtp_connect_timeout = 30
smtp_helo_timeout = 60s
smtp_rcpt_timeout = 240s
smtp_quit_timeout = 240s
smtp_rset_timeout = 20s

###################################################
#
# Configuraciones de alias+mailman[ESPECIFICO]
#
###################################################

alias_maps = hash:/etc/aliases
#, hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases

# Mailman
transport_maps = hash:/etc/postfix/transport
mailman_destination_recipient_limit = 1
owner_request_special = no

###################################################
#
# Otras configuraciones[ESPECIFICO]
#
###################################################

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
setgid_group = postdrop
mail_owner = postfix
default_privs = nobody
unknown_local_recipient_reject_code = 550

local_recipient_maps = $alias_maps, proxy:unix:passwd.byname

in_flow_delay = 1s

home_mailbox = Maildir/

mail_spool_directory = /var/spool/mail

# Debug

debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5

debug_peer_level = 1
debug_peer_list = $mynetworks

sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
mailbox_command = /usr/lib/dovecot/deliver

# Disable the rewriting of "site!user" into "user@site".


swap_bangpath = no

# Disable the rewriting of the form "user%domain" to "user@domain".


allow_percent_hack = no

# Allow recipient address start with '-'.


allow_min_user = no

</main.cf>

En el archivo master.cf añadir:

# Dovecot
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

# Mailman
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}

# SPF
policy-spf unix - n n - - spawn
user=nobody argv=/usr/sbin/postfix-policyd-spf-perl
Al terminar todos los cambios en el server, reiniciar los servicios y revisar los
log para
chequear que todo está funcionando como debe ser...

# /etc/init.d/apache2 restart
# /etc/init.d/mysql restart
# /etc/init.d/saslauthd restart
# /etc/init.d/dovecot restart
# /etc/init.d/postfix restart

S-ar putea să vă placă și