https://tailscale.com/docs/reference/examples/serve
https://tailscale.com/docs/how-to/quickstart
https://tailscale.com/docs/features/access-control
https://filebrowser.org/cli/filebrowser-config-init.html
https://filebrowser.org/cli/filebrowser-users-add.html
https://blog.hofstede.it/freebsd-foundationals-zfs-the-last-filesystem-youll-ever-need/
Instalar FileBrowser
pkg install filebrowser which filebrowser filebrowser version File Browser v2.52.0/c11c986b7382a5c1f18d83ee7e6093dc0544cff9
Crear esttructura de directorios
Directorio para archivos compartidos
mkdir -p /home/carlos/fileserver
Directorio para configuracion
mkdir -p /home/carlos/.config/filebrowser
Iniciarlizar la base de datos de FileBrowser
filebrowser config init -d /home/carlos/.config/filebrowser/filebrowser.db
Crear usuario administrador
filebrowser users add carlos tu_contraseña_segura \ --perm.admin \ --perm.create \ --perm.delete \ --perm.download \ --perm.execute \ --perm.modify \ --perm.rename \ --perm.share \ -d /home/carlos/.config/filebrowser/filebrowser.db
Explicación de permisos:
--perm.admin → Acceso administrativo completo --perm.create → Crear archivos y carpetas --perm.delete → Eliminar archivos --perm.download → Descargar archivos --perm.execute → Ejecutar comandos --perm.modify → Modificar archivos --perm.rename → Renombrar archivos/carpetas --perm.share → Compartir enlaces públicos
Crear usuario adicional con permisos limitados
Detener completamente filebrowser
sudo service FileBrowser stop sudo pkill -9 filebrowser
filebrowser users add invitado password123 \ --perm.download \ --scope /home/carlos/fileserver/publico \ -d /home/carlos/.config/filebrowser/filebrowser.db
Comprobar configuracion
filebrowser config cat -d /home/carlos/.config/filebrowser/filebrowser.db
Ver usuarios
filebrowser users ls -d /home/carlos/.config/filebrowser/filebrowser.db
Crear archivo /home/carlos/.config/filebrowser/config.json
{
"port": 8080,
"baseURL": "",
"address": "0.0.0.0",
"log": "/home/carlos/.config/filebrowser/filebrowser.log",
"database": "/home/carlos/.config/filebrowser/filebrowser.db",
"root": "/home/carlos/fileserver"
}
Crear script de servicio rc.d sudo vim /usr/local/etc/rc.d/filebrowser
#!/bin/sh
# PROVIDE: filebrowser
# REQUIRE: DAEMON NETWORKING tailscaled
# KEYWORD: shutdown
. /etc/rc.subr
name="filebrowser"
rcvar="filebrowser_enable"
load_rc_config $name
: ${filebrowser_enable:="NO"}
: ${filebrowser_user:="carlos"}
: ${filebrowser_config:="/home/carlos/.config/filebrowser/config.json"}
pidfile="/home/carlos/.filebrowser.pid"
command="/usr/sbin/daemon"
filebrowser_command="/usr/local/bin/filebrowser"
start_cmd="${name}_start"
stop_cmd="${name}_stop"
status_cmd="${name}_status"
filebrowser_start()
{
if [ -f ${pidfile} ] && kill -0 $(cat ${pidfile}) 2>/dev/null; then
echo "${name} already running as pid $(cat ${pidfile})."
return 1
fi
echo "Starting ${name}."
/usr/bin/su -m ${filebrowser_user} -c "${filebrowser_command} -c ${filebrowser_config}" > /dev/null 2>&1 &
echo $! > ${pidfile}
chown ${filebrowser_user} ${pidfile}
}
filebrowser_stop()
{
if [ -f ${pidfile} ]; then
echo "Stopping ${name}."
kill $(cat ${pidfile}) 2>/dev/null
rm -f ${pidfile}
else
echo "${name} is not running."
fi
}
filebrowser_status()
{
if [ -f ${pidfile} ] && kill -0 $(cat ${pidfile}) 2>/dev/null; then
echo "${name} is running as pid $(cat ${pidfile})."
else
echo "${name} is not running."
return 1
fi
}
run_rc_command "$1"
Dar permisos de ejecucion
sudo chmod +x /usr/local/etc/rc.d/filebrowser
Habilitar FileBrowser en rc.conf
sudo sysrc filebrowser_enable="YES"
Verificar Tailscale
tailscale status 100.69.99.114 tornado nombreusuario@ freebsd -
Si no está corriendo
sudo service tailscaled start tailscale up
Actualizar reglas de PF
# ========================================
# Configuración PF para tornado.local.com
# ========================================
# MACROS (Variables)
ext_if = "wlan0" # Interfaz de red
tailscale_if = "tailscale0"
local_net = "192.168.88.0/24" # Red local permitida
ssh_port = "22" # Puerto SSH
filebrowser_port = "8080"
filebrowser_https_port = "8443"
http_port = "80"
https_port = "443"
# --- OPCIONES ---
set skip on lo0 # No filtrar loopback
set block-policy drop # Descartar paquetes bloqueados silenciosamente
set loginterface $ext_if # Interfaz para estadísticas
# --- SCRUB (Normalización de paquetes) ---
scrub in all # Normalizar todo el tráfico entrante
# --- POLÍTICA PREDETERMINADA ---
block all # Bloquear todo por defecto
# --- REGLAS ANTISPOOF ---
antispoof quick for $ext_if # Protección contra IP spoofing
# --- PERMITIR LOOPBACK ---
pass quick on lo0 all # Permitir todo en loopback
# --- PERMITIR TRÁFICO EN TAILSCALE ---
pass quick on $tailscale_if all keep state
# --- Solo permite TAILSCALE ---
pass in quick on $tailscale_if all keep state
# --- PERMITIR ICMP (ping) desde red local ---
pass in quick on $ext_if inet proto icmp from $local_net to any icmp-type { echoreq } keep state
# --- PERMITIR SSH SOLO DESDE RED LOCAL ---
pass in quick on $ext_if proto tcp from $local_net to ($ext_if) port $ssh_port keep state
# --- PERMITIR FILEBROWSER HTTP DESDE RED LOCAL ---
pass in quick on $ext_if proto tcp from $local_net to ($ext_if) port $filebrowser_port keep state
# --- PERMITIR FILEBROWSER HTTP DESDE TAILSCALE ---
pass in quick on $tailscale_if proto tcp to any port $filebrowser_port keep state
# --- PERMITIR FILEBROWSER HTTPS DESDE RED LOCAL ---
pass in quick on $ext_if proto tcp from $local_net to ($ext_if) port $filebrowser_https_port keep state
# --- PERMITIR FILEBROWSER HTTPS DESDE TAILSCALE ---
pass in quick on $tailscale_if proto tcp to any port $filebrowser_https_port keep state
# --- PERMITIR TRÁFICO SALIENTE ---
pass out quick on $ext_if all keep state
# --- LOGGING (opcional) ---
# pass in log on $ext_if proto tcp from $local_net to ($ext_if) port $ssh_port keep state
Recargar reglas
sudo pfctl -f /etc/pf.conf sudo service pf reload
Iniciar filebrowser
sudo service filebrowser start
Estado de filebrowser
sudo service filebrowser status
Puerto de escucha
sudo sockstat -4l | grep 8080 carlos filebrowse 1322 5 tcp46 *:8080
Acceder a FileBrowser
Desde la red local:
http://192.168.88.183:8080
Desde Tailscale HTTPS (desde cualquier lugar):
https://100.69.99.114:443 https://tornado.tail0788a4.ts.net
Credenciales
Usuario carlos Contraseña tu_contraseña_segura
Ver logs de diagnóstico
tail -f /home/carlos/.config/filebrowser/filebrowser.log
Proceso filebrowser
ps aux | egrep filebrowser root 1320 0.0 0.0 14376 2892 v0- I Sun23 0:00.01 /usr/bin/su -m carlos \ -c /usr/local/bin/filebrowser -c /home/carlos/.config/filebrowser/config.json carlos 1322 0.0 0.4 1279096 28916 v0- I Sun23 0:25.27 /usr/local/bin/filebrowser \ -c /home/carlos/.config/filebrowser/config.json
Reglas PF activas
sudo pfctl -sr Password: scrub in all fragment reassemble block drop all block drop in quick on ! wlan0 inet from 192.168.88.0/24 to any block drop in quick inet from 192.168.88.183 to any pass in quick on wlan0 inet proto tcp from 192.168.88.0/24 to \ (wlan0) port = ssh flags S/SA keep state pass in quick on wlan0 inet proto tcp from 192.168.88.0/24 to \ (wlan0) port = http-alt flags S/SA keep state pass in quick on wlan0 inet proto tcp from 192.168.88.0/24 to \ (wlan0) port = 8443 flags S/SA keep state pass in quick on wlan0 inet proto icmp from 192.168.88.0/24 to \ any icmp-type echoreq keep state pass out quick on wlan0 all flags S/SA keep state pass quick on lo0 all flags S/SA keep state pass quick on tailscale0 all flags S/SA keep state
IMPORTANTE: Detener FileBrowser antes de modificar la base de datos
sudo service filebrowser stop sudo pkill -9 filebrowser
Cambiar contraseña de usuario
filebrowser users update carlos \ --password nueva_contraseña \ -d /home/carlos/.config/filebrowser/filebrowser.db
Habilitar branding personalizado
filebrowser config set \ --branding.name "Servidor de Carlos" \ --branding.disableExternal \ -d /home/carlos/.config/filebrowser/filebrowser.db
Cambiar a tema oscuro por defecto
filebrowser config set \ --theme dark \ -d /home/carlos/.config/filebrowser/filebrowser.db
Reiniciar FileBrowser
sudo service filebrowser start
Crear pidfile con los permisos correctos
sudo touch /var/run/filebrowser.pid sudo chown carlos:carlos /var/run/filebrowser.pid sudo chmod 644 /var/run/filebrowser.pid
Seguridad adicional
Deshabilitar registro público
filebrowser config set --signup false -d /home/carlos/.config/filebrowser/filebrowser.db
Configurar límite de sesión
filebrowser config set --auth.recaptcha.secret "" -d /home/carlos/.config/filebrowser/filebrowser.db
Copia de seguridad de configuración
Copia de seguridad de base de datos
cp /home/carlos/.config/filebrowser/filebrowser.db /home/carlos/.config/filebrowser/filebrowser.db.backup
Copia de seguridad de archivos
tar -czf /home/carlos/fileserver-backup-$(date +%Y%m%d).tar.gz /home/carlos/fileserver/
Resumen de comandos de gestión
Reiniciar servicio
sudo service filebrowser restart
Detener FileBrowser completamente
sudo service filebrowser stop sudo pkill -9 filebrowser
Limpiar el pidfile
rm -f /home/carlos/.filebrowser.pid
Iniciar FileBrowser limpiamente
sudo service filebrowser start
Verificar que solo hay un proceso
sudo ps aux | grep "filebrowser" carlos 1322 0.0 0.4 1279096 29736 v0- I Sun23 1:11.45 /usr/local/bin/filebrowser -c /home/carlos/.config/filebrowser/config.json
Ver logs en tiempo real
tail -f /home/carlos/.config/filebrowser/filebrowser.log
Listar usuarios. Hay que detener FileBrowser antes
sudo service filebrowser stop sudo pkill -9 filebrowser filebrowser users ls -d /home/carlos/.config/filebrowser/filebrowser.db
Ver configuración completa
filebrowser config cat -d /home/carlos/.config/filebrowser/filebrowser.db
Navegador local
http://localhost:8080
Red local
http://192.168.88.183:8080
Acceso remoto desde Internet (con Tailscale conectado) Sin Tailscale no funcionará (esto es correcto por seguridad).
http://100.69.99.114:8080 https://https://tornado.tail0788a4.ts.net
Configuración completada exitosamente: FileBrowser instalado y configurando Autenticación habilitada (usuario: carlos) Acceso desde red local (192.168.88.0/24) Acceso remoto seguro vía Tailscale Firewall PF configurado correctamente Autoarranque habilitado (rc.conf)
Tailscale HTTPS (certificados automáticos de Tailscale)
Tailscale puede proporcionar certificados HTTPS válidos de forma automática para un nodo.
Esto generará certificados en /var/lib/tailscale/certs/ o /usr/local/tailscale/certs/. Si no existe el directorio, Tailscale los colocará en el directorio actual.
Obtener el nombre MagicDNS de su nodo
tailscale status
Desde cualquier dispositivo con Tailscale conectado
https://tornado.tail0788a4.ts.net
¡El certificado será válido y reconocido por todos los navegadores!
Usar Tailscale Serve (proxy HTTPS automático)
sudo tailscale serve --bg http://127.0.0.1:8080
Exponer FileBrowser con HTTPS automático en
https://tornado.tail0788a4.ts.net
No es necesario configurar nada más, Tailscale maneja todo el HTTPS
Comprobar
tailscale serve status https://tornado.tail0788a4.ts.net (tailnet only) |-- / proxy http://127.0.0.1:8080
Obtener su URL completa
tailscale status --json | grep tornado
"DNSName": "tornado.tail0788a4.ts.net.",
"tornado.tail0788a4.ts.net"
Hacer permanente la configuración
Para que Tailscale Serve se mantenga después de reiniciar:
Crear un servicio rc.d
sudo vim /usr/local/etc/rc.d/tailscale_serve
#!/bin/sh
# PROVIDE: tailscale_serve
# REQUIRE: tailscaled filebrowser
# KEYWORD: shutdown
. /etc/rc.subr
name="tailscale_serve"
rcvar="tailscale_serve_enable"
load_rc_config $name
: ${tailscale_serve_enable:="NO"}
start_cmd="${name}_start"
stop_cmd="${name}_stop"
tailscale_serve_start()
{
echo "Starting Tailscale Serve..."
/usr/local/bin/tailscale serve --bg http://127.0.0.1:8080
}
tailscale_serve_stop()
{
echo "Stopping Tailscale Serve..."
/usr/local/bin/tailscale serve reset
}
run_rc_command "$1"
Otorgar permisos
sudo chmod +x /usr/local/etc/rc.d/tailscale_serve
Habilitar tailscale_serve
sudo sysrc tailscale_serve_enable="YES" sudo service tailscale_serve start
Habilitar HTTPS y Serve en Tailscale
Ir a esta URL desde el navegador:
https://login.tailscale.com/admin/machines
Encontrar su máquina (por ejemplo, "tornado")
Hacer clic en los 3 puntos -> "Enable HTTPS"
En la página que se abre: Marcar "HTTPS certificates" (requerido) NO marque "Funnel" (a menos que quiera acceso público desde Internet)
Nota: Serve = Acceso solo desde tu Tailnet (privado) - Esto es lo que quiere
Hacer clic en "Enable HTTPS and Serve" o "Enable"
Volver a configurar Serve
sudo tailscale serve --bg http://127.0.0.1:8080
Debería funcionar sin errores
Verificar serve
tailscale serve status https://tornado.tail0788a4.ts.net (tailnet only) |-- / proxy http://127.0.0.1:8080
Desde cualquier dispositivo con Tailscale
https://tornado.tail0788a4.ts.netFIGURA iPhone filebrowser
Cuando habilita HTTPS en Tailscale, el nombre de su dispositivo (tornado.tail0788a4.ts.net) se escribirá en un Certificate Transparency Log público. Esto es un requisito de Let's Encrypt y no se puede evitar. Esto NO expone:
Su IP Sus archivos El contenido de tu servidor
Solo registra:
El nombre del dispositivo (tornado.tail0788a4.ts.net)
Comprobar que MagicDNS está habilitado
sudo tailscale status --json | grep -i magic
"InMagicSock": false,
"MagicDNSSuffix": "tail0788a4.ts.net",
"MagicDNSSuffix": "tail0788a4.ts.net",
"MagicDNSEnabled": true
"InMagicSock": true,
"InMagicSock": true,
"InMagicSock": true,
"InMagicSock": true,
Ver logs de error
sudo tail -50 /home/carlos/.config/filebrowser/filebrowser.log
Configuración final completada
Elemento Valor URL de acceso https://tornado.tail0788a4.ts.net Certificado SSL Let's Encrypt (válido, sin advertencias) FileBrowser HTTP en localhost:8080 Tailscale Serve HTTPS proxy en puerto 443 Acceso Solo desde su Tailnet (privado) Usuario carlos Usuario no privilegiado invitadoFreeBSD es genial!.
No hay comentarios:
Publicar un comentario