Y ahora abrimos la etiqueta siguiente:
<VirtualHost 192.168.0.5>
DocumentRoot /home/web/
DirectoryIndex index.php index.html index.htm
ServerAdmin ntn@drdoom.net
ServerName dominio.org
ServerAlias *.dominio.org
ErrorLog /home/web/logs/logerror
CustomLog /home/web/logs/access-log common
</VirtualHost>
Esto crea un host virtual en 192.168.0.5 con características explicadas con anterioridad, excepto el ErrorLog, archivo donde se guardan los errores, y el CustomLog, fichero donde se almacenará un registro de todos los accesos a la web.
Finalmente llega el esperado momento de la prueba, poner en marcha apache otra vez:
# apachectl restart
Ahora, desde cualquier lugar de internet podría uno visitar www.dominio.org.
Hasta aquí llegaría la instalación y configuración mínima de apache, pero se me ocurrieron un par de cosas para hacerlo todo más bonito y tenerlo más ordenado.
Cuando añadimos un usuario, normalmente su home se crea en /home/nombre-de-usuario, pero claro, entre profesores, alumnos y otros usuarios, se liaría una bien grande en el directorio /home, así que pensé que sería conveniente dividirlos según su estatus. Crearía una carpeta para cada grupo de usuarios y una para englobarlos a todos:
# mkdir /home/alumnes
# mkdir /home/profes
# mkdir /home/users
# mkdir /home/todos
De esta manera, a la hora de añadir un usuario, si se trata de un profesor, le indicaremos al programa que añade usuarios (adduser) que utilice como home del usuario la carpeta /home/profes, de esta manera, si añadimos el usuario pgarcia, su home estaría en /home/profes/pgarcia.
¿Y qué pasa con la carpeta todos?
Cuando un usuario es añadido, hay una serie de ficheros y directorios que se encuentran en /etc/skel, que se copian automáticamente en el home del usuario. Entre esos ficheros y directorios está la carpeta tu_web que está predeterminada para almacenar la página web de cada usuario, es decir, el usuario que desee tener página web, deberá poner todos los archivos de su página en el directorio tu_web de su home.
Por ejemplo, el usuario pmanils es un alumno, pues en su home, que será /home/alumnes/pmanils, tendrá una carpeta llamada tu_web (/home/alumnes/pmanils/tu_web) donde guardará su página web.
Recordamos que UserDir se encarga de definir el directorio de la página web de los usuarios cuando se hace una petición web del estilo www.dominio.org/~pepe .
Si no hubiésemos hecho la separación de usuarios y todos se encontrasen en /home, definiríamos UserDir como /home/*/tu_web donde * sustituye al nombre de usuario de la petición web (siguiendo el ejemplo de arriba, se desea ver la página del usuario pepe, entonces en ese momento UserDir valdría /home/pepe/tu_web y nos mostraría la página de pepe).
Pero al hacer la separación de homes por tipo de usuario (alumno/profesor/usuario) tendríamos que añadir tres tipos de UserDir's, uno por el caso que se pidiera la página de un alumno, otro por si fuera la de un profesor, y otra pos si fuera un usuario. Esto no es posible (o al menos yo no lo conseguí) y tuve que buscar una alternativa. Existe un comando llamado ln que sirve para hacer enlaces entre archivos o directorios, esto es, para que fichero1 se refiera a fichero2 pudiendo estar en distintos directorios del disco duro. Con un ejemplo lo veremos mejor:
# ln -s /home/ies/fichero1 /root/fichero-linkado
Este comando crearía el fichero /root/fichero-linkado y si accediéramos a este archivo, veríamos simplemente el contenido de /home/ies/fichero1. Es decir, /root/fichero-linkado no sería más que un espejo (enlace) de /home/ies/fichero1. Con el modificador -s le indicamos que el enlace sea simbólico, es decir, que lo que le ocurra a /root/fichero-linkado no tendrá efecto en el archivo original /home/ies/fichero1, pero las modificaciones que hagamos al archivo original siempre se verán si accedemos al enlace (link).
Todo esto lo explico para que comprendan lo siguiente.
ln nos permite también enlazar directorios, de tal modo que si creamos enlaces con el nombre de cada usuario que vayan desde su home (/home/alumnes/brios y los demás alumnos; /home/profes/mnicolau y los demás profesores; y finalmente /home/users/teckk y los otros usuarios) hacia un solo directorio, tendremos la situación en que todos los usuarios del sistema tengan un enlace en un único directorio destino que queramos, de tal forma que habremos creado un "home" donde tenemos acceso a todos los homes de todos los usuarios. Como podéis suponer, yo los agrupé todos en /home/todos.
De aquí que definimos la variable UserDir de esta manera:
UserDir /home/todos/*/tu_web
Así que cualquier petición a cualquier usuario, ya sea alumno, profesor o usuario, se irá a buscar en la carpeta /home/todos donde existirá un enlace con el mismo nombre de usuario que la petición, que nos llevará al home verdadero del usuario.
Ejemplo:
www.dominio.org/~llmfabrega
llmfabrega es un profesor, pero no importa, UserDir valdrá /home/todos/llmfabrega/tu_web (el * del UserDir es sustituido por el nombre introducido en la petición, en este caso llmfabrega), y dado que /home/todos/llmfabrega es un enlace que lleva al home de este usuario, /home/todos/ llmfabrega/tu_web equivaldría a ir al directorio /home/profes/llmfabrega/tu_web.
A parte también quería que hubiera una dirección web directa para visitar la página de un alumno o profesor del estilo www.dominio.org/alumnes/brios o www.dominio.org/professorat/mnicolau. Para ello utilicé por segunda vez los enlaces simbólicos.
En la configuración del apache teníamos como directorio principal de la web, /home/web. La idea que tuve fue crear tres carpetas más dentro de ese directorio:
# mkdir /home/web/alumnes
# mkdir /home/web/professorat
# mkdir /home/web/users/
Y luego hacer enlaces simbólicos del directorio donde tiene la web cada usuario, a la carpeta de la web principal correspondiente:
Si cgarcia fuera un alumno, entonces el enlace que haríamos sería de este tipo:
# ln -s /home/alumnes/cgarcia/tu_web/ /home/web/alumnes/cgarcia
De esta manera si en la petición web del navegador pusiéramos "www.dominio.org/alumnes/cgarcia" estaríamos entrando en /home/web/alumnes/cgarcia que al ser un enlace, nos llevaría a /home/alumnes/cgarcia/tu_web que es donde nos interesa.
Así debería hacerse con cada alumno, profesor y usuario ajeno.
1.3Servidor FTP
El servidor de FTP es necesario para que los usuarios del sistema puedan subir los ficheros de sus páginas web. Es una tarea fácil y sencilla.
Decidí instalar proftpd, uno de los mejores servidores para Linux:
# apt-get proftpd
Editaremos el archivo de configuración principal, después de hacer una copia del archivo:
# cp /etc/proftpd.conf /etc/proftpd.conf.old
# vi /etc/proftpd.conf
Podremos ver que es bastante parecido al httpd.conf del apache. Pero de este fichero solo nos interesa modificar una pequeña cosa.
DefaultRoot ~
Esta definición debería quedar como se muestra. El DefaultRoot es el directorio raíz donde iremos a parar si entramos por el FTP. El símbolo "~" indica que sea el directorio home de cada usuario, de esta manera, si soy el usuario gonssal y conecto al servidor FTP, iré a parar a /home/users/gonssal/ que es mi directorio home y no podré acceder a los directorios superiores a éste, solo podré moverme dentro de home/users/gonssal/. Es por una razón de seguridad. El proftpd trae por defecto que DefaultRoot sea "/", y esto sería bastante peligroso porque los usuarios podrían moverse por todo el sistema (recordemos que / es el direcotrio raíz de todo el sistema) y serían capaces de subir y bajar archivos sensibles de configuraciones.
Nos quedaría hacer lo de siempre, abrir el puerto 21 (que es el del FTP) en el router y redirigirlo a nuestra máquina. Como ya sabemos cómo hacerlo, no volveré a repetirlo.
Si recordamos lo que pusimos en el archivo de la zona dominio.org en la configuración del servidor DNS vemos lo siguiente:
ftp IN CNAME dns
Como vemos, ftp no tiene un punto al final, por lo que acabaría siendo ftp.dominio.org que es un alias (CNAME) de dns (dns.dominio.org porque no tiene punto tampoco) y que en la configuración de más arriba definimos dns como la IP 80.80.80.80. De esta manera ftp.dominio.org equivaldría la misma IP que dns.dominio.org.
Esto resulta útil porque si queremos acceder al FTP de dominio.org, lo podremos hacer indicando como host ftp.dominio.org que queda más estético.
De esta manera ya quedaría todo a punto para que los usuarios puedan subir sus páginas personales.
3 Servidores SMTP y POP3
Para poder dar el servicio de mail, es necesario saber que existen dos programas: el encargado de enviar los emails (SMTP) y el de recogida de mails (POP). Por lo tanto deberemos configurar dos servicios, el de POP3 (ya que POP2 ha pasado un poco a la historia) y el SMTP (esto no es del todo cierto, ya que el servicio SMTP se encarga de transportar el correo entre servidores, y sólo se habla con servidores, de tal modo que POP es el protocolo usado para entregar el correo a los clientes).
3.1 Servidor SMTP
Debian trae por defecto el programa exim que se encarga del correo saliente del servidor. Durante la instalación de Debian se ejecuta un programa llamado eximconfig que nos permite configurar de una manera fácil exim. Después de la instalación podremos ejecutar cuando nos plazca dicho programa para modificar la configuración existente.
eximconfig nos hará una serie de preguntas a las cuales deberemos responder según nos interese:
- Uso del servidor: será la primera pregunta que se nos mostrará. Aquí deberemos pulsar el número 1, puesto que queremos configurar un servidor de correo electrónico a Internet. Las otras opciones son para otras configuraciones que no nos atañen.
- Nombre visible de la máquina: es lo que queremos que aparezca como remitente en los emails que enviemos. Yo puse "dominio.org" que es nuestro dominio que compremos.
- ¿Tiene otros nombres nuestro sistema a parte del anterior? En nuestro caso no, pondremos "none" o le daremos al enter ya que por defecto es "none".
- En este apartado se nos informa que nuestro servidor de correo aceptará correo que venga de Internet con destino a nuestra máquina y todo el correo que se envíe de forma local con destino a Internet (correo local es el que tiene como destino un usuario de nuestra máquina; correo saliente es el que tiene como destino otras máquinas o Internet), pero no reenviará correo (hacer relay) para otros que se conecten desde Internet a nuestra máquina. De esta manera evitaremos que alguien se aproveche de nuestro servidor para enviar mails masivos, publicidad, etc... (spamming). De todas formas podemos indicarle a exim que sí lo deje hacer para ciertos dominios. En nuestro caso no nos interesaba, así que "none".
- ¿Para qué dominios queremos actuar de servidor de mail (a parte del nuestro)? Ahora se lo podemos indicar. "none" para mi configuración.
- Ahora podemos escoger para qué máquinas haremos de servidor de correo. Podemos indicarle direcciones IP o dominios. Yo le puse "*.dominio.org" (con el asterisco), que en realidad es una misma máquina, pero que puede ser mail.dominio.org, ftp.dominio.org o dns.dominio.org.
- A qué usuario se redirigirá el correo que vaya para el superusuario (root). Esto también es por razones de seguridad, de esta manera el correo nunca podrá ser leído por el administrador y por lo tanto se reducirán los posibles ataques con correos malintencionados. En mi caso pues el usuario "ies", que soy yo mismo.
- Nos informa que ya tenemos un /etc/aliases y si deseamos reemplazarlo por uno nuevo que generará exim o si queremos mantener el nuestro. Si elegimos la primera opción no perderemos nuestro fichero, sino que será renombrado a /etc/aliases.0 . Yo le indiqué que sí, que lo reemplazara por el nuevo.
- El último paso es un resumen de todos los datos que le hemos introducido durante el proceso de configuración. Si son correctos pulsaremos "y", y si no, podemos repetir el cuestionario pulsando "n".
Una vez tengamos esta configuración, queda hacer una pequeña cosa. Durante las preguntas, respondimos que no queríamos reenviar correo de gente que venía de Internet, pero claro, es justamente lo que queremos nosotros, que los usuarios desde su casa configuren su cliente de correo electrónico para que puedan conectarse a este servidor y poder enviar sus emails con la dirección nombre-de-usuario@dominio.org. Entonces era necesario controlar quién se conectaba al servidor SMTP para dejarle o no enviar emails. Una de las maneras es hacerlo por IPs, especificar qué IPs dejamos conectar a nuestro servidor. Pero no todos los usuarios tendrían una IP fija, sino que la mayoría se conectarían por módem, y cada vez que lo hicieran se les asignaría una IP distinta y sería imposible controlarlos. Entonces no resultaba muy útil este método y decidí controlar el reenvío de correo (relay) por dirección de correo origen. Esto es, que solo se dejarían enviar aquellos correos cuyo remitente figurase en una lista elaborada por nosotros. Es decir, si alguien intentase enviar un correo a miamigo@cualquier.com con remite pepe@otro.org utilizando nuestro servidor de correo, se le denegaría el envío, solo podría enviar emails con nuestro servidor si pusiera como remite usuario-valido@dominio.org.
Para llevar a cabo este control, editaremos el /etc/exim/exim.conf y añadiremos lo siguiente:
# cp /etc/exim/exim.conf /etc/exim/exim.conf.old
# vi /etc/exim/exim.conf
Nos dirigiremos hacia host_accept_relay (para tenerlo un poco ordenado) y justo debajo escribiremos lo siguiente:
relay_match_host_or_sender
sender_address_relay = /etc/exim/lista_relay
Esto le indica a exim que utilice el método de control del relay por host o por dirección de origen, y que la lista de los usuarios permitidos para hacer relay se encuentra en /etc/exim/lista_relay.
Por lo tanto solo nos queda añadir qué direcciones permitiremos que hagan relay:
# vi /etc/exim/lista_relay
Y escribir las direcciones al estilo "mnicolau@dominio.org". Aquí también se hizo un pequeño script para añadir a todos los usuarios del sistema en esa lista.
Ahora abriremos el puerto 25 en el router, como hemos hecho desde siempre.
Hasta aquí finalizaría la configuración de exim, y cualquier usuario desde su casa, configurando su cliente de correo electrónico adecuadamente, podría ya enviar correo con la dirección mnicolau@dominio.org tratándose del usuario mnicolau, por ejemplo.
Pero no acaba aquí, ¿de qué nos sirve enviar correo con un remite al que luego si intentan contestar, no puedan? Acabamos de configurar un servidor de correo saliente, para enviar correo solo, pero necesitamos también un servidor de correo entrante para poder recibir emails, para que la gente pueda responder a mnicolau@dominio.org si lo desea y que luego mnicolau pueda recoger dichos mensajes.
3.2 Servidor POP3
Aquí encontramos la solución. POP3 se encarga del correo entrante, de tal manera que si alguien envía un mail a llmfabrega@dominio.org, POP3 recibe este email y lo guarda al directorio home del usuario correspondiente dentro de un fichero llamado mbox (en este caso se guardaría en /home/profes/llmfabrega/mbox). Luego, este usuario, desde su casa podría conectarse al servidor pop3 y tras identificarse con su login y su contraseña, recoger los mensajes que se encuentren en su mbox. Sí, mbox es un archivo de texto que guarda todos los emails recibidos, de tal manera que si deseas guardar los mails, se van acumulando en este fichero, y si más tarde quieres leer un mail de hace un mes, tendrás que hurgar en este fichero hasta encontrarlo. Por esto que el sistema de almacenaje en mbox es un poco precario.
Es por eso que existe otro sistema para almacenar los mails recibidos, es el sistema de Maildir. Este sistema almacena los mensajes recibidos en una carpeta llamada "new" dentro del directorio Maildir que se encuentra en el home de cada usuario. Pero no guarda los emails en un solo fichero como mbox, sino que cada email es un fichero. De esta manera resulta mucho más fácil trabajar con los emails recibidos.
Para pasar al sistema de Maildir, tendremos que editar de nuevo el archivo de configuración de exim:
# vi /etc/exim/exim.conf
Nos desplazaremos hasta encontrar la línea que ponga local_delivery: y haremos lo siguiente:
-Comentaremos (añadir un # al inicio de la línea)
file = /var/spool/mail/${local_part}
-Y añadiremos estas tres líneas:
directory=${home}/Maildir
maildir_format = true
prefix = ""
Quedando pues de la siguiente manera:
local_delivery:
driver = appendfile
group = mail
mode = 0660
mode_fail_narrower = false
envelope_to_add = true
return_path_add = true
#Añadimos lo siguiente
directory=${home}/Maildir
maildir_format = true
prefix = ""
# file = /var/spool/mail/${local_part}
Terminada esta parte, nos movemos un poco más abajo hasta encontrar address_directory:
y allí descomentaremos la línea que dice # maildir_format, quedando esta parte así:
address_directory:
driver = appendfile
no_from_hack
prefix = ""
suffix = ""
maildir_format
Una vez hechos estos cambios podremos guardar y salir.
Ahora pasearemos a la instalación en sí de pop3.
Existen bastantes programas que ofrecen el servicio de POP, así que escogimos uno que me pareció sencillo de instalar. ipopd es el programa en cuestión. Tras investigar un poco, descubrí que existía un versión segura de este software. Cuando nos conectamos a un servidor POP, necesitamos suministrar una contraseña. Esta clave se envía normalmente como texto plano, es decir, que cualquier individuo que estuviera "escuchando" nuestra línea, podría hacerse fácilmente con la clave de acceso. Por eso se desarrollan versiones seguras del software, que cifran la contraseña de tal manera que sólo el destinatario pueda descifrarla. Así nos aseguramos que nadie pueda hacerse con nuestro password. Cabe decir que esta versión segura soporta también conexiones no seguras, por lo tanto "matamos dos pájaros de un tiro".
La versión segura de ipopd se llama ipopd-ssl, así que vayamos a instalarla:
# apt-get install ipopd-ssl
Una vez hecho esto, hay que abrir el puerto 110 del router y redirigirlo al 110 de nuestro servidor. Tendremos instalado nuestro servidor de POP3, y todos los usuarios del sistema gozarán de una cuenta de email para poder enviar y recibir su correo electrónico desde sus casas.
4. Cerrando
Posteriormente instalé un SAI. Además aparece un hub de la red por aquí en medio y encima de la torre un AP/Router de la red wireless que estoy construyendo para dar cobertura al centro y al resto del poblado. El tema wireless se está desarrollando, aún no se ha finalizado la red.
|