Este es un tutorial que escribí para el foro de DonkeyFire, que es una extensión de Firefox para monitorear MLDonkey de la barra de estado, creado por mi amigo Buanzo.
Si no saben qué es MLDonkey, pase por ACA PRIMERO (auqnue pueden adaptar esta técnica a cualqueir otro tipo de sistema web).
Esto en realidad surge como solución a un problema un poco más complejo que se me presnetó. Yo tengo un webserver corriendo con Apache, en mi casa, que hostea algunos sitios personales. En mi casa, en otro servidor, tengo corriendo MLDonkey. Yo necesitaba acceder a la interfaz web de MLDonkey desde fuera de mi casa. Para eso no tenía más que aplicar la correspondiente regla de port forwarding de mi firewall para que el puerto 4001 fuese accesible desde Internet. Hasta acá todo bien. El problema surje cuando quiero aplicar un poco de seguridad a esto, porque usa HTTP plano que pued epermitir que cualqueira acceda a la interfaz del MLDonkey y pueda manipular msia rchivos y configuraciones -sin mencionar posibles vulnerabilidades que puedan aprovecharse con ese acceso, aunque no conozco ninguna aún-.
Bien, la mejor forma de implementar un poco de sguridad a todo esto es usar HTTP con TLS/SSL, o sea HTTPS. para esto, utilizé mi servidor Apache. Él recibe las consultas por HTTPS y las redirecciona como HTTP normal a la interfaz Web de MLDonkey en el otro servidor. Luego devuelve las respuestas al cliente por HTTPS. Todo de manera transparente.
Es altamente recomendable leer los links informativos que puse en este post.
Bien, entonces, para reforzar al seguridad de la interfaz Web de MLDonkey -y si están tan locos como yo para implmentar esto- vamos a configurar Apache para poder accederla mediante SSL. Para esto vamos a hacer uso del módulo de Apache llamado mod_proxy.
Ok, esta guía la vamos a dividir en dos partes: Instalación de Apache y Configuración de Apache.
Instalación de Apache
SI YA TIENEN UN SERVIDOR APACHE FUNCIONANDO, PUEDEN PASARSE
Vos a asumir que tienen ya instalado MLDonkey, que funciona correctamente, y que acceden a su interfaz web por el puerto 4080.
En Debian GNU/Linux, y en cualquier otra distro basada en Debian, se soluciona con apt-get.
Logeados como root, o con su/sudo, procedemos de esta manera:
Instalación de Apache:
# apt-get install apache2
Instalación de OpenSSL:
# apt-get install openssl ssl-cert
Sobre Microsoft Windows, simplemente bajamos Apache de acá y lo instalamos como cualquier instaldor de windows: “siguiente, siguiente, siguiente, finalizar”. Pueden tener Internet Information Services y Apache corriendo en el mismo ambiente. Simplemente hagan que escuchen en diferentes puertos. O proxeen el IIS a través de apache como vamos a hacer con MLDonkey
Sambién siempre tenemos la posibilidad de instalar Apache compilando desde sus fuentes, sobre cualqueira de las plataformas nombradas. Puedne encontrar ayuda para eso acá.
Una vez que lo tengamos instalado y corriendo. para verificar que realmente está funcionanado simplemente apuntamos nuestro navegador a http://miserver/. Si todo anduvo bien, deberían ver una página blanca con el texto “It works” grande y en negrita.
Listo ya tenemos Apache funcionando.
Configuración de Apache
Lo que vamos a hacer ahora es configurar un Virtual Host escuchando en el puerto 443 usando SSL y mod_proxy.
Muy bien, ya tenemos Apache instalado y escuchando pedidos en el puerto 80.
Ahora tenemos que generar un certificado SSL.
Vamos a generarlo, y Apache lo va a usar para encryptar el tráfico para nuestro Virtual Host. Cabe aclarar que como el certificado que vamos a generar no va a estar firmado por ninguna CA (Auntoridad Ceritificadora) algunos mensajes de aviso serán una molestia en el navegador. De todas maneras no son un problema, solo son de cáracter informativo.
Ahora, para generar el certificado procedemos de esta manera:
# openssl req $@ -new -x509 -days 365 -nodes -outGenerating a 1024 bit RSA private key
/etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
………………………………………….++++++
…………………………………….++++++
writing new private key to ‘/etc/apache2/apache.pem’
Luego nos hará algunas preguntas:
Country Name (2 letter code) [AU]:GB
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Debian
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:
Ahora verificamos los permisos del archivo de certificado:
# chmod 600 /etc/apache2/apache.pem
Hacemos que apache escuche en el puerto 443:
# echo "Listen 443" >> /etc/apache2/ports.conf
Ahora habilitamos mod_ssl (Activamos SSL):
# a2enmod ssl
Module ssl installed; run /etc/init.d/apache2 force-reload to enable.
Reiniciamos Apache:
# /etc/init.d/apache2 restart
Ahora deberíamos verificar el funcionamiento apuntando nuestro navegador a https://miserver/
Y por último, configuramos un Virtual Host para poder acceder a la Interfaz Web de MLDonkey.
Desde Aapache 2.0, la configuración los Virtual Host se hace agregando pequeños archivos, con el bloque de VirtualHost, a /etc/apache2/sites-available y lusgo se linkean a /etc/apache2/sites-enabled para ahcerle la vida más simple al administrador.
Entonces el bloque Virtual Host debería quedar así:
# Esto hace que el Virtual host escuche en el puerto 443
NameVirtualHost *:443
# Inicializa elbloque deVirtual Host.
<VirtualHost *:443>
# This is the name which Apache will forward to MLDonkey when reciving a request.
ServerName mldonkey.tuhost.com
# This turns SSL on for this virtual host.
SSLEngine On
# Acá le decimos a Apache dónde encontrar el certificado SSL que creamos antes.
SSLCertificateKeyFile ssl/apache.pem
# Mismo que el otro.
SSLCertificateFile ssl/apache.pem
# Esto evita que Apache funcione como un forward proxy. Debe quedar en Off por motivos de seguridad.
ProxyRequests Off
# Este bloque permite ponder directivas aplicarpan solo al contenido proxyado.
<Proxy *>
# Configuramos el orden de manera que en principio denegará todo, y si la consulta cumple con las condiciones la permitirá.
Order deny,allow
# Acá habilitamos que cualqueira pueda acceder.
Allow from all
# Esto finaliza el bloque.
</Proxy>
# Esto hace que al acceder a la raíz de este Virtual Host accedamos a MLDonkey.
ProxyPass / http://mldonkey_host:4080/
# Esto se encarga de las respuestas de MLDonkey (la inversa que la directiva anterior).
ProxyPassReverse / http://mldonkey_host/
# Esto indica el archivo de log de errores.
ErrorLog /var/log/apache2/error.log
# Esto indica el archivo de log de accesos.
CustomLog /var/log/apache2/access.log common
# Esto finaliza el bloque de Virtual Host.
</VirtualHost>
Ahora habilitamos este Virtual Host:
# ln -s /etc/apache2/sites-available/virtual_host_file /etc/apache2/sites-enabled/virtual_host_file
Para usuarios de Apache 1.3.x:
Los Virtual Hosts en Apache 1.3.x virtual se definen dentro de httpd.conf file en al sección de Virtual Hosts. El bloque sería igual, no hay que modificar nada.
Finalmente, reiniciamos Apache de nuevo:
# /etc/init.d/apache2 restart
Ahora apuntamos nuestro navegador a https://mldonkey.tuhost.com/ y accedemos a la interfaz web de MLDonkey a traves de Apache y usando SSL
Recuerden forwardear el puerto 443 al equipo donde tengan Apache para poder acceder desde Internet.
Y recuerden que Apache y MLDonkey pueden correr en máquinas totalmente diferentes, siempre y cuando tengan conectividad entre ellas![]()
Bueno espero que les sirva.
Si te gustó esta nota, podés invitarme una cerveza en agradecimiento. Y algún día quizá pueda yo invitarte una :D
