Sin categoría

PrivateBin: ¿cómo implantar tu propio PasteBin en un servidor?

I. Presentación

PrivateBin es una alternativa de código abierto a PasteBin, que puedes alojar en tu propia máquina, ya sea un servidor o un NAS. Como recordatorio, PasteBien es un servicio en línea muy popular que te permite pegar texto o código y luego compartir un enlace para facilitar el acceso.

PrivateBin es una aplicación web gratuita y de código abierto que te permite alojar tu propia instancia de PasteBin, con encriptación del lado del cliente (mediante AES 256 bits). Esto significa que el servidor nunca ve el contenido, ya que se cifra directamente en el navegador del usuario.

La idea es sencilla: copias y pegas el texto que quieres compartir y obtienes un enlace único (y temporal) para compartir. Este enlace puede ser válido durante un tiempo limitado y puede estar protegido por contraseña.

He aquí algunos usos interesantes de PrivateBin :

  • Compartir de forma segura una contraseña, clave de licencia o cualquier otra información sensible: una alternativa al correo electrónico.
  • Compartir información de red, como direcciones IP.
  • Compartir una configuración.
  • Comparte un archivo o cualquier documento.
  • Provisión de un extracto de código para compartirlo fácilmente.

Esta alternativa a PasteBin es ideal para empresas o para quienes desean mantener un control total sobre sus datos.

II. Instalación de PrivateBin con Docker

En este tutorial, veremos cómo instalar una instancia de PrivateBin utilizando Docker, así como el proxy inverso Nginx, que también se instala a través de Docker. La aplicación PrivateBin no puede ejecutarse a través de una conexión HTTP, por lo que es necesario utilizar una conexión HTTPS. En este caso, creo que es mejor utilizar un proxy inverso para publicar la aplicación.

Se utilizará una máquina Linux que ya está equipada con Docker. Desplegaremos 2 contenedores Docker:

  • 1 contenedor Docker con PrivateBin, basado en PHP-FPM y un servidor web Nginx
  • 1 contenedor Docker con Nginx como proxy inverso

El objetivo será poder acceder a la aplicación a través de la siguiente dirección: https://privatebin.it-connect.local. Aquí, estoy utilizando deliberadamente un nombre de dominio local para utilizar un certificado autofirmado. Para poner una instancia en producción, se recomienda encarecidamente utilizar un certificado emitido por una autoridad de certificación pública (Let's Encrypt puede ser suficiente).

Antes de empezar, asegúrese de haber configurado DNS. Por lo que a mí respecta, se ha creado un registro DNS en la zona it-connect.local para asociar el nombre privatebin a la dirección IP 192.168.10.200.

A. Creación del contenedor Docker para PrivateBin

Empezaremos viendo el contenedor PrivateBin, usando la imagen oficial privatebin/nginx-fpm-alpine. Hay varias imágenes, porque PrivateBin puede basarse en una base de datos MySQL / PostgreSQL, almacenamiento S3 o un entorno de Google Cloud Storage. Aquí, vamos a utilizar el sistema de archivos.

Cree los directorios en los que se almacenarán los datos del contenedor (/opt/docker-compose/ ya existe) :

mkdir /opt/docker-compose/privatebin
mkdir /opt/docker-compose/privatebin/data

A continuación, cree el archivo docker-compose.yml con el siguiente código :

cd /opt/docker-compose/privatebin
nano docker-compose.yml

La aplicación estará disponible en el puerto 8080aunque esto tiene poca importancia ya que vamos a configurar un proxy inverso. Una red compartida llamada nginx-net será utilizado por los 2 contenedores.

services:
  privatebin:
    image: privatebin/nginx-fpm-alpine
    restart: always
    read_only: true
    ports:
      - "8080:8080"
    volumes:
      - ./data:/srv/data
      - ./conf.php:/srv/cfg/conf.php:ro

networks:
  nginx-net:
    external: true
    name: nginx-net

Una vez hecho esto, siempre en el mismo directorio, cree el archivo conf.php que corresponde a la configuración de la propia aplicación PrivateBin. Para afinar la configuración, puede consultar la documentación oficial. La que aparece a continuación está comentada para facilitar su comprensión.

[main]
; Nombre que aparece en la interfaz web
name = "PrivateBin - IT-Connect"

; Permite a los usuarios proteger una pasta con una contraseña
password = true

; Activa la función de transferencia (carga) de archivos además del texto
fileupload = true

; Tamaño máximo autorizado para un paste (texto + archivo), aquí 10 MB (10 * 1024 * 1024)
sizelimit = 10485760

; Tema visual utilizado para la interfaz, aquí "bootstrap-dark" para un tema oscuro.
template = "bootstrap-dark"

; Mensaje informativo que se muestra a los usuarios, útil para alertarles de las condiciones de uso.
notice = "Nota: los datos de este servicio pueden borrarse en cualquier momento."

; Idioma por defecto de la interfaz (aquí francés)
languagedefault = "fr"

[model]
; Método de almacenamiento utilizado para guardar las pastas.
; En este caso, utilizamos el sistema de archivos local
class = Filesystem

[model_options]
; Directorio donde se almacenan las pastas encriptadas.
; La palabra clave PATH significa que la ruta es relativa a la raíz de la instalación.
; Aquí utilizamos el directorio de datos creado anteriormente.
dir = PATH "data"

Finalmente, la última etapa: la gestión de los derechos sobre el fichero data ya que debe ser accesible para la aplicación.

En principio, la aplicación escribirá en este directorio con el usuario nobody. Si tienes dudas o problemas, establece los derechos a 777a continuación, crear una pasta (cuando el despliegue se haya completado) para mirar los permisos y adaptarlos en consecuencia.

sudo chown -R nobody:82 /opt/docker-compose/privatebin/data/
sudo chmod 700 /opt/docker-compose/privatebin/data/

Ahora estás listo para pasar a la siguiente etapa: crear el contenedor Nginx.

B. Creación del contenedor Docker para Nginx

Ahora vamos a empezar a configurar el proxy inverso Nginx para publicar nuestra aplicación en HTTPS. Además de configurar el contenedor Docker, necesitaremos configurar Nginx y también crear un certificado autofirmado (para hacer pruebas).

Empecemos por crear el archivo :

mkdir /opt/docker-compose/nginx /opt/docker-compose/nginx/certs

A continuación, cree el archivo docker-compose.yml para declarar el contenedor. Podríamos haber creado un único archivo Docker Compose con la declaración de los dos contenedores para crear un proyecto global.

Aquí, estamos escuchando el contenedor en el puerto 443. El expediente privatebin.conf se montará en la configuración de Nginx y la carpeta certs se utilizará para almacenar los archivos de certificados.

services:
  nginx:
    image: nginx:latest
    container_name: nginx-proxy
    ports:
      - "443:443"
    volumes:
      - ./privatebin.conf:/etc/nginx/conf.d/privatebin.conf:ro
      - ./certs:/etc/nginx/certs

networks:
  nginx-net:
    external: true
    name: nginx-net

Ahora cree el archivo privatebin.conf para configurar el servidor Nginx como proxy inverso. La configuración a continuación asume que el proxy inverso tiene un frontend para la dirección privatebin.it-connect.local. En este caso, el flujo se redirigirá al contenedor PrivateBin accesible en la dirección IP del servidor, en el puerto 8080o http://192.168.10.200:8080.

# privatebin.it-connect.local
server {
     listen 443 ssl;
     server_name privatebin.it-connect.local;
     ssl_certificate /etc/nginx/certs/privatebin.it-connect.local.crt;
     ssl_certificate_key /etc/nginx/certs/private.key;
     location / {
         proxy_pass http://192.168.10.200:8080;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
     }
}

Otro punto importante que hay que entender:

  • /etc/nginx/certs/privatebin.it-connect.local.crt ruta y nombre esperados para el certificado TLS
  • /etc/nginx/certs/private.key ruta y nombre previsto de la clave privada asociada al certificado TLS

Ahora necesitamos crear el certificado TLS autofirmado. Necesita el paquete openssl para realizar esta tarea. Lo más probable es que ya esté presente en su máquina. Comience por acceder al directorio correspondiente:

cd /opt/docker-compose/nginx/certs

Cree una clave privada denominada private.key utilizando el algoritmo RSA. Aquí, no pedimos una frase de contraseña para permitir la lectura directa por Nginx.

openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048

A continuación, debe crear una solicitud de firma de certificado (CSR):

openssl req -new -key private.key -out cert.csr

A continuación, se le pedirá que introduzca varios datos: país, organización, etc. Además del Common Name, donde debe introducir el nombre de dominio de su aplicación.

Por último, genere el certificado autofirmado a partir de los dos archivos creados anteriormente. Este certificado tendrá una validez de 365 días.

openssl x509 -req -days 365 -in cert.csr -signkey private.key -out privatebin.it-connect.local.crt

Al salir, debe obtener el certificado con el nombre privatebin.it-connect.local.crt.

La configuración del proxy inverso Nginx ya está lista.

C. Creación de la red Docker

Nuestros dos contenedores intentarán utilizar la red Docker denominada nginx-net excepto que no existe. Ejecute este comando :

sudo docker network create nginx-net

Enumera las redes Docker, debería aparecer la que acabas de crear.

sudo docker network ls

D. Lanzamiento de contenedores Docker para PrivateBin

Por último, vamos a lanzar los dos contenedores Docker ahora que la configuración está completa.

Ejecuta estos comandos:

# Contenedor PrivateBin
cd /opt/docker-compose/privatebin
sudo docker compose -p privatebin up -d

# Contenedor Nginx
cd /opt/docker-compose/nginx
sudo docker compose -p nginx up -d

Ambos contenedores se ejecutarán en segundo plano. Puedes listar los contenedores que se están ejecutando actualmente utilizando este comando:

sudo docker ps

CONTAINER ID   IMAGE                         COMMAND                  CREATED       STATUS    
4d8238b5815f   nginx:latest                  "/docker-entrypoint.…"   3 hours ago   Up 3 hours
6bd8f00849c8   privatebin/nginx-fpm-alpine   "/etc/init.d/rc.local"   4 hours ago   Up 3 hours

Sólo queda probarlo...

E. Uso de PrivateBin

Abra un navegador y vaya a la dirección https://privatebin.it-connect.local (adaptar, por supuesto). Si su proxy inverso está operativo, debería llegar a la interfaz PrivateBin. Si está utilizando un certificado autofirmado, primero debe ignorar la advertencia de seguridad.

Todo lo que tienes que hacer es crear tu primera pasta. Puedes elegir una fecha de caducidad (5 minutos, 1 hora, 1 semana, etc.), una contraseña e incluso borrarlo automáticamente tras la reproducción. El cuadro de entrada te permite introducir tu texto. Al hacer clic en el botón "Crear", se valida la pasta.

A continuación, recibirá un mensaje de validación acompañado de un enlace. Todo lo que tienes que hacer es transferir este enlace al destinatario para que pueda recuperar la información de la pasta. Práctico, ¿verdad?

También puede elegir otro formato, como código fuente o Markdown, en lugar de texto sin formato.

III. Conclusión

PrivateBin es una aplicación sencilla y eficaz que responde a una necesidad muy concreta: compartir información de forma segura mediante un sistema de enlace temporal y cifrado de datos. Con este tipo de herramientas, puedes evitar encontrar contraseñas u otra información sensible en correos electrónicos, conversaciones en Teams u otras plataformas.

¿Qué opina al respecto?

author avatar
Florian Burnel Co-founder of IT-Connect
Systems and network engineer, co-founder of IT-Connect and Microsoft MVP "Cloud and Datacenter Management". I'd like to share my experience and discoveries through my articles. I'm a generalist with a particular interest in Microsoft solutions and scripting. Enjoy your reading.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.