PrivateBin: ¿cómo implantar tu propio PasteBin en un servidor?
Table of Contents
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 8080
aunque 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 777
a 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 8080
o 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?