Practica 3.- Servidor WEB


Linux.

Instalación

$ sudo apt-get install apache2

Una vez instalado, ya funciona el servidor web. Probarlo con http://IP_SERVIDOR y saldrá una página en la que se indica que … It Works!. Además se habrá creado un usuario y grupo www-data (ver en /etc/passwd y en /etc/group)

Las páginas a servir están en /var/www (se indica en /etc/apache2/sites-available/default)

Arranque/parada/recarga

$ sudo /etc/init.d/apache2 start/stop/restart

Configuración

Se configura mediante la edición de los siguientes ficheros (o directorios):

a) Modificar /etc/hostname y /etc/hosts para poner el FQDN del servidor (ubuntu.a28.local)

b) Verificar el contenido de /etc/apache2/apache2.conf (3 secciones, ver libro del ciclo superior)

c) Editar /etc/apache2/sites-available/default
En la directiva Directory /var/www
d) Directorios virtuales (en carpetas distintas a /var/www)

e) Directorios personales de usuarios

f) Directorios de acceso restringido (por IP y/o contraseña)
Crear la carpeta /var/www/privado y dentro un fichero index.htm
Acceso desde una IP: editar /etc/apache2/sites-available/default y añadir
<Directory “/var/www/privado/”>
    DirectoryIndex index.htm
    Options FollowSymLinks Multiviews
    AllowOverride None
    Order allow, deny
    Allow from 192.168.11.1
</Directory>

Acceso con contraseña (comprobar que auth_basic está habilitado consultando /etc/apache2/mods-enabled)
Crear los usuarios con acceso mediante:
sudo htpasswd –c /etc/apache2/passwd juanito (-c la primera vez)
udo htpasswd  /etc/apache2/passwd jaimito

Añadir en la directiva del directorio /var/www/privado
AuthName “Cuidadin, cuidadin”
AuthType Basic
AuthUserFile /etc/apache2/passwd
Require user juanito jaimito

 
g) Hosts virtuales (hosting, páginas diferentes dependiendo de la dirección con la que se accede)
Previamente se necesita un DNS bien configurado con 2 direcciones apuntando a la IP del servidor apache. Para facilitar las cosas, se puede editar c:/windows/system32/drivers/etc/hosts y poner algo como
192.168.11.2    www.fila1.lamerced.local
192.168.11.2    www.otrowww.local

En el ejemplo que sigue, lo hago con los dominios daw2.no-ip.org y el resto de dominios que llevan al apache de fermin (default)
Cuando llamamos a daw2.no-ip.org se ejecuta el sitio web bajo /var/wwwdaw2.
Cuando llamamos a cualquier otra cosa (192.168.0.254:8080, lamerced.no-ip.org, …) se ejecuta la web por defecto bajo /var/www

h) Servidor seguro https (ssl)
Habilitar el módulo de comunicación seguro ssl
sudo a2enmod ssl

Habilitar el fichero de configuración predefinido de ssl
sudo a2ensite default-ssl

Permitir en el cortafuegos conexiones por el puerto seguro 443
sudo ufw allow 443

Recargar apache
sudo /etc/init.d/apache2 restart

Se crea un certificado AUTOFIRMADO y genérico de ubuntu.
Para crear un certificado autofirmado propio seguir los siguientes pasos (un certificado firmado por una autoridad vale una pasta). Las instrucciones están sacadas de
https://help.ubuntu.com/11.04/serverguide/C/certificates-and-security.html
Generar la clave privada server.key
sudo openssl genrsa –des3 –out server.key 1024
Pide una frase, pongo caperucita
Generar la clave pública y renombrar las claves
sudo openssl rsa –inserver.key –out server.key.insecure
sudo mv server.key server.key.secure
sudo mv server.key.insecure server.key
(server.key=clave pública, server.key.secure=clave privada)
Crear el certificado (csr)
sudo openssl req –new –key server.key –out server.csr
Hace preguntas acerca del pais (ES), el estado (Soria), la localidad (Tardajos), CN (lamerced), sección (asi2), nombre (chema), email (jestepa@soria.uned.es)
Esto es lo que hay que mandar a la autoridad certificadora y te devuelve el certificado y una facturita de 200€ / año por usarla

Crear el autocertificado (crt)
sudo openssl x509 –req –days 365 –in server.csr –signkey server.key –out server.crt
Instalar el autocertificado
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private
Modificar el fichero de directivas
sudo nano /etc/apache2/sites-available/default-ssl
Comentar las líneas SSLCertificateFile y SSLCertificateKeyFile y añadir las líneas siguientes:
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
Reiniciar Apache
Borrar la caché del navegador Firefox (para ver el certificado)
Acceder al servidor seguro (https://192.168.0.2) Pulsar sobre “entiendo los riesgos, añadir excepción” y visualizar los datos del certificado

Proxy caché Squid

Instalación

# sudo apt-get install squid3
# sudo apt-get install squid3-cgi

Squid permite ELIMINAR las reglas de NAT de MASQUERADE.

Configuración
Se hace mediante modificaciones fichero /etc/squid3/squid.conf.
Se trata de modificaciones mínimas para una red local.
El rango de IPs de la LAN que se utiliza para el ejemplo es 172.16.0.0/24

Modificaciones del fichero de configuración /etc/squid3/squid.conf
Básicamente son tres líneas las que se deben modificar. El squid.conf es un fichero muy largo (más de 3000 líneas) así que es conveniente utilizar alguna herramienta de búsqueda de texto. No obstante copiar el fichero original a squid.conf.original, borrar /etc/squid3/squid.conf y teclear los siguientes valores
http_port 3128 transparent
icp_port 0
acl mi_red src 172.16.0.0/24
acl localnet src 127.0.0.1/32
http_access allow mi_red
http_access allow localnet
cache_dir ufs /var/spool/squid3 500 16 256
cache_mem 256 MB
maximum_object_size_in_memory 512 KB
maximum_object_size 4096 KB

Con estos valores

Se pueden modificar por los valores que se desee, pero ojo, almacenar objetos grandes (como ejecutables) puede llenar los 500MB del directorio con pocos elementos.

Reiniciar squid3:          
#sudo /etc/init.d squid3 restart

Abrir el cortafuegos:
#sudo ufw allow 3128

Configurar los navegadores

Para quienes quieran utilizar la características de aceleración del proxy, deben configurar el proxy en el navegador:
Firefox: opciones – Avanzado –Red – Configuración – Usar proxy en puerto 3128
Explorer: Herramientas – Opciones de internet – conexiones – configuración de la LAN – Servidor proxy
    (poner la dirección del equipo con squid y el puerto 3128)

Proxy Transparente

Si se desea no tener que configurar cada uno de los clientes para que usen el proxy se deben añadir las siguiente reglas: (supongo eth0 con la WAN y eth0:0 con la LAN y que el equipo con SQUID es el 192.168.11.2)

# sudo iptables -t nat -A PREROUTING -i eth0 –p tcp –m tcp --dport 80 -j REDIRECT --to-ports 3128
# sudo iptables -t nat -A PREROUTING -i eth0:0 –p tcp –m tcp --dport 80 -j DNAT --to-destination 192.168.11.2:3128

Notas:

Pruebas de caché

Pruebas que he realizado (descargando un fichero menor de 512 KB)
http://lamerced.no-ip.org:8080/asir2/practica_vacia.doc --> 327KB
Sin caché la velocidad fue aproximada a la primera lectura con caché (80KB/s) pero a partir de entonces las descargas se hacen a 10-100 MB/s

Gestionar la caché

Con el paquete squid3-cgi se instalan una serie de utilidades para la gestión de la caché. Se accede mediante (pongo el ejemplo para fermin)
http://lamerced.no-ip.org:8080/cgi-bin/cachemgr.cgi

Para poner contraseña al usuario que accede a la aplicación en squid.conf está la directiva cachemgr_passwd.
Por ejemplo  cachemgr_passwd secret shutdown hace que la contraseña sea secret y si se teclea mal sale del programa

Autentificación

Squid permite realizar autentificación de usuarios antes de permitirles el acceso a sus recursos, esto puede ser útil si queremos permitir el acceso a nuestro proxy desde el exterior o queremos restringir la salida a internet de los usuarios de nuestra red local. Una cosa que tendremos que tener en cuenta es que esto no se puede usar en conjunto con un proxy transparente, es decir, los usuarios tendrán que configurar los navegadores para usar un proxy.

Hay varios métodos de autentificación de usuarios, básicamente lo único que hace falta es un programa que ejecute un bucle infinito que acepte por la entrada estándar una línea con el formato "username password" y devuelva "OK" o "ERR" en caso de que sean o no correctos los datos. Dado que es muy sencillo este formato podemos crear nuestro propio autentificador.

En principio usaremos uno que trae por defecto el squid. Si estamos usando debian este fichero se encuentra en /usr/lib/squid3/ncsa_auth

Se modifica /etc/squid3/squid.conf. En la zona de External Programs del fichero de configuración (antes de acl)
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/usuarios

En la zona de access control list (acl) SE SUSTITUYEN (o comentan con #) las lineas de acl mi_red y http_access allow mi_red por las siguientes:
acl con_claves proxy_auth REQUIRED
http_access allow con_claves

En lugar de REQUIRED (solicitará login a todos los usuarios), podemos usar una lista separada por espacios de usuarios.

El fichero de usuarios se gestionará usando el comando htpasswd
# sudo cd /etc/squid3
# sudo htpasswd –c usuarios mortadelo (pide contraseña, le pongo filemon)

Se creará entonces el fichero usuarios con user:password_encriptado. Para los siguientes usuarios no hace falta poner el parámetro -c

phpSquidPass


Interfaz escrito en PHP con el que los usuarios de nuestro sistema podrán cambiar su contraseña sin tener que notificárselo al administrador. Este script no nos permitirá realizar una gestión como administradores de las cuentas, pero sí permitirá a los usuarios cambiar su contraseña. Esta utilidad GNU se puede descargar de:
http://sourceforge.net/projects/phpsquidpass/

Una vez descomprimido (tar -xzvf phpsquidpass-0.6.tar.gz) haremos lo que sigue:

cd /etc/squid
chgrp www-data auth_users         
chmod 660 auth_users              
chown proxy auth_users            

Editamos /etc/groups y añadimos al usuario www-data al grupo proxy. Por ejemplo:

proxy:x:13:www-data

Configuramos el fichero de logs del phpsquid:

cd /var/log/squid
touch squidauth.log                 #lo creamos
chmod 640 squidauth.log             #cambiamos los permisos
chown www-data squidauth.log        # El dueño del fichero será www-data
chgrp proxy squidauth.log           # y el grupo  proxy


Configuramos el phpsquidpass. En nuestro caso lo dejamos de la siguiente forma:

// See the docs/TRANSLATIONS file
$config['language'] = "en";
// Authentication files
// Multiple password files are now supported!
$config['auth_files'] = array("/etc/squid/auth_users");
// IPs allowed to change password
// 192.168.0.1               - Only this IP can change
// 192.168.0.0/255.255.0.0   - IPs from 192.168.0.1 to 192.168.255.254
// 192.168.0.0/16            - Same from 2
// 0.0.0.0/0                 - Everyone can change
$config['authip_range'] = array("192.168.0.0/255.255.0.0");
// Log actions by users?
// 0 - No
// 1 - Log only password changes
// 2 - Log password changes and when user put incorrect current passwords
$config['logging'] = "1";
// If you want logging support, write to what file?
// (Remember to give permissions like the password file)
$config['logging_file'] = "/var/log/squid/squidauth.log";
// Show plain passwords in the log? (Not recommended)
// If not, don't show any passwords in the log.
// 0 - No, 1 - Yes.
$config['logging_plain_pass'] = "0";
// How much characters to use in the passwords (Min and Max)
$config['charlength_min'] = 6;
$config['charlength_max'] = 20;
// Page title
$config['page_title'] = 'Venus Proxy - Change Password';
// Background Color
$config['page_bgcolor'] = 'white';
// Foreground Color
$config['page_fcolor'] = 'black';
? >

Windows 2008.- Servidor WEB

Instalación

Como todos los servicios de W2008, se procede mediante
Inicio - Herramientas Administrativas - Administrador del servidor – Funciones (boton derecho) – Servidor web (IIS).

En el asistente que se arranca procederemos a elegir los servicios de función que presenta por defecto. Al finalizar la instalación se puede acceder a la IP del servidor recién instalado.

Configuración del Servidor web

a) Administración:
b) Cortafuegos para servidor web
c) Directorios virtuales (no cuelgan del directorio raiz \Inetpub\wwwroot)
d) Directorios privados
e) Servidor seguro