Fuente:
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
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: NETWORKING DAEMON tailscaled
# KEYWORD: shutdown
. /etc/rc.subr
name="filebrowser"
desc="Web File Browser"
rcvar="${name}_enable"
load_rc_config $name
: ${filebrowser_enable:="NO"}
: ${filebrowser_runas:="carlos"}
: ${filebrowser_config:="/home/carlos/.config/filebrowser/config.json"}
procname="/usr/local/bin/${name}"
command="/usr/sbin/daemon"
command_args="-c -u ${filebrowser_runas} -t \"${desc}\" \
${procname} -c ${filebrowser_config}"
start_precmd="filebrowser_prestart"
filebrowser_prestart()
{
log_file="/home/carlos/.config/filebrowser/filebrowser.log"
if [ ! -f "${log_file}" ]; then
touch "${log_file}"
chown ${filebrowser_runas} "${log_file}"
chmod 640 "${log_file}"
fi
}
run_rc_command "$1"
Permisos correctos
sudo chmod 555 /usr/local/etc/rc.d/filebrowser
Habilitar FileBrowser en rc.conf
sudo sysrc filebrowser_enable="YES"
Comprobar
sudo service filebrowser status
filebrowser is running as pid 1918.
ls -ld /var/run/filebrowser
drwxr-xr-x 2 carlos wheel 3 Apr 3 09:21 /var/run/filebrowser
sudo cat /var/run/filebrowser/filebrowser.pid
1918
tail -10 /home/carlos/.config/filebrowser/filebrowser.log
2026/04/02 23:57:05 Listening on [::]:8080
2026/04/03 08:40:10 Got signal: terminated
2026/04/03 08:40:10 Stopped serving new connections.
2026/04/03 08:40:10 Graceful shutdown complete.
2026/04/03 08:41:06 Listening on [::]:8080
2026/04/03 08:46:48 Got signal: terminated
2026/04/03 08:46:48 Stopped serving new connections.
2026/04/03 08:46:48 Graceful shutdown complete.
2026/04/03 08:47:40 Listening on [::]:8080
2026/04/03 09:21:27 Listening on [::]:8080
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
Password:
filebrowser is running as pid 4721
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 | grep filebrowser
carlos 5542 0.0 0.4 1270900 30200 - I 23:57 \
0:05.52 /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
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 /var/run/filebrowser/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.net
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,
FileBrowser no arranca
Limpiar procesos
sudo pkill -9 filebrowser
rm -f /var/run/filebrowser/filebrowser.pid
Ver error exacto
filebrowser -c /home/carlos/.config/filebrowser/config.json
2026/03/27 09:17:02 Using config file: /home/carlos/.config/filebrowser/config.json
2026/03/27 09:17:02 Using database: /home/carlos/.config/filebrowser/filebrowser.db
Ver logs
tail -50 /home/carlos/.config/filebrowser/filebrowser.log
Iniciar filebrowser manualmente
filebrowser -c /home/carlos/.config/filebrowser/config.json &
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 invitado
https://gnulinuxcodigo.blogspot.com/2026/04/crear-rotacion-de-logs-filebrowser.html
FreeBSD es genial!.