viernes, 29 de mayo de 2015

Presentación de trabajos de los alumnos. Lunes 25 de mayo

El lunes 25 de mayo, en la sesión de teoría, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Seguridad en Apache"

A día de hoy existen más de 949 millones de páginas web.Varias son las soluciones bajo las cuales albergar dichas Webs, pero sin duda, una de las más usadas es Apache. Para poder asegurar su accesibilidad de manera segura y continua, hemos de ser conscientes de todos aquellos eventos que puedan afectar a la seguridad del servidor que alberga nuestra Web. Y es por ello que, de manera general, se puede encontrar en este trabajo varias recomendaciones a nivel de prevención para mantener nuestro sitio seguro, así como herramientas y medidas a tomar para poder analizar y mitigar posibles ataques respectivamente.

La memoria está en:
 https://github.com/miguelangelrdguez/swap1415/tree/master/Trabajo-Securizar_Servidor_Apache-


"Seguridad en Servidores"

Trabajo sobre seguridad en servidores, tocando ataques basicos (DDoS, SQL Inyection) y ejemplos de como se han usado para ataques, explicando un poco kali linux y algunas herramientas (nitko/httprint), programa fail2ban para defenderse de los ataques de fuerza bruta, y finalmente una pincelada de que otros temas puede abarcar la seguridad.

La memoria está en:
 https://github.com/ramako/SWAP-2015/tree/master/Trabajo


"¿Qué es memcached y cómo utilizarlo?"

Memcached es un sistema que permite almacenar datos en la memoria RAM para utilizarlos como una memoria caché. Este sistema se basa en una tabla hash distribuida entre varios equipos. El modo de utilización se basa en 3 pasos:
 1. Comprobamos si los datos que necesitamos están ya almacenados en memcached.
 2. En caso afirmativo los devolvemos, en caso negativo buscamos los datos en la base de datos.
 3. Almacenamos los datos en memcached.
Está disponible solo para sistemas Linux y se instala desde los repositorios oficilaes. El sistema es ampliamente utilizado por empresas como Twitter, Facebook, Wikipedia, etc.


La memoria está en:
 https://github.com/franexposito/SWAP2015/tree/master/trabajo


"Máquina virtual preparada para ponerla en cualquier hardware anfitrión"

En este trabajo se muestra cómo hacer una máquina virtual preparada para ponerla en cualquier hardware anfitrión y que comience a hacer de servidor web. La idea es que en cualquier máquina con conexión a internet y el software de virtualización se lanza el servidor virtualizado (un clon de nuestro servidor en producción) y se podría sustituir a nuestra máquina en pocos minutos. En el trabajo se muestra cómo realizar esta configuración con diferentes tipos de software de virtualización: VirtualBox, VMWare, QEMU y Windows Virtual PC.

Una vez tenemos la máquina virtual funcionando, debemos conectarla con el host para que reciba las peticiones HTTP. Para ello, lo primero es hacer que host y guest se vean entre sí, lo cual podemos conseguirlo tanto con un adaptador host-only como con un bridge. Finalmente, hemos de configurar el host para que redirija las peticiones web que le llegan a él hacia el servidor virtual, que es quien debe servirlas.


La memoria está en:
 https://github.com/isma94/SWAP2015/tree/master/TrabajoFinal


"Seguridad en Servidores Web"

Este trabajo recoge una primera toma de contacto sobre la seguridad en servidores web. En él se tratan los siguientes aspectos:
  • Los ataques más usados y efectivos en la actualidad sobre servidores web: Ataques DDOS, ataques de fuerza bruta, ataques de inyección SQL, ataques XSS y ataques Phishing.
  • Tipos de atacantes: White Hack y Black Hack.
  • Búsqueda de vulnerabilidades y la formas que existen para analizarlo, a través de los software más utilizados: Nikto, Httpanalizer Archilles, ZAP Web Crawlers, Nmap + NSEVulscan, OpenVas, Nessus.
  • Técnicas que podemos usar para prevenir todo tipo de ataques y que nuestro servidor quede inservible, o lo que sería aún peor, que extrajeran información privada: Control de los archivos publicados, ocultar información, interfaz de entrada común y módulos, autenticación y autorización, comunicación HTTPS y autenticación con certificados de cliente, monitorización.
  • Posibles soluciones para muchos de estos ataques.

La memoria está en:
 https://github.com/AntonioPozo/swap1415/tree/master/Trabajo

lunes, 25 de mayo de 2015

Presentación de trabajos de los alumnos. Jueves 21 de mayo

El jueves 21 de mayo, en la sesión de teoría (y viernes 22 en la de prácticas), se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Ataques Buffer Overflow e Inyecciones SQL"

En este trabajo se lleva a cabo una pequeña introducción a ataques buffer overflow e inyecciones SQL. Se incluyen repasos de conceptos clave necesarios para entender completamente ambos ataques y ejemplos didácticos e intuitivos para afianzar los conocimientos adquiridos.

La memoria está en:
 https://github.com/analca3/SWAP1415/tree/master/Trabajo%20asignatura


"Medidas de seguridad de un servidor Apache en Ubuntu server"

En el trabajo se presentan una serie de medidas de seguridad básicas, muy recomendables para cualquier persona que tenga operativo un servidor Apache. Dichas medidas se aplican añadiendo directivas en el archivo de configuración apache2.conf (En Ubuntu) y httpd.conf (otras distribuciones Linux). Además se presenta un tutorial básico del módulo mod-evasive que se utiliza para evitar ataques de denegación de servicio de pequeña magnitud y otro tutorial sobre como proteger directorios o archivos mediante un usuario y una contraseña, utilizando los ficheros .htaccess y .htpasswd y el comando de Unix: htpasswd.

La memoria está en:
 https://github.com/santidediego/swap1415/tree/master/Asegurar%20un%20servidor%20Apache


"Implementar los algoritmos de balanceo en Nginx y HaProxy"

En este trabajo se presentan algunos de los algoritmos más utilizados en el balanceado de carga por software, y se prueban con Siege en dos software diferentes: Nginx y HaProxy, en una granja web virtualizada de 4 servidores con software Ubuntu Server 12.04, en las que no todas van a tener las mismas especificaciones. Posteriormente, se hace una comparativa sobre los resultados obtenidos."

La memoria está en:
 https://github.com/AnabelGRios/swap1415/blob/master/Trabajo_Clase/Trabajo.md

miércoles, 20 de mayo de 2015

Presentación de trabajos de los alumnos. Lunes 18 de mayo

El lunes 18 de mayo, en la sesión de teoría, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Laboratorio de una granja web"

En este trabajo se ha pretendido, crear desde cero y con software libre un conjunto de servidores capaces de dar soporte a una red empresarial con las necesidades básicas para cualquier mediana o gran empresa de hoy en día. En él se detalla cómo acometer la tarea de crear y gestionar un CPD pequeño para dar servicios tan comunes como WWW, FTP, DNS, BALANCEO DE CARGA y por supuesto los servicios de gestión y mantenimiento del mismo, como pueden ser servicios de BBDD, Copias de seguridad, Replicado de datos para dar un soporte de alta disponibilidad, monitorización, etc.

Para desarrollar el laboratorio se han utilizado servidores virtuales para ahorrar en dispositivos físicos, de ahí el nombre del laboratorio, "Creación y Mantenimiento de un Mini-CPD Virtual".

La memoria está en:
 https://github.com/elsudano/swap1415/blob/master/TrabajoTeoria/Laboratorio_Granja_Web.pdf
y la presentación utilizada en:
 https://github.com/elsudano/swap1415/blob/master/TrabajoTeoria/Transparencias.pdf


"COMPARACIÓN DEL HARDWARE PARA SERVIDORES WEB IBM, HP, Dell y Fujitsu"

En este trabajo se lleva a cabo una comparación de los diversos productos hardware que ofrecen varios fabricantes en el sector de servidores (en este caso, IBM, DELL, HP y FUJITSU).

La memoria está en:
 https://github.com/ppruiz/swap


"Servidor de Correo en VM Azure"

Este trabajo presenta los primeros pasos con la plataforma Microsoft Azure, creando y configurando una máquina virtual Linux, donde instalaremos un servidor de correo usando postfix, courier y squirrelmail como WebMail.

La memoria está en:
 https://github.com/odrajaf/swap1415/blob/master/Trabajo%20Final/Trabajo%20Swap%20Servidor%20de%20Correo.pdf


"Montar un seedbox con software open source"

Este trabajo trata acerca de cómo montar nuestro propio Seedbox juntando en el mismo sistema un cliente de descarga de Torrent (Deluge), un navegador de archivos vía web (Pyd.io) y webmin; todo ello instalado en un servidor VPS con Ubuntu 12.04 que permanece online las 24 horas del día..

La memoria está en:
 https://github.com/koji3/Swap2015/blob/master/trabajo_final/MemoriaTrabajo.md

jueves, 14 de mayo de 2015

Tema 8 de teoría: Requisitos hardware y software en servidores web

La granja web necesita varios componentes de software y hardware para poder funcionar.

En cuanto al hardware, cabe destacar la necesidad de instalar y configurar servidores, dispositivos de almacenamiento y conexiones de red.

Los servidores web no necesitan una capacidad de procesamiento especialmente alta, ya que los servicios HTTP no consumen demasiada CPU. La cantidad de memoria RAM es más importante en este tipo de máquinas. Al adquirir el hardware, debemos elegir componentes para minimizar la latencia de disco, así como CPU y RAM que excedan las necesidades de ese momento.

En cuanto al almacenamiento, se pueden evitar latencias usando discos de estado sólido de alta velocidad (para hacer caching) y utilizar dispositivos como NAS (Almacenamiento conectado a la red) o una SAN (Área de almacenamiento en red) y exportando el espacio de almacenamiento usando protocolos como NFS, Samba o Lustre.

Por último, los nodos del clúster pueden conectarse mediante una simple red Ethernet con tarjetas de red comunes, o utilizarse tecnologías especiales de alta velocidad:
  • Ethernet (Fast, Gigabit): Son las redes más utilizadas en la actualidad, debido a su relativo bajo coste. Su tecnología limita el tamaño de los paquetes. No demasiado eficientes. La latencia de estas tecnologías está en torno a los 30 a 100 μs.
  • Myrinet: Su latencia es de 99 a 10 μs, y su ancho de banda es de 2 a 10 Gbit/s.
  • Es la red de baja latencia más utilizada en la actualidad.
  • InfiniBand: estándar desarrollado específicamente para realizar la comunicación en clústers.
  • SCI: Latencia teórica es de 1,43 μs y ancho de banda de 5333 Mbit/s bidireccional.


Determinar las necesidades de un servidor
es muy complejo: El diseño debe permitir el escalado del sistema y debemos realizar continuamente monitorización para determinar cuándo y dónde escalar el sistema.

Para planear la capacidad del servidor (necesidades en cuanto a hardware y software) no existe una fórmula. Antes de nada debemos determinar los requisitos reales del sitio. Hay que hacer un primer estudio, instalar y configurar, y una vez esté en funcionamiento, monitorizar constantemente el sistema para determinar si funciona correctamente.

Hay tres tareas que pueden ayudar a determinar los requisitos de hardware del sistema:
  • Estimar el hardware en función de las necesidades de la empresa.
  • Utilizar un software de monitorización para buscar cuellos de botella en la configuración inicial.
  • Monitorizar el sistema durante todo el tiempo que esté en uso.
Para comprobar el funcionamiento de cada configuración que apliquemos, debemos realizar tests de carga con benchmarks (apache benchmark, siege, JMeter, httperf, openwebload, etc) o poner el sistema en producción de forma controlada (accesible a betatesters) para monitorizar y analizar su comportamiento.

La información que recopilemos monitorizando durante este proceso nos permitirá determinar qué contenido es el más demandado (hacerlo eficiente) y hacer análisis del tipo de usuario y de los patrones de navegación (para el depto marketing). Además, podremos identificar fallos (errores tipo 404 ó 500) y descubrir posibles ataques.

Existen soluciones de hardware propietario de diferentes vendedores, como Dell, HP o IBM, y además, otras grandes empresas diseñan sus propios sistemas (hardware y software), como es el caso de Facebook con Open Compute, o Google.

Por otro lado, está la aproximación de Microsoft, que echa mano de desarrolladores de hardware (Dell, HP) para montar sus CPDs, o Yahoo! que tradicionalmente ha mejorado o incrementado sus servicios adquiriendo nuevas empresas e integrándolas en sus sistemas.


Finalmente, en cuanto al software necesario para configurar un servidor web de altas prestaciones, cabe destacar los siguientes tipos de programas, principalmente:
  • Sistema operativo: Actualmente existe gran variedad de sistemas operativos que se utilizan para montar servidores web de altas prestaciones:
    • GNU/Linux
    • Unix: Solaris, HP-UX, AIX
    • Windows: NT, 2000 server, 2008 server, 2010 server
    • Mac OS X Server (xgrid)
    • FreeBSD
  • Servidor web: Se pueden instalar en casi cualquier sistema operativo. Los más conocidos:
    • nginx
    • apache
    • Internet Information Services (IIS)
    • cherokee
    • Tomcat
    • Otros servidores, más simples pero más rápidos, son:
    • lighttpd
    • thttpd
Además, existen soluciones para implementar servicios web sumamente eficientes. Se trata de una solución muy diferente a lo que conocemos que se puede hacer con Apache:
    • node.js (JavaScript)
    • Tornado (Python),
    • Twisted (Python),
    • EventMachine (Ruby),
    • Scale Stack (C++),
    • Apache MINA (Java)
    • Jetty (Java)
  • Cortafuegos: Implementados en hardware o software. Cada sistema operativo tiene su propio cortafuegos incluido en la instalación básica:
    • Firestarter
    • ZoneAlarm
    • Uncomplicated Firewall
    • Gufw
    • PF (OpenBSD)
    • ipfw
    • iptables
    • ipfilter
  • Balanceadores de carga: Cada sistema operativo tiene soluciones (gratuitas o de pago):
    • HaProxy
    • Pound
    • Varnish
    • NginX
    • Lighty
    • Apache
    • NLB
  • Medir prestaciones: Basadas en interfaz de línea de comandos y de interfaz gráfica. Entre las más utilizadas destacan:
    • Apache Benchmark
    • httperf
    • openwebload
    • the grinder
    • OpenSTA
    • JMeter
    • Siege
  • Software para monitorización: Necesario para recoger información sobre la actividad del sistema a todos los niveles:
    • top
    • vmstat
    • iostat
    • sar
    • monitores de actividad (gráficos) del sistema operativo
    • Web Farm Framework (Microsoft)
    • Lithium5 (OS X server)
    • Apple Mac OS X Server Monitoring Library
    • NetApp
    • Munin
    • Nagios
    • GANGLIA

En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
  • Ejercicio T8.1: Buscar información sobre tipos de conexiones de red utilizados especialmente en arquitecturas de servidores web de altas prestaciones.
Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".

Comenzamos la Práctica 5

A la hora de hacer copias de seguridad de nuestras bases de datos (BD) MySQL, una opción muy común suele ser la de usar una réplica maestro-esclavo, de manera que nuestro servidor en producción hace de maestro y otro servidor de backup hace de esclavo. Así podemos hacer copias desde el servidor de backup sin que se vea afectado el rendimiento del sistema en producción y sin interrupciones de servicio.

Tener un servidor de backup con MySQL actuando como esclavo de replicación es una solución asequible, que añade fiabilidad ante fallos totales del sistema, y que no consume demasiado ancho de banda en un sitio web de tráfico normal, además de que no afecta al rendimiento del maestro en el sistema en producción.

Los objetivos concretos de esta práctica son:
  • Clonar manualmente BD entre máquinas (copiando archivos de copia de seguridad mediante ssh).
  • Configurar la estructura maestro-esclavo entre dos máquinas para realizar el clonado automático de la información.
Para la realización de la práctica, crearemos una BD en MySQL e insertaremos algunos datos. Así tendremos datos con los cuales hacer las copias de seguridad.

En la primera parte de la práctica replicaremos manualmente una BD MySQL con mysqldump. Esta herramienta forma parte de los programas de cliente de MySQL, que puede ser utilizado para generar copias de seguridad de BD. Puede utilizarse para volcar una o varias BD para copia de seguridad o para transferir datos a otro servidor . EL volcado contiene comandos SQL para crear la BD, las tablas y rellenarlas.

La opción anterior funciona perfectamente, pero es algo que realiza un operador a mano. Sin embargo, MySQL tiene la opción de configurar el demonio para hacer replicación de las BD sobre un esclavo a partir de los datos que almacena el maestro.

Se trata de un proceso automático que resulta muy adecuado en un entorno de producción real. Implica realizar algunas configuraciones, tanto en el servidor principal como en el secundario.

En la segunda parte de la práctica debemos seguir el proceso detallado en el guión de la práctica 5 para configurar dos máquinas de forma que una haga de maestro y la otra de esclavo.

viernes, 8 de mayo de 2015

Tema 7 de teoría: Almacenamiento de datos

El sistema de almacenamiento de datos resulta clave en un sistema web de altas prestaciones, ya que es la parte del sistema donde se guarda la información, ya sea en una BD o en archivos.

Así pues, hay que diseñarlo teniendo en mente ciertos requisitos en cuanto a escalabilidad. Como vimos en un tema anterior, podemos mejorar las prestaciones de los sistemas de almacenamiento:
ampliación vertical (adquirir un mejor hardware más rápido y actualizado)
ampliación horizontal (replicar el almacenamiento entre varios servidores); puede resultar más efectivo en cuanto a la escalabilidad

Factores a tener en cuenta al diseñar la arquitectura de BD:
  • El número de sesiones concurrentes en la BD puede afectar al rendimiento de la granja web completa (conexiones costosas).
  • Una gran cantidad de accesos a la BD por cada petición HTTP puede sobrecargar la conexión de red entre los servidores web y de BD.
  • Las búsquedas que devuelvan resultados muy grandes afectarán al rendimiento de CPU, almacenamiento y red.
  • El tamaño total de la BD determinará el espacio para almacenamiento, y el tiempo necesario para hacer copias de seguridad y restaurarlas.
  • Conviene utilizar hardware redundante para los servidores.
Una BD se podrá escalar en el futuro si desde el principio se instaló hardware con capacidad de ampliación (CPU, memoria, etc) y se configuró el software de forma adecuada. En ese sentido, se recomienda una arquitectura de BD basada en un cluster.


Todos los datos (archivos o BD) están almacenados en algún tipo de soporte. Una configuración muy adecuada para este tipo de dispositivos es el RAID.

RAID (conjunto redundante de discos independientes) es un sistema de almacenamiento que usa múltiples discos duros entre los que se distribuyen o replican los datos, ofreciendo mayor integridad, mayor tolerancia a fallos, mayor rendimiento y mayor capacidad. La idea es combinar varios dispositivos en un conjunto que ofrece mayor capacidad, fiabilidad y velocidad que un solo dispositivo de última generación más caro.

Un RAID por hardware es mucho más rápido que uno configurado por software, pero éste es mucho más flexible, ya que permite, p.ej., construir RAID de particiones en lugar de discos completos.

Hay diversos métodos de almacenamiento, llamados niveles, con diferente complejidad:
  • RAID 0: Conjunto dividido
  • RAID 1: Conjunto en espejo
  • RAID 5: Conjunto dividido con paridad distribuida
  • RAID 10 o RAID 1+0: División de espejos
Las configuraciones RAID tienen las siguientes ventajas (en general):
  • Permite acceder a los datos aunque falle un disco.
  • Puede mejorar el rendimiento de ciertas aplicaciones (para archivos grandes mantiene tasas de transferencia altas).
Sin embargo, hay que tener en cuenta que:
  • No protege los datos (p.ej. por virus).
  • No simplifica la recuperación de un desastre.
  • No mejora el rendimiento para todas las aplicaciones.
  • No facilita el traslado del almacenamiento a un sistema nuevo.

Finalmente, en el tema hemos visto tres tipos de sistemas de almacenamiento especializado: SSA, NAS, SAN.

Arrays de almacenamiento compartido: SSA
  • Dispositivos con unas especificaciones y herramientas propietarias de cierta empresa.
  • Posee una interfaz para conectar los discos a las controladoras (normalmente SCSI).
  • Número limitado de puertos para hacer la conexión entre servidores y almacenamiento.
  • Se suele usar para disponer del almacenamiento necesario para archivos y BD en clusters.


Área de almacenamiento en red: SAN
  • Conjunto de dispositivos interconectados (discos, cintas, etc.) y servidores conectados a un canal de comunicación e intercambio de datos común (concentrador de alta velocidad).
  • Algunos de los dispositivos pueden ser SSA y NAS.


Almacenamiento conectado a la red: NAS
  • Conjunto de discos organizados en un dispositivo de red con IP y que puede conectarse a una red Ethernet.
  • Utilizando algún protocolo, como Internetwork Packet Exchange (de Microsoft), NetBEUI (de Microsoft), Network File System (NFS, de Sun) o IPE (de Novell).
  • Aparece como otro servidor más en la red.


En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
Ejercicio T7.1:
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 0 a partir de dos discos de 100 GB y 100 GB?
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 0 a partir de tres discos de 200 GB cada uno?

Ejercicio T7.2:
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 1 a partir de dos discos de 100 GB y 100 GB?
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 1 a partir de tres discos de 200 GB cada uno?

Ejercicio T7.3:
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 5 a partir de tres discos de 120 GB cada uno?

Ejercicio T7.4:
Buscar información sobre los sistemas de ficheros en red más utilizados en la actualidad y comparar sus características. Hacer una lista de ventajas e inconvenientes de todos ellos, así como grandes sistemas en los que se utilicen.
Configurar en una máquina virtual un servidor NFS. Montar desde otra máquina virtual en la misma subred la carpeta exportada y comprobar que ambas pueden acceder a la misma para lectura y escritura.
Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".


Tutoriales con los que aprender a configurar dispositivos RAID bajo Linux, Windows y OS-X:
Instalación Ubuntu server con RAID1
http://www.youtube.com/watch?v=DS4uKJ9pfnk
Instalación ubuntu server 12.04 LTS precise pangoline con RAID 1 software
http://www.youtube.com/watch?v=y17EfNs0TBc

Como crear un RAID 1 en Windows
http://www.youtube.com/watch?v=g5I-1IXgwRo
Raid 1 - Sincronización espejo en Windows Server 2008
http://www.youtube.com/watch?v=k92yKphhKYE

Instalación y configuración RAID de dos discos duros en un Mac PRo
http://www.youtube.com/watch?v=O5VuJSRjLT8
Xserve RAID Install
http://www.youtube.com/watch?v=WxsQ2Y1iW7w