Instalación de Servidor Web con Nginx
Se debe instalar un servidor web ya que el sera quien recibirá las peticiones por la ip publica y no por la ip del contenedor LXC.
# aptitude install nginx
Una vez instalado se debe crear una configuración dom0 que resuelva las peticiones en la ruta:
# nano /etc/nginx/sites-available/juju-gui
y se pega el siguiente código y luego se guarda y se sale para restaurar el servicio web:
server {
listen 80;
server_name jujugui.canaima.net.ve;
access_log /var/log/nginx/jujugui-net.access.log;
error_log /var/log/nginx/jujugui-net.error.log;
location / {
proxy_pass http://10.0.3.180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
Se realiza un enlace simbólico
Se debe realizar un enlace simbólico por cada archivo configurado
# ln -s /etc/nginx/sites-available/juju-gui /etc/nginx/sites-enabled/juju-gui
# service nginx restart
# ln -s /etc/nginx/sites-available/juju-wiki /etc/nginx/sites-enabled/juju-wiki
# service nginx restart
7.- Instalacion de openssl
# aptitude install openssl
Crear una carpeta donde guardaran los archivos
# mkdir /etc/nginx/ssl2
# cd /etc/nginx/ssl2
Generar la Llave con openssl
# openssl genrsa -des3 -out ser.key 4096
Generating RSA private key, 4096 bit long modulus
.....................................................++
.......................++
e is 65537 (0x10001)
Enter pass phrase for ser.key:
Verifying - Enter pass phrase for ser.key:
Crear una petición de firmado del certificado CRS
# openssl req -new -key ser.key -out ser.csr
Enter pass phrase for ser.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:VE
State or Province Name (full name) [Some-State]:Caracas
Locality Name (eg, city) []:Distrito Capital
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MMMM
Organizational Unit Name (eg, section) []:juju
Common Name (eg, YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
NOTA: NO COLOCAR ESTA CLAVE PASSWORD
Firmar la petición previamente elaborada
# openssl x509 -req -days 1825 -in ser.csr -signkey ser.key -out ser.crt
Signature ok
subject=/C=ve/ST=Caracas/L=Distrito Capital/O=MMMM/OU=juju
Getting Private key
Enter pass phrase for ser.key:
NOTA: COLOCAR ESTA CLAVE PASSWORD LA MISMA DEL INICIO
# ls
ser.crt ser.csr ser.key
Crear una versión de la llave que no requiera password
# openssl rsa -in ser.key -out ser.key.insegura
Enter pass phrase for ser.key:
writing RSA key
NOTA: COLOCAR ESTA CLAVE PASSWORD LA MISMA DEL INICIO
Renombrar la llave sin password
# mv ser.key ser.key.seguro
# mv ser.key.insegura ser.key
Y tenemos cuatro archivos
#ls
ser.crt ser.csr ser.key ser.key.seguro
¿Qué archivos usaremos?
Solo usaremos el certificado (ser.crt) y la llave (ser.key)
¿Quien usará la llave y el certificado?
Pues en este caso apache2 y nginx usaran la llave y el certificado. ¿Y pueden usar los mismos? pues si,tanto apache2 y nginx pueden usar la misma llave y el mismo certificado.
Configuración de nginx en el contenedor dom0
Nginx en /etc/ngix/site-availables contiene los archivos de los sitios disponibles, en este caso están configurados como proxy_pass como por ejemplo
# cd /etc/nginx/sites-available
# ls
default juju-gui
# nano juju-gui
Normalmente un archivo proxy_pass es para responder a las peticiones del puerto 80 (http) y las redirige a una maquina virtual y se ven algo así:
server {
listen 80;
server_name jujugui.canaima.net.ve;
access_log /var/log/nginx/jujugui-net.access.log;
error_log /var/log/nginx/jujugui-net.error.log;
location / {
proxy_pass http://10.0.3.180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
Esto quiere decir que todas las peticiones hacia el puerto 80 (http) y sean con el dominio jujugui.canaima.net.ve, serán redirigidas a la maquinas virtual cuya IP sea la especificada en el campo proxy_pass (http://192.168.1.x ; http://10.0.3.208 en el caso de la ip que tiene el LXC de juju-gui).
¿Ahora cómo hacer para que el proxy_pass también responda a las peticiones del puerto 443 (https) para así aumentar la seguridad?
En este caso solo debemos agregar algunas cosas al archivo de configuración del proxy_pass que servirá para: Responder a las peticiones del puerto 80 (http), 443 (https) y además haremos que responda siempre por el puerto 443, aun cuando el usuario haga la petición por el puerto 80. Tambien tendrá la configuracion de WebSocket ya que la interfaz gráfica de usuario hablará con Juju en un WebSocket para proporcionar una interfaz en tiempo real con los servicios instalados, las unidades que los componen, y las máquinas disponibles
Para este ejemplo editaremos el archivo de configuración del proxy_pass de la maquina server dom0 de la siguiente manera:
# cd /etc/nginx/sites-available
# ls
default juju-gui
# nano juju-gui
y debemos dejarlo así:
server {
listen 80;
server_name jujugui.canaima.net.ve;
rewrite ^ https://$host$request_uri? permanent;
}
server {
listen 443;
server_name jujugui.canaima.net.ve;
ssl on;
ssl_certificate /etc/nginx/ssl2/ser.crt;
ssl_certificate_key /etc/nginx/ssl2/ser.key;
access_log /var/log/nginx/jujugui-net.access.log;
error_log /var/log/nginx/jujugui-net.error.log;
location / {
proxy_pass https://10.0.3.180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
Listo ya esta configurado nuestro virtualhost en el dom0 nuestra maquina fisica.
Restauramos el servicio y listo.
# service nginx restart
No hay comentarios:
Publicar un comentario