Implementación de Postfix con Soporte de Servicio de Directorios LDAP

NOTA: Pedirme los ficheros de configuración a mi correo (mely@minbas.cu) hasta nuevo aviso.

El siguiente documento recoge los pasos a seguir para instalar y configurar postfix utilizando de backend a OpenLDAP como servicio de directorio para los usuarios del dominio foobar.cu y subdominios de este. El escenario ideal para el desarrollo del documento es, el MTA actuando como pasarela entre redes (Ej: una LAN, WAN e Internet).

Entre las principales funcionalidades del MTA que pretendo poner a disposición y que son usadas frecuentemente (por lo menos así lo he visto en linux-l) son:

La administración de los dominios/usuarios la hago con las siguientes herramientas:

Dado que todavía no he podido modificar el código de phamm para poder agregar atributos personalizados de LDAP que uso en los chequeos, tengo que agregarlos a mano con PhpLdapAdmin.

Pasos a seguir:

sudo aptitude install slapd ldap-utils
sudo cp phamm.schema ISPEnv2.schema amavis.schema /etc/ldap/schema/
sudo cp phamm.acl /etc/ldap/
sudo cp slapd.conf /etc/ldap/
sudo slappasswd -h {MD5}
New password:
Re-enter new password:
{MD5}1jSkLch16TT6emkp+NPjXQ==
sudo vim /etc/ldap/slapd.conf
...
# Password Format
password-hash   {MD5}
rootdn          "cn=admin,dc=foobar,dc=cu"
rootpw          {MD5}1jSkLch16TT6emkp+NPjXQ==
...
sudo slaptest -v
sudo vim /etc/ldap.conf
BASE
dc=foobar, dc=cu
URI
ldap://localhost
sudo /etc/init.d/slapd restart

sudo ldapadd -v -x -D “cn=admin,dc=foobar,dc=cu” -W -h localhost -f foobar.ldif

sudo aptitude install apache2 libapache2-mod-php5 php5-ldap
cd /srv/www/
wget -c -b http://ftp.softwarelibre.cu/utils/phamm-0.5.15.tar.gz
tar xvfz phamm-0.5.15.tar.gz
mv phamm-0.5.12 phamm
rm -fr phamm-0.5.15.tar.gz
sudo chown www-data.www-data phamm/www-data -R
sudo vim /etc/apache2/sites-availables/default
...
Alias /phamm "/srv/www/phamm/www-data/"
<Directory "/srv/www/phamm/www-data/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
...
sudo aptitude install phpldapadmin
sudo /etc/init.d/apache2 restart
cd /srv/www/phamm
sudo cp config.inc.foobar.php config.inc.php
sudo vim config.inc.php
"Cambiar los datos de conexión al LDAP"

Ahora podemos entrar a: http://hostname.foobar.cu/phamm/

Con este login entramos como administrador global, aquí podremos hacer de todo (crear dominios, usuarios, etc)

Para entrar como administrador de un dominio:

Con este login entramos como administrador del dominio adm.foobar.cu y solo podremos hacer de todo para ese dominio. Al entrar tendremos solo el dominio adm.foobar.cu en la lista con 3 buzones y 3 alias. Utilizando PHAMM todavía no es posible dar permisos de envío/recepción Nacional/Internacional, por lo que tampoco no veremos los permisos que tiene este dominio ó sus usuarios. Tampoco veremos otros parámetros del dominio como el ESTADO.

En cambio si entramos por: http://hostname.foobar.cu/phpldapadmin

Se puede modificar los siguientes atributos para los dominios:

ID Atributos Valores posibles Uso
1 permitFrom inet,fromcuba,frommydomains Para filtrar recepción por dominio
2 permitTo inet,tocuba,tomydomains Para filtrar envío por dominio
3 domStatusRecv string con codigo smtp Estado de recepción del servidor MX que atiende ese dominio
4 domStatusSend string con codigo smtp Estado de envío del servidor MX que atiende ese dominio
5 defaultRecv True,False En TRUE, todos los buzones de este dominio reciben (se rigen) del valor que tenga permitFrom. En False los todo los buzones de este dominio reciben (se rigen) del valor que tenga permitFrom de dicho buzón
6 defaultSend True,False En TRUE, todos los buzones de este dominio envían (se rigen) del valor que tenga permitTo. En False los todo los buzones de este dominio envían (se rigen) del valor que tenga permitTo de dicho buzón

NOTA: 3 y 4 por default no se agrega a mano. Solo se agrega para cuando exista un problema ó cuando el script de chequeo de disponibilidad de los servidores MX de los dominios lo agrega. Cuando 5 y 6 están el FALSE, esto implica que el administrador del dominio tiene que configurar a mano permiso por permiso cada buzón.

Se puede modificar los siguientes atributos para los buzones:

ID Atributos Valores posibles Uso
1 permitFrom inet,fromcuba,frommydomains Para filtrar recepción por usuario
2 permitTo inet,tocuba,tomydomains Para filtrar envío por usuario
3 userStatusRecv string con alguna información Estado de recepción del buzón
4 userStatusSend string con alguna información Estado de envío del buzón
5 userRecvSize int en bytes Tamaño de mensaje en la recepción
6 userSendSize int en bytes Tamaño de mensaje en el envío

NOTA: 3 y 4 por default no se agrega a mano. Solo se agrega cuando exista un problema ó cuando el script de chequeo de cuotas encuentra algún buzón lleno. En resumen, una vez que creamos un dominio de correo con PHAMM, por ahora tenemos que entrar con phpLdapAdmin para terminar de configurar el dominio y sus usuarios con los atributos mencionados anteriormente.

Ahora seguiremos con la instalación y configuración de postfix, en la introducción del documento hablabamos sobre el escenario ideal donde estaría el MTA, es decir que postfix actuando de pasarela para varios dominios entre redes.

Un escenario ideal sería algo como esto (disculpen el reguero de flechas):

Aquí mx1.foobar.cu (mx1) es el postfix que estamos montando y sirve de pasarela entre Internet y la propia WAN para varios subdominios de foobar.cu. Lo mensajes entre subdominios también pasan por mx1.foobar.cu. En esta instalación suponemos que mx1 tiene una IP pública atendiendo SMTP por fuera y una IP privada atendiendo SMTP dentro de la WAN.

A partir de esta suposición, instalaremos postfix y crearemos 2 servicios de postfix escuchando por las 2 IP.

sudo aptitude install postfix postfix-ldap libnet-ldap-perl
sudo groupadd -g 1002 vmail
sudo useradd -r -u 1002 -g vmail -d /srv/vmail -s /sbin/nologin -c "Virtual
Mail System" vmail
sudo mkdir -p /srv/vmail/dominios
sudo chown vmail.vmail /srv/vmail -R
sudo vim /etc/postfix/master.cf

...
172.42.1.2:25 inet n -    -   -    60 smtpd
-o smtpd_banner=$esmtpd_banner
-o smtpd_client_connection_count_limit=10
-o smtpd_client_connection_rate_limit=60
-o smtpd_client_message_rate_limit=180
-o smtpd_discard_ehlo_keywords=PIPELINING,ETRN
-o smtpd_client_restrictions=esmtpd_client_restrictions
-o smtpd_helo_restrictions=esmtpd_helo_restrictions
-o smtpd_sender_restrictions=esmtpd_sender_restrictions
-o smtpd_recipient_restrictions=esmtpd_recipient_restrictions
192.168.1.2:25 inet n -   -  -    60 smtpd
-o smtpd_banner=$ismtpd_banner
-o smtpd_client_restrictions=ismtpd_client_restrictions
-o smtpd_helo_restrictions=ismtpd_helo_restrictions
-o smtpd_sender_restrictions=ismtpd_sender_restrictions
-o smtpd_recipient_restrictions=ismtpd_recipient_restrictions
...

NOTA: Suponemos para el desarrollo del documento, que la 172.42.1.2 es la IP por fuera de la WAN, bien puede ser una IP pública en internet. También suponemos que la 192.168.1.2 es la IP que atiende por dentro de la WAN. Con la configuración hecha anteriormente, logramos crear reglas UCE personalizadas atendiendo a la IP por donde nos llega el mensaje. Osea podemos lograr hacer un set de reglas que chequeen restricciones del tipo client, helo, sender, recipient cuando el mensaje llegue por la IP pública y tener otro set de reglas diferente que analizen los mismos tipos de restricciones para cuando el mensaje llegue por la IP privada. Para reducir tráfico innecesario de mensajes en mx1 y tener un server que no sea posible open­relay, tomaremos las siguientes medidas en el set de reglas UCE:

Por la IP Pública:

Por la IP Privada:

NOTA: El fichero main.cf de configuración de postfix es bastante extenso, por lo que voy a adjuntarlo a este documento, y dentro del fichero están los comentarios lo que hace cada parámetro que utilizo.

sudo cp main.cf _* /etc/postfix/
sudo mkdir /etc/postfix/virtual
cp v* /etc/postfix/virtual
cp postam-* /usr/lib/postfix
sudo vim /usr/lib/postfix/postam-recv.pl
sudo vim /usr/lib/postfix/postam-send.pl

Buscar en ambos scripts la línea: $ldap­>bind(“cn=admin,dc=home,dc=cu”, password⇒“adminldap”); y cambiar los datos del bind a LDAP.

sudo /etc/init.d/postfix restart

Para probar que postfix levantó bien por las 2 IP:

sudo netstat -tpln

tcp        0      0 192.168.1.2:25            0.0.0.0:*               LISTEN      2376/master     
tcp        0      0 172.42.1.2:25             0.0.0.0:*               LISTEN      2376/master     
tcp        0      0 127.0.0.1:25              0.0.0.0:*               LISTEN      2376/master

telnet 172.16.1.2 25
Trying 172.16.1.2...
Connected to 172.16.1.2.
Escape character is '^]'.
220 mx1.home.cu NO UCE ESMTP Welcome to HomeNET
$ telnet 192.168.1.2 25
Trying 192.168.1.2...
Connected to 192.168.1.2.
Escape character is '^]'.
220 mx1.foobar.cu NO UCE ESMTP Bienvenido a HomeNET

NOTA: Adjunto los ficheros de configuración y dentro explico los parámetros necesarios a modificar.

sudo aptitude install dovecot-imapd dovecot-pop3d
sudo mkdir /var/log/dovecot
sudo cp dovecot.conf dovecot-ldap.conf /etc/dovecot/
sudo chown root.adm /var/log/dovecot -R
sudo chmod a+rwx /var/log/dovecot/ -R
sudo /etc/init.d/dovecot restart
sudo /etc/init.d/postfix restart
telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready on xray.foobar.cu.
user mely@foobar.home.cu
+OK
pass mely
+OK Logged in.
list
+OK 1 messages:
1 401