Instalar y Renovar Certificados SSL LetsEncrypt – Certbot en Debian (Apache2)

EL presente instructivo tiene como finalidad la instalación de certificados SSL LetsEncrypt a través de Certbot para un website bajo Apache2, todo esto en GNU/Linux Debian.

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Se debe contar con instalación de Apache2
  • Se debe contar con un dominio “juantrucupei.com.ve”

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 9.0 (actualmente estable)

Aplicaciones:

  • certbot 0.10.2-1
  • python-certbot-apache 0.10.2-1

Instalación de Paquetes:

root@server:/# aptitude install -y certbot python-certbot-apache

Configuración:

1. Generar un certificado para Apache2

root@server:/# certbot --authenticator standalone --installer apache -d juantrucupei.com.ve \
--pre-hook "service apache2 stop" --post-hook "service apache2 start"
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Running pre-hook command: service apache2 stop
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for juantrucupei.com.ve
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem
Running post-hook command: service apache2 start
Created an SSL vhost at /etc/apache2/sites-available/000-default.conf_original-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default.conf_original-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default.conf_original-le-ssl.conf

Continuar leyendo “Instalar y Renovar Certificados SSL LetsEncrypt – Certbot en Debian (Apache2)”

Anuncios

Autenticación Apache2 (WebService) por Certificado SSL

El presente instructivo tiene como finalidad demostrar un ejemplo práctico de configuración de servidor Webservice con autenticación mediante Certificados SSL.

Esto autenticación permitirá consultar una página web, sólo aquellos clientes que tengan un certificado Válido y activo.

Puntos a Tratar en el Instructivo:

  • Punto#1. Crear una autoridad certificadora (CA)
  • Punto#2. Generar las llaves autofirmas de la (CA)
  • Punto#3. Generar llaves del servidor WEB
  • Punto#4. Generar solicitud de firma (CA) de certificado SSL del servidor WEB
  • Punto#5. Firmar (CA) certificado SSL para servidor web
  • Punto#6. Adecuar servidor WEB para uso conexión segura (HTTPS)
  • Punto#7. Generar llaves Clientes
  • Punto#8. Generar solicitud de firma (CA) de certificados para la conexión de los clientes
  • Punto#9. Firmar (CA) certificados para la conexión de los clientes
  • Punto#10. Adecuar servidor WEB para recibir sólo conexiones que posean certificados(SSL) válidos
  • Punto#11. Revocar certificados de los clientes
  • Punto#12. Adecuar servidor WEB para verificar los certificados revocados

Si sólo desea generar un certificado SSL para servidor WEB, puede leer el instrutivo en el siguiente enlace: Generar Llaves OpenSSL 2048 bits. Certificado para SSL Web

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Se debe tener instalado el aplicativo openSSL y servidor WEB apache en su versión 2.4

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 9.0 (actualmente estable)

Para el ejemplo se cuenta con:

– Un servidor para la configuracion de la Autoridad Certificadora (CA)

  • IP: 192.168.1.1
  • hostname: serverCA

– Un servidor para la configuracion del servidor WEB

  • IP: 192.168.1.2
  • hostname: serverWEB

– Un servidor para la configuracion del cliente(CA)

  • IP: 192.168.1.3
  • hostname: cliente

Nota: Las funcionalidades Autoridad Certificadora (CA) y Servidor WEB, pueden ser instaladas y configuradas en un mismo servidor, pero por medidas de seguridad se sugiere dividirlas.
Continuar leyendo “Autenticación Apache2 (WebService) por Certificado SSL”

Tips Seguridad Servidor Apache2 – Hardening Secure Apache Web Server

El presente instructivo tiene como finalidad mostrar algunas recomendaciones de configuraciones que pueden ser aplicadas en servidor web apache2 para su protección.

El presente instructivo ha sido actualizado y es aplicado perfectamente a servidor Web Apache versión 2.4

Aplicaciones o configuraciones complementarias:

Recomendaciones a nivel de sistema operativo:

1. Es algo complicado establecer un estandar para el particionado de un servidor, siempre abrá variables que no dependerán de los administradores. A continuación un ejemplo de lo que podría ser un particionado típico para un servidor WEB:

Particionado base:

- /boot -> 500MB -> EXT4
- /swap -> 5GB 

Particionado LVM:

- /raiz -> 10 GB  -> EXT4
- /home -> 5GB -> EXT4
- /usr -> 5GB -> EXT4
- /usr/local -> 5GB -> EXT4 
- /opt/www -> 5GB -> EXT4
- /var/log -> 10GB -> EXT4
- /tmp  -> 5GB -> EXT4

2. Cambiar la ruta del directorio por defecto (/var/www/html) destinado por Apache(2.4) para alojar los website:

2.1 Crear una nuev a ruta:

admin@servidor:/$ sudo mkdir -p /opt/www/html

2.2 Efectuar cambios en Apache2:

Archivo configuración de Apache2 “/etc/apache2/apache2.conf”:

<Directory /opt/www/html/>
	Options -Indexes -FollowSymLinks -ExecCGI +SymLinksIfOwnerMatch
	AllowOverride None
	Require all granted
</Directory>

Archivo configuración del site “/etc/apache2/sites-enabled/000-default.conf”:

DocumentRoot /opt/www/html

3. Se recomienda efectuar cambios en las opciones de montaje del directorio “/opt”, habilitando las siguientes opciones:

  • -nodev: Impide la interpretación de los dispositivos especiales o de bloques del sistema de archivos
  • -nosuid: Bloquea el funcionamiento de suid, y sgid bits. suid permite a los usuarios comunes ejecutar binarios con privilegios concedidos temporalmente
  • -noexec: No permite la ejecución de binarios que se encuentren en el sistema de archivos. Muy pendiente con el código o aplicativo que se utilizará con el servidor apache, ya que si tienen un binario, el mismo no podrá ser ejecutada

Ejemplo de una entrada en fstab:

/dev/mapper/VolGroup-lvsrv /opt   ext4   nodev,nosuid,noexec   0    2

Recomendaciones a nivel de aplicativo Apache 2.4
Configuración

Evita la búsquedas de DNS para que los nombres de host se pueden registrar

1. Editar archivo de configuración de apache2:

admin@servidor:/$ sudo vim /etc/apache2/apache2.conf

Continuar leyendo “Tips Seguridad Servidor Apache2 – Hardening Secure Apache Web Server”

Dimensionamiento (Tunning) Apache2 prefork (+PHP5) Maxclients

La presente tiene como finalidad presentar un ejemplo práctico de como calcular el valor de Maxclients en Apache2 Prefork con PHP5.

Aplicaciones o configuraciones complementarias:

Documentación oficial de Apache2

La directiva MaxClients establece el límite en el número de solicitudes (peticiones) simultáneas que se servirán. Cualquier intento de conexión sobre el valor de MaxClients, se colocará en cola, hasta un número basado en la directiva ListenBacklog. Una vez que un proceso hijo se libera al final de una solicitud diferente, entonces será atendida la conexión.

Para los servidores prefork(que es nuestro caso de ejemplo), MaxClients se traduce en el número máximo de procesos secundarios que serán lanzadas para servir peticiones. El valor por defecto es 256; para aumentarlo se hace necesario incrementar ServerLimit.

Análisis servidor básico Debian + Apache2 + PHP5

Para efectuar los calculos de la directiva maxclients, se deben conocer los siguientes parámetros:
El el consumo de memoria RAM de Apache2 y PHP5, el consumo de memoria RAM del aplicativo (página web), la cantidad de memoria RAM consumido por el sistema operativo y la cantidad de memoria RAM a reservar

1. Consumo memoria RAM Apache2 + PHP5
2. Consumo memoria RAM aplicativo(página web)
3. Consumo memoria RAM sistema operativo
4. Cantidad memoria RAM a Reservar
Continuar leyendo “Dimensionamiento (Tunning) Apache2 prefork (+PHP5) Maxclients”

Reducir el Tiempo, Reciclar y Reusar el Estado TIME_WAIT en conexión TCP

El presente instructivo tiene como finalidad presentar los pasos básicos necesarios para la configuración en el kernel de Linux del estado TIME_WAIT de conexión TCP.
Ésta configuración puede ser utilizada para optimizar las conexiones de servicios Web o Base de Datos, aunque es recomendado configurar una aplicación para el agrupamiento de conexiones (connection pooling) o en el caso del servidor WEB el Keep-Alive.

El agrupamiento de conexiones (connection pooling) permite entre otras cosas, el manejo de una colección de conexiones abiertas a una base de datos de manera que puedan ser reutilizadas al realizar múltiples consultas o actualizaciones. En el caso de los serviodres WEB (Apache), el “Keep-Alive”, permite “mantener viva” la conexión de un cliente durante algún periodo corto de tiempo.

En aplicaciones como Mysql, PostgreSQL, Oracle, entre otros entre otros suelen aperturar y cerrar conexiones a cada instante y dependiendo del número de usuarios y la demanda (peticiones por segundo), aumenta la posibilidad de sufrir degradación del servicio.

Cuando una conexión TCP se cierra activamente, el puerto DEBE permanecer en el estado de TIME-WAIT durante un tiempo de 2xMSL (Maximum Segment Lifetime), es decir 2 minutos, tiempo en el cual la conexión esta ocupada y no puede ser reutilizado inmediatamente.

A continuación esquema(Según Protocolo de Control de Transmisión RFC: 793) secuencia normal de cierre de una conexión TCP:

       TCP A                                                TCP B

  1.  ESTABLISHED                                          ESTABLISHED

  2.  (Close)
      FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT

  3.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT

  4.                                                       (Close)
      TIME-WAIT   <--  <SEQ=300><ACK=101><CTL=FIN,ACK> <-- LAST-ASK

  5.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED

  6.  (2 MSL)
      CLOSED

RFC 793. TRANSMISSION CONTROL PROTOCOL DARPA INTERNET PROGRAM PROTOCOL SPECIFICATION. 3.5. Closing a Connection. Secuencia de cierre normal. Figura 13
Continuar leyendo “Reducir el Tiempo, Reciclar y Reusar el Estado TIME_WAIT en conexión TCP”

Balanceo de Carga con HAProxy (capa 4 – transporte)

HAProxy, trabaja principalmente con dos modos: “tcp”, también conocida como capa 4 (transporte), y “http”, también conocida como capa 7 (aplicación). En el modo de capa 4 (transporte), el tráfico HAProxy simplemente se direcciona entre dos lados. En el modo de capa 7, HAProxy analiza el protocolo, y puede interactuar con él, al permitir, bloquear, cambiar, añadir, modificar o eliminar cualesquiera contenidos en las solicitudes o respuestas, sobre la base de criterios arbitrarios.

En éste 1er instructivo se estará efectuando la configuración de un servicio de balanceo en modo capa 4 (transporte). El Balanceo de carga capa 4 (transporte), se basa en el reenvío del tráfico de los usuarios en función del rango de IP y el puerto (es decir, si llega una petición para http://yourdomain.com/, el tráfico será enviada al programa de fondo que maneja todas las solicitudes de yourdomain.com en el puerto 80). El balanceador de carga capa 4 es ideal para balancear el tráfico de forma sencilla.

Para la configuración de la solución se utilizarán los siguientes equipos:

– Un (01) servidor para la instalación y configuración HAProxy

  • Hostname: balanceo
  • IP salida: 200.44.32.12 (ficticia sólo ejemplo – IP de salida)
  • IP Interna: 192.168.57.2 (IP interna)

– Un (01) Equipo para servidor web A:

  • Hostname: Zabbix1
  • IP Interna: 192.168.57.3

– Un (01) Equipo para servidor web B:

  • Hostname: Zabbix2
  • IP Interna: 192.168.57.4

Continuar leyendo “Balanceo de Carga con HAProxy (capa 4 – transporte)”

Creando imágenes con Docker Container

El presente instructivo tiene como finalidad crear a través de Dockerfile una imágen “personalizada” de docker, con el servicio Apache2 y PHP7, para luego “subirla” a una cuenta en Docker Hub.

Además con dicha imagén se creará un contenedor donde se ejecutará un código de ejemplo, el cual estará almacenado en una “carpeta compartida” (bind mounts), entre el servidor y el contenedor

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Se debe tener docker instalado. Docker Primeros Pasos
  • Tener una cuenta creada en Docker Hub

Configuraciones Relacionados:

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 8.0 (actualmente estable)
  • Sistema operativo ‘GNU/Linux’ Debian versión 9.0 (actualmente estable)

Crear Imagen

Existen básicamente dos formas de crear una imágen:

  • 1.- Utilizando el comando de construcción de Docker Dockerfile (recomendado)
  • 2.- Utilizando el comando de Docker commit

Para la creación de imágenes “personalizadas” es recomendeble utilizar Dockerfile, ya que utiliza un mecanismo más flexible, potente, transparente y repetible

CREANDO IMAGEN
Las imagenes creadas en los siguientes ejemplo será una imagen docker a partir de debian 8 y contedrá la instalación de apache2, el modulo de soporte de apache para php5, php5 y el módulo de conexión de postgreSQL para php5. Al final estará expuesto el puerto 80 con el servicio apache instalado
Continuar leyendo “Creando imágenes con Docker Container”