Partimos del siguiente esquema:
Proxy squid
Queremos instalar un servidor proxy/cache en nuestro servidor 1. Con ello vamos a poder controlar las páginas web a las que accedamos (desde el servidor 2 y servidor 3), además de acelerar nuestra navegación.
Nos piden la configuración de un proxy/cache/filtro en nuestra infraestructura. Hemos elegido como proxy/cache squid3, y como filtro de contenido dansguardian. Tenemos que tener en cuenta las siguientes consideraciones:
- El proxy/cache sólo admite conexiones de la red local.
- Se quieren limitar las siguientes conexiones:
- No se pueden bajar ficheros que se puedan instalar (exe,msi,rar,zip,bin,iso).
- No tienen acceso a internet los fines de semana.
- El control de las páginas permitidas se hará mediante listas negras usando dansguardians.
- Por último tendremos instalado un programa para monitorizar el uso del proxy: sarg. Para visualizar la información generada por dicho programa accederemos a una página web llamada proxy.josedomingo.gonzalonazareno.org que sólo será accesible si ponemos el nombre de usuario y contraseña.
- Finalmente queremos configurar la infraestrucutra para tener un proxy transparente.
Tarea 1 (1 punto)(Obligatorio): Configura de forma manual el proxy. Muestra las capturas de pantalla.
En el servidor1 instalamos el paquete squid3
apt install squid3
El fichero de configuración en el que van a estar las restricciones es /etc/squid/squid.conf
Para configurarlo de forma manual, nos vamos al navegador en la pestaña General > network proxy añadimos:
Tarea 2 (2 puntos)(Obligatorio): Muestra la configuración de squid para no permitir descargar ficheros ejecutables. Prueba de funcionamiento.
En el fichero de configuración antes mencionado añadimos:
acl archivos rep_mime_type ^application/octet-stream$ http_reply_access deny archivos
Tarea 3 (2 puntos)(Obligatorio): Muestra la configuración de squid para no permitir el acceso los fines de semana. Prueba de funcionamiento.
acl weekend time AS 00:00-23:59 http_reply_access deny weekend
Proxy inverso
Seguimos trabajando con las mismas máquinas, pero en un ejercicio nuevo, por lo que si necesitas detener los servicios del ejercicio anterior lo puedes hacer.
En este caso queremos instalar dos servidor web en el Servidor 2 y en Servidor 3, estos servidores deben servir una web completa (con hoja de estilo, imágenes,…) busca alguna plantilla.
En el Servidor 1 vamos a instalar diferentes configuraciones de proxy inverso para que desde el exterior se puedan acceder a las páginas de los servidores conectados a la red interna. Los proxy inversos los vamos a configurar de dos maneras distintas:
- Para que se acceda al servidor de Servidor 2 con la URL www.servidor.org\pagina1 y al servidor Servidor 3 con la URL www.servidor.org\pagina2.
- Para que se acceda al servidor de Servidor 2 con la URL www.pagina1.org y al servidor Servidor 3 con la URL www.pagina2.org.
Tarea 7 (2 puntos)(Obligatorio): Configura apache2 como proxy inverso para acceder a los servidores internos de la primera forma.
Lo primero es instalar apache en los dos servidores que están en la red interna.
La plantilla elegida es:
https://bootstrapmade.com/wp-content/themefiles/Bell/Bell.zip
En apache tenemos que activar los siguientes módulos:
a2enmod proxy proxy_http proxy_html headers
En el servidor1, configuramos el virtual host para que haga las “redirecciones”
ProxyPass "/pagina1/" "http://10.0.0.12/index.html" ProxyPassReverse "/pagina1/" "http://10.0.0.12/index.html" ProxyHTMLURLMap http://10.0.0.12/ /pagina1 <Location /pagina1/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /pagina1/ RequestHeader unset Accept-Encoding </Location>
ProxyPass "/pagina2/" "http://10.0.0.13/" ProxyPassReverse "/pagina2/" "http://10.0.0.13/" ProxyHTMLURLMap http://10.0.0.13/ /pagina2 <Location /pagina2/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /pagina2/ RequestHeader unset Accept-Encoding </Location>
He cambiado los index de los servidores para que indiquen el servidor en el que está ya que la plantilla es la misma.
Comprobamos:
Tarea 9 (2 puntos)(Obligatorio): Configura nginx como proxy inverso para acceder a los servidores internos de la primera forma.
Lo primero es instalar nginx
apt install nginx
Y el fichero del virtual host por defecto sería:
location /pagina1/ { proxy_pass http://10.0.0.12/index.html; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto http; proxy_set_header Accept-Encoding ""; }
location /pagina2/ { proxy_pass http://10.0.0.13/index.html; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto http; proxy_set_header Accept-Encoding ""; }
Balanceador de carga
Seguimos trabajando con las mismas máquinas, pero en un ejercicio nuevo, por lo que si necesitas detener los servicios del ejercicio anterior lo puedes hacer.
Ajustar la configuración de las dos máquinas del cluster de balanceo (Servidor 2 y Servidor3):
Deshabilitar la opción KeepAlive en el fichero de configuración /etc/apache2/apache2.conf para realizar la evaluación del rendimiento sin la opción de reutilización de conexiones, para ello en /etc/apache2/apache2.conf:
... KeepAlive Off ...
Nota: este ajuste no es estrictamente necesario (y sería desaconsejable en un entorno de producción real), pero facilita las pruebas manuales dado que permite detectar inmediatamente el “cambio” de destino resultado del balanceo de carga manteniendo la opción por defecto, en las pruebas manuales desde el navegador sería necesario esperar 5 segundos (el time out de keep alive) antes de recargar la página y ver el efecto del reparto de carga
En el Servidor 1 vamos a realizar diferentes configuraciones de servicios para que realicen el balanceo de carga entre los servidores web internos, por lo tanto al acceder desde el exterior a la ip del Servidor 1 se irá mostrando alternativamente las páginas de Servidor 2 y Servidor 3.
Tarea 11 (2 puntos)(Obligatorio): Configura apache2 como balanceador de carga.
En apache necesitamos acitvar el modulo proxy_balancer:
a2enmod proxy_balancer a2enmod lbmethod_bybusyness a2enmod lbmethod_bytraffic a2enmod lbmethod_heartbeat a2enmod lbmethod_byrequests
En el fichero del virtual host añadimos:
<Proxy "balancer://mycluster"> BalancerMember "http://10.0.0.12:80" BalancerMember "http://10.0.0.13:80" </Proxy> ProxyPass "/home" "balancer://mycluster" ProxyPassReverse "/home" "balancer://mycluster"
Tarea 12 (2 puntos)(Obligatorio): Configura ngninx como balanceador de carga.
En el fichero /etc/nginx/sites-available/default añadimos:
upstream app { ip_hash; server 10.0.0.12:80; server 10.0.0.13:80; } location / { try_files $uri $uri/ =404; proxy_pass http://app; }
Balanceo de carga con haproxy
Instala haproxy en Servidor 1. Lo primero es configurar HAproxy en balanceador (de momento sin soporte de sesiones persistentes)::
servidor1:~# cd /etc/haproxy servidor1:/etc/haproxy/# mv haproxy.cfg haproxy.cfg.original servidor1:/etc/haproxy/# nano haproxy.cfg global daemon maxconn 256 user haproxy group haproxy log 127.0.0.1 local0 log 127.0.0.1 local1 notice defaults mode http log global timeout connect 5000ms timeout client 50000ms timeout server 50000ms listen granja_cda bind 193.147.87.47:80 mode http stats enable stats auth cda:cda balance roundrobin server uno 10.0.0.X:80 maxconn 128 server dos 10.0.0.Y:80 maxconn 128
Define (en la sección listen) un “proxy inverso” de nombre granja_cda que:
- trabajará en modo http (la otra alternativa es el modo tcp, pero no analiza las peticiones/respuestas HTTP, sólo retransmite paquetes TCP)
- atendiendo peticiones en el puerto 80 del balanceador
- con balanceo round-robin
- que repartirá las peticiones entre dos servidores reales (de nombres uno y dos) en el puerto 80 de las direcciones 10.0.0.X y 10.0.0.Y
- adicionalmente, habilita la consola Web de estadísticas, accesible con las credenciales cda:cda
Más detalles en Opciones de configuración HAPproxy 1.5
Para iniciar HAproxy es necesario habilitar en /etc/default/haproxy el arranque de HAproxy desde los scripts de inicio, estableciendo la variable ENABLED=1
Desde la máquina cliente abrir en un navegador web la URL http://172.22.x.x y recargar varias veces para comprobar como cambia el servidor real que responde las peticiones.
Nota: Si no se ha deshabilitado la opción KeepAlive de Apache, es necesario esperar 5 segundos entre las recargas para que se agote el tiempo de espera para cerrar completamente la conexión HTTP y que pase a ser atendida por otro servidor.
Desde la máquina cliente podemos abrir en un navegador web la URL http://172.22.x.x/haproxy?stats para inspeccionar las estadísticas del balanceador HAProxy (pedirá un usuario y un password, ambos cda).
Tarea 13 (2 puntos)(Obligatorio): Muestra al profesor y entrega capturas de pantalla que el balanceador está funcionando
El fichero de configuración quedaría:
global daemon maxconn 256 user haproxy group haproxy log 127.0.0.1 local0 log 127.0.0.1 local1 notice defaults mode http log global timeout connect 5000ms timeout client 50000ms timeout server 50000ms listen granja_cda bind 193.168.0.29:80 mode http stats enable stats auth cda:cda balance roundrobin server uno 10.0.0.12:80 maxconn 128 server dos 10.0.0.13:80 maxconn 128
Tarea 14 (1 punto): Entrega una captura de pantalla donde se vea la página web de estadísticas de haproxy.