En un post anterior, Cómo empezar como DevOps – Parte 1, expliqué un poco sobre mis antecedentes antes de ejercer como Ingeniero DevOps. Luego, me centré en dos primeros pasos que recomendaba seguir: «Aprender y acostumbrarse a programar» y «Administrar Sistemas Operativos y Redes».
Veamos cuáles son los siguientes pasos…
Paso 3 – Aprende cómo funciona la Web, HTTP y HTTPS
Esto puede ser amplio y se aprende progresivamente, pero es quizá uno de los aspectos más importantes de todos.
Protocolo HTTP
Desde lo básico, es importante comprender que HTTP es un protocolo de capa 7. Tiene distintas versiones, entre las cual están HTTP/1.1 y HTTP/2. También, revisa algunas de sus características tales como Keep-Alive, Conexiones persistentes y Timeouts. Otros conceptos afines son los Cookies, Sesiones Web y Encabezados (headers). Investiga para qué sirven algunos de los encabezados más comunes como Host, User-Agent, Content-Type, entre otros.
Presta atención al encabezado Host, el cual tiene una relación directa con cómo los servidores Web manejan los Hosts Virtuales.
Servidores Web
Sería recomendable tener cierta experiencia configurando uno o más de estos servidores Web: Microsoft IIS, Apache httpd y nginx. Parte de la experiencia debe enfocarse en conocer cómo activar el registro de eventos o logs del servidor Web. Aprende en qué ruta se almacenan y sobretodo a entender su contenido. En dichos logs se encontrará información muy importante para diagnosticar posibles errores y validar que las aplicaciones Web funcionen correctamente.
Lee sobre qué son los Servidores de Aplicaciones. Los más extendidos son aquellos específos para aplicaciones Java. En esta área, hay diferentes opciones de productos como Apache Tomcat, IBM Websphere o WAS, Oracle Weblogic u otros. Advertencia: no confundir Apache httpd con Apache Tomcat. Ambos son productos distintos para propósitos diferentes, pero pueden ir de la mano en un servidor.
Los Servidores de Aplicaciones no existen solo para Java, sino para un amplio número de alternativas de backend. Entre las más comunes tenemos PHP, Ruby, Python, Node.js, .NET, etc. Cada uno de ellos tiene frameworks disponibles, tales como Laravel (PHP), Django (Python), Ruby on Rails (Ruby). Entiende la diferencia entre frontend y backend, así como las aplicaciones corren en cada una de ellas. Opciones de lenguajes para frontend también hay muchas, como React, Angular, jQuery, etc.
Códigos HTTP y logs de tráfico Web
Al analizar los logs de un servidor Web, inevitablemente se verá información sobre los distintos códigos HTTP retornados por el servidor. Los más comunes son el 200, 201, 300, 301, 400, 403, 403, 500 y 503. Debes comprender el significado de dichos códigos, porque forma parte importante de las labores de diagnóstico y resolución de problemas.
Protección HTTP con autenticación
Al configurar un servidor Web, es posible proteger algunas rutas usando controles de seguridad por IP o por autenticación HTTP. Conoce la diferencia entre autenticación HTTP Basic y Digest, así como también cómo configurarlos. Aprenderás que el usuario y password están «protegidos» con codificación usando el algoritmo Base64. Esto para ti será más usual de lo que imaginas al interactuar con aplicaciones y servidores Web.
Proxies y Caché
Algo bastante común son los proxies cuando se trata de aplicaciones Web. Aprende qué es un Proxy como término general y qué es un Proxy HTTP (tipo directo). Comprende qué es y cómo funciona el caché Web (en servidor y en navegador Web de cliente). Averigua cómo dicha caché puede ayudar a optimizar la experiencia de usuario (rapidez), pero también cómo puede afectarla (contenido desactualizado).
Los productos de Proxy HTTP normalmente se usan para dar rapidez en la navegación Web a los usuarios. Pero sobretodo para restringir el contenido que pueden visitar en Internet (páginas prohibidas, restricciones por usuarios, por horarios, etc.). El producto Open Source más conocido de esta familia es Squid y sería bueno conocer un poquito del mismo.
Es recomendable leer sobre algunos aspectos que influyen también sobre el rendimiento y optimización de navegación. Estos son:
- La Compresión de tráfico HTTP (gzip y Brotli)
- La Minificación de código (HTML, Javascript, CSS)
- La Optimización de imágenes (redimensionamiento y pérdida de calidad).
Proxy reverso, Balanceadores y CDN
También es muy común el Proxy reverso, función que puede ser desempeñada también por Squid. Sin embargo, suele ser más común que se implemente con productos Open Source como Apache httpd, nginx, Traefik u otros. Este tipo de proxy es uno de los más importantes y usados.
Conocer lo anterior nos lleva necesariamente a los Balanceadores de carga o Load Balancers. Estos pueden implementarse con algunos de los productos antes mencionados, además del muy conocido HAProxy. También hay opciones comerciales como F5. Pero, los más populares hoy en día son los ofrecidos por los proveedores de Cloud Computing. Por ejemplo, Elastic Load Balancer de AWS o Cloud Load Balancing de GCP.
Los proveedores de Cloud, como AWS, suelen ofrecer distintos tipos de Balanceadores. Los más comunes son el Balanceador de Aplicación (Application Load Balancer) y el Balanceador de Red (Network Load Balancer). Azure y Google Cloud pueden tener algunos similares. Es clave entender bien la diferencia de cada uno de ellos y en qué casos usarlos. También, ayuda mucho el comprender algunos términos y configuraciones comunes de los Balanceadores. Entre ellos está el Stickiness (y su relación con las sesiones Web) y los algoritmos de Balanceo (round-robin, least-connection, weighted, etc.)
Otro elemento muy común a los servidores Web y Balanceadores, son los servicios de caché. Estos pueden implementarse con alguno de los productos antes mencionados, pero también con otro como Varnish. Muy ligado a esto viene el importantísimo concepto de CDN (Content Delivery Network). Esto es un servicio Cloud que a través de caché optimiza la navegación Web para clientes de distintas regiones geográficas. Cada proveedor de Cloud ofrece sus servicios en esta categoría, tales como AWS Cloudfront, Azure CDN, Google Cloud CDN. Pero también hay competidores como Cloudflare, Fastly, entre muchos otros.
Firewall y WAF
La seguridad en HTTP no podría faltar en este apartado. Por ello, hago especial mención en Firewall y Firewall de Aplicaciones (Web Application Firewall o WAF).
Un Firewall es un elemento de seguridad que filtra paquetes. Si bien está más relacionado con temas de Redes, solo lo menciono para aclarar que éste es un componente a nivel de red. Su función es la de proteger conexiones a nivel de protocolos (TCP, UDP, ICMP, etc.) y servicios (HTTP, FTP, SMTP, etc.). Que quede muy claro con lo que es un Firewall de red.
En cambio, un Firewall de Aplicaciones es un componente de seguridad que protege las aplicaciones Web de los ataques más comunes que ocurren a nivel de capa 7. Esto incluye la detección de intentos de acceso a recursos protegidos, escaneo de rutas inexistentes, muchas conexiones en pocos segundos, etc. También protege contra ataques conocidos como SQL Injection, Cross-Site Scripting (XSS), RFI (Remote File Injection), etc. Esto se puede implementar a nivel de software con un producto Open Source como ModSecurity. Pero, considero mejor delegar esta administración a un producto o servicio más especializado de terceros. Alguna de las más conocidas son Cloudflare, AWS WAF, u otro similar ofrecido por proveedores de Cloud.
Configurar un WAF puede ser una labor ardua y que requiera un mayor nivel de conocimiento y experiencia. Sin embargo, considero importante resaltar el hecho de al menos conocer qué es y para qué sirve.
Seguridad SSL/TLS y Certificados Digitales
Es casi obligatorio comprender bien cómo funciona un sistema PKI (Public Key Infrastructure) y cómo se usa en las aplicaciones modernas. Aprende los conceptos teóricos de criptografía simétrica y asimétrica, Hashes o sumas de verificación. También, lee sobre algoritmos comunes como SHA, MD5, AES256, RSA, Blowfish, Diffie-Hellman, etc. Luego, comprende qué es una Autoridad Certificadora (Certification Authority – CA), qué es una llave privada y pública. Luego, lee sobre qué es y cómo se crea una Solicitud CSR. Aprende cómo se firma dicha solicitud por una autoridad comercial (Ejm: Verisign, Thawte, DigiCert, etc) o una CA interna. Conoce los principales formatos de certificados como son PEM y PKCS#12. Por último, conoce algunos de los comandos más comunes de OpenSSL y su equivalente en Windows para gestionar certificados y llaves privadas.
Directamente ligado a estos conceptos, están los protocolos SSL y TLS. Averigua qué diferencia hay entre ambos. Lee qué vulnerabilidades de SSL hicieron que dejase de usarse en favor de TLS, como cultura general. También, lee sobre las distintas versiones del protocolo TLS (1.0, 1.1, 1.2, 1.3) y cuáles de ellas ya están desafasadas y no deben usarse más.
Los Balanceadores tienen una relación cercana con el manejo de conexiones SSL/TLS. Por ello, es necesario aprender los conceptos de SSL Offloading (o SSL Termination) y SSL Passthrough. Aprende por qué el SSL Offloading ayuda a liberar carga de procesamiento sobre los servidores Web y las implicancias en seguridad. Quizá, para un entorno de mayor seguridad puede ser necesario configurar SSL Passthrough.
Complementos relacionados
Algunos complementos no menos importantes incluyen los conceptos de APIs y los protocolos más comunes (REST, SOAP, RPC). Investiga qué es Websocket y la importancia de API REST hoy en día. Muy relacionado a las APIs está el uso de los formatos JSON y XML para intercambio de datos.
Ayuda conocer cómo el formato YAML puede ayudar a definir o expresar datos en una equivalencia muy cercana a JSON.
Lee sobre Microservicios y qué lo diferencia de aplicaciones Monolíticas. También, comprende qué son Aplicaciones Stateful y Stateless. Y no podía faltar entender lo que son Aplicaciones Cloud Native.
En lo referente a seguridad, tómate un tiempo de averiguar qué es CORS y para qué sirve.
Cierre y pausa
Este post fue extenso, pero era necesario incluir suficiente detalle sobre los aspectos que son vitales conocer como parte de la preparación para convertirse en un Ingeniero DevOps. En la parte 3 de este artículo, hablaré sobre Infraestructura como Código, Contenedores Docker y Kubernetes.
Deja un comentario