servidor web apache
DESCRIPTION
Manual de utilizacion del servidor web mas usado en el mundo, Apache2TRANSCRIPT
Servidor Web Apache Introducción:
Apache es posiblemente el servidor Web más utilizado en el mundo. Sus orígenes se remontan a
1995. Por esa época NCSA (National Center for Super Computing Applications) creó un servidor Web
que se convirtió en el más usado. Cuando se abandona el proyecto de NCSA, los propios usuarios
del mismo crearon un foro para poder compartir parches e información respecto al servidor. Surge
el Apache Group. El servidor Apache se crea, entonces, a partir del código fuente del servidor de
NCSA. La primera versión del servidor Apache surgió en Abril de 1995. Apache es un servidor flexible
y simple que se ejecuta en varias plataformas: Linux, UNIX, Windows.
La instalación necesaria depende del sistema operativo. Todas las distribuciones Linux cuentan con
un servidor Apache integrado en la propia distribución por lo cual solamente hay que seleccionar la
opción de instalar el servidor para que éste quede instalado y funcionando.
Instalación:
Para instalar Apache Web Server en la distribución de Linux Mint, se hace al igual que una
distribución de Ubuntu (esto porque Mint es basado en Ubuntu). Ingresamos al modo de súper
usuario y tecleamos el siguiente comando:
Luego seleccionamos instalación la instalación de LAMP, este es el acrónimo que se usa para
describir un sistema de internet que usa las siguientes herramientas: Sistema Operativo Linux,
Servidor Web Apache, MySQL/MariaDB gestor de base de datos, Perl/PHP/Python los lenguajes de
programación.
Esperamos un momento:
Configuramos una contraseña para MySQL:
Ahora verificamos que el Apache este correctamente instalado al escribir “localhost” en el browser,
nos tiene que aparecer la página por defecto del Apache en la distribución de Ubuntu, veamos:
Ahora procedemos a crear una página web personalizada para explicar más aspectos del Servidor
Apache.
La configuración de Mint (Ubuntu), por defecto, incluye:
Los archivos de configuración de Apache (.conf) en etc/apache2
El directorio raíz para los documentos (htdocs) en /var/ww
Primero trabajaremos en el directorio /var/www
Lo primero que hacemos es crear una carpeta con el nombre de nuestra página web, por facilidad,
en el directorio antes mencionado con el siguiente comando:
Mediante el comando “ls” verificamos la creación de la carpeta:
Ahora ingresamos a nuestra carpeta recién creada y mediante el comando: nano index.html creamos
un archivo (.html) con el nombre “index” donde desarrollaremos la interfaz de nuestra página web
piloto, en esta imagen podemos ver parte del código y sus comentarios, los comentarios aparecen
en el siguiente formato: <!--Esto es un comentario-->
Una vez finalizada nuestra página web piloto procedemos a trabajar en la configuración de Apache
en el directorio: etc/apache2
En el archivo apache2.con muestra toda la configuración del servidor apache, la mayor parte de las
cosas las dejaremos en su ubicación por defecto, pero se modificaran otras cosas en el directorio de
configuraciones del servidor, a continuación veremos los aspectos más relevantes de este archivo
de configuración:
Vista rápida:
Esta dirección es para obtener más
información sobre la configuración
En esta sección nos explica que Apache2 trabaja
de manera jerárquica con este archivo
“Apache2.conf” como cabecera que manda a
llamar al resto, también tiene otros archivos de
configuración como el “ports.conf” para asignar
que puertos va a escuchar el apache y más, los
“mods.conf” que son los módulos que tiene
disponible el Apache2, se ve además el archivo
“conf-enabled.conf” que son las configuraciones
que tiene activadas el apache2, de seguridad,
puertos, defaults, etc. Por último el “sites-
enabled” que los sitios web disponibles para ser
cargados por nuestro servidor, a continuación se
harán modificaciones en varios de estos archivos.
Es importante que se tengan en mente para tener
una idea clara que modificamos al añadir o quitar
cosas de los archivos o carpetas que les contienen.
Ahora vamos a ingresar a las configuraciones disponibles, nos dirigimos a la carpeta “sites-available”
y más específicamente leemos el archivo de configuración que se nos muestra de modelo para
habilitar un sitio web.
Al revisar el archivo “000-default.conf” vemos lo siguiente:
Archivo que nos
muestra cómo realizar
la configuración para
habilitar un sitio web
Este archivo muestra la
configuración SSL por defecto,
esto es para seguridad de
nuestro servidor, más adelante
vera esto.
Establece que se trabajara con
host virtual, y el puerto que el
servidor usa para identificarse
Aquí se especifica el
administrador y la ruta
donde se encuentra el
documento HTML que
creamos anteriormente
Aquí se especifica nuestro historial
de errores, siempre se recomienda
monitorearlo para no ser víctima
de un ataque
Ahora veremos los hosts que existen en nuestro apache2, en caso que se quieran añadir más hosts
de los existentes se deben especificar en este archivo, así como en el archivo de habilitación que
pongamos en la carpeta “sites-available” mediante la directiva “ServerName”. Por ahora
trabajaremos con el “localhost” y no modificaremos este archivo ya que no estamos usando más de
un host virtual. También se debe recordar que el “ServerName” debe tener un valor DNS valido para
funcionar, más adelante se realizara el servidor DNS y veremos más modificaciones a los archivos
de Apache2.
Ahora debemos crear una carpeta con el nombre de nuestro sitio web “grupo1” (Esto para
recordarlo fácilmente), en la carpeta “sites-available”, pero este archivo debe tener extensión
(.conf) para que pueda ser activado, veamos:
Una vez creado el archivo, procedemos a modificarlo mediante el siguiente comando:
En el archivo recién creado, siguiendo la configuración por defecto del servidor escribimos lo
siguiente:
Apache2 tomara la configuración escrita en este archivo y la escrita en el archivo general de
Apache2.conf para cargar nuestro sitio web con las características que le hayamos hecho.
Procederemos a activar nuestro sitio mediante los siguientes comandos:
Verificamos se hay creado el sitio mediante el comando “ls” y obtenemos:
Como podemos ver, nuestro sitio está ahora activo, verificaremos esto abriendo el browser y
escribiendo el nombre de nuestro servidor, en este caso es “localhost” (esto no es lo recomendado,
pero más adelante se desarrollara el servidor DNS que deberá dar un dominio a nuestro sitio).
Como podemos ver en la captura todo esta en orden, pero aun nos falta modificar unas cosas como
seguridad y probar que todo este en orden en nuestro servicio.
Para comprobar el funcionamiento del servidor web usaremos el comando “apache2ctl” este
comando es para controlar Apache2, podemos apagar el servicio, reiniciarlo, ver su status y muchas
cosas más, para ver todo lo que este comando puede hacer escribiremos en la terminal “man
apache2ctl” que es para ver el manual de este comando y veremos todas las opciones que tiene y
elegiremos unas cuantas para probarlas en nuestro sitio recién creado.
Para usar este comando escribimos: “apache2ctl + comando”
Veamos algunos de los comandos que tiene disponible:
Para probar nuestro sitio web usaremos los siguientes comandos: start y stop.
El servidor está apagado y no arroja ningún error, veremos qué pasa al encenderlo de vuelta:
Otra vez sin problemas, bien ahora pasaremos a la seguridad de nuestro sitio web.
SSL (Secure Sockets Layer)
SSL es un protocolo criptográfico de comunicación utilizado para garantizar la identidad y la
privacidad de las comunicaciones web. Técnicamente se corresponde con la capa de transporte del
Modelo ISO, por eso también es conocido como TLS (Transport Layer Security).
Funcionamiento:
Cuando el navegador solicita una página SSL al servidor le envía un mensaje “ClientHello”
con información de “handshake”. En él figuran los algoritmos de cifrado soportados, la
máxima versión de SSL soportada y varios números aleatorios que serán utilizados en la
comunicación.
El navegador sabe que una página es segura porque su URL establece el protocolo https
(P.ej. https://cajabadajoz.es).
El servidor responde con un mensaje “ServerHello” en el que elige los parámetros de la
comunicación entre los ofrecidos por el cliente.
Ahora que ya están de acuerdo, el servidor su certificado al navegador, generalmente del
tipo X.509.
Existe la posibilidad de que el servidor solicite al navegador su propio certificado. Esto
serviría para identificar al cliente. Pero no es lo habitual. En la comunicación SSL, solo está
identificado el servidor.
Por último, ambos negocian una clave secreta “master secret” que suele ser una clave
elegida por el navegador y cifrada por éste con la clave pública del servidor. Esta será la
clave que ambos utilicen en sus comunicaciones.
¿Cómo instalarlo?
La instalación de versiones anteriores a Apache 2 eran bastante complicadas. Ahora, con Apache 2,
la instalación es realmente sencilla. ¡No hay que instalar nada! Apache 2 ya incluye soporte para
SSL. Procedamos:
Paso 1: Activamos el modulo que trae Apache2 por defecto y reiniciamos el servicio:
Paso 2: Creamos un nuevo directorio para ssl
Paso 3: Creamos nuestro propio certificado SSL, cuando solicitamos un nuevo certificado, podemos
especificar cuanto tiempo deberá permanecer valido dicho certificado, al cambiar 365 por el
número de días que queramos, en este caso lo dejaremos para un año. Para nuestra practica
podemos crear un certificado propio con datos especulativos, lo más importante en el es nuestro
nombre DNS, pero como este se desarrollara más adelante usamos “localhost” ahora en la práctica
nosotros no creamos el certificado de seguridad, este se da a una empresa especializada para que
lo realice.
Paso 4: Ahora que tenemos todos los componentes requeridos del certificado lo siguiente por hacer
es preparar el virtual host para que muestre el nuevo certificado, abrimos el archivo de
configuración SSL:
Lo encerrado en rojo son cosas que no estaban en el archivo de configuración y se añadieron:
Paso 5: Ahora procedemos a activar la configuración que acabamos de crear mediante los siguientes
comandos:
Ahora verifiquemos que se haya realizado la conexión segura, al principio Mozilla Firefox mandara
un warning porque no se ha creado el DNS verdadero, además que usamos datos especulativos y es
un certificado expedido de nosotros hacia nosotros mismos, lo que genera dudas en el buscador,
pero si se le permite la excepción de seguridad, aparecerá nuestro sitio con conexión segura y
Mozilla no nos volverá a interrumpir. Listo tenemos una conexión segura con protocolo HTTPS.
En foros de Apache se nos da varios consejos de seguridad, mencionaremos e implementaremos
alguno de ellos pues son muchos:
1. Mantente al Día
Cada día se detectan nuevos tipos de ataques, problemas de configuración, agujeros de software,
etc. “Los Malos” están siempre al acecho y, desgraciadamente, siempre irán por delante. Es muy
difícil prevenir nuevos tipos de ataque que todavía no se han inventado. Lo que sí debe hacer un
buen administrador es mantenerse informado de los nuevos problemas de seguridad que se
detecten.
2. Protege los Ficheros de Configuración
Los ficheros de configuración de Apache, así como sus subdirectorios, sólo necesita leerlos root. No
hay porque dar permisos, ni de lectura, a ningún otro usuario. De hecho esto aparece en la
configuración por defecto de apache:
Como pueden ver
tenemos una
conexión segura con
el protoclo HTTPS
Si bien es cierto que restringe el acceso a directorios fuera del root del sitio, en esta configuración
por defecto existe un problema, es el hecho que los clientes web tendrán acceso de manera
indexada al resto de archivos que nosotros tengamos en el root de nuestro sitio. Aunque les cargue
la página que hayamos creado, si dejamos esto tal y como esta cualquier atacante puede ingresar al
resto de archivos que tengamos en la raíz de nuestro sitio, veámoslo mas claro en el siguiente
ejemplo, digamos que existe una carpeta llamada imágenes de donde el archivo (.html) obtiene sus
imágenes, digamos que se llama “images”, en la captura podemos ver que facilemente podemos
acceder a todas las imágenes desde el navegador sin ninguna restricción:
Para evitar que esto suceda deshabilitamos la opción “Options Indexes FollowSymLinks” en el
archivo de configuración anterior, una vez hecho esto nos negara el acceso al resto de carpetas que
tengamos en nuestro sitio, ahora el mensaje que el buscador cargara es el siguiente:
Perfecto, como podemos ver ahora no hay acceso a nuestra carpeta de imágenes, ni ninguna otra
que tengamos en la raíz de nuestro sitio, de esta manera nos aseguramos que el cliente web, solo
vea lo que nosotros le permitamos, esta opción se puede configurar de manera más amplia incluso
se puede añadir autenticación y usuario, todo esto lo permite la configuración del apache, es decir
que si en una determinada empresa existen dos áreas que se llamen “Tecnología” y “Recursos
Humanos”, puedo crear dos carpetas independientes para cada uno de ellos, donde habrán archivos
o información de interés de las respectivas áreas, asigno los usuarios y las contraseñas de
autenticación y ambas áreas de la empresa estarán bajo el mismo sitio web, pero no tendrán acceso
a archivos que no sean de sus respectivas áreas. Todo esto se consigue con la configuración del
Apache2, en nuestro caso no nos interesa que alguien acceda a más información de nuestro server
que la que muestra la página web, así que restringimos el acceso a todo lo demas.
Aun así este mensaje por defecto que carga el Apache2, presenta varias debilidades: el usuario no
está claro cuál es el error ni a que se debe, revela el sistema operativo que estamos usando y la
versión del servidor apache2 lo que hace a nuestro sitio vulnerable a ataques porque el malhechor
que vea esta información puede buscar la característica del sistema operativo y del servidor apache
y conocer así sus debilidades, volviendo así nuestro sitio vulnerable, así que es recomendable
cambiar el anuncio de error por defecto a algo que el usuario este familiarizado y que no arroje
ningún dato de nuestro servidor.
Esto no es difícil, existen diversa maneras de hacerlo, lo más recomendable es crear un archivo
(.html) propio de modo que solo se mande a llamar cuando ocurra algún error, en este caso es el
código 403 (acceso restringido) hay más códigos y cada uno se le debe crear su mensaje
personalizado. Procedemos a explicar cómo realizamos esto:
Ahora en la carpeta de nuestro sitio, en nuestro caso “grupo1” procedemos a crear un archivo
llamado: “.htaccess” donde pondremos la nueva dirección de nuestro mensaje de error
personalizado, en general la sintaxis es la siguiente: ErrorDocument <código de 3 digitos> <acción>,
se puede hacer para el resto de archivos de error del apache2, pero para fines demostrativos solo
usaremos el error 403, es decir acceso denegado, veamos la captura del archivo (.htaccess):
Como se puede verificar en la imagen, vemos que este archivo de configuración adicional se
encuantra en el root de nuestro sitio web, esto funciona de manera jerarquica, es decir que no
necesitamos añadir este archivo al resto de sub-directorios ya que esta configuración los afecta a
todos por igual, también se puede ver que el código html se encuentra en la raíz del sistema por
igual, asi que una vez personalizado el HTML y que hayamos realizado el archivo (.htaccess)
tendremos un mensaje por defecto personalizado en nuestras pantallas de la siguiente forma:
En la directiva AccessFileName
declaramos el nombre del archivo
que el apache2 buscara para
configuraciones adicionales
En esta línea prohibimos
que los archivos de
configuración adicionales
que hayamos creado se
han vistos por los
clientes.
Listo, así ya nadie puede ver el tipo de sistema operativo o servidor que estamos usando además
que alguno que otro usuario se puede gastar una risa.
3. Vigila los Logs
Hay que poner los sistemas de análisis que avisen de las situaciones de los logs y se de buscar tiempo
para echarles un vistazo de vez en cuando. Lo ideal sería crear tus propios programas de análisis y
añadieras reglas para detectar situaciones de riesgo.
Lo ideal también es cambiar la dirección de la carpeta de log para que le sea más difícil a un atacante
encontrarla y borrarla, si la dejamos tal y cual está en la configuración por defecto somos blanco
fácil así que procedemos a cambiarla:
Como podemos ver la carpeta por defecto es: /var/log/apache2/error.log
Hacemos el cambio a una carpeta aleatoria que conozcamos, digamos la carpeta TMP de la carpeta
VAR:
Listo como podemos ver en la siguiente imagen, hemos cambiado la ubicación por defecto de
nuestros logs, esto se puede hacer con otra carpeta cualquiera, se eligió esta de manera aleatoria:
También se puede personalizar el formato de nuestros logs en el apache2.conf y otras cosas más
referente a estos, por ahora solo vamos a quedarnos con el cambio de carpeta.
4. Haz Copias de Seguridad
A veces lo más importante de nuestro servidor es la información que contiene, si un atacante nos
bota el servicio, ese no puede ser el único daño que este nos haga sino que también puede eliminar
la información que tengamos, además de robar lo que se le antoje en nuestra computadora. Por
esto se recomienda hacer uso de una máquina virtual tal como lo hacemos nosotros y prohibir que
la maquina host comparta sus archivos con la maquina guest donde tendremos nuestro servidor,
además el programa VMWARE trae una opción para cifrar la máquina virtual, estas son unas
ventajas que ofrece trabajar con máquina virtual. En nuestro caso guardaremos las cosas más
importantes en la maquina host, como archivos de configuración, información, etc. De esta manera
si el atacante destruye la información en la máquina virtual, ya se cuenta con una copia de seguridad
en la maquina host.
Archivos compartidos deshabilitados
Tenemos al Guest completamente
aislado del Host, donde
mantendremos nuestras copias de
seguridad.
Código HTML
En los pasos anteriores trabajamos con un simple código HTML genérico para comprobar que
nuestro servidor estaba funcionando correctamente y si cargaba todo lo que le pedíamos como
imágenes, letras, etc. Bien para realizar una página web más profesional o más llamativa se cuenta
con muchas herramientas de diseño, en nuestro caso usamos el Dreamweaver CC de Adobe que nos
permite diseñar la página web a nuestro gusto y este programa genera el código necesario para las
opciones que le pongamos, como tamaño de letras, imágenes, color, vínculos, etc. Es un programa
sencillo de usar y muy popular.
En el diseño de nuestra página web se crearon 4 archivos HTML de modo que todo estuvieran en el
root de nuestro sitio y que se pudiera trabajar de con vínculos entre los mismos y el servicio de
correo.
La interfaz HTML de nuestro sitio quedo de la siguiente manera:
Como se puede ver nuestra máquina virtual está cifrada y VMWARE nos ofrece muchas opciones
de restricción, ahora podemos guardar las copias de seguridad con toda tranquilidad en nuestra
maquina Host y sin importar que eliminen los archivos del Guest, siempre podemos copiarlos de
nuevo con toda tranquilidad.