servidor web apache

23
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.

Upload: negronazi

Post on 23-Dec-2015

240 views

Category:

Documents


2 download

DESCRIPTION

Manual de utilizacion del servidor web mas usado en el mundo, Apache2

TRANSCRIPT

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.