Insure Apache (HTTPS)
Oct 15, 07 by Juan Lebrijo about Web, blog
I am going to tell you how implementing a secure web server with OpenSSL and Apache2. Then we want the system root with site configurations is encrypted. Create certificates:
  • Generate private key:
openssl genrsa 1024 > web.key
  • Without passwor to boot directly.
  • Generate the certificate petition:
openssl req -new -key web.key -out web.csr
  • Generate certificate with 10000 days validity, signed by us.
openssl req -x509 -days 10000 -key web.key -in web.csr -out web.crt
Enable SSL module mod_ssl in apache:
elite:~# cd /etc/apache2/mods-enabled/
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.conf ssl.conf
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.load ssl.load
elite:/etc/apache2/mods-enabled# /etc/init.d/apache restart
In order to create a Virtual Host with SSL, we must include the port declare, and host. Minium declaration:
#NameVirtualHost *:443
<VirtualHost *>
	ServerName www.midominioseguro.com
        DocumentRoot /var/www/midominioseguro/

        SSLEngine On
        SSLCertificateFile /root/web.crt
        SSLCertificateKeyFile /root/web.key
</ VirtualHost>
Activating SSL mode with SSLEngine sirective, and giving the public key web.crt, and private key web.key. Then it could access from every client to our web: https://www.midominioseguro.com. Of course, your DNS must have this name configured.
Securizar Apache HTTPS(SSL)
Oct 15, 07 by Juan Lebrijo about Services, Web, security, blog
Os voy a contar como montar un servidor web seguro con Apache2 y las herramientas de OpenSSL. Para esto queremos que la raiz del sistema con todas las configuraciones del sitio, vaya encriptado. Creamos los certificados:
  • Generación de llave privada:
openssl genrsa 1024 > web.key
  • Sin contraseña para que arranque automáticamente.
  • Generación de petición del certificado:
openssl req -new -key web.key -out web.csr
  • Generación del certificado con una validez de 10000 días, firmado por nosotros mismos.
openssl req -x509 -days 10000 -key web.key -in web.csr -out web.crt
Instalamos el módulo mod_ssl en nuestro apache (mejor dicho lo habilitamos):
elite:~# cd /etc/apache2/mods-enabled/
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.conf ssl.conf
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.load ssl.load
elite:/etc/apache2/mods-enabled# /etc/init.d/apache restart
Para crear un host virtual que tirara de ssl tendriamos que incluir la declaración del puerto, y el Host. Les pongo una declaración mínima:
#NameVirtualHost *:443
<VirtualHost *>
	ServerName www.midominioseguro.com
        DocumentRoot /var/www/midominioseguro/

        SSLEngine On
        SSLCertificateFile /root/web.crt
        SSLCertificateKeyFile /root/web.key
</ VirtualHost>
Activando el modo SSL con la directiva SSLEngine, y pasándole la clave pública (ó dertificado) web.crt, y la privada web.key. De esta forma podrán acceder desde cualquier cliente a la web: https://www.midominioseguro.com. Por supuesto, su servidor DNS tiene que tener configurado ese nombre.
Hosting Virtual en Apache (Parte II)
Oct 11, 07 by Juan Lebrijo about Services, Web, blog
Hoy continuamos con la segunda entrega sobre mis andanzas con el Hosting Virtual de Apache. Podeis ver la primera en: Hosting Virtual en Apache (Parte I). Veremos como hacer que nuestro Apache sirva las páginas de otro servidor remoto encriptados con SSL y sin encriptar.

Redirigir a otro servidor web

Esta estrategia nos puede servir para servir un servidor externo como si se tratara del nuestro. Es una especie de proxy web, pero de un solo sitio. Puede tener varios usos:
  • Servir hacia internet un servidor local que por seguridad este capado.
  • Servir desde internet algún servidor lejano para ganar velocidad.
  • A ver si se os ocurre alguno más y me lo contais.
Para utilizar las directivas siguientes hay que tener habilitado el módulo mod_proxy. Como se habilita en Apache2:
elite:~# cd /etc/apache2/mods-enabled/
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.conf proxy.conf
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy.load proxy.load
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/proxy_http.load proxy_http.load
elite:/etc/apache2/mods-enabled# /etc/init.d/apache restart
El código:
<VirtualHost *>
        ServerName privado.tudominio.com

        ProxyPreserveHost On
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / http://192.168.0.1/
        ProxyPassReverse / http://192.168.0.1/
</VirtualHost>
ServerName es como llamaremos desde la internet (http://privado.tudominio.com) a este recurso (http://192.168.0.1/) de nuestra red local. La directiva <Proxy> marca los permisos de entrada al objeto. Y las directivas ProxyPass (mapeando la dirección externa) y ProxyPassReverse (ajustando la URL al campo HTTP Location) nos fijan la dirección (IP o DNS) de lo que queramos mapear.

Redirigir a otro servidor web, pero seguro https

Pues más difícil todavia, queremos que nuestro Apache actue como servidor proxy de un servidor remoto seguro. Este problema se me planteo al instalar webmin que provee de un servidor seguro en el puerto 10000, y llegue a la conclusión de que era más infernal modificar el uso de este servidor que redirigirlo a través de este mecanismo. Por supuesto hay que tener instalados los módulos mod_ssl y mod_proxy (que instalamos en el punto anterior):
elite:~# cd /etc/apache2/mods-enabled/
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.conf ssl.conf
elite:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.load ssl.load
elite:/etc/apache2/mods-enabled# /etc/init.d/apache restart
La configuración del fichero de Virtual Host quedaría:
<VirtualHost *>
        ServerName webmin.tudominio.com

        ProxyRequests Off
        SSLProxyEngine On
        ProxyVia On
        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyPass / https://localhost:10000/
        ProxyPassReverse / https://localhost:10000/
        ProxyPassReverseCookieDomain localhost:10000 tudominio.com
        ProxyPassReverseCookiePath / /
</VirtualHost>
Pues sería igual que el anterior pero habría que cachear los certificados SSL con la etiqueta SSLProxyEngine, y además las cookies con las últimas etiquetas.