Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Caddy: un servidor web con funciones de proxy inverso


Caddy es una alternativa relativamente nueva a Apache y Nginx aunque fue lanzado inicialmente en 2015. Es un servidor web de código abierto construido con lenguaje Go y utiliza HTTPS por defecto.



Como cualquier otro servidor web, Caddy se puede utilizar como un servidor web que sirve tanto sitios web estáticos como dinámicos. Caddy ofrece un servidor de archivos estáticos versátil y eficiente. También se puede utilizar como un Proxy Inverso robusto y escalable.

Proxy inverso con Caddy para contenedores Docker

¿Qué es Caddy?

Caddy 2 es un potente servidor web de código abierto desarrollado haciendo uso del lenguaje de programación Go.

Simplifica la infraestructura a montar y se encarga de forma automática de las renovaciones de certificados SSL para los sitios web. Aunque comunmente se usa como servidor web o proxy, también se podría utilizar para otras funciones:

  • Proxy sidecar
  • Balanceador de carga
  • Puerta de enlace API
  • Control de ingreso
 

Es una aplicación con un enfoque más clásico que Traefik y sí tiene ficheros de configuración. Pero al mismo tiempo está pensado para ser muy simple, y gestionar automáticamente y por defecto cosas que en otro servidores web habría que hacer de forma explícita.

¿Cómo funciona Caddy?

Un proxy inverso es un intermediario entre los dispositivos cliente y los servidores web, administrando las peticiones y respuestas con el fin de mejorar la seguridad, el rendimiento y la flexibilidad.



Caddy permite:

  • Configuración SSL/TLS automática: Caddy se integra sin problemas con Let's Encrypt de tal forma que es capaz de obtener y renovar de forma automática los certificados SSL/TLS para HTTPS, asegurando siempre una comunicación segura. También incluye y configura automáticamente unos certificados autofirmados para entornos locales o de desarrollo.

  • Configuración mediante un archivo llamado Caddyfile, haciéndolo muy simple.

  • Soporte para los nuevos protocolos HTTP/2 y QUIC
  • Monitorización y métricas en tiempo real, compatibles con sistemas de monitorización como Prometheus.
  • Middleware y extensiones: Caddy permite, haciendo uso de plugins, añadir funcionalidades interesantes a la aplicación

Paquetes necesarios

Existen al menos tres métodos para instalar Caddy. Podemos instalarlo simplemente descargando el binario ejecutable, instalarlo compilando el código fuente, o instalarlo desde el repositorio. En este artículo, instalaremos Caddy utilizando el repositorio. Dado que la instalación del servidor web Caddy requiere algunos paquetes, instalaremos primero las dependencias.


apt install gnupg curl apt-transport-https debian-keyring debian-archive-keyring -y

Añadir repositorio

Antes de proceder con la instalación, necesitamos añadir la clave GPG usando el siguiente comando:


curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

Y añadimos el repositorio:


wget -qO - https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt | sudo tee /etc/apt/sources.list.d/caddy.list


Actualizamos el repositorio:


apt update


Instalación de Caddy Web Server

Añadimos el repositorio en el paso anterior y actualizamos el índice de paquetes. Por último, podemos ejecutar este comando a continuación para instalar Caddy.

apt install caddy

Tras la instalación, Caddy estará en funcionamiento - ya está configurado para ejecutarse al reiniciar el servidor. Podemos comprobarlo ejecutando el siguiente comando:

systemctl status caddy

También puedes verificar que Caddy está funcionando intentando acceder a él en tu navegador web favorito. En la barra de direcciones de nuestro navegador pondremos a http://IP_SERVIDOR 


Caddy como proxy inverso pero muy fácil

¿Que es Caddy?

Caddy es un proxy inverso que te permitirá tener diferentes servicios funcionando en un mismo servidor utilizando todos ellos protocolo seguro. Una de las grandes ventajas de este proxy, al igual que sucede con Traefik, es que ambos se encargan de obtener y renovar los certificados para cada uno de tus sitios de forma completamente automática. No te tienes que preocupar de esta tediosa operación.

Caddy a lo Traefik

Uno de los aspectos que me echaban para atrás de Caddy es el archivo de configuración, y la necesidad de reiniciar el Caddy cada vez que añadía un nuevo servicio. Sin embargo, existe un plugin para Caddy que resuelve ambos problemas de un solo plumazo. Se trata de caddy-docker-proxy.

Este plugin, se encarga de escanear la meta información de Docker en busca de etiquetas. En estas etiquetas tenemos que indicar que servicio o contenedor tiene que ser servido por Caddy. Esto es precisamente el mismo funcionamiento que realiza Traefik. Así, la operativa es la misma. Tienes que declarar una red externa, que es la que utilizará Caddy para publicar los servicios, y las correspondientes etiquetas, para indicarle que puerto tiene que utilizar y la url a publicar. Por supuesto, y como venía haciendo, se encargará de gestionar los certificados. Simplemente brutal.

Configuración de Caddy Web Server

La configuración de Caddy es bastante sencilla y lo que tenemos que tener en cuenta es que el fichero de configuración se encuentra en /etc/caddy/Caddyfile:

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.

:80 {
        # Set this path to your site's directory.
        root * /usr/share/caddy

        # Enable the static file server.
        file_server

        # Another common task is to set up a reverse proxy:
        # reverse_proxy localhost:8080

        # Or serve a PHP site through php-fpm:
        # php_fastcgi localhost:9000
}

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

Para configurar un dominio en esta configuración únicamente tendremos que reemplazar :80 por nuestro dominio. Además, si queremos cambiar la ruta de nuestra web tendremos que modificar el parámetro root.

voidnull.es {
        root * /var/www/html/voidnull
        file_server
}

Para recargar la configuración tenemos que reiniciar el servicio:

systemctl reload caddy

También si queremos podemos configurar los logs para el acceso:

voidnull.es {
        root * /var/www/html/voidnull
        file_server
        log {
        output file /var/log/caddy/access.log
        format console
        }
}

Por otro lado, si tenemos una web que está funcionando con PHP la configuración debería de ser similar a esta:

voidnull.es {
	root * /var/www/html/voidnull
	file_server
	encode zstd gzip
	php_fastcgi unix//run/php/php8.3-fpm.sock 
	
	log {
        output file /var/log/caddy/access.log
        format console
	}
}

O si por ejemplo queremos configurar Caddy para usarlo de Proxy Reverse, podemos usarlo de esta otra manera:

voidnull.es {
	root * /var/www/html/voidnull
	file_server
	encode zstd gzip
	reverse_proxy localhost:3000
	
	log {
        output file /var/log/caddy/access.log
        format console
	}
}

Fuentes:

1 comentarios :

Anónimo dijo...

Excelente aporte. Hace rato buscaba algo como esto, pero no lo entendía mucho. Tu explicación fue concisa y detallada. Muchas Gracias

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.