Hemos visto como Postfix va a hacer uso de MySQL. Vamos pues a instalarlo y configurarlo: # apt-get install mysql-server No hay que tocar nada reseñable en la configuración del MySQL. Únicamente, si el servidor va a estar en otra máquina distinta a la máquina donde está postfix, tendremos que abrir un puerto para que pueda "escuchar". Por defecto, esto no es así debido a temas de seguridad. Para hacerlo, basta con comentar la línea skip-networking del fichero /etc/mysql/my.cfg y rearrancar el servidor. Bien, una vez que lo tenemos instalado, vamos a crear la Base de Datos y la tabla necesaria para guardar toda la información de. Voy a mostrar cómo hacerlo paso por paso: #Nos conectamos como root en un principio(la contraseña por defecto está en blanco, por lo que bastaria con dar "enter")
mysql -h localhost -u root -p
#Creamos la BAse de Datos llamada mail
mysql>create database mail;
#Vemos si está creada:
mysql>show databases;
#Seleccionamos con la que vamos a trabajar:
mysql>use mail;
#Creamos la tabla en la que guardaremos la información de los usuarios virtuales:
mysql>create table passwd(
id char(128)DEFAULT '' NOT NULL,
clear char(128)DEFAULT '' NOT NULL,
name char(128)DEFAULT '' NOT NULL,
uid int(10) unsigned NOT NULL,
gid int(10) unsigned NOT NULL,
home char(255)DEFAULT '' NOT NULL,
maildir char(255)DEFAULT '' NOT NULL,
KEY id (id(128))
); #Vemos cómo ha quedado la tabla recién creada: mysql> describe passwd; +---------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+------------------+------+-----+---------+-------+ | id | char(128) | | MUL | | | | clear | char(128) | | | | | | name | char(128) | | | | | | uid | int(10) unsigned | | | | | | gid | int(10) unsigned | | | | | | home | char(255) | | | | | | maildir | char(255) | | | | | +---------+------------------+------+-----+---------+-------+ #Creamos un usuario postfix y le damos todos los permisos en esta tabla:
mysql>GRANT ALL ON mail.passwd TO postfix@localhost IDENTIFIED BY "postfix";
#Dependiendo de la configuración, quizás haya que crear algún usuario del estilo postfix@HOSTNAME... para que postfix pueda acceder desde otras máquinas por ejemplo.
#Creamos tres entradas de ejemplo:
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values("user1@splitfoo.homeip.net","user1pass","usuario1","1003","8","/","/var/spool/mail/user1/Maildir/");
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values("user2@splitfoo.homeip.net.net","user2pass","usuario2","1002","8","/","/var/spool/mail/user2/Maildir/");
mysql>insert into passwd (id,clear,name,uid,gid,home,maildir) values("user3@splitfoo.homeip.net","user3pass","usuario3","1004","8","/","/var/spool/mail/user3/Maildir/");
mysql>quit ### NOTA: para cambiar la password root, basta con hacer lo siguiente: mysql> SET PASSWORD FOR root@localhost=password('nuevapass'); mysql> FLUSH PRIVILEGES; ### Bien, vamos a explicar todo esto un poco más despacio. Vemos que en la tabla hemos creado una serie de campos, entre ellos id que será el mail del usuario, clear que es su contraseña para autentificarse (puede cifrarse añadiendola de la forma password("contraseña")), uid que es el UserID y al que podemos ir asignándole números secuencialmente (para ello mirar antes /etc/passwd para ver a partir de cuál no está "ocupado"), el gid que en mi caso lo he puesto a 8 y que corresponde con el grupo de "mail" (lo he hecho así para que el usuario pueda escribir en el directorio /var/spool/mail que tiene como grupo propietario a "mail"), home que por ser usuarios "virtuales" lo dejamos a "/" mismo y el maildir o lugar donde se guardará el Maildir del usuario en cuestión. A esta ruta se le añade por delante el valor que habíamos puesto en /etc/postfix/main.cf como virtual_mailbox_base y que era "/". Se puede jugar combinando ambas, pero de esta forma aseguramos la ruta. Vamos a hacer una pequeña modificación al script de arranque de MySQL, que se situa en /etc/init.d/mysql. Modificaremos el apartado de "start)" para que quede de la siguiente forma: 'start')
# Start daemon
echo -n "Starting MySQL database server: mysqld"
/usr/bin/safe_mysqld > /dev/null 2>&1 &
for i in 1 2 3 4 5 6; do
if is_mysqld_alive; then break; fi
sleep 1
done
if is_mysqld_alive; then
ln -f /var/run/mysqld/mysqld.sock /var/spool/postfix/mysqld.sock
echo "."
else
echo "...failed."
fi
;; Esto es debido a que el proceso smtpd de Postfix corre en una "jaula" o chroot y no puede acceder al socket, por ellocreamos el enlace. Esta línea no haría falta en el caso de que accedamos a MySQL por red, pero en el caso que nos ocupa, hemos dicho que teniamos ambos servicios corriendo en la misma máquina. |