Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
domain-locker — Gestor centralizado de cartera de dominios con datos WHOIS, DNS y SSL obtenidos automáticamente, alertas de caducidad, monitoreo de disponibilidad y análisis visuales. Auto-alojable con Docker. | Kitploit
Herramientas/GitHubGitHub/lissy93/domain-locker
Seguridad Web
GitHublissy93/domain-locker

domain-locker

Gestor centralizado de cartera de dominios con datos WHOIS, DNS y SSL obtenidos automáticamente, alertas de caducidad, monitoreo de disponibilidad y análisis visuales. Auto-alojable con Docker.

Ver RepositorioSitio web
1.5k117hace 4 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Domain Locker

El centro principal para todos tus nombres de dominio
🌐domain-locker.com

Contenido
  • Acerca de
    • Captura de pantalla
    • Características
    • Demo en vivo
  • Cómo empezar
    • Domain-Locker.com
    • Autoalojamiento
  • Desarrollo
    • Configuración de la aplicación
    • Arquitectura
  • Contribuir
  • Atribuciones
  • Licencia

Acerca de

El objetivo de Domain Locker es brindarte visibilidad completa de tu cartera de nombres de dominio, en un solo lugar central.

Para cada dominio que agregues, lo analizamos y obtenemos todos los datos asociados. Luego, monitoreamos continuamente tus dominios y te notificamos (según tus preferencias) cuando ocurre algún cambio importante o cuando está próximo a caducar. Así obtendrás análisis detallados del dominio, información de seguridad, historial de cambios, rendimiento reciente, datos de valoración y mucho más.

Con Domain Locker, nunca más perderás el rastro de tus dominios, te perderás una caducidad, u olvidarás qué registrador y proveedores utiliza cada dominio.

Captura de pantalla

Más capturas de pantalla...

(Perdón por los 5 fps, ¡quería mantener el tamaño del archivo reducido!)


Características

  • 👁️ Visibilidad total de todos tus dominios y próximas caducidades
  • 📡 Datos obtenidos automáticamente: certificados SSL, hosts, registradores, IPs, subdominios, DNS, etc.
  • 🔬 Visualiza métricas detalladas y análisis de cada dominio
  • 📊 Analíticas visuales y desgloses y tendencias en tu cartera
  • 💬 Alertas configurables y notificaciones via webhook
  • 🗃️ Importación/exportación sencilla, así como acceso a datos por API
  • 📜 Seguimiento de cambios en la configuración del dominio a lo largo del tiempo
  • 📈 Monitoreo de la salud, seguridad y rendimiento del sitio web
  • 💹 Mantén registro de los precios de compra y costos de renovación
  • 🔖 Añade categorías y enlaza recursos relacionados a los dominios
  • 🎨 Soporte multilingüe, temas oscuro/claro/personalizados
Más características...```mermaid %%{init: {"theme": "default"}}%% kanban 🌐 Domain Data 🛰️ Auto-fetch assets: SSL, hosts, registrars, IPs, DNS, subdomains 🔎 Detailed domain data like SSL, hosts, registrars, IPs and more 🏷️ Enrich data with tags, notes, costs, and other metadata to track 🖇️ Connection with external tools for more data 📊 Metrics 🗂️ Breakdown of domain providers: registrars, SSL, hosts 🕒 Timeline of registrations and upcoming expirations 📶 Monitor domain uptime, performance and health 💹 Record valuation, purchase prices and renewal costs 🔔 Notifications ⏱️ Get notified before your domain is due to expire 📲 Configurable alerts for monitoring changes in domain config 📬 Multiple channels: webhook, email, SMS, Slack, Telegram, WhatsApp and more 🛤️ Track change history of each domain 🛡️ Data 💽 Own your data: Export, import, delte at any time ⌨️ Programatic access via a REST or GraphQL API, or with RSS, iCal, Prometheus integrations 📈 Keep detailed change logs of all domain updates 🔐 Transparent privacy policy 🛠️ Customization 👤 SSO and 2FA supported 🎨 Custom themes, fonts, light/dark mode 🌍 Multi-language support 💻 Open-source and self-hostable ✅ Accessible, responsive, and well-documented ```

Demo

Prueba la demo en vivo en demo.domain-locker.com
(Usuario: [email protected] Contraseña: domainlocker)


Comenzar

Para usar Domain Locker, tienes dos opciones:

  1. 💻 La instancia gestionada, en domain-locker.com (gratis)
  2. 🏗️ O autoalojamiento mediante Docker (también gratis, ¡por supuesto!)

Opción 1: Domain-Locker.com

Ve a nuestro sitio web y regístrate con Google, GitHub o tu correo electrónico.
El plan inicial es gratuito y no requiere configuración. Solo inicia sesión, añade tus dominios y comienza a rastrearlos.

Opción 2: Autoalojamiento```bash

curl -fsSL https://install.domain-locker.com | bash

root@kitploit:~
Use el comando de una línea anterior, o use el [`docker-compose.yml`](https://github.com/Lissy93/domain-locker/blob/main/docker-compose.yml)

<details>
	<summary>Detalles</summary>

 
- **Requisitos previos**:
  - Domain Locker está diseñado para ejecutarse en un contenedor, por lo que necesitarás Docker [instalado](https://docs.docker.com/engine/install/) en tu sistema anfitrión.
- **Contenedores**:
  - Tenemos una imagen de Docker publicada en [`lissy93/domain-locker`](https://hub.docker.com/r/lissy93/domain-locker).
  - También necesitarás una base de datos Postgres, como el contenedor [`postgres:15-alpine`](https://hub.docker.com/_/postgres?tab=tags&name=15-alpine).
- **Entorno**:
  - Al iniciar el contenedor, enlaza el puerto `3000` del contenedor con tu `PORT` del host (por defecto `3000`).
  - Luego especifica las variables de Postgres: `DL_PG_HOST`, `DL_PG_PORT`, `DL_PG_USER`, `DL_PG_PASSWORD` y `DL_PG_NAME`.
- **Volúmenes**:
  - Monta un volumen en `/var/lib/postgresql/data` para persistir tus datos de Postgres.
- **Crons**:
  - `/api/domain-updater` - Ejecuta esto diariamente, para mantener los datos del dominio actualizados y activar notificaciones
  - `/api/domain-monitor` - Ejecuta esto cada 15 minutos, para monitorear el tiempo de actividad y rendimiento del sitio web
  - `/api/cleanup-monitor-data` - Ejecuta esto semanalmente, para agregar datos antiguos de monitoreo

- **Ejemplo**:
  - Poniendo todo junto, puedes usar nuestro archivo [`docker-compose.yml`](https://github.com/Lissy93/domain-locker/blob/main/docker-compose.yml).
  - Para más detalles, consulta la [Documentación de Auto-Hosting](https://domain-locker.com/about/self-hosting)


<details>
<summary>Diagrama de Docker</summary>```mermaid
flowchart TB
  subgraph Volume Mounts
    direction TB
    Vpostgresdata([📦 postgres_data]) x-. /var/lib/postgresql/data .-x postgres[(🐘 PostgreSQL DB)]
    Vdbschemasql{{📄 ./db/schema.sql}} -. Mounted on Init .-> postgres
  end

  subgraph Network
    direction TB
    domainlockernetwork[/🌐 domain_locker_network/]
  end

  postgres -.- domainlockernetwork

  subgraph app[⚙️ App Container]
    SSR[HTTP Server]
    CLIENT[Client App]
    API[API Endpoints]
    SSR --> CLIENT
    SSR --> API
  end

  app -.- domainlockernetwork

Opción 3: Aplicaciones no oficiales

  • ArtifactHub
  • DockerHub
  • Umbrel
  • Supabase
  • Proxmox
  • TrueNAS
  • EasyPanel (Pendiente)
  • Unraid

Desarrollo

Configuración del proyecto```bash

git clone [email protected]:Lissy93/domain-locker.git # Get the code cd domain-locker # Navigate into directory npm install --legacy-peer-deps # Install dependencies cp .env.example .env # Set environmental variables npm run dev # Start the dev server

root@kitploit:~
- **Requisitos previos**
  - Necesitarás tener Git y Node instalados en tu sistema.
- **Configuración**
  - El archivo de ejemplo `.env.sample` incluye las credenciales públicas para nuestra instancia de desarrollo de Supabase
  - Para usar una base de datos alternativa, consulta la sección [Base de datos](#database) a continuación para configurarla con Postgres
- **Despliegue**
  - Puedes compilar el código con `npm run build` y luego ejecutarlo con `npm start`
  - O, con Docker, compilar el contenedor con `docker build -t domain-locker .`
  - No uses la instancia de desarrollo de Supabase en producción, ya que se limpia con frecuencia.

---

## Arquitectura de la aplicación

#### Stack tecnológico

Domain Locker está compuesto por una aplicación, una base de datos y algunos endpoints de API.
- **La aplicación** está construida con Angular, usando Analog+Nitro con componentes PrimeNg y Tailwind para el estilo
- **El servidor** es una serie de endpoints de Deno con funciones en Typescript
- **La base de datos** puede ser Postgres o Supabase

Mientras que la instancia autoalojada está pensada para ser desplegada de forma independiente, la versión gestionada depende de algunos servicios externos adicionales, que puedes ver a continuación, [cuya documentación está aquí](https://domain-locker.com/about/developing/third-party-docs).

<details>
<summary>¿Por qué?</summary>
¿Angular? Como una especie de broma macabra para mi yo futuro, que luego tiene que mantener esto.
</details>


<p align="center">
<img width="800" src="https://assets.kitploit.com/production/public/readmes/264/1449d16cb6a07bd766d3b86a8de608aaa4075270a0a634cd6f6af1f1a1d70c49.png" />
<br>
<span>Puedes consultar la documentación de las tecnologías y servicios utilizados <a href="https://domain-locker.com/about/developing/third-party-docs">aquí</a></span>
</p>


#### Arquitectura

La arquitectura es bastante simple.
Tenemos una aplicación (que consta de un frontend y endpoints de API), donde el usuario puede leer y escribir en la base de datos (a través de adaptadores). Luego, un servicio cron llamará periódicamente a los endpoints de API para mantener los datos del dominio actualizados, rastrear cambios, monitorear el estado y activar notificaciones ante ciertos cambios (según las preferencias del usuario) o antes de una próxima expiración.```mermaid
graph TD;
    subgraph User Interactions
        User[👤 User] -->|Enter domain| WebApp[🌐 Frontend];
        WebApp -->|Send API request| API[⚙️ Nitro API];
        API -->|Auth Check| Auth[🔐 Auth Service];
        API -->|Store domain info| Database[🗄️ PostgreSQL / Supabase];
    end

    subgraph Automated Cron Jobs
        CronService[⏳ Cron Service] -->|Trigger Updates| EdgeFunctions[⚡ Edge Functions];
        EdgeFunctions -->|Fetch WHOIS, DNS, SSL| ExternalAPIs[🌎 Analysis Services];
        EdgeFunctions -->|Store Data| Database;
        
        CronService -->|Monitor Uptime| WebsiteMonitor[📡 Uptime Monitor];
        WebsiteMonitor -->|Store Metrics| Database;

        CronService -->|Check Expirations| ExpiryChecker[📆 Expiration Check];
        ExpiryChecker -->|Update Status| Database;
        
        CronService -->|Send Notifications| NotificationService[🔔 Notification System];
        NotificationService -->|Email| Resend[📧 Resend];
        NotificationService -->|SMS| Twilio[📱 Twilio];
    end

    Database -->|Serve Data| WebApp;

Base de datos

Se necesita una base de datos para almacenar todos tus dominios e información asociada. Domain Locker admite tanto Supabase como Postgres estándar para almacenar datos. La base de datos utilizada dependerá de qué variables de entorno estén configuradas.

  • Supabase: Sigue la documentación de autoalojamiento de Supabase, luego usa dl-sb-iac para importar el esquema y configurar autenticación, funciones edge, correos electrónicos, etc.

    • Luego configura: las variables de entorno SUPABASE_URL y SUPABASE_ANON_KEY
  • Postgres: Despliega una instancia de Postgres, luego aplica el schema.sql

    • Si la base de datos ya existe: psql -h $DL_PG_HOST -U $DL_PG_USER -d $DL_PG_NAME -f ./db/schema.sql
    • Si se crea desde cero: Usa setup-postgres.sh (requiere acceso de superusuario)
    • Luego configura: DL_PG_HOST, DL_PG_PORT, DL_PG_USER, DL_PG_PASSWORD, `DL_PG_NAME````mermaid classDiagram class users { uuid id text email timestamp created_at timestamp updated_at }
root@kitploit:~
<p align="center"><sub>Puedes descargar el esquema desde <a href="https://github.com/Lissy93/domain-locker/blob/main/db/schema.sql"<code>db/schema.sql</code></a></sub></p>

---

### Contribuir

Las contribuciones, de cualquier tipo, siempre son bienvenidas y muy apreciadas! 💗

Si eres nuevo en Git, el flujo general de contribución es el siguiente:
- Haz un fork del repositorio, [haciendo clic aquí](https://github.com/lissy93/domain-locker/fork)
- Clona tu fork (con `git clone [email protected]:[tu_nombre_de_usuario]/domain-locker.git`)
- Sigue la [Configuración del Proyecto](#project-setup) anterior, para poner el proyecto en funcionamiento en modo de desarrollo
- Implementa tu increíble nueva característica o asombrosa corrección de errores...
- Crea una rama, con `git checkout -b rama-caracteristica`, luego haz `git add` de tus cambios y `git commit` usando commits convencionales, antes de hacer `git push` a tu rama
- Regresa a GitHub, y luego puedes abrir un PR contra nuestra rama `main`. No olvides incluir qué cambiaste, por qué y enlazar a cualquier problema asociado.
- Luego revisaremos, daremos retroalimentación y fusionaremos, y una vez lanzados, tus cambios se publicarán en producción, así como estarán disponibles en la última imagen de Docker.

<details>
	<summary>Ejemplo de Rama Git</summary>```mermaid
%%{init: {"theme": "default"}}%%
gitGraph
    commit id: "Initial commit"
    branch trunk
    commit id: "Feature A"
    commit id: "Feature B"
    commit id: "v1.0.0 (Tag)"
    branch demo
    checkout main
    commit id: "Feature C"
    commit id: "v1.1.0 (Tag)"
    checkout demo
    merge main id: "Merge main into demo"
    checkout main
    commit id: "Feature D"
    commit id: "v1.2.0 (Tag)"
    checkout demo
    merge main id: "Merge main into demo (v1.2.0)"
    checkout main
    branch feature-branch-1
    commit id: "Contributor Feature 1"
    checkout main
    merge feature-branch-1 id: "Merge contributor feature 1"
    commit id: "v1.3.0 (Tag)"
    checkout demo
    merge main id: "Merge main into demo (v1.3.0)"
    checkout main
    branch feature-branch-2
    commit id: "Contributor Feature 2"
    checkout main
    merge feature-branch-2 id: "Merge contributor feature 2"
    commit id: "v1.4.0 (Tag)"
    checkout demo
    merge main id: "Merge main into demo (v1.4.0)"

Atribuciones

Colaboradores

colaboradores

Patrocinadores

patrocinadores


Licencia

Lissy93/Domain-Locker está licenciado bajo MIT © Alicia Sykes 2025.
Para más información, consulta TLDR Legal > MIT

Expandir Licencia``` The MIT License (MIT) Copyright (c) Alicia Sykes

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sub-license, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included install copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANT ABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

root@kitploit:~
</details>

<!-- License + Copyright -->
<p  align="center">
  <i>© <a href="https://aliciasykes.com">Alicia Sykes</a> 2025</i><br>
  <i>Licenciado bajo <a href="https://gist.github.com/Lissy93/143d2ee01ccc5c052a17">MIT</a></i><br>
  <a href="https://github.com/lissy93"><img src="https://assets.kitploit.com/production/public/readmes/264/2dd6b50bb46f34f56ce0166642faf6ef16cd4102cd8a3805f1be707c9f7c0a3d.png" /></a><br>
  <sup>Gracias por visitar :)</sup>
</p>

<!-- Dinosaurs are Awesome -->
<!-- 
                        . - ~ ~ ~ ~ - .
      ..     _      .-~                 ~-.
     //|     \ `..~                        `.
    || |      }  }                /       \  \
(\   \\ \~^..'                   |         }  \
 \`.-~  o      /       }         |        /    \
 (__          |       /          |       /      `.
  `- - ~ ~ -._|      /_ - ~ ~ ~ ^|      /- _      `.
              |     /            |     /     ~-.     ~- _
              |_____|            |_____|         ~ - . _ _~_-_
-->
Descargar herramienta
(Planificado)

class domains { uuid id uuid user_id text domain_name date expiry_date text notes timestamp created_at timestamp updated_at uuid registrar_id timestamp registration_date timestamp updated_date }

class registrars { uuid id text name text url uuid user_id }

class tags { uuid id text name text color text description text icon uuid user_id }

class domain_tags { uuid domain_id uuid tag_id }

class notifications { uuid id uuid user_id uuid domain_id text change_type text message boolean sent boolean read timestamp created_at }

class billing { uuid id uuid user_id text current_plan timestamp next_payment_due text billing_method timestamp created_at timestamp updated_at jsonb meta }

class dns_records { uuid id uuid domain_id text record_type text record_value timestamp created_at timestamp updated_at }

class domain_costings { uuid id uuid domain_id numeric purchase_price numeric current_value numeric renewal_cost boolean auto_renew timestamp created_at timestamp updated_at }

class domain_hosts { uuid domain_id uuid host_id }

class domain_links { uuid id uuid domain_id text link_name text link_url timestamp created_at timestamp updated_at text link_description }

class domain_statuses { uuid id uuid domain_id text status_code timestamp created_at }

class domain_updates { uuid id uuid domain_id uuid user_id text change text change_type text old_value text new_value timestamp date }

class uptime { uuid id uuid domain_id timestamp checked_at boolean is_up integer response_code numeric response_time_ms numeric dns_lookup_time_ms numeric ssl_handshake_time_ms timestamp created_at }

class ssl_certificates { uuid id uuid domain_id text issuer text issuer_country text subject date valid_from date valid_to text fingerprint integer key_size text signature_algorithm timestamp created_at timestamp updated_at }

class whois_info { uuid id uuid domain_id text country text state text name text organization text street text city text postal_code }

class user_info { uuid id uuid user_id jsonb notification_channels timestamp created_at timestamp updated_at text current_plan }

class hosts { uuid id inet ip numeric lat numeric lon text isp text org text as_number text city text region text country uuid user_id }

class ip_addresses { uuid id uuid domain_id inet ip_address boolean is_ipv6 timestamp created_at timestamp updated_at }

class notification_preferences { uuid id uuid domain_id text notification_type boolean is_enabled timestamp created_at timestamp updated_at }

class sub_domains { uuid id uuid domain_id text name timestamp created_at timestamp updated_at jsonb sd_info }

users --> domains : user_id registrars --> domains : registrar_id users --> registrars : user_id users --> tags : user_id domains --> domain_tags : domain_id tags --> domain_tags : tag_id users --> notifications : user_id domains --> notifications : domain_id users --> billing : user_id domains --> dns_records : domain_id domains --> domain_costings : domain_id domains --> domain_hosts : domain_id hosts --> domain_hosts : host_id domains --> domain_links : domain_id domains --> domain_statuses : domain_id domains --> domain_updates : domain_id users --> domain_updates : user_id domains --> uptime : domain_id domains --> ssl_certificates : domain_id domains --> whois_info : domain_id users --> user_info : user_id users --> hosts : user_id domains --> ip_addresses : domain_id domains --> notification_preferences : domain_id domains --> sub_domains : domain_id