Servidor proxy-cache, proxy inverso y balanceador de carga

Partimos del siguiente esquema:

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:

  1. El proxy/cache sólo admite conexiones de la red local.
  2. Se quieren limitar las siguientes conexiones:
    1. No se pueden bajar ficheros que se puedan instalar (exe,msi,rar,zip,bin,iso).
    2. No tienen acceso a internet los fines de semana.
  3. El control de las páginas permitidas se hará mediante listas negras usando dansguardians.
  4. 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.
  5. 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:

2.png

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

2.png

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:

6.png

5.png

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 ""; 
}

78

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"

2324

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;
 }

2022

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

910

Tarea 14 (1 punto): Entrega una captura de pantalla donde se vea la página web de estadísticas de haproxy.

1911

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *