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):
- /etc/apache2/apache2.conf configuración general
- /etc/apache2/ports.conf direcciones IP y puertos de escucha
- /etc/apache2/conf.d/ configuraciones locales
- /etc/apache2/envars variables de entorno
- /etc/apache2/mods-available/ y /etc/apache2/mods-enabled/
módulos disponibles y cargados (enlaces virtuales)
- /etc/apache2/sites-available/ y /etc/apache2/sites-enabled/
sitios virtuales disponibles y cargados (también mediante enlaces
virtuales)
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
- Quitar de la linea Options la palabra Indexes: no permite visualizar el contenido del directorio
- Añadir DirectoryIndex index.htm index.html index.php. Si no se
indica ninguna página web, muestra una de estas 3 (si existen, claro) y
en ese orden de preferencia
- Se indican los ficheros de errores y accesos, que, por defecto son
- /var/log/apache2/error.log
- /var/log/apache2/access.log
- Para que muestre un mensaje de error customizado (o una página
web creada al efecto) cuando no se encuentra un documento, detrás de la
especificación del fichero de accesos añadir una de estas dos directivas
- ErrorDocument 404 “Pagina no encontrada”
- ErrorDocument 404 /nonesta.htm
d) Directorios virtuales (en carpetas distintas a /var/www)
- Crear la carpeta y los ficheros (por ejemplo /home/chema/web/index.htm)
- Editar /etc/apache2/sites-available/default y añadir
- Alias /otro /home/chema/web
- <Directory “/home/chema/web/”>
- Options FollowSymLinks Multiviews
- Entrar en http://192.168.11.2/otro y visualizará la página debajo de web
- Funciona exactamente igual si en vez de la línea Alias /otro
/home/chema/web hacemos un enlace simbólico mediante sudo ln –s
/home/chema/web /var/www/otro
- Para borrar el enlace simbólico basta
con sudo rm /var/www/otro
e) Directorios personales de usuarios
- Habilitar el modulo userdir con sudo a2enmod userdir y reiniciar
Apache. (Para deshabilitar sudo a2dismod userdir).
- En
/etc/apache2/mods-enabled/userdir.conf se indica que los directorios
personales estarán en public_html
- Crear la carpeta /home/chema/public_html y dentro de ella un fichero index.htm
- Acceder a la página mediante http://172.16.0.150/~usuario
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)
- Crear la carpeta /var/wwwdaw2 y dentro de ella index.htm
- Crear el fichero de configuración del nuevo sitio (copiado de default)
- sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/daw2
- Editar el fichero recién copiado añadiendo después de SeverAdmin las directivas siguientes :
- ServerName daw2.no-ip.org
- DocumentRoot /var/wwwdaw2
- Cambiar donde ponga /var/www por /var/www/daw2
- … todo lo demás dejarlo como estaba el original de default …
- Crear un enlace simbólico en sites-enabled
- sudo ln –s /etc/apache2/sites-available/daw2 /etc/apache2/sites-enabled/daw2
- Reiniciar apache
- sudo /etc/init.d/apache2 restart
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
- Pone el puerto 3128 para squid
- No se comunica con otros servidores squid
- Define los equipos de la LAN
- Define el bucle local
- Permite acceso a la LAN
- Permite acceso al bucle local
- Pone en marcha la cache (configura el disco con 500MB de cache en
16 carpetas cada una de ellas con 256 subdirectorios)
- Da tamaño a la memoria caché (256 MB)
- Define el tamaño máximo de los objetos en memoria (512 KB)
- Define el tamaño máximo de los objetos en disco (4 MB)
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:
- Delante de dport, de to-ports y de to-destination hay un doble –
- Si se sustituye en las dos reglas 3128 por 80, conseguiremos que
sea cual sea la dirección tecleada en el navegador del cliente se abra
la página de inicio de Apache en el servidor ;-)
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:
- Inicio-Herramientas Administrativas-Administración de IIS-Default Site
- Documento predeterminado: poner sólo index.htm
- Directorio por defecto: menú derecha, Acciones, configuración
básica o configuración avanzada. Es c:\Inetpub\wwwroot. Borrar todo y
crear index.htm
- Examen de directorios (permitir listado de carpertas) Habilitar o deshabilitar
- Páginas de errores: modificar la 404 para redireccionar a www.v-espino.com
- Registro: los accesos y errores se registran en c:\inetpub\logs\LogFiles
b) Cortafuegos para servidor web
- Inicio-Herramientas Administrativas-Firewall
- Servicios de World Wide Web (http y https): habilitado
c) Directorios virtuales (no cuelgan del directorio raiz \Inetpub\wwwroot)
- Crear C:\otro\index.htm
- Acceder a la consola de administración de IIS – Default Web Site
– boton derecho – Agregar directorio virtual
- Ruta física: navegar hasta c:\otro
- Acceder mediante http://192.168.11.3/otro
d) Directorios privados
- Activar las características de acceso limitado
- Inicio – Herramientas administrativas – Administrador del
servidor – Funciones – Servidor web (IIS) – Servicios de función –
Agregar servicios de función –Seguridad . Marcar las opciones
- Restricciones IP y de dominio
- Restringir o permitir acceso por IP
- Crear c:\InetPub\wwwroot\privado\index.htm
- Inicio – Herramientas Administrativas – Administración de IIS
- Navegar por el menú de la izquierda hasta marcar privado
- Restricciones de direcciones IPv4
- Agregar entrada de permiso (o entrada de restricción)
- Controlar pidiendo usuario y contraseña
- Crear el usuario zipi con contraseña zipizipi
- Entrar en el Administrador de IIS. Navegar hasta el directorio privado
- Deshabilitar autenticación anónima y habilitar autenticación basica
- Para quitar a un usuario el permiso de acceso, navegar desde
Equipo en W2008 hasta privado. Botón derecho, Propiedades, Seguridad,
Editar, poner al usuario zipi y denegar los permisos. Ya no podrá
acceder al directorio privado
e) Servidor seguro
- Administrador de IIS
- Doble clic sobre el servidor. Certificados de servidor. Crear certificado autofirmado
- Sitios - Boton derecho - Agregar sitio
- Ruta física: c:\InetPub\seguro (Crear ese directorio con un fichero index.htm)
- Certificado: El creado en el punto anterior