diff --git a/docs/categories/index.html b/docs/categories/index.html new file mode 100644 index 0000000..c8100db --- /dev/null +++ b/docs/categories/index.html @@ -0,0 +1,11 @@ +Categories · wireguard_webadmin

Categories

\ No newline at end of file diff --git a/docs/categories/index.xml b/docs/categories/index.xml new file mode 100644 index 0000000..435ab14 --- /dev/null +++ b/docs/categories/index.xml @@ -0,0 +1 @@ +Categories on wireguard_webadminhttps://wireguard-webadmin.com/categories/Recent content in Categories on wireguard_webadminHugoen-us \ No newline at end of file diff --git a/docs/css/main.min.css b/docs/css/main.min.css new file mode 100644 index 0000000..23d82d2 --- /dev/null +++ b/docs/css/main.min.css @@ -0,0 +1 @@ +*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0d1117;--bg2:#161b22;--bg3:#21262d;--border:#30363d;--text:#e6edf3;--text-muted:#8b949e;--accent:#58a6ff;--accent2:#3fb950;--accent3:#f78166;--accent4:#d2a8ff;--font-mono:'JetBrains Mono', 'Fira Mono', 'Cascadia Code', monospace;--font-sans:'Inter', system-ui, -apple-system, sans-serif;--radius:8px;--max-w:1100px}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:16px;line-height:1.6}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}img{max-width:100%;display:block;border-radius:var(--radius)}h1,h2,h3,h4{line-height:1.2;font-weight:700}h1{font-size:clamp(2rem,5vw,3.2rem)}h2{font-size:clamp(1.4rem,3vw,2rem)}h3{font-size:1.2rem}code,pre{font-family:var(--font-mono);font-size:.9em}pre{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem 1.5rem;overflow-x:auto;line-height:1.7}code:not(pre code){background:var(--bg3);border:1px solid var(--border);border-radius:4px;padding:.15em .4em}.container{max-width:var(--max-w);margin:0 auto;padding:0 1.5rem}section{padding:5rem 0}section:nth-child(even){background:var(--bg2)}.section-label{font-family:var(--font-mono);font-size:.75rem;color:var(--accent);letter-spacing:.12em;text-transform:uppercase;margin-bottom:.75rem}.section-title{margin-bottom:1rem}.section-sub{color:var(--text-muted);font-size:1.05rem;max-width:620px}.site-header{position:sticky;top:0;z-index:100;background:rgba(13,17,23,.92);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);isolation:isolate}.nav-inner{display:flex;align-items:center;justify-content:space-between;height:56px;gap:2rem}.nav-logo{font-family:var(--font-mono);font-size:.95rem;color:var(--text);font-weight:600;white-space:nowrap}.nav-logo span{color:var(--accent)}.hamburger{display:none;flex-direction:column;justify-content:center;gap:5px;background:0 0;border:none;cursor:pointer;padding:.4rem;border-radius:var(--radius)}.hamburger span{display:block;width:22px;height:2px;background:var(--text);border-radius:2px;transition:all .2s}.hamburger.open span:nth-child(1){transform:translateY(7px)rotate(45deg)}.hamburger.open span:nth-child(2){opacity:0}.hamburger.open span:nth-child(3){transform:translateY(-7px)rotate(-45deg)}.nav-links{display:flex;align-items:center;gap:.25rem;list-style:none}.nav-links a{color:var(--text-muted);font-size:.9rem;padding:.4rem .75rem;border-radius:var(--radius);transition:color .15s,background .15s}.nav-links a:hover{color:var(--text);background:var(--bg3);text-decoration:none}.nav-links .nav-github{color:var(--text);background:var(--bg3);border:1px solid var(--border);font-size:.85rem;display:flex;align-items:center;gap:.4rem}.nav-links .nav-github:hover{border-color:var(--accent);background:var(--bg3)}.nav-lang-sep{width:1px;height:16px;background:var(--border);margin:0 .25rem;align-self:center;flex-shrink:0}.lang-dropdown{position:relative;list-style:none}.lang-btn{display:flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted);background:0 0;border:1px solid var(--border);border-radius:var(--radius);padding:.35rem .65rem;cursor:pointer;transition:color .15s,border-color .15s;white-space:nowrap}.lang-btn:hover,.lang-dropdown.open .lang-btn{color:var(--text);border-color:var(--accent)}.lang-menu{display:none;position:absolute;top:calc(100% + .5rem);right:0;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:.35rem;min-width:150px;list-style:none;z-index:200;box-shadow:0 8px 24px rgba(0,0,0,.4)}.lang-dropdown.open .lang-menu{display:block}.lang-menu li a{display:flex;align-items:center;gap:.6rem;padding:.5rem .75rem;border-radius:6px;font-size:.88rem;color:var(--text-muted);transition:background .15s,color .15s;text-decoration:none}.lang-menu li a:hover{background:var(--bg3);color:var(--text)}.lang-menu li a.lang-active{color:var(--accent)}.lang-flag{font-size:1rem}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.65rem 1.4rem;border-radius:var(--radius);font-size:.95rem;font-weight:600;transition:all .15s;cursor:pointer;border:none;text-decoration:none}.btn-primary{background:var(--accent);color:#0d1117}.btn-primary:hover{background:#79c0ff;text-decoration:none;color:#0d1117}.btn-outline{background:0 0;color:var(--text);border:1px solid var(--border)}.btn-outline:hover{background:var(--bg3);border-color:var(--accent);text-decoration:none}.btn-group{display:flex;gap:.75rem;flex-wrap:wrap}.hero{padding:6rem 0 5rem;position:relative;overflow:hidden}.hero::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 70% 60% at 60% 0%,rgba(88,166,255,7%) 0%,transparent 70%),radial-gradient(ellipse 50% 40% at 0% 100%,rgba(63,185,80,5%) 0%,transparent 60%);pointer-events:none}.hero-eyebrow{font-family:var(--font-mono);font-size:.8rem;color:var(--accent2);letter-spacing:.1em;text-transform:uppercase;margin-bottom:1.25rem;display:flex;align-items:center;gap:.5rem}.hero-eyebrow::before{content:'';display:inline-block;width:20px;height:1px;background:var(--accent2)}.hero h1{margin-bottom:1.25rem}.hero h1 em{font-style:normal;color:var(--accent)}.hero-sub{font-size:1.15rem;color:var(--text-muted);max-width:560px;margin-bottom:1rem;line-height:1.7}.hero-note{font-size:.85rem;color:var(--text-muted);margin-bottom:2.5rem;opacity:.7}.hero-screenshot{margin-top:4rem;border:1px solid var(--border);border-radius:10px;overflow:hidden;box-shadow:0 24px 64px rgba(0,0,0,.5)}.theme-crossfade{position:relative;display:block;line-height:0}.theme-crossfade img{display:block;width:100%;border-radius:0}.crossfade-light{position:relative;z-index:1}.crossfade-dark{position:absolute;inset:0;z-index:2;animation:hero-theme-fade 6s ease-in-out infinite}@keyframes hero-theme-fade{0%{opacity:1}35%{opacity:1}50%{opacity:0}85%{opacity:0}100%{opacity:1}}.pillars-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.5rem;margin-top:3rem}.pillar-card{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius);padding:2rem;transition:border-color .2s}.pillar-card:hover{border-color:var(--accent)}.pillar-icon{font-size:1.5rem;margin-bottom:1rem}.pillar-card h3{color:var(--accent);margin-bottom:.75rem;font-family:var(--font-mono)}.pillar-card p{color:var(--text-muted);font-size:.95rem;line-height:1.6}.pillar-list{list-style:none;margin-top:.75rem;display:flex;flex-direction:column;gap:.3rem}.pillar-list li{color:var(--text-muted);font-size:.9rem;padding-left:1rem;position:relative}.pillar-list li::before{content:'›';position:absolute;left:0;color:var(--accent)}.spotlight{display:grid;grid-template-columns:1fr 1fr;gap:4rem;align-items:center}.spotlight.reverse{direction:rtl}.spotlight.reverse>*{direction:ltr}.spotlight-content h2{margin-bottom:1rem}.spotlight-content p{color:var(--text-muted);margin-bottom:1.25rem;line-height:1.7}.tag-list{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}.tag{font-family:var(--font-mono);font-size:.78rem;padding:.25rem .65rem;border-radius:4px;border:1px solid var(--border);color:var(--text-muted);background:var(--bg3)}.tag.green{border-color:var(--accent2);color:var(--accent2)}.tag.blue{border-color:var(--accent);color:var(--accent)}.tag.purple{border-color:var(--accent4);color:var(--accent4)}.spotlight-image{border:1px solid var(--border);border-radius:10px;overflow:hidden;box-shadow:0 12px 40px rgba(0,0,0,.4)}.deploy-teaser{display:flex;align-items:center;justify-content:space-between;gap:3rem}.deploy-teaser-text{flex:1;min-width:280px}.deploy-teaser-text .section-label{margin-bottom:.75rem}.deploy-teaser-text h2{margin-bottom:.75rem}.deploy-teaser-text .section-sub{margin-bottom:0}.deploy-teaser .btn{flex-shrink:0;padding:.85rem 2rem;font-size:1rem}.cmd-inline{font-family:var(--font-mono);color:var(--accent2)}.deploy-steps{display:flex;flex-direction:column;gap:0;margin-top:2.5rem;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.deploy-step-card{display:flex;align-items:stretch;border-bottom:1px solid var(--border);background:var(--bg2);transition:background .15s}.deploy-step-card:last-child{border-bottom:none}.deploy-step-card:hover{background:var(--bg3)}.deploy-step-num{font-family:var(--font-mono);font-size:.72rem;color:var(--accent);padding:1.1rem 1.25rem;border-right:1px solid var(--border);min-width:3.5rem;display:flex;align-items:center;justify-content:center;letter-spacing:.05em;flex-shrink:0}.deploy-step-body{padding:.9rem 1.25rem;flex:1;display:flex;flex-direction:column;gap:.4rem}.deploy-step-label{font-size:.75rem;color:var(--text-muted);letter-spacing:.05em}.deploy-step-body pre{background:0 0;border:none;padding:0;margin:0;font-size:.88rem;line-height:1.6}.tabs{display:flex;gap:0;border-bottom:1px solid var(--border);margin-bottom:0}.tab-btn{font-family:var(--font-mono);font-size:.85rem;padding:.65rem 1.25rem;background:0 0;border:none;border-bottom:2px solid transparent;color:var(--text-muted);cursor:pointer;transition:all .15s;margin-bottom:-1px}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-btn:hover:not(.active){color:var(--text)}.tab-panel{display:none}.tab-panel.active{display:block}.tab-wrap{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.deploy-step{display:flex;gap:1rem;align-items:flex-start;margin-bottom:.5rem}.step-num{font-family:var(--font-mono);font-size:.75rem;color:var(--accent);min-width:1.5rem;padding-top:.2rem}.screenshot-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.5rem;margin-top:3rem}.screenshot-item{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:border-color .2s,transform .2s}.screenshot-item:hover{border-color:var(--accent);transform:translateY(-2px)}.screenshot-item img{width:100%;height:220px;object-fit:cover;object-position:top;border-radius:0;display:block}.screenshot-caption{padding:1rem 1.25rem}.screenshot-label{font-family:var(--font-mono);font-size:.78rem;color:var(--accent);letter-spacing:.08em;text-transform:uppercase;display:block;margin-bottom:.35rem}.screenshot-caption p{font-size:.88rem;color:var(--text-muted);line-height:1.5;margin:0}@media(max-width:600px){.screenshot-grid{grid-template-columns:1fr}}.feature-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;margin-top:3rem}.feature-item{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem;display:flex;gap:.75rem;align-items:flex-start;transition:border-color .2s}.feature-item:hover{border-color:var(--border)}.feature-icon{font-size:1.1rem;flex-shrink:0;margin-top:.1rem}.feature-item h4{font-size:.9rem;margin-bottom:.25rem}.feature-item p{font-size:.82rem;color:var(--text-muted);line-height:1.5}.compare-wrap{margin-top:3rem;overflow-x:auto}.compare-table{width:100%;border-collapse:collapse;font-size:.92rem}.compare-table th,.compare-table td{padding:.85rem 1.25rem;text-align:center;border-bottom:1px solid var(--border)}.compare-table th:first-child,.compare-table td:first-child{text-align:left;color:var(--text-muted)}.compare-table thead th{font-family:var(--font-mono);font-size:.8rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;background:var(--bg3)}.compare-table thead th.highlight{color:var(--accent);background:rgba(88,166,255,7%)}.compare-table tr:hover td{background:rgba(255,255,255,2%)}.check-yes{color:var(--accent2);font-size:1rem}.check-no{color:var(--border);font-size:1rem}.check-partial{color:#e3b341;font-size:.85rem}.roadmap-list{display:flex;flex-direction:column;gap:1rem;margin-top:2.5rem;max-width:680px}.roadmap-item{display:flex;align-items:flex-start;gap:1rem;padding:1.25rem;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius)}.roadmap-badge{font-family:var(--font-mono);font-size:.7rem;padding:.2rem .6rem;border-radius:20px;white-space:nowrap;flex-shrink:0;margin-top:.15rem}.roadmap-badge.soon{background:rgba(227,179,65,.15);color:#e3b341;border:1px solid rgba(227,179,65,.3)}.roadmap-badge.wip{background:rgba(88,166,255,.1);color:var(--accent);border:1px solid rgba(88,166,255,.3)}.roadmap-badge.planned{background:rgba(139,148,158,.1);color:var(--text-muted);border:1px solid var(--border)}.roadmap-item h4{font-size:.95rem;margin-bottom:.25rem}.roadmap-item p{font-size:.85rem;color:var(--text-muted)}.site-footer{border-top:1px solid var(--border);padding:3rem 0;background:var(--bg)}.footer-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1.5rem}.footer-logo{font-family:var(--font-mono);font-size:.9rem;color:var(--text-muted)}.footer-logo span{color:var(--accent)}.footer-links{display:flex;gap:1.5rem;list-style:none;flex-wrap:wrap}.footer-links a{color:var(--text-muted);font-size:.88rem;transition:color .15s}.footer-links a:hover{color:var(--text);text-decoration:none}.footer-built{font-size:.82rem;color:var(--text-muted)}.footer-built a{color:var(--text-muted)}.footer-built a:hover{color:var(--accent)}.page-hero{padding:4rem 0 3rem;border-bottom:1px solid var(--border)}.page-content{padding:4rem 0}.page-content h2{margin:2.5rem 0 1rem}.page-content h3{margin:2rem 0 .75rem;color:var(--accent);font-family:var(--font-mono)}.page-content p{color:var(--text-muted);margin-bottom:1rem;line-height:1.7}.page-content ul{list-style:none;padding:0;margin-bottom:1.25rem}.page-content ul li{color:var(--text-muted);padding:.2rem 0 .2rem 1.25rem;position:relative;font-size:.95rem}.page-content ul li::before{content:'›';position:absolute;left:0;color:var(--accent)}.flow-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin:2rem 0}.flow-card{background:var(--bg3);border:1px solid var(--border);border-radius:14px;padding:1.25rem;display:flex;flex-direction:column;gap:1rem}.flow-card-header{display:flex;align-items:center;gap:.65rem;font-size:.9rem;color:var(--text)}.flow-card-num{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;border-radius:50%;background:rgba(31,111,139,.35);color:#7dd4e8;font-family:var(--font-mono);font-size:.78rem;font-weight:600;flex-shrink:0}.flow-card p,.page-content .flow-card p{font-size:.9rem;color:var(--text-muted);line-height:1.6;margin:0}@media(max-width:860px){.flow-cards{grid-template-columns:repeat(2,1fr)}}@media(max-width:480px){.flow-cards{grid-template-columns:1fr}}.auth-list{margin-top:1.5rem;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.auth-row{display:grid;grid-template-columns:180px 1fr;align-items:baseline;gap:1.5rem;padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.auth-row:last-child{border-bottom:none}.auth-row:hover{background:var(--bg3)}.auth-row-name{font-family:var(--font-mono);font-size:.85rem;color:var(--accent);display:flex;align-items:center;gap:.5rem;flex-shrink:0}.auth-coming{font-family:var(--font-mono);font-size:.68rem;color:var(--text-muted);background:var(--bg3);border:1px solid var(--border);border-radius:20px;padding:.1rem .45rem}.auth-row-desc,.page-content .auth-row-desc{font-size:.9rem;color:var(--text-muted);line-height:1.55;margin:0}@media(max-width:600px){.auth-row{grid-template-columns:1fr;gap:.4rem}}.callout{border-left:3px solid var(--accent);background:rgba(88,166,255,5%);border-radius:0 var(--radius)var(--radius)0;padding:1rem 1.25rem;margin:1.5rem 0}.callout.green{border-color:var(--accent2);background:rgba(63,185,80,5%)}.callout.yellow{border-color:#e3b341;background:rgba(227,179,65,5%)}.callout p{color:var(--text);margin:0;font-size:.93rem}.callout strong{color:inherit}.env-table{width:100%;border-collapse:collapse;font-size:.88rem;margin:1.5rem 0}.env-table th{text-align:left;padding:.6rem 1rem;background:var(--bg3);color:var(--text-muted);font-family:var(--font-mono);font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border)}.env-table td{padding:.75rem 1rem;border-bottom:1px solid var(--border);vertical-align:top}.env-table td:first-child{font-family:var(--font-mono);font-size:.82rem;color:var(--accent);white-space:nowrap;width:220px;padding-right:2rem}.env-table td:last-child{color:var(--text-muted)}.involve-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.25rem;margin-top:2.5rem}.involve-card{background:var(--bg3);border:1px solid var(--border);border-radius:12px;padding:2rem;display:flex;flex-direction:column;gap:.75rem;transition:border-color .2s}.involve-card:hover{border-color:var(--accent)}.involve-card--highlight{border-color:rgba(88,166,255,.3);background:rgba(88,166,255,4%)}.involve-card-icon{font-size:1.6rem}.involve-card h3{font-size:1.05rem;margin:0}.involve-card p,.page-content .involve-card p{font-size:.92rem;color:var(--text-muted);line-height:1.65;margin:0;flex:1}.involve-card .btn{align-self:flex-start;margin-top:.5rem}.involve-footer{margin-top:3rem;padding:2.5rem 2rem;border:1px solid rgba(88,166,255,.25);border-radius:12px;text-align:center;background:rgba(88,166,255,4%);position:relative;overflow:hidden}.involve-footer::before{content:'📣';font-size:2rem;display:block;margin-bottom:1rem}.involve-footer h4{font-size:1.1rem;margin-bottom:.75rem;color:var(--text)}.involve-footer p,.page-content .involve-footer p{color:var(--text-muted);font-size:.95rem;line-height:1.7;margin:0;max-width:520px;margin:0 auto}@media(max-width:640px){.involve-grid{grid-template-columns:1fr}}@media(max-width:768px){.spotlight{grid-template-columns:1fr;gap:2rem}.spotlight.reverse{direction:ltr}.nav-links{display:none;position:absolute;top:56px;left:0;right:0;background:var(--bg);flex-direction:column;align-items:stretch;padding:.5rem 1rem 1rem;gap:.1rem;border-bottom:1px solid var(--border);z-index:99;box-shadow:0 8px 24px rgba(0,0,0,.4)}.nav-links.open{display:flex}.nav-links li{width:100%}.nav-links a{display:flex;padding:.6rem .75rem;font-size:.95rem;border-radius:var(--radius)}.nav-links .nav-github{justify-content:flex-start}.nav-lang-sep{width:100%;height:1px;margin:.4rem 0}.lang-dropdown{width:100%}.lang-btn{width:100%;justify-content:space-between;padding:.6rem .75rem;border-radius:var(--radius)}.lang-menu{position:static;box-shadow:none;border:1px solid var(--border);background:var(--bg3);margin-top:.25rem;display:none}.lang-dropdown.open .lang-menu{display:block}.hamburger{display:flex}section{padding:3.5rem 0}.footer-inner{flex-direction:column;gap:1rem}.flow-diagram{gap:0}} \ No newline at end of file diff --git a/docs/de/categories/index.html b/docs/de/categories/index.html new file mode 100644 index 0000000..b125fc3 --- /dev/null +++ b/docs/de/categories/index.html @@ -0,0 +1,11 @@ +Categories · wireguard_webadmin

Categories

\ No newline at end of file diff --git a/docs/de/categories/index.xml b/docs/de/categories/index.xml new file mode 100644 index 0000000..c6c7ea1 --- /dev/null +++ b/docs/de/categories/index.xml @@ -0,0 +1 @@ +Categories on wireguard_webadminhttps://wireguard-webadmin.com/de/categories/Recent content in Categories on wireguard_webadminHugode \ No newline at end of file diff --git a/docs/de/deployment/index.html b/docs/de/deployment/index.html new file mode 100644 index 0000000..9c17738 --- /dev/null +++ b/docs/de/deployment/index.html @@ -0,0 +1,21 @@ +Installationsanleitung · wireguard_webadmin

Installationsanleitung

Von null zu einem funktionierenden WireGuard-VPN-Admin-Panel in weniger als fünf Minuten.

Voraussetzungen

  • Ein Linux-Server, der von dem Ort aus erreichbar ist, von dem Sie ihn verwalten
  • Docker und Docker Compose installiert
  • Ein Domainname, der auf die IP Ihres Servers zeigt
  • Die Ports 80 und 443 offen für Caddy sowie der WireGuard-UDP-Port offen (standardmäßig 51820)

Caddy benötigt einen gültigen DNS-Namen, intern oder öffentlich, der auf Ihren Server zeigt, damit SSL-Zertifikate automatisch bezogen und erneuert werden können.


Bereitstellung

+ + +
mkdir wireguard_webadmin && cd wireguard_webadmin
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml

Erstellen Sie im selben Verzeichnis eine Datei namens .env. Setzen Sie SERVER_ADDRESS auf Ihre Domain:

SERVER_ADDRESS=vpn.example.com
+DEBUG_MODE=False
+TIMEZONE=America/Sao_Paulo

Alle verfügbaren Variablen finden Sie weiter unten in der .env-Referenz.

docker compose up -d

Rufen Sie das Panel unter https://vpn.example.com auf. Caddy bezieht und erneuert SSL-Zertifikate automatisch.


.env-Referenz

VariableErforderlichBeschreibung
SERVER_ADDRESSJaDNS-Name oder IP Ihres Servers. Muss genau dem entsprechen, was Sie im Browser eingeben, sonst kommt es zu CSRF-Fehlern.
DEBUG_MODENeinSetzen Sie den Wert auf True, um den Django-Debug-Modus zu aktivieren. Niemals in Produktion verwenden. Standard: False.
TIMEZONENeinZeitzone der Anwendung. Verwenden Sie einen Wert aus der tz-Datenbank. Standard: America/Sao_Paulo.
EXTRA_ALLOWED_HOSTSNeinZusätzliche Hostnamen, die Django akzeptieren soll, kommagetrennt. SERVER_ADDRESS ist immer enthalten. Beispiel: app1.example.com,app2.example.com:8443.
WIREGUARD_STATUS_CACHE_ENABLEDNeinZwischenspeichert den WireGuard-Status, um Aufrufe von wg zu reduzieren. Standard: True.
WIREGUARD_STATUS_CACHE_REFRESH_INTERVALNeinWie oft der Cache aktualisiert wird, in Sekunden. Erlaubte Werte: 30, 60, 150, 300. Standard: 60.
WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNTNeinWie viele zwischengespeicherte Snapshots beim Laden der Seite vorgeladen werden sollen (0-9). Höhere Werte befüllen Traffic-Diagramme sofort. Niedriger setzen, wenn die Peer-Liste langsam wirkt. Standard: 9.

Upgrade

Die Daten werden in Docker-Volumes gespeichert. Ein Upgrade wirkt sich nicht auf Ihre Peers, Firewall-Regeln, DNS-Einträge oder andere Konfigurationen aus.

01
Ins Projektverzeichnis wechseln
cd wireguard_webadmin
02
Dienste stoppen und neueste Images abrufen
docker compose down
+docker compose pull
03
Ihre Daten sichern
tar cvfz wireguard-webadmin-backup-$(date +%Y-%m-%d-%H%M%S).tar.gz \
+  /var/lib/docker/volumes/wireguard_webadmin_wireguard/_data/ \
+  /var/lib/docker/volumes/wireguard_webadmin_rrd_data/_data/
04
Compose-Datei aktualisieren
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml
05
Aktualisierten Stack starten
docker compose up -d
06
Logs auf unerwartete Fehler prüfen
docker compose logs wireguard_webadmin

Fehlerbehebung

Caddy erhält kein Zertifikat

  • Prüfen Sie, ob der A-Record Ihrer Domain auf die öffentliche IP des Servers zeigt
  • Vergewissern Sie sich, dass die Ports 80 und 443 offen sind und upstream nicht blockiert werden
  • Prüfen Sie die Caddy-Logs: docker compose logs caddy

Das Panel lädt nicht

  • Prüfen Sie, ob alle Container laufen: docker compose ps
  • Suchen Sie nach Fehlern: docker compose logs wireguard_webadmin
  • Vergewissern Sie sich, dass SERVER_ADDRESS in .env exakt dem entspricht, was Sie im Browser eingeben

CSRF-Fehler beim Login

SERVER_ADDRESS ist falsch konfiguriert. Er muss genau dem Hostnamen entsprechen, inklusive Port bei nicht standardmäßigen Ports, unter dem das Panel aufgerufen wird. Aktualisieren Sie .env und starten Sie mit docker compose up -d neu.

WireGuard-Peers können keine Verbindung herstellen

  • Vergewissern Sie sich, dass der WireGuard-UDP-Port auf der Host-Firewall offen ist. Standardmäßig ist das 51820, aber bei mehreren Instanzen benötigt jede ihren eigenen Port.
  • Stellen Sie sicher, dass der in docker-compose.yml deklarierte UDP-Portbereich mit der Konfiguration jeder WireGuard-Instanz im Panel übereinstimmt. Bei einer Abweichung veröffentlicht der Container nicht den richtigen Port auf dem Host.
  • Prüfen Sie, ob IP-Forwarding auf dem Host aktiviert ist: sysctl net.ipv4.ip_forward

Laufende Dienste

DienstRolle
wireguard-webadminDjango-Anwendung — Weboberfläche und API
caddyReverse Proxy und automatisches TLS
auth-gatewayZero-Trust-Autorisierungsschicht — erzwingt Identitätsprüfungen, bevor an den Upstream weitergeleitet wird
cronGeplante Aufgaben — Peer-Aktivierung/-Deaktivierung, Cache-Aktualisierung
rrdtoolTraffic-Verlauf — RRD-Datenerfassung und Diagramme
dnsdnsmasq-basierter Resolver mit Unterstützung für kategoriebasierte Sperrlisten
\ No newline at end of file diff --git a/docs/de/get-involved/index.html b/docs/de/get-involved/index.html new file mode 100644 index 0000000..2ec9a23 --- /dev/null +++ b/docs/de/get-involved/index.html @@ -0,0 +1,11 @@ +Mitmachen · wireguard_webadmin

Mitmachen

wireguard_webadmin wird offen entwickelt. Jeder Beitrag hilft, egal wie groß oder klein er ist.

Repository mit einem Stern markieren

Das Einfachste, was Sie tun können. Es hilft dem Projekt, von anderen Sysadmins entdeckt zu werden, die genau nach so etwas suchen.

Auf GitHub markieren
🐛

Fehler melden

Etwas funktioniert nicht? Öffnen Sie ein Issue auf GitHub. Kein Template nötig, beschreiben Sie einfach, was Sie gesehen haben und wie man es reproduzieren kann.

Issue öffnen
🔧

Code beitragen

Pull Requests sind willkommen. Bei allem, was nicht ganz trivial ist, öffnen Sie bitte zuerst ein Issue, damit wir uns abstimmen können, bevor Sie Zeit in Code investieren. Gute Einstiege sind mit good first issue markierte Tickets, Bugfixes mit klarer Reproduktion und zusätzliche Tests.

Offene PRs ansehen
💬

An der Diskussion teilnehmen

Sie betreiben ein interessantes Setup? Sind auf einen Sonderfall gestoßen? GitHub Discussions ist der richtige Ort für Fragen, Ideen und Anwendungsfälle, die nicht sauber in ein Issue passen.

Zu Discussions
\ No newline at end of file diff --git a/docs/de/index.html b/docs/de/index.html new file mode 100644 index 0000000..e6e620f --- /dev/null +++ b/docs/de/index.html @@ -0,0 +1,14 @@ +wireguard_webadmin — Self-hosted VPN management and Zero Trust access control.
Open Source · Self-hosted · WireGuard

Selbst gehostete VPN-Verwaltung
und Zero Trust-Zugriffskontrolle.

WireGuard-Instanzen, Peer-Verwaltung, Firewall, DNS und sichere App-Veröffentlichung, alles auf Ihrer eigenen Infrastruktur.

Kostenlos und Open Source. Nichts verlässt Ihren Server.

wireguard_webadmin — light mode +wireguard_webadmin — dark mode

Mehr als ein VPN-Panel.

Ein vollständiger Netzwerkverwaltungs-Stack, von der WireGuard-Peer-Steuerung bis zum Zero-Trust-Anwendungs-Gateway.

⚙️

Verwalten

  • Mehrere WireGuard-Instanzen
  • Peer-Verwaltung mit Traffic-Diagrammen
  • Firewall-Regeln & Port-Weiterleitung
  • DNS-Resolver mit Sperrlisten
  • VPN-Einladungslinks mit QR-Code
🔒

Schützen

  • Zero-Trust-Anwendungs-Gateway
  • TOTP-Zwei-Faktor-Authentifizierung
  • Altcha Proof-of-Work gegen Brute Force
  • IP-ACL pro Anwendung
  • OIDC demnächst verfügbar

Automatisieren

  • Geplantes Aktivieren/Deaktivieren von Peers
  • Routing-Vorlagen
  • Einladungslinks mit Ablaufdatum
  • API v2 für Automatisierung
  • Multi-User mit rollenbasierter Rechteverwaltung

Interne Apps sicher veröffentlichen, ohne sie der ganzen Welt zu öffnen.

Mit dem integrierten Application Gateway können Sie Dienste wie Grafana, Proxmox oder jede andere interne Webanwendung mit vorgeschalteter Authentifizierung bereitstellen, ohne Löcher in Ihre Firewall zu reißen oder auf einen Tunnel eines Drittanbieters angewiesen zu sein.

Jede Anfrage geht durch den Gatekeeper: TOTP, lokale Zugangsdaten, IP-ACL und Browser-Validierung mit Proof-of-Work (Altcha), um automatisierte Angriffe zu stoppen.

TOTPIP ACLAltcha PoWSelf-hosted

Mehr erfahren →
Zero Trust application gateway

Vollständige Transparenz über jeden Peer.

Jeder Peer erhält eine eigene Detailansicht: Verbindungsstatus in Echtzeit, kumulierter Traffic, Bandbreitendiagramme als Zeitreihe, letzter Handshake und ein QR-Code für die sofortige erneute Bereitstellung.

Der Traffic-Verlauf wird pro Peer gespeichert, damit Sie die Nutzung im Zeitverlauf prüfen können und nicht nur seit dem letzten Neustart.

Traffic-DiagrammeLetzter HandshakeQR-CodeVerlauf pro Peer
Peer details — traffic graph and metrics

Zeitbasierte Peer-Zugriffskontrolle.

Legen Sie Zeitpläne für jeden VPN-Peer fest. Der Zugriff wird automatisch anhand des von Ihnen konfigurierten Zeitfensters aktiviert und deaktiviert, ganz ohne manuelle Eingriffe.

Praktisch für externe Mitarbeitende, temporären Zugriff, schichtbasierte Richtlinien oder jede Situation, in der Zugriff zeitlich begrenzt sein soll, ohne dass jemand daran denken muss, ihn später wieder zu entziehen.

Zeitbasierte ACLAutomatisiertPro Peer
Peer scheduling interface

Entwickelt für die echte Arbeitsweise von Sysadmins.

Jede Funktion ist nur einen Bildschirm entfernt. Keine vergrabenen Menüs, keine Assistenten-Flows.

Firewall rule management
Firewall

Instanzspezifische iptables-Regeln, Port-Weiterleitungen und ausgehende ACLs, alles über die Benutzeroberfläche verwaltet.

DNS management with blacklists
DNS

Integrierter Resolver mit kategoriebasierten Sperrlisten: Werbung, Malware, Tracking und nicht jugendfreie Inhalte.

VPN invite link with QR code
Einladungslinks

Erstellen Sie einen teilbaren Link mit QR-Code und Konfigurationsdatei. Die Person scannt oder importiert ihn direkt in ihren WireGuard-Client.

Routing templates
Routing-Vorlagen

Definieren Sie erlaubte IPs und Routing-Richtlinien einmal und verwenden Sie sie für Dutzende von Peers wieder.

So einfach wie docker compose up.

Läuft auf jedem Linux-Rechner mit Docker. Caddy übernimmt HTTPS automatisch.

Deployment-Anleitung →

Alles, was Sie brauchen. Nichts, was Sie nicht brauchen.

🖥️

Multi-Arch

Native Images für amd64 und arm64

🌙

Dark Mode

Vollständiger Wechsel zwischen heller und dunkler Oberfläche

👥

Multi-User

Rollenbasierte Berechtigungen pro Benutzer

📊

Traffic-Verlauf

Bandbreitendiagramme pro Peer im Zeitverlauf

🚫

DNS-Sperrliste

Blockierung nach Kategorie: Werbung, Malware, Tracking

🗺️

Routing-Vorlagen

Wiederverwendbare Routing-Konfigurationen für Peers

🔗

API v2

REST-API für externe Automatisierung

🧪

Debug-Konsole

Integrierte Diagnose- und Debug-Werkzeuge

📨

Einladungslinks

QR-Code-Einladungen mit optionalem Ablaufdatum

🔥

Firewall

Instanzspezifische Firewall-Regelverwaltung

📡

Port-Weiterleitung

Ports über VPN-Peers weiterleiten

🔐

TOTP / 2FA

Zwei-Faktor-Auth für Admin und App-Gateway

Was kommt.

Demnächst

OIDC-Authentifizierung

Melden Sie sich mit Ihrem bestehenden Identity Provider an, etwa Keycloak, Authentik, Google Workspace oder einem anderen OIDC-kompatiblen IdP.

In Entwicklung

App Gateway / Gatekeeper v2

Ein leistungsfähigeres Application Gateway mit granularen Richtlinien pro Route, Sitzungsverwaltung und verbessertem Audit-Logging.

Geplant

Peer-Gruppen & Massenaktionen

Gruppieren Sie Peers nach Team, Projekt oder Zugriffsebene. Wenden Sie Firewall-Regeln, Routing-Vorlagen und Zeitpläne auf ganze Gruppen gleichzeitig an.

\ No newline at end of file diff --git a/docs/de/index.xml b/docs/de/index.xml new file mode 100644 index 0000000..e46bbc1 --- /dev/null +++ b/docs/de/index.xml @@ -0,0 +1,55 @@ +wireguard_webadminhttps://wireguard-webadmin.com/de/Recent content on wireguard_webadminHugodeInstallationsanleitunghttps://wireguard-webadmin.com/de/deployment/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/de/deployment/<h2 id="voraussetzungen">Voraussetzungen</h2> +<ul> +<li>Ein Linux-Server, der von dem Ort aus erreichbar ist, von dem Sie ihn verwalten</li> +<li><a href="https://docs.docker.com/engine/install/">Docker</a> und <a href="https://docs.docker.com/compose/install/">Docker Compose</a> installiert</li> +<li>Ein Domainname, der auf die IP Ihres Servers zeigt</li> +<li>Die Ports <strong>80</strong> und <strong>443</strong> offen für Caddy sowie der WireGuard-UDP-Port offen (standardmäßig <strong>51820</strong>)</li> +</ul> +<div class="callout"> + <p><strong>Caddy benötigt einen gültigen DNS-Namen</strong>, intern oder öffentlich, der auf Ihren Server zeigt, damit SSL-Zertifikate automatisch bezogen und erneuert werden können.</p> +</div> +<hr> +<h2 id="bereitstellung">Bereitstellung</h2> +<div class="tab-group"> + <div class="tabs"> + <button class="tab-btn active" data-tab="dep-step-1">1. Verzeichnis erstellen</button> + <button class="tab-btn" data-tab="dep-step-2">2. Compose-Datei abrufen</button> + <button class="tab-btn" data-tab="dep-step-3">3. .env konfigurieren</button> + <button class="tab-btn" data-tab="dep-step-4">4. Starten</button> + </div> + <div class="tab-wrap"> + <div class="tab-panel active" id="dep-step-1"> +<pre><code>mkdir wireguard_webadmin && cd wireguard_webadmin</code></pre> + </div> + <div class="tab-panel" id="dep-step-2"> +<pre><code>wget -O docker-compose.yml \ + https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml</code></pre> + </div> + <div class="tab-panel" id="dep-step-3"> +<p>Erstellen Sie im selben Verzeichnis eine Datei namens <code>.env</code>. Setzen Sie <code>SERVER_ADDRESS</code> auf Ihre Domain:</p>Mitmachenhttps://wireguard-webadmin.com/de/get-involved/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/de/get-involved/<div class="involve-grid"> + <div class="involve-card involve-card--highlight"> + <div class="involve-card-icon">⭐</div> + <h3>Repository mit einem Stern markieren</h3> + <p>Das Einfachste, was Sie tun können. Es hilft dem Projekt, von anderen Sysadmins entdeckt zu werden, die genau nach so etwas suchen.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin" target="_blank" rel="noopener" class="btn btn-primary">Auf GitHub markieren</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🐛</div> + <h3>Fehler melden</h3> + <p>Etwas funktioniert nicht? Öffnen Sie ein Issue auf GitHub. Kein Template nötig, beschreiben Sie einfach, was Sie gesehen haben und wie man es reproduzieren kann.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin/issues" target="_blank" rel="noopener" class="btn btn-outline">Issue öffnen</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🔧</div> + <h3>Code beitragen</h3> + <p>Pull Requests sind willkommen. Bei allem, was nicht ganz trivial ist, öffnen Sie bitte zuerst ein Issue, damit wir uns abstimmen können, bevor Sie Zeit in Code investieren. Gute Einstiege sind mit <code>good first issue</code> markierte Tickets, Bugfixes mit klarer Reproduktion und zusätzliche Tests.</p>Zero-Trust-Anwendungsgatewayhttps://wireguard-webadmin.com/de/zero-trust/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/de/zero-trust/<h2 id="was-bedeutet-zero-trust-hier">Was bedeutet Zero Trust hier?</h2> +<p>Traditionelle Netzwerksicherheit geht davon aus, dass alles innerhalb Ihres Netzwerks vertrauenswürdig ist. +Zero Trust dreht dieses Modell um: <strong>Keine Anfrage wird standardmäßig vertraut</strong>, selbst wenn sie aus dem VPN kommt.</p> +<p>In wireguard_webadmin sitzt das Zero-Trust-Application-Gateway vor Ihren internen Diensten. +Jede Anfrage muss sich authentifizieren, bevor sie die Anwendung erreicht. Der Dienst selbst muss niemals direkt veröffentlicht werden.</p> +<hr> +<h2 id="so-läuft-eine-anfrage-ab">So läuft eine Anfrage ab</h2> +<div class="flow-cards"> + <div class="flow-card"> + <div class="flow-card-header"><span class="flow-card-num">1</span> <strong>Client erreicht das Gateway</strong></div> + <p>Der öffentliche Endpunkt empfängt die Anfrage anstelle des internen Dienstes.</p> \ No newline at end of file diff --git a/docs/de/sitemap.xml b/docs/de/sitemap.xml new file mode 100644 index 0000000..35e967e --- /dev/null +++ b/docs/de/sitemap.xml @@ -0,0 +1 @@ +https://wireguard-webadmin.com/de/https://wireguard-webadmin.com/de/categories/https://wireguard-webadmin.com/de/deployment/https://wireguard-webadmin.com/de/get-involved/https://wireguard-webadmin.com/de/tags/https://wireguard-webadmin.com/de/zero-trust/ \ No newline at end of file diff --git a/docs/de/tags/index.html b/docs/de/tags/index.html new file mode 100644 index 0000000..0d0c491 --- /dev/null +++ b/docs/de/tags/index.html @@ -0,0 +1,11 @@ +Tags · wireguard_webadmin

Tags

\ No newline at end of file diff --git a/docs/de/tags/index.xml b/docs/de/tags/index.xml new file mode 100644 index 0000000..d832d46 --- /dev/null +++ b/docs/de/tags/index.xml @@ -0,0 +1 @@ +Tags on wireguard_webadminhttps://wireguard-webadmin.com/de/tags/Recent content in Tags on wireguard_webadminHugode \ No newline at end of file diff --git a/docs/de/zero-trust/index.html b/docs/de/zero-trust/index.html new file mode 100644 index 0000000..ddd966f --- /dev/null +++ b/docs/de/zero-trust/index.html @@ -0,0 +1,16 @@ +Zero-Trust-Anwendungsgateway · wireguard_webadmin

Zero-Trust-Anwendungsgateway

Veröffentlichen Sie interne Dienste sicher, ohne sie dem Internet direkt auszusetzen.

Was bedeutet Zero Trust hier?

Traditionelle Netzwerksicherheit geht davon aus, dass alles innerhalb Ihres Netzwerks vertrauenswürdig ist. +Zero Trust dreht dieses Modell um: Keine Anfrage wird standardmäßig vertraut, selbst wenn sie aus dem VPN kommt.

In wireguard_webadmin sitzt das Zero-Trust-Application-Gateway vor Ihren internen Diensten. +Jede Anfrage muss sich authentifizieren, bevor sie die Anwendung erreicht. Der Dienst selbst muss niemals direkt veröffentlicht werden.


So läuft eine Anfrage ab

1 Client erreicht das Gateway

Der öffentliche Endpunkt empfängt die Anfrage anstelle des internen Dienstes.

2 Browser-Validierung

Altcha-Proof-of-Work kann automatisierten Missbrauch noch vor Beginn des Logins herausfordern.

3 Identitätsprüfungen

Zugangsdaten, TOTP und Richtlinien für die Quell-IP werden geprüft.

4 An Upstream weiterleiten

Nur freigegebene Anfragen werden an Grafana, Proxmox oder eine andere interne App weitergeleitet.


Authentifizierungsmethoden

TOTP / 2FA
Zeitbasierte Einmalpasswörter. Funktioniert mit jeder TOTP-App, etwa Google Authenticator, Aegis oder Authy.
Lokale Zugangsdaten
Benutzername und Passwort werden direkt in wireguard_webadmin verwaltet. Kein externer IdP nötig.
IP-ACL
Whitelist für bestimmte IPs oder Subnetze. VPN-Peers können anhand ihrer Tunnel-Adresse automatisch als vertrauenswürdig gelten.
OIDC demnächst verfügbar
Delegieren Sie die Authentifizierung an Keycloak, Authentik, Google Workspace oder einen anderen OIDC-kompatiblen Anbieter.

Schutz vor Brute Force: Altcha Proof-of-Work

Bevor überhaupt ein Login-Formular angezeigt wird, muss der Browser eine leichte rechnerische Aufgabe lösen +(Altcha).

Das erzeugt praktisch keine Reibung für echte Nutzerinnen und Nutzer, da moderne Hardware die Aufgabe in Millisekunden löst, +macht automatisierte Credential-Stuffing-Angriffe im großen Maßstab aber rechnerisch teuer.

Mehrschichtiger Schutz: Ein Rate Limiting ist bereits aktiv. Proof-of-Work ergänzt es: Während Rate Limiting das Anfragevolumen pro IP begrenzt, fügt Altcha für jede Anfrage einen Rechenaufwand hinzu, der verteilte Angriffe teuer macht, unabhängig davon, wie viele Quell-IPs beteiligt sind.


Anwendungsfälle

  • Stellen Sie Grafana Ihrem Team bereit, ohne Port 3000 ins Internet zu öffnen
  • Veröffentlichen Sie eine Proxmox-Webkonsole hinter TOTP, die nur aus Ihrem VPN erreichbar ist
  • Teilen Sie eine selbst gehostete App mit einem Kunden oder einer Kundin über zeitlich begrenzte Zugangsdaten
  • Schützen Sie jeden internen HTTP-Dienst, ohne seine Konfiguration anzufassen

Keine Änderungen an der App erforderlich. Der Gatekeeper proxyt die Anfrage transparent weiter. +Ihr interner Dienst muss keine Authentifizierung implementieren, das übernimmt das Gateway.


VPN-Verwaltung und Application Gateway laufen als ein einziger selbst gehosteter Stack. Kein Konto bei einem Drittanbieter, keine Abhängigkeit von ausgehenden Tunneln, kein Traffic, der Ihre Infrastruktur verlässt.

\ No newline at end of file diff --git a/docs/deployment/index.html b/docs/deployment/index.html new file mode 100644 index 0000000..ebfc818 --- /dev/null +++ b/docs/deployment/index.html @@ -0,0 +1,21 @@ +Deployment Guide · wireguard_webadmin

Deployment Guide

From zero to a working WireGuard VPN admin panel in under five minutes.

Prerequisites

  • A Linux server reachable from where you’ll manage it
  • Docker and Docker Compose installed
  • A domain name pointing to your server’s IP
  • Ports 80 and 443 open for Caddy; your WireGuard UDP port open (default 51820)

Caddy requires a valid DNS name — either internal or public — pointing to your server so it can obtain and renew SSL certificates automatically.


Deploy

+ + +
mkdir wireguard_webadmin && cd wireguard_webadmin
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml

Create a .env file in the same directory. Set SERVER_ADDRESS to your domain:

SERVER_ADDRESS=vpn.example.com
+DEBUG_MODE=False
+TIMEZONE=America/Sao_Paulo

See the .env reference below for all available variables.

docker compose up -d

Access the panel at https://vpn.example.com. Caddy obtains and renews SSL certificates automatically.


.env reference

VariableRequiredDescription
SERVER_ADDRESSYesDNS name or IP of your server. Must match what you type in the browser — a mismatch causes CSRF errors.
DEBUG_MODENoSet to True to enable Django debug mode. Never use in production. Default: False.
TIMEZONENoTimezone for the application. Use a value from the tz database. Default: America/Sao_Paulo.
EXTRA_ALLOWED_HOSTSNoAdditional hostnames Django should accept, comma-separated. SERVER_ADDRESS is always included. Example: app1.example.com,app2.example.com:8443.
WIREGUARD_STATUS_CACHE_ENABLEDNoCache WireGuard status to reduce calls to wg. Default: True.
WIREGUARD_STATUS_CACHE_REFRESH_INTERVALNoHow often (in seconds) the cache refreshes. Allowed: 30, 60, 150, 300. Default: 60.
WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNTNoHow many cached snapshots to preload on page load (0–9). Higher values pre-populate traffic charts. Lower if the peer list feels slow. Default: 9.

Upgrading

Data is persisted in Docker volumes. Upgrading does not affect your peers, firewall rules, DNS entries, or any other configuration.

01
Navigate to the project directory
cd wireguard_webadmin
02
Stop services and pull latest images
docker compose down
+docker compose pull
03
Back up your data
tar cvfz wireguard-webadmin-backup-$(date +%Y-%m-%d-%H%M%S).tar.gz \
+  /var/lib/docker/volumes/wireguard_webadmin_wireguard/_data/ \
+  /var/lib/docker/volumes/wireguard_webadmin_rrd_data/_data/
04
Update the compose file
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml
05
Start the updated stack
docker compose up -d
06
Check logs for unexpected errors
docker compose logs wireguard_webadmin

Troubleshooting

Caddy isn’t getting a certificate

  • Confirm your domain’s A record points to the server’s public IP
  • Verify ports 80 and 443 are open and not blocked upstream
  • Check Caddy logs: docker compose logs caddy

The panel isn’t loading

  • Check all containers are running: docker compose ps
  • Look for errors: docker compose logs wireguard_webadmin
  • Verify SERVER_ADDRESS in .env matches exactly what you’re typing in the browser

CSRF errors on login

SERVER_ADDRESS is misconfigured. It must match the hostname (and port, if non-standard) used to access the panel. Update .env and restart with docker compose up -d.

WireGuard peers can’t connect

  • Confirm the WireGuard UDP port is open on the host firewall. The default is 51820, but if you’re running multiple instances each one needs its own port.
  • Make sure the UDP port range declared in docker-compose.yml matches what is configured in each WireGuard instance inside the panel. A mismatch means the container won’t expose the right port to the host.
  • Verify IP forwarding is enabled on the host: sysctl net.ipv4.ip_forward

What’s running

ServiceRole
wireguard-webadminDjango application — web UI and API
caddyReverse proxy + automatic TLS
auth-gatewayZero Trust authorization layer — enforces identity checks before proxying to upstream
cronScheduled tasks — peer enable/disable, cache refresh
rrdtoolTraffic history — RRD data collection and graphing
dnsdnsmasq-based resolver with category blacklist support
\ No newline at end of file diff --git a/docs/en/index.html b/docs/en/index.html new file mode 100644 index 0000000..5d579e3 --- /dev/null +++ b/docs/en/index.html @@ -0,0 +1 @@ +https://wireguard-webadmin.com/ \ No newline at end of file diff --git a/docs/en/sitemap.xml b/docs/en/sitemap.xml new file mode 100644 index 0000000..f522592 --- /dev/null +++ b/docs/en/sitemap.xml @@ -0,0 +1 @@ +https://wireguard-webadmin.com/https://wireguard-webadmin.com/categories/https://wireguard-webadmin.com/deployment/https://wireguard-webadmin.com/get-involved/https://wireguard-webadmin.com/tags/https://wireguard-webadmin.com/zero-trust/ \ No newline at end of file diff --git a/docs/es/categories/index.html b/docs/es/categories/index.html new file mode 100644 index 0000000..0244dcb --- /dev/null +++ b/docs/es/categories/index.html @@ -0,0 +1,11 @@ +Categories · wireguard_webadmin

Categories

\ No newline at end of file diff --git a/docs/es/categories/index.xml b/docs/es/categories/index.xml new file mode 100644 index 0000000..f6a377f --- /dev/null +++ b/docs/es/categories/index.xml @@ -0,0 +1 @@ +Categories on wireguard_webadminhttps://wireguard-webadmin.com/es/categories/Recent content in Categories on wireguard_webadminHugoes \ No newline at end of file diff --git a/docs/es/deployment/index.html b/docs/es/deployment/index.html new file mode 100644 index 0000000..c46ce88 --- /dev/null +++ b/docs/es/deployment/index.html @@ -0,0 +1,21 @@ +Guía de despliegue · wireguard_webadmin

Guía de despliegue

De cero a un panel de administración de WireGuard VPN funcionando en menos de cinco minutos.

Requisitos previos

  • Un servidor Linux accesible desde donde vayas a administrarlo
  • Docker y Docker Compose instalados
  • Un nombre de dominio apuntando a la IP de tu servidor
  • Los puertos 80 y 443 abiertos para Caddy, y el puerto UDP de WireGuard abierto (por defecto 51820)

Caddy necesita un nombre DNS válido, interno o público, apuntando a tu servidor para poder obtener y renovar automáticamente los certificados SSL.


Despliegue

+ + +
mkdir wireguard_webadmin && cd wireguard_webadmin
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml

Crea un archivo .env en el mismo directorio. Define SERVER_ADDRESS con tu dominio:

SERVER_ADDRESS=vpn.example.com
+DEBUG_MODE=False
+TIMEZONE=America/Sao_Paulo

Consulta la referencia de .env más abajo para ver todas las variables disponibles.

docker compose up -d

Accede al panel en https://vpn.example.com. Caddy obtiene y renueva automáticamente los certificados SSL.


Referencia de .env

VariableObligatoriaDescripción
SERVER_ADDRESSNombre DNS o IP de tu servidor. Debe coincidir exactamente con lo que escribes en el navegador; si no, aparecerán errores de CSRF.
DEBUG_MODENoDefine True para activar el modo debug de Django. Nunca lo uses en producción. Valor por defecto: False.
TIMEZONENoZona horaria de la aplicación. Usa un valor de la base de datos tz. Valor por defecto: America/Sao_Paulo.
EXTRA_ALLOWED_HOSTSNoNombres de host adicionales que Django debe aceptar, separados por comas. SERVER_ADDRESS siempre se incluye. Ejemplo: app1.example.com,app2.example.com:8443.
WIREGUARD_STATUS_CACHE_ENABLEDNoAlmacena en caché el estado de WireGuard para reducir las llamadas a wg. Valor por defecto: True.
WIREGUARD_STATUS_CACHE_REFRESH_INTERVALNoFrecuencia de actualización de la caché, en segundos. Valores permitidos: 30, 60, 150, 300. Valor por defecto: 60.
WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNTNoCuántas instantáneas en caché precargar al abrir la página (0-9). Los valores altos rellenan antes los gráficos de tráfico. Redúcelo si la lista de peers se siente lenta. Valor por defecto: 9.

Actualización

Los datos se conservan en volúmenes de Docker. Actualizar no afecta a tus peers, reglas de firewall, entradas DNS ni ninguna otra configuración.

01
Ir al directorio del proyecto
cd wireguard_webadmin
02
Detener los servicios y descargar las imágenes más recientes
docker compose down
+docker compose pull
03
Hacer una copia de seguridad de tus datos
tar cvfz wireguard-webadmin-backup-$(date +%Y-%m-%d-%H%M%S).tar.gz \
+  /var/lib/docker/volumes/wireguard_webadmin_wireguard/_data/ \
+  /var/lib/docker/volumes/wireguard_webadmin_rrd_data/_data/
04
Actualizar el archivo compose
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml
05
Levantar el stack actualizado
docker compose up -d
06
Revisar los logs por si hay errores inesperados
docker compose logs wireguard_webadmin

Solución de problemas

Caddy no obtiene un certificado

  • Confirma que el registro A de tu dominio apunta a la IP pública del servidor
  • Verifica que los puertos 80 y 443 estén abiertos y no bloqueados aguas arriba
  • Revisa los logs de Caddy: docker compose logs caddy

El panel no carga

  • Comprueba que todos los contenedores estén en ejecución: docker compose ps
  • Busca errores: docker compose logs wireguard_webadmin
  • Verifica que SERVER_ADDRESS en .env coincida exactamente con lo que escribes en el navegador

Errores CSRF al iniciar sesión

SERVER_ADDRESS está mal configurado. Debe coincidir con el nombre de host, y con el puerto si no es estándar, usado para acceder al panel. Actualiza .env y reinicia con docker compose up -d.

Los peers de WireGuard no pueden conectarse

  • Confirma que el puerto UDP de WireGuard esté abierto en el firewall del host. El valor por defecto es 51820, pero si ejecutas varias instancias cada una necesita su propio puerto.
  • Asegúrate de que el rango de puertos UDP declarado en docker-compose.yml coincida con lo configurado en cada instancia de WireGuard dentro del panel. Si no coincide, el contenedor no expondrá el puerto correcto en el host.
  • Verifica que el reenvío de IP esté habilitado en el host: sysctl net.ipv4.ip_forward

Qué está en ejecución

ServicioRol
wireguard-webadminAplicación Django: interfaz web y API
caddyProxy inverso y TLS automático
auth-gatewayCapa de autorización Zero Trust: aplica verificaciones de identidad antes de enviar la solicitud al upstream
cronTareas programadas: activación/desactivación de peers y actualización de caché
rrdtoolHistorial de tráfico: recolección de datos RRD y generación de gráficos
dnsResolvedor basado en dnsmasq con soporte para listas de bloqueo por categorías
\ No newline at end of file diff --git a/docs/es/get-involved/index.html b/docs/es/get-involved/index.html new file mode 100644 index 0000000..01e77a6 --- /dev/null +++ b/docs/es/get-involved/index.html @@ -0,0 +1,11 @@ +Participa · wireguard_webadmin

Participa

wireguard_webadmin se construye en abierto. Toda contribución ayuda, sin importar su tamaño.

Dale una estrella al repositorio

Es lo más sencillo que puedes hacer. Ayuda a que otros sysadmins descubran el proyecto cuando están buscando exactamente algo así.

Dar estrella en GitHub
🐛

Reporta errores

¿Encontraste algo roto? Abre un issue en GitHub. No hace falta plantilla: solo describe qué viste y cómo reproducirlo.

Abrir un issue
🔧

Contribuye con código

Los pull requests son bienvenidos. Si no es algo trivial, abre primero un issue para alinearnos antes de que inviertas tiempo escribiendo código. Buenos puntos de partida: issues etiquetados como good first issue, correcciones con un caso de reproducción claro y cobertura de pruebas.

Ver PR abiertas
💬

Únete a la conversación

¿Tienes una instalación interesante? ¿Te encontraste con un caso límite? GitHub Discussions es el lugar para preguntas, ideas y usos que no encajan del todo en un issue.

Ir a Discussions
\ No newline at end of file diff --git a/docs/es/index.html b/docs/es/index.html new file mode 100644 index 0000000..f7e5b30 --- /dev/null +++ b/docs/es/index.html @@ -0,0 +1,14 @@ +wireguard_webadmin — Self-hosted VPN management and Zero Trust access control.
Open Source · Self-hosted · WireGuard

Gestión de VPN autoalojada
y control de acceso Zero Trust.

Instancias de WireGuard, gestión de peers, firewall, DNS y publicación segura de aplicaciones, todo funcionando en tu propia infraestructura.

Gratis y de código abierto. Nada sale de tu servidor.

wireguard_webadmin — light mode +wireguard_webadmin — dark mode

Mucho más que un panel VPN.

Un stack completo de gestión de red, desde el control de peers de WireGuard hasta una pasarela de aplicaciones Zero Trust.

⚙️

Gestionar

  • Múltiples instancias de WireGuard
  • Gestión de peers con gráficos de tráfico
  • Reglas de firewall y redirección de puertos
  • Resolvedor DNS con listas de bloqueo
  • Enlaces de invitación VPN con código QR
🔒

Proteger

  • Pasarela de aplicaciones Zero Trust
  • Autenticación de dos factores con TOTP
  • Altcha proof-of-work contra fuerza bruta
  • ACL por IP para cada aplicación
  • OIDC próximamente

Automatizar

  • Activación y desactivación programadas de peers
  • Plantillas de enrutamiento
  • Enlaces de invitación con caducidad
  • API v2 para automatización
  • Multiusuario con permisos por rol

Publica aplicaciones internas de forma segura, sin abrirlas al mundo.

La puerta de enlace de aplicaciones integrada te permite exponer servicios como Grafana, Proxmox o cualquier aplicación web interna con autenticación delante, sin abrir agujeros en el firewall ni depender de un túnel de terceros.

Cada solicitud pasa por el guardián: TOTP, credenciales locales, ACL por IP y validación del navegador con prueba de trabajo (Altcha) para frenar ataques automatizados.

TOTPIP ACLAltcha PoWSelf-hosted

Más información →
Zero Trust application gateway

Visibilidad completa de cada peer.

Cada peer tiene una vista de detalle dedicada: estado de conexión en tiempo real, tráfico acumulado, gráficos de ancho de banda en series temporales, último handshake y código QR para reprovisionarlo al instante.

El historial de tráfico se almacena por peer para que puedas auditar el uso a lo largo del tiempo, no solo desde el último reinicio.

Gráficos de tráficoÚltimo handshakeCódigo QRHistorial por peer
Peer details — traffic graph and metrics

Control de acceso a peers según horario.

Define horarios para cada peer de VPN. El acceso se activa y desactiva automáticamente según la franja horaria que configures, sin necesidad de intervención manual.

Útil para contratistas, accesos temporales, políticas por turnos o cualquier situación en la que el acceso deba estar limitado en el tiempo sin depender de que alguien recuerde revocarlo.

ACL por horarioAutomatizadoPor peer
Peer scheduling interface

Diseñado para cómo trabajan de verdad los sysadmins.

Cada función está a una pantalla de distancia. Sin menús ocultos ni asistentes paso a paso.

Firewall rule management
Firewall

Reglas de iptables por instancia, redirección de puertos y ACL salientes, todo gestionado desde la interfaz.

DNS management with blacklists
DNS

Resolvedor integrado con listas de bloqueo por categorías: anuncios, malware, rastreo y contenido para adultos.

VPN invite link with QR code
Enlaces de invitación

Genera un enlace compartible con código QR y archivo de configuración. La persona lo escanea o lo importa directamente en su cliente WireGuard.

Routing templates
Plantillas de enrutamiento

Define las IP permitidas y las políticas de enrutamiento una sola vez y reutilízalas en decenas de peers.

Tan fácil como docker compose up.

Funciona en cualquier máquina Linux con Docker. Caddy se encarga del HTTPS automáticamente.

Guía de despliegue →

Todo lo que necesitas. Nada de lo que no.

🖥️

Multi-arquitectura

Imágenes nativas para amd64 y arm64

🌙

Modo oscuro

Cambio completo entre interfaz clara y oscura

👥

Multiusuario

Permisos por rol para cada usuario

📊

Historial de tráfico

Gráficos de ancho de banda por peer a lo largo del tiempo

🚫

Lista DNS de bloqueo

Bloqueo por categorías: anuncios, malware, rastreo

🗺️

Plantillas de enrutamiento

Configuraciones de enrutamiento reutilizables entre peers

🔗

API v2

API REST para automatización externa

🧪

Consola de depuración

Herramientas integradas de diagnóstico y depuración

📨

Enlaces de invitación

Invitaciones con código QR y caducidad opcional

🔥

Firewall

Gestión de reglas de firewall por instancia

📡

Redirección de puertos

Reenvía puertos a través de peers VPN

🔐

TOTP / 2FA

Autenticación en dos factores para el panel y el gateway

Lo que viene.

Próximamente

Autenticación OIDC

Inicia sesión con tu proveedor de identidad actual: Keycloak, Authentik, Google Workspace o cualquier IdP compatible con OIDC.

En progreso

App Gateway / Gatekeeper v2

Una puerta de enlace de aplicaciones más potente, con políticas granulares por ruta, gestión de sesiones y un registro de auditoría mejorado.

Planificado

Grupos de peers y acciones masivas

Agrupa peers por equipo, proyecto o nivel de acceso. Aplica reglas de firewall, plantillas de enrutamiento y horarios a grupos completos de una sola vez.

\ No newline at end of file diff --git a/docs/es/index.xml b/docs/es/index.xml new file mode 100644 index 0000000..d5302f6 --- /dev/null +++ b/docs/es/index.xml @@ -0,0 +1,49 @@ +wireguard_webadminhttps://wireguard-webadmin.com/es/Recent content on wireguard_webadminHugoesGuía de desplieguehttps://wireguard-webadmin.com/es/deployment/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/es/deployment/<h2 id="requisitos-previos">Requisitos previos</h2> +<ul> +<li>Un servidor Linux accesible desde donde vayas a administrarlo</li> +<li><a href="https://docs.docker.com/engine/install/">Docker</a> y <a href="https://docs.docker.com/compose/install/">Docker Compose</a> instalados</li> +<li>Un nombre de dominio apuntando a la IP de tu servidor</li> +<li>Los puertos <strong>80</strong> y <strong>443</strong> abiertos para Caddy, y el puerto UDP de WireGuard abierto (por defecto <strong>51820</strong>)</li> +</ul> +<div class="callout"> + <p><strong>Caddy necesita un nombre DNS válido</strong>, interno o público, apuntando a tu servidor para poder obtener y renovar automáticamente los certificados SSL.</p> +</div> +<hr> +<h2 id="despliegue">Despliegue</h2> +<div class="tab-group"> + <div class="tabs"> + <button class="tab-btn active" data-tab="dep-step-1">1. Crear directorio</button> + <button class="tab-btn" data-tab="dep-step-2">2. Obtener archivo compose</button> + <button class="tab-btn" data-tab="dep-step-3">3. Configurar .env</button> + <button class="tab-btn" data-tab="dep-step-4">4. Ejecutar</button> + </div> + <div class="tab-wrap"> + <div class="tab-panel active" id="dep-step-1"> +<pre><code>mkdir wireguard_webadmin && cd wireguard_webadmin</code></pre> + </div> + <div class="tab-panel" id="dep-step-2"> +<pre><code>wget -O docker-compose.yml \ + https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml</code></pre> + </div> + <div class="tab-panel" id="dep-step-3"> +<p>Crea un archivo <code>.env</code> en el mismo directorio. Define <code>SERVER_ADDRESS</code> con tu dominio:</p>Participahttps://wireguard-webadmin.com/es/get-involved/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/es/get-involved/<div class="involve-grid"> + <div class="involve-card involve-card--highlight"> + <div class="involve-card-icon">⭐</div> + <h3>Dale una estrella al repositorio</h3> + <p>Es lo más sencillo que puedes hacer. Ayuda a que otros sysadmins descubran el proyecto cuando están buscando exactamente algo así.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin" target="_blank" rel="noopener" class="btn btn-primary">Dar estrella en GitHub</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🐛</div> + <h3>Reporta errores</h3> + <p>¿Encontraste algo roto? Abre un issue en GitHub. No hace falta plantilla: solo describe qué viste y cómo reproducirlo.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin/issues" target="_blank" rel="noopener" class="btn btn-outline">Abrir un issue</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🔧</div> + <h3>Contribuye con código</h3> + <p>Los pull requests son bienvenidos. Si no es algo trivial, abre primero un issue para alinearnos antes de que inviertas tiempo escribiendo código. Buenos puntos de partida: issues etiquetados como <code>good first issue</code>, correcciones con un caso de reproducción claro y cobertura de pruebas.</p>Pasarela de aplicaciones Zero Trusthttps://wireguard-webadmin.com/es/zero-trust/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/es/zero-trust/<h2 id="qué-significa-zero-trust-aquí">¿Qué significa Zero Trust aquí?</h2> +<p>La seguridad de red tradicional asume que todo lo que está dentro de tu red es confiable. +Zero Trust invierte ese modelo: <strong>ninguna solicitud se considera confiable por defecto</strong>, incluso si viene desde dentro de la VPN.</p> +<p>En wireguard_webadmin, la pasarela de aplicaciones Zero Trust se coloca delante de tus servicios internos. +Cada solicitud debe autenticarse antes de llegar a la aplicación, y el servicio en sí nunca necesita exponerse directamente.</p> \ No newline at end of file diff --git a/docs/es/sitemap.xml b/docs/es/sitemap.xml new file mode 100644 index 0000000..6e46c31 --- /dev/null +++ b/docs/es/sitemap.xml @@ -0,0 +1 @@ +https://wireguard-webadmin.com/es/https://wireguard-webadmin.com/es/categories/https://wireguard-webadmin.com/es/deployment/https://wireguard-webadmin.com/es/get-involved/https://wireguard-webadmin.com/es/zero-trust/https://wireguard-webadmin.com/es/tags/ \ No newline at end of file diff --git a/docs/es/tags/index.html b/docs/es/tags/index.html new file mode 100644 index 0000000..aadf8df --- /dev/null +++ b/docs/es/tags/index.html @@ -0,0 +1,11 @@ +Tags · wireguard_webadmin

Tags

\ No newline at end of file diff --git a/docs/es/tags/index.xml b/docs/es/tags/index.xml new file mode 100644 index 0000000..6e8a706 --- /dev/null +++ b/docs/es/tags/index.xml @@ -0,0 +1 @@ +Tags on wireguard_webadminhttps://wireguard-webadmin.com/es/tags/Recent content in Tags on wireguard_webadminHugoes \ No newline at end of file diff --git a/docs/es/zero-trust/index.html b/docs/es/zero-trust/index.html new file mode 100644 index 0000000..d5ec1c1 --- /dev/null +++ b/docs/es/zero-trust/index.html @@ -0,0 +1,16 @@ +Pasarela de aplicaciones Zero Trust · wireguard_webadmin

Pasarela de aplicaciones Zero Trust

Publica servicios internos de forma segura, sin exponerlos directamente a internet.

¿Qué significa Zero Trust aquí?

La seguridad de red tradicional asume que todo lo que está dentro de tu red es confiable. +Zero Trust invierte ese modelo: ninguna solicitud se considera confiable por defecto, incluso si viene desde dentro de la VPN.

En wireguard_webadmin, la pasarela de aplicaciones Zero Trust se coloca delante de tus servicios internos. +Cada solicitud debe autenticarse antes de llegar a la aplicación, y el servicio en sí nunca necesita exponerse directamente.


Cómo fluye una solicitud

1 El cliente llega a la pasarela

El endpoint público recibe la solicitud en lugar del servicio interno.

2 Validación del navegador

La prueba de trabajo de Altcha puede desafiar el abuso automatizado antes incluso de que empiece el inicio de sesión.

3 Comprobaciones de identidad

Se evalúan las credenciales, el TOTP y la política de IP de origen.

4 Reenvío al upstream

Solo las solicitudes aprobadas se envían a Grafana, Proxmox u otra aplicación interna.


Métodos de autenticación

TOTP / 2FA
Contraseñas de un solo uso basadas en tiempo. Funciona con cualquier app TOTP: Google Authenticator, Aegis, Authy.
Credenciales locales
Nombre de usuario y contraseña gestionados dentro de wireguard_webadmin. No hace falta un IdP externo.
ACL por IP
Permite incluir IPs o subredes específicas en una lista blanca. Los peers VPN pueden considerarse confiables automáticamente por su dirección del túnel.
OIDC próximamente
Delega la autenticación en Keycloak, Authentik, Google Workspace o cualquier proveedor compatible con OIDC.

Anti fuerza bruta: prueba de trabajo de Altcha

Antes de que aparezca cualquier formulario de inicio de sesión, el navegador debe resolver un desafío computacional ligero +(Altcha).

Esto no genera fricción para usuarios reales, porque el hardware moderno lo resuelve en milisegundos, +pero vuelve computacionalmente costosos los ataques automatizados de credential stuffing a gran escala.

Protección por capas: Ya existe limitación de tasa. La prueba de trabajo la complementa: mientras el rate limiting limita el volumen de solicitudes por IP, Altcha añade un coste computacional por solicitud que encarece los ataques distribuidos, sin importar cuántas IPs de origen participen.


Casos de uso

  • Expón Grafana a tu equipo sin abrir el puerto 3000 a internet
  • Publica una consola web de Proxmox detrás de TOTP, accesible solo desde tu VPN
  • Comparte una app autoalojada con un cliente usando credenciales con tiempo limitado
  • Protege cualquier servicio HTTP interno sin tocar su configuración

No hacen falta cambios en la app. El gatekeeper reenvía la solicitud de forma transparente. +Tu servicio interno no necesita implementar autenticación: la pasarela se encarga de ello.


La gestión de la VPN y la pasarela de aplicaciones se ejecutan como un único stack autoalojado. No necesitas cuenta en un servicio de terceros, ni dependes de túneles salientes, ni el tráfico sale de tu infraestructura.

\ No newline at end of file diff --git a/docs/favicon.svg b/docs/favicon.svg new file mode 100644 index 0000000..8a8f1d0 --- /dev/null +++ b/docs/favicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/docs/fr/categories/index.html b/docs/fr/categories/index.html new file mode 100644 index 0000000..7120aeb --- /dev/null +++ b/docs/fr/categories/index.html @@ -0,0 +1,11 @@ +Categories · wireguard_webadmin

Categories

\ No newline at end of file diff --git a/docs/fr/categories/index.xml b/docs/fr/categories/index.xml new file mode 100644 index 0000000..6c2434d --- /dev/null +++ b/docs/fr/categories/index.xml @@ -0,0 +1 @@ +Categories on wireguard_webadminhttps://wireguard-webadmin.com/fr/categories/Recent content in Categories on wireguard_webadminHugofr \ No newline at end of file diff --git a/docs/fr/deployment/index.html b/docs/fr/deployment/index.html new file mode 100644 index 0000000..a7d3733 --- /dev/null +++ b/docs/fr/deployment/index.html @@ -0,0 +1,21 @@ +Guide de déploiement · wireguard_webadmin

Guide de déploiement

Passez de zéro à un panneau d'administration WireGuard VPN fonctionnel en moins de cinq minutes.

Prérequis

  • Un serveur Linux accessible depuis l’endroit où vous allez l’administrer
  • Docker et Docker Compose installés
  • Un nom de domaine pointant vers l’IP de votre serveur
  • Les ports 80 et 443 ouverts pour Caddy, ainsi que le port UDP de WireGuard ouvert (par défaut 51820)

Caddy nécessite un nom DNS valide, interne ou public, pointant vers votre serveur afin d'obtenir et de renouveler automatiquement les certificats SSL.


Déploiement

+ + +
mkdir wireguard_webadmin && cd wireguard_webadmin
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml

Créez un fichier .env dans le même répertoire. Définissez SERVER_ADDRESS avec votre domaine :

SERVER_ADDRESS=vpn.example.com
+DEBUG_MODE=False
+TIMEZONE=America/Sao_Paulo

Consultez la référence .env ci-dessous pour voir toutes les variables disponibles.

docker compose up -d

Accédez au panneau via https://vpn.example.com. Caddy obtient et renouvelle automatiquement les certificats SSL.


Référence .env

VariableObligatoireDescription
SERVER_ADDRESSOuiNom DNS ou IP de votre serveur. Cela doit correspondre exactement à ce que vous saisissez dans le navigateur, sinon vous aurez des erreurs CSRF.
DEBUG_MODENonDéfinissez True pour activer le mode debug de Django. Ne jamais l'utiliser en production. Valeur par défaut : False.
TIMEZONENonFuseau horaire de l'application. Utilisez une valeur issue de la base tz. Valeur par défaut : America/Sao_Paulo.
EXTRA_ALLOWED_HOSTSNonNoms d'hôte supplémentaires que Django doit accepter, séparés par des virgules. SERVER_ADDRESS est toujours inclus. Exemple : app1.example.com,app2.example.com:8443.
WIREGUARD_STATUS_CACHE_ENABLEDNonMet en cache l'état de WireGuard afin de réduire les appels à wg. Valeur par défaut : True.
WIREGUARD_STATUS_CACHE_REFRESH_INTERVALNonFréquence de rafraîchissement du cache, en secondes. Valeurs autorisées : 30, 60, 150, 300. Valeur par défaut : 60.
WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNTNonNombre d'instantanés en cache à précharger au chargement de la page (0-9). Des valeurs plus élevées préremplissent les graphiques de trafic. Réduisez-la si la liste des pairs semble lente. Valeur par défaut : 9.

Mise à niveau

Les données sont conservées dans des volumes Docker. Une mise à niveau n'affecte ni vos pairs, ni vos règles de pare-feu, ni vos entrées DNS, ni aucune autre configuration.

01
Aller dans le répertoire du projet
cd wireguard_webadmin
02
Arrêter les services et récupérer les dernières images
docker compose down
+docker compose pull
03
Sauvegarder vos données
tar cvfz wireguard-webadmin-backup-$(date +%Y-%m-%d-%H%M%S).tar.gz \
+  /var/lib/docker/volumes/wireguard_webadmin_wireguard/_data/ \
+  /var/lib/docker/volumes/wireguard_webadmin_rrd_data/_data/
04
Mettre à jour le fichier compose
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml
05
Démarrer la stack mise à jour
docker compose up -d
06
Vérifier les logs pour repérer les erreurs inattendues
docker compose logs wireguard_webadmin

Dépannage

Caddy n’obtient pas de certificat

  • Vérifiez que l’enregistrement A de votre domaine pointe vers l’IP publique du serveur
  • Vérifiez que les ports 80 et 443 sont ouverts et non bloqués en amont
  • Consultez les logs de Caddy : docker compose logs caddy

Le panneau ne se charge pas

  • Vérifiez que tous les conteneurs sont en cours d’exécution : docker compose ps
  • Recherchez des erreurs : docker compose logs wireguard_webadmin
  • Vérifiez que SERVER_ADDRESS dans .env correspond exactement à ce que vous saisissez dans le navigateur

Erreurs CSRF à la connexion

SERVER_ADDRESS est mal configuré. Il doit correspondre au nom d’hôte, et au port si celui-ci n’est pas standard, utilisé pour accéder au panneau. Mettez .env à jour puis redémarrez avec docker compose up -d.

Les pairs WireGuard ne peuvent pas se connecter

  • Vérifiez que le port UDP de WireGuard est ouvert sur le pare-feu de l’hôte. La valeur par défaut est 51820, mais si vous exécutez plusieurs instances, chacune doit avoir son propre port.
  • Assurez-vous que la plage de ports UDP déclarée dans docker-compose.yml correspond à ce qui est configuré dans chaque instance WireGuard dans le panneau. En cas d’écart, le conteneur n’exposera pas le bon port sur l’hôte.
  • Vérifiez que le transfert IP est activé sur l’hôte : sysctl net.ipv4.ip_forward

Services en cours d’exécution

ServiceRôle
wireguard-webadminApplication Django : interface web et API
caddyProxy inverse et TLS automatique
auth-gatewayCouche d'autorisation Zero Trust : impose des vérifications d'identité avant de transmettre vers l'upstream
cronTâches planifiées : activation/désactivation des pairs, rafraîchissement du cache
rrdtoolHistorique du trafic : collecte de données RRD et génération de graphiques
dnsRésolveur basé sur dnsmasq avec prise en charge des listes de blocage par catégories
\ No newline at end of file diff --git a/docs/fr/get-involved/index.html b/docs/fr/get-involved/index.html new file mode 100644 index 0000000..97f9ede --- /dev/null +++ b/docs/fr/get-involved/index.html @@ -0,0 +1,11 @@ +Participer · wireguard_webadmin

Participer

wireguard_webadmin est développé au grand jour. Chaque contribution aide, quelle qu'en soit la taille.

Ajouter une étoile au dépôt

C'est la chose la plus simple que vous puissiez faire. Cela aide le projet à être découvert par d'autres admins système qui cherchent exactement ce type d'outil.

Mettre une étoile sur GitHub
🐛

Signaler des bugs

Vous avez trouvé quelque chose de cassé ? Ouvrez une issue sur GitHub. Aucun modèle requis : décrivez simplement ce que vous avez vu et comment le reproduire.

Ouvrir une issue
🔧

Contribuer au code

Les pull requests sont les bienvenues. Pour tout ce qui n'est pas trivial, ouvrez d'abord une issue afin que nous puissions nous aligner avant que vous investissiez du temps à coder. Bons points de départ : les issues marquées good first issue, les correctifs avec un cas de reproduction clair et l'ajout de couverture de tests.

Voir les PR ouvertes
💬

Rejoindre la discussion

Vous utilisez une configuration intéressante ? Vous êtes tombé sur un cas limite ? GitHub Discussions est l'endroit prévu pour les questions, les idées et les cas d'usage qui rentrent mal dans une issue.

Aller dans Discussions
\ No newline at end of file diff --git a/docs/fr/index.html b/docs/fr/index.html new file mode 100644 index 0000000..9729e16 --- /dev/null +++ b/docs/fr/index.html @@ -0,0 +1,14 @@ +wireguard_webadmin — Self-hosted VPN management and Zero Trust access control.
Open Source · Self-hosted · WireGuard

Gestion VPN auto-hébergée
et contrôle d'accès Zero Trust.

Instances WireGuard, gestion des pairs, pare-feu, DNS et publication sécurisée d'applications, le tout sur votre propre infrastructure.

Gratuit et open source. Rien ne quitte votre serveur.

wireguard_webadmin — light mode +wireguard_webadmin — dark mode

Bien plus qu'un panneau VPN.

Une stack complète de gestion réseau, du contrôle des pairs WireGuard jusqu'à la passerelle applicative Zero Trust.

⚙️

Gérer

  • Plusieurs instances WireGuard
  • Gestion des pairs avec graphiques de trafic
  • Règles de pare-feu et redirection de ports
  • Résolveur DNS avec listes de blocage
  • Liens d'invitation VPN avec QR code
🔒

Protéger

  • Passerelle applicative Zero Trust
  • Authentification à deux facteurs par TOTP
  • Altcha proof-of-work contre la force brute
  • ACL IP par application
  • OIDC bientôt disponible

Automatiser

  • Activation et désactivation planifiées des pairs
  • Modèles de routage
  • Liens d'invitation avec expiration
  • API v2 pour l'automatisation
  • Multi-utilisateur avec permissions par rôle

Publiez des applications internes en toute sécurité, sans les exposer au monde entier.

La passerelle applicative intégrée vous permet d'exposer des services comme Grafana, Proxmox ou n'importe quelle application web interne avec une authentification en amont, sans ouvrir de brèche dans votre pare-feu ni dépendre d'un tunnel tiers.

Chaque requête passe par le gatekeeper : TOTP, identifiants locaux, ACL IP et validation du navigateur avec preuve de travail (Altcha) pour stopper les attaques automatisées.

TOTPIP ACLAltcha PoWSelf-hosted

En savoir plus →
Zero Trust application gateway

Une visibilité complète sur chaque pair.

Chaque pair dispose d'une vue détaillée dédiée : état de connexion en temps réel, trafic cumulé, graphiques de bande passante en série temporelle, dernier handshake et QR code pour un reprovisionnement immédiat.

L'historique du trafic est stocké par pair afin que vous puissiez auditer l'utilisation dans le temps, et pas seulement depuis le dernier redémarrage.

Graphiques de traficDernier handshakeQR codeHistorique par pair
Peer details — traffic graph and metrics

Contrôle d'accès aux pairs basé sur le temps.

Définissez des plannings pour chaque pair VPN. L'accès est automatiquement activé et désactivé selon la plage horaire que vous configurez, sans intervention manuelle.

Utile pour les prestataires, les accès temporaires, les politiques par équipe ou toute situation où l'accès doit être limité dans le temps sans dépendre d'une intervention humaine pour le révoquer.

ACL temporelleAutomatiséPar pair
Peer scheduling interface

Conçu pour la vraie façon de travailler des admins système.

Chaque fonctionnalité est à portée d'écran. Pas de menus enfouis, pas de parcours à rallonge.

Firewall rule management
Pare-feu

Règles iptables par instance, redirection de ports et ACL sortantes, le tout géré depuis l'interface.

DNS management with blacklists
DNS

Résolveur intégré avec listes de blocage par catégories : publicités, malwares, pistage et contenu adulte.

VPN invite link with QR code
Liens d'invitation

Générez un lien partageable avec QR code et fichier de configuration. La personne le scanne ou l'importe directement dans son client WireGuard.

Routing templates
Modèles de routage

Définissez les IP autorisées et les politiques de routage une seule fois, puis réutilisez-les sur des dizaines de pairs.

Aussi simple que docker compose up.

Fonctionne sur n'importe quelle machine Linux avec Docker. Caddy gère automatiquement le HTTPS.

Guide de déploiement →

Tout ce qu'il vous faut. Rien de superflu.

🖥️

Multi-arch

Images natives pour amd64 et arm64

🌙

Mode sombre

Bascule complète entre interface sombre et claire

👥

Multi-utilisateur

Permissions basées sur les rôles par utilisateur

📊

Historique du trafic

Graphiques de bande passante par pair dans le temps

🚫

Liste DNS de blocage

Blocage par catégories : publicités, malwares, pistage

🗺️

Modèles de routage

Configurations de routage réutilisables entre pairs

🔗

API v2

API REST pour l'automatisation externe

🧪

Console de debug

Outils intégrés de diagnostic et de débogage

📨

Liens d'invitation

Invitations avec QR code et expiration optionnelle

🔥

Pare-feu

Gestion des règles de pare-feu par instance

📡

Redirection de ports

Redirigez des ports à travers les pairs VPN

🔐

TOTP / 2FA

Double authentification pour l'admin et la passerelle

Ce qui arrive.

Bientôt

Authentification OIDC

Connectez-vous avec votre fournisseur d'identité existant : Keycloak, Authentik, Google Workspace ou tout autre IdP compatible OIDC.

En cours

App Gateway / Gatekeeper v2

Une passerelle applicative plus puissante, avec des politiques granulaires par route, une gestion de session et une journalisation d'audit améliorée.

Prévu

Groupes de pairs et actions en masse

Regroupez les pairs par équipe, projet ou niveau d'accès. Appliquez règles de pare-feu, modèles de routage et plannings à des groupes entiers en une seule fois.

\ No newline at end of file diff --git a/docs/fr/index.xml b/docs/fr/index.xml new file mode 100644 index 0000000..03a9f97 --- /dev/null +++ b/docs/fr/index.xml @@ -0,0 +1,49 @@ +wireguard_webadminhttps://wireguard-webadmin.com/fr/Recent content on wireguard_webadminHugofrGuide de déploiementhttps://wireguard-webadmin.com/fr/deployment/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/fr/deployment/<h2 id="prérequis">Prérequis</h2> +<ul> +<li>Un serveur Linux accessible depuis l&rsquo;endroit où vous allez l&rsquo;administrer</li> +<li><a href="https://docs.docker.com/engine/install/">Docker</a> et <a href="https://docs.docker.com/compose/install/">Docker Compose</a> installés</li> +<li>Un nom de domaine pointant vers l&rsquo;IP de votre serveur</li> +<li>Les ports <strong>80</strong> et <strong>443</strong> ouverts pour Caddy, ainsi que le port UDP de WireGuard ouvert (par défaut <strong>51820</strong>)</li> +</ul> +<div class="callout"> + <p><strong>Caddy nécessite un nom DNS valide</strong>, interne ou public, pointant vers votre serveur afin d'obtenir et de renouveler automatiquement les certificats SSL.</p> +</div> +<hr> +<h2 id="déploiement">Déploiement</h2> +<div class="tab-group"> + <div class="tabs"> + <button class="tab-btn active" data-tab="dep-step-1">1. Créer le répertoire</button> + <button class="tab-btn" data-tab="dep-step-2">2. Récupérer le fichier compose</button> + <button class="tab-btn" data-tab="dep-step-3">3. Configurer .env</button> + <button class="tab-btn" data-tab="dep-step-4">4. Lancer</button> + </div> + <div class="tab-wrap"> + <div class="tab-panel active" id="dep-step-1"> +<pre><code>mkdir wireguard_webadmin && cd wireguard_webadmin</code></pre> + </div> + <div class="tab-panel" id="dep-step-2"> +<pre><code>wget -O docker-compose.yml \ + https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml</code></pre> + </div> + <div class="tab-panel" id="dep-step-3"> +<p>Créez un fichier <code>.env</code> dans le même répertoire. Définissez <code>SERVER_ADDRESS</code> avec votre domaine :</p>Participerhttps://wireguard-webadmin.com/fr/get-involved/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/fr/get-involved/<div class="involve-grid"> + <div class="involve-card involve-card--highlight"> + <div class="involve-card-icon">⭐</div> + <h3>Ajouter une étoile au dépôt</h3> + <p>C'est la chose la plus simple que vous puissiez faire. Cela aide le projet à être découvert par d'autres admins système qui cherchent exactement ce type d'outil.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin" target="_blank" rel="noopener" class="btn btn-primary">Mettre une étoile sur GitHub</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🐛</div> + <h3>Signaler des bugs</h3> + <p>Vous avez trouvé quelque chose de cassé ? Ouvrez une issue sur GitHub. Aucun modèle requis : décrivez simplement ce que vous avez vu et comment le reproduire.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin/issues" target="_blank" rel="noopener" class="btn btn-outline">Ouvrir une issue</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🔧</div> + <h3>Contribuer au code</h3> + <p>Les pull requests sont les bienvenues. Pour tout ce qui n'est pas trivial, ouvrez d'abord une issue afin que nous puissions nous aligner avant que vous investissiez du temps à coder. Bons points de départ : les issues marquées <code>good first issue</code>, les correctifs avec un cas de reproduction clair et l'ajout de couverture de tests.</p>Passerelle applicative Zero Trusthttps://wireguard-webadmin.com/fr/zero-trust/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/fr/zero-trust/<h2 id="que-signifie-zero-trust-ici-">Que signifie Zero Trust ici ?</h2> +<p>La sécurité réseau traditionnelle part du principe que tout ce qui se trouve à l&rsquo;intérieur de votre réseau peut être considéré comme fiable. +Zero Trust inverse ce modèle : <strong>aucune requête n&rsquo;est fiable par défaut</strong>, même si elle provient du VPN.</p> +<p>Dans wireguard_webadmin, la passerelle applicative Zero Trust se place devant vos services internes. +Chaque requête doit s&rsquo;authentifier avant d&rsquo;atteindre l&rsquo;application, et le service lui-même n&rsquo;a jamais besoin d&rsquo;être exposé directement.</p> \ No newline at end of file diff --git a/docs/fr/sitemap.xml b/docs/fr/sitemap.xml new file mode 100644 index 0000000..357aeaf --- /dev/null +++ b/docs/fr/sitemap.xml @@ -0,0 +1 @@ +https://wireguard-webadmin.com/fr/https://wireguard-webadmin.com/fr/categories/https://wireguard-webadmin.com/fr/deployment/https://wireguard-webadmin.com/fr/get-involved/https://wireguard-webadmin.com/fr/zero-trust/https://wireguard-webadmin.com/fr/tags/ \ No newline at end of file diff --git a/docs/fr/tags/index.html b/docs/fr/tags/index.html new file mode 100644 index 0000000..6d1e01d --- /dev/null +++ b/docs/fr/tags/index.html @@ -0,0 +1,11 @@ +Tags · wireguard_webadmin

Tags

\ No newline at end of file diff --git a/docs/fr/tags/index.xml b/docs/fr/tags/index.xml new file mode 100644 index 0000000..ad99115 --- /dev/null +++ b/docs/fr/tags/index.xml @@ -0,0 +1 @@ +Tags on wireguard_webadminhttps://wireguard-webadmin.com/fr/tags/Recent content in Tags on wireguard_webadminHugofr \ No newline at end of file diff --git a/docs/fr/zero-trust/index.html b/docs/fr/zero-trust/index.html new file mode 100644 index 0000000..5c9d135 --- /dev/null +++ b/docs/fr/zero-trust/index.html @@ -0,0 +1,16 @@ +Passerelle applicative Zero Trust · wireguard_webadmin

Passerelle applicative Zero Trust

Publiez des services internes en toute sécurité, sans les exposer directement à internet.

Que signifie Zero Trust ici ?

La sécurité réseau traditionnelle part du principe que tout ce qui se trouve à l’intérieur de votre réseau peut être considéré comme fiable. +Zero Trust inverse ce modèle : aucune requête n’est fiable par défaut, même si elle provient du VPN.

Dans wireguard_webadmin, la passerelle applicative Zero Trust se place devant vos services internes. +Chaque requête doit s’authentifier avant d’atteindre l’application, et le service lui-même n’a jamais besoin d’être exposé directement.


Comment une requête circule

1 Le client atteint la passerelle

Le point d'entrée public reçoit la requête à la place du service interne.

2 Validation du navigateur

La preuve de travail Altcha peut bloquer les abus automatisés avant même le début de la connexion.

3 Vérifications d'identité

Les identifiants, le TOTP et la politique d'IP source sont évalués.

4 Transmission vers l'upstream

Seules les requêtes approuvées sont transmises à Grafana, Proxmox ou à une autre application interne.


Méthodes d’authentification

TOTP / 2FA
Mots de passe à usage unique basés sur le temps. Fonctionne avec toute application TOTP : Google Authenticator, Aegis, Authy.
Identifiants locaux
Nom d'utilisateur et mot de passe gérés directement dans wireguard_webadmin. Aucun IdP externe nécessaire.
ACL IP
Autorisez des IP ou sous-réseaux spécifiques. Les pairs VPN peuvent être automatiquement considérés comme fiables via leur adresse de tunnel.
OIDC bientôt disponible
Déléguez l'authentification à Keycloak, Authentik, Google Workspace ou à tout fournisseur compatible OIDC.

Anti brute force : preuve de travail Altcha

Avant même qu’un formulaire de connexion ne s’affiche, le navigateur doit résoudre un léger défi computationnel +(Altcha).

Cela ne crée aucune friction pour les vrais utilisateurs, car le matériel moderne le résout en quelques millisecondes, +mais cela rend les attaques automatisées de credential stuffing coûteuses à grande échelle.

Protection en couches : Une limitation de débit est déjà en place. La preuve de travail vient la compléter : là où le rate limiting borne le volume de requêtes par IP, Altcha ajoute un coût de calcul par requête qui rend les attaques distribuées coûteuses, quel que soit le nombre d'IP sources impliquées.


Cas d’usage

  • Exposez Grafana à votre équipe sans ouvrir le port 3000 sur internet
  • Publiez une console web Proxmox derrière TOTP, accessible uniquement depuis votre VPN
  • Partagez une application auto-hébergée avec un client à l’aide d’identifiants temporaires
  • Protégez n’importe quel service HTTP interne sans modifier sa configuration

Aucune modification de l'application n'est nécessaire. Le gatekeeper transmet la requête de manière transparente. +Votre service interne n'a pas besoin d'implémenter l'authentification : la passerelle s'en charge.


La gestion VPN et la passerelle applicative fonctionnent comme une seule stack auto-hébergée. Aucun compte chez un service tiers, aucune dépendance à un tunnel sortant, aucun trafic qui quitte votre infrastructure.

\ No newline at end of file diff --git a/docs/get-involved/index.html b/docs/get-involved/index.html new file mode 100644 index 0000000..856519d --- /dev/null +++ b/docs/get-involved/index.html @@ -0,0 +1,11 @@ +Get Involved · wireguard_webadmin

Get Involved

wireguard_webadmin is built in the open. Every contribution helps — no matter the size.

Star the repo

The simplest thing you can do. It helps the project get discovered by other sysadmins who are looking for exactly this.

Star on GitHub
🐛

Report bugs

Found something broken? Open an issue on GitHub. No template required — just describe what you saw and how to reproduce it.

Open an issue
🔧

Contribute code

Pull requests are welcome. For anything non-trivial, open an issue first so we can align before you invest time writing code. Good starting points: issues tagged good first issue, bug fixes with a clear reproduction case, and test coverage.

Browse open PRs
💬

Join the discussion

Running an interesting setup? Hit an edge case? GitHub Discussions is the place for questions, ideas, and use cases that don't fit neatly into an issue.

Go to Discussions
\ No newline at end of file diff --git a/docs/images/dns.png b/docs/images/dns.png new file mode 100644 index 0000000..7a0e88c Binary files /dev/null and b/docs/images/dns.png differ diff --git a/docs/images/firewall.png b/docs/images/firewall.png new file mode 100644 index 0000000..786d957 Binary files /dev/null and b/docs/images/firewall.png differ diff --git a/docs/images/peer_details.png b/docs/images/peer_details.png new file mode 100644 index 0000000..02eff57 Binary files /dev/null and b/docs/images/peer_details.png differ diff --git a/docs/images/peer_list_dark.png b/docs/images/peer_list_dark.png new file mode 100644 index 0000000..e5fcf99 Binary files /dev/null and b/docs/images/peer_list_dark.png differ diff --git a/docs/images/peer_list_light.png b/docs/images/peer_list_light.png new file mode 100644 index 0000000..942411a Binary files /dev/null and b/docs/images/peer_list_light.png differ diff --git a/docs/images/routing_template.png b/docs/images/routing_template.png new file mode 100644 index 0000000..726bf5e Binary files /dev/null and b/docs/images/routing_template.png differ diff --git a/docs/images/scheduler.png b/docs/images/scheduler.png new file mode 100644 index 0000000..57dc21f Binary files /dev/null and b/docs/images/scheduler.png differ diff --git a/docs/images/vpn_invite.png b/docs/images/vpn_invite.png new file mode 100644 index 0000000..454d544 Binary files /dev/null and b/docs/images/vpn_invite.png differ diff --git a/docs/images/zero_trust_app.png b/docs/images/zero_trust_app.png new file mode 100644 index 0000000..d10c69f Binary files /dev/null and b/docs/images/zero_trust_app.png differ diff --git a/docs/index.html b/docs/index.html index 2da5e2f..e2d66fd 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,10 +1,14 @@ - - - - - Title - - -test - - \ No newline at end of file +wireguard_webadmin — Self-hosted VPN management and Zero Trust access control.
Open Source · Self-hosted · WireGuard

Self-hosted VPN management
and Zero Trust access control.

WireGuard instances, peer management, firewall, DNS, and secure app publishing — all running on your infrastructure.

Free and open source. Nothing leaves your server.

wireguard_webadmin — light mode +wireguard_webadmin — dark mode

More than a VPN panel.

A complete network management stack — from WireGuard peer control to Zero Trust application gateway.

⚙️

Manage

  • Multiple WireGuard instances
  • Peer management with traffic graphs
  • Firewall rules & port forwarding
  • DNS resolver with blacklists
  • VPN invite links with QR code
🔒

Protect

  • Zero Trust application gateway
  • TOTP two-factor authentication
  • Altcha proof-of-work anti-brute-force
  • IP ACL per application
  • OIDC coming soon

Automate

  • Scheduled peer enable/disable
  • Routing templates
  • Invite links with expiry
  • API v2 for automation
  • Multi-user with role permissions

Publish internal apps securely — without opening them to the world.

The built-in application gateway lets you expose services like Grafana, Proxmox, or any internal web app with proper authentication in front, without punching holes in your firewall or relying on a third-party tunnel.

Every request passes through the gatekeeper: TOTP, local credentials, IP ACL, and browser validation with proof-of-work (Altcha) to stop automated attacks.

TOTPIP ACLAltcha PoWSelf-hosted

Learn more →
Zero Trust application gateway

Full visibility into every peer.

Each peer gets a dedicated detail view: real-time connection status, cumulative traffic, time-series bandwidth graphs, last handshake, and the QR code for instant re-provisioning.

Traffic history is stored per peer so you can audit usage over time — not just since the last restart.

Traffic graphsLast handshakeQR codePer-peer history
Peer details — traffic graph and metrics

Time-based peer access control.

Define schedules for each VPN peer. Access is automatically enabled and disabled based on the time window you configure — no manual intervention needed.

Useful for contractors, temporary access, shift-based policies, or anything where access should be bounded in time without relying on humans to remember to revoke it.

Time-based ACLAutomatedPer-peer
Peer scheduling interface

Built for how sysadmins actually work.

Every feature is a screen away. No buried menus, no wizard flows.

Firewall rule management
Firewall

Per-instance iptables rules, port forwarding, and outbound ACLs — managed from the UI.

DNS management with blacklists
DNS

Built-in resolver with category-based blacklists: ads, malware, tracking, adult content.

VPN invite link with QR code
Invite links

Generate a shareable link with QR code and config file. The user scans or imports it directly into their WireGuard client.

Routing templates
Routing templates

Define allowed IPs and routing policies once, reuse across dozens of peers.

As easy as docker compose up.

Runs on any Linux machine with Docker. Caddy handles HTTPS automatically.

Deployment guide →

Everything you need. Nothing you don't.

🖥️

Multi-arch

Native images for amd64 and arm64

🌙

Dark mode

Full dark/light interface toggle

👥

Multi-user

Role-based permissions per user

📊

Traffic history

Per-peer bandwidth graphs over time

🚫

DNS blacklist

Block categories: ads, malware, tracking

🗺️

Routing templates

Reusable routing configs across peers

🔗

API v2

REST API for external automation

🧪

Debug console

Built-in diagnostic and debug tools

📨

Invite links

QR code invites with optional expiry

🔥

Firewall

Per-instance firewall rule management

📡

Port forwarding

Forward ports through VPN peers

🔐

TOTP / 2FA

Two-factor auth for admin and app gateway

What's coming.

Coming soon

OIDC Authentication

Sign in with your existing identity provider — Keycloak, Authentik, Google Workspace, or any OIDC-compatible IdP.

In progress

App Gateway / Gatekeeper v2

A more capable application gateway with granular per-route policies, session management, and improved audit logging.

Planned

Peer groups & bulk actions

Group peers by team, project, or access level. Apply firewall rules, routing templates, and schedules to whole groups at once.

\ No newline at end of file diff --git a/docs/index.xml b/docs/index.xml new file mode 100644 index 0000000..6ed767e --- /dev/null +++ b/docs/index.xml @@ -0,0 +1,55 @@ +wireguard_webadminhttps://wireguard-webadmin.com/Recent content on wireguard_webadminHugoen-usDeployment Guidehttps://wireguard-webadmin.com/deployment/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/deployment/<h2 id="prerequisites">Prerequisites</h2> +<ul> +<li>A Linux server reachable from where you&rsquo;ll manage it</li> +<li><a href="https://docs.docker.com/engine/install/">Docker</a> and <a href="https://docs.docker.com/compose/install/">Docker Compose</a> installed</li> +<li>A domain name pointing to your server&rsquo;s IP</li> +<li>Ports <strong>80</strong> and <strong>443</strong> open for Caddy; your WireGuard UDP port open (default <strong>51820</strong>)</li> +</ul> +<div class="callout"> + <p><strong>Caddy requires a valid DNS name</strong> — either internal or public — pointing to your server so it can obtain and renew SSL certificates automatically.</p> +</div> +<hr> +<h2 id="deploy">Deploy</h2> +<div class="tab-group"> + <div class="tabs"> + <button class="tab-btn active" data-tab="dep-step-1">1. Create directory</button> + <button class="tab-btn" data-tab="dep-step-2">2. Fetch compose file</button> + <button class="tab-btn" data-tab="dep-step-3">3. Configure .env</button> + <button class="tab-btn" data-tab="dep-step-4">4. Run</button> + </div> + <div class="tab-wrap"> + <div class="tab-panel active" id="dep-step-1"> +<pre><code>mkdir wireguard_webadmin && cd wireguard_webadmin</code></pre> + </div> + <div class="tab-panel" id="dep-step-2"> +<pre><code>wget -O docker-compose.yml \ + https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml</code></pre> + </div> + <div class="tab-panel" id="dep-step-3"> +<p>Create a <code>.env</code> file in the same directory. Set <code>SERVER_ADDRESS</code> to your domain:</p>Get Involvedhttps://wireguard-webadmin.com/get-involved/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/get-involved/<div class="involve-grid"> + <div class="involve-card involve-card--highlight"> + <div class="involve-card-icon">⭐</div> + <h3>Star the repo</h3> + <p>The simplest thing you can do. It helps the project get discovered by other sysadmins who are looking for exactly this.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin" target="_blank" rel="noopener" class="btn btn-primary">Star on GitHub</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🐛</div> + <h3>Report bugs</h3> + <p>Found something broken? Open an issue on GitHub. No template required — just describe what you saw and how to reproduce it.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin/issues" target="_blank" rel="noopener" class="btn btn-outline">Open an issue</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🔧</div> + <h3>Contribute code</h3> + <p>Pull requests are welcome. For anything non-trivial, open an issue first so we can align before you invest time writing code. Good starting points: issues tagged <code>good first issue</code>, bug fixes with a clear reproduction case, and test coverage.</p>Zero Trust Application Gatewayhttps://wireguard-webadmin.com/zero-trust/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/zero-trust/<h2 id="what-is-zero-trust-here">What is Zero Trust here?</h2> +<p>Traditional network security assumes that anything inside your network can be trusted. +Zero Trust flips that model: <strong>no request is trusted by default</strong>, even if it comes from inside the VPN.</p> +<p>In wireguard_webadmin, the Zero Trust application gateway sits in front of your internal services. +Every request must authenticate before reaching the app — the service itself never needs to be exposed directly.</p> +<hr> +<h2 id="how-a-request-flows">How a request flows</h2> +<div class="flow-cards"> + <div class="flow-card"> + <div class="flow-card-header"><span class="flow-card-num">1</span> <strong>Client reaches gateway</strong></div> + <p>The public endpoint receives the request instead of the internal service.</p> \ No newline at end of file diff --git a/docs/og-image.png b/docs/og-image.png new file mode 100644 index 0000000..e5fcf99 Binary files /dev/null and b/docs/og-image.png differ diff --git a/docs/pt-br/categories/index.html b/docs/pt-br/categories/index.html new file mode 100644 index 0000000..f73d484 --- /dev/null +++ b/docs/pt-br/categories/index.html @@ -0,0 +1,11 @@ +Categories · wireguard_webadmin

Categories

\ No newline at end of file diff --git a/docs/pt-br/categories/index.xml b/docs/pt-br/categories/index.xml new file mode 100644 index 0000000..33f12cc --- /dev/null +++ b/docs/pt-br/categories/index.xml @@ -0,0 +1 @@ +Categories on wireguard_webadminhttps://wireguard-webadmin.com/pt-br/categories/Recent content in Categories on wireguard_webadminHugopt-BR \ No newline at end of file diff --git a/docs/pt-br/deployment/index.html b/docs/pt-br/deployment/index.html new file mode 100644 index 0000000..c9b5b3f --- /dev/null +++ b/docs/pt-br/deployment/index.html @@ -0,0 +1,21 @@ +Guia de Deploy · wireguard_webadmin

Guia de Deploy

Do zero até um painel administrativo de WireGuard VPN funcional em menos de cinco minutos.

Pré-requisitos

  • Um servidor Linux acessível a partir de onde você vai administrá-lo
  • Docker e Docker Compose instalados
  • Um nome de domínio apontando para o IP do seu servidor
  • Portas 80 e 443 abertas para o Caddy, além da porta UDP do WireGuard aberta (padrão 51820)

O Caddy precisa de um nome DNS válido, interno ou público, apontando para o seu servidor para conseguir obter e renovar certificados SSL automaticamente.


Deploy

+ + +
mkdir wireguard_webadmin && cd wireguard_webadmin
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml

Crie um arquivo .env no mesmo diretório. Defina SERVER_ADDRESS com o seu domínio:

SERVER_ADDRESS=vpn.example.com
+DEBUG_MODE=False
+TIMEZONE=America/Sao_Paulo

Veja abaixo a referência do .env com todas as variáveis disponíveis.

docker compose up -d

Acesse o painel em https://vpn.example.com. O Caddy obtém e renova certificados SSL automaticamente.


Referência do .env

VariávelObrigatóriaDescrição
SERVER_ADDRESSSimNome DNS ou IP do seu servidor. Deve corresponder exatamente ao que você digita no navegador. Se não corresponder, ocorrerão erros de CSRF.
DEBUG_MODENãoDefina como True para ativar o modo debug do Django. Nunca use em produção. Padrão: False.
TIMEZONENãoFuso horário da aplicação. Use um valor da base tz. Padrão: America/Sao_Paulo.
EXTRA_ALLOWED_HOSTSNãoHosts adicionais que o Django deve aceitar, separados por vírgula. SERVER_ADDRESS sempre é incluído. Exemplo: app1.example.com,app2.example.com:8443.
WIREGUARD_STATUS_CACHE_ENABLEDNãoArmazena o status do WireGuard em cache para reduzir chamadas ao wg. Padrão: True.
WIREGUARD_STATUS_CACHE_REFRESH_INTERVALNãoCom que frequência o cache é atualizado, em segundos. Valores permitidos: 30, 60, 150, 300. Padrão: 60.
WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNTNãoQuantos snapshots em cache devem ser pré-carregados ao abrir a página (0-9). Valores mais altos preenchem os gráficos de tráfego antes. Reduza se a lista de peers parecer lenta. Padrão: 9.

Atualização

Os dados ficam persistidos em volumes Docker. Atualizar não afeta seus peers, regras de firewall, entradas DNS nem qualquer outra configuração.

01
Entre no diretório do projeto
cd wireguard_webadmin
02
Pare os serviços e baixe as imagens mais recentes
docker compose down
+docker compose pull
03
Faça backup dos seus dados
tar cvfz wireguard-webadmin-backup-$(date +%Y-%m-%d-%H%M%S).tar.gz \
+  /var/lib/docker/volumes/wireguard_webadmin_wireguard/_data/ \
+  /var/lib/docker/volumes/wireguard_webadmin_rrd_data/_data/
04
Atualize o arquivo compose
wget -O docker-compose.yml \
+  https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml
05
Suba a stack atualizada
docker compose up -d
06
Verifique os logs em busca de erros inesperados
docker compose logs wireguard_webadmin

Solução de problemas

O Caddy não está obtendo certificado

  • Confirme que o registro A do domínio aponta para o IP público do servidor
  • Verifique se as portas 80 e 443 estão abertas e não bloqueadas na rede
  • Consulte os logs do Caddy: docker compose logs caddy

O painel não carrega

  • Verifique se todos os containers estão em execução: docker compose ps
  • Procure por erros: docker compose logs wireguard_webadmin
  • Confirme que SERVER_ADDRESS em .env corresponde exatamente ao que você digita no navegador

Erros de CSRF no login

SERVER_ADDRESS está configurado incorretamente. Ele precisa corresponder ao hostname, e à porta se não for a padrão, usado para acessar o painel. Atualize o .env e reinicie com docker compose up -d.

Os peers do WireGuard não conseguem se conectar

  • Confirme que a porta UDP do WireGuard está aberta no firewall do host. O padrão é 51820, mas se você estiver executando múltiplas instâncias cada uma precisa de sua própria porta.
  • Garanta que o intervalo de portas UDP declarado em docker-compose.yml corresponda ao que está configurado em cada instância do WireGuard dentro do painel. Se houver divergência, o container não exporá a porta correta no host.
  • Verifique se o IP forwarding está habilitado no host: sysctl net.ipv4.ip_forward

O que está rodando

ServiçoFunção
wireguard-webadminAplicação Django: interface web e API
caddyProxy reverso e TLS automático
auth-gatewayCamada de autorização Zero Trust: aplica verificações de identidade antes de encaminhar para o upstream
cronTarefas agendadas: ativação/desativação de peers e atualização de cache
rrdtoolHistórico de tráfego: coleta de dados RRD e geração de gráficos
dnsResolvedor baseado em dnsmasq com suporte a listas de bloqueio por categoria
\ No newline at end of file diff --git a/docs/pt-br/get-involved/index.html b/docs/pt-br/get-involved/index.html new file mode 100644 index 0000000..3e43458 --- /dev/null +++ b/docs/pt-br/get-involved/index.html @@ -0,0 +1,11 @@ +Participe · wireguard_webadmin

Participe

wireguard_webadmin é desenvolvido de forma aberta. Toda contribuição ajuda, independentemente do tamanho.

Dê uma estrela ao repositório

É a coisa mais simples que você pode fazer. Isso ajuda o projeto a ser descoberto por outros sysadmins que estão procurando exatamente algo assim.

Dar estrela no GitHub
🐛

Reporte bugs

Encontrou algo quebrado? Abra uma issue no GitHub. Não precisa de template: basta descrever o que você viu e como reproduzir.

Abrir uma issue
🔧

Contribua com código

Pull requests são bem-vindos. Para qualquer coisa que não seja trivial, abra uma issue antes para alinharmos o caminho antes de você investir tempo escrevendo código. Bons pontos de partida: issues marcadas com good first issue, correções com um caso de reprodução claro e cobertura de testes.

Ver PRs abertas
💬

Entre na discussão

Está rodando uma configuração interessante? Encontrou um caso de borda? O GitHub Discussions é o lugar certo para perguntas, ideias e cenários de uso que não se encaixam bem em uma issue.

Ir para Discussions
\ No newline at end of file diff --git a/docs/pt-br/index.html b/docs/pt-br/index.html new file mode 100644 index 0000000..c504f1e --- /dev/null +++ b/docs/pt-br/index.html @@ -0,0 +1,14 @@ +wireguard_webadmin — Self-hosted VPN management and Zero Trust access control.
Open Source · Self-hosted · WireGuard

Gerenciamento de VPN self-hosted
e controle de acesso Zero Trust.

Instâncias WireGuard, gerenciamento de peers, firewall, DNS e publicação segura de aplicações, tudo rodando na sua própria infraestrutura.

Gratuito e open source. Nada sai do seu servidor.

wireguard_webadmin — light mode +wireguard_webadmin — dark mode

Mais do que um painel de VPN.

Uma stack completa de gerenciamento de rede, do controle de peers do WireGuard até um gateway de aplicações Zero Trust.

⚙️

Gerenciar

  • Múltiplas instâncias WireGuard
  • Gerenciamento de peers com gráficos de tráfego
  • Regras de firewall e redirecionamento de portas
  • Resolvedor DNS com listas de bloqueio
  • Links de convite VPN com QR code
🔒

Proteger

  • Gateway de aplicações Zero Trust
  • Autenticação em dois fatores com TOTP
  • Altcha proof-of-work contra brute force
  • ACL por IP para cada aplicação
  • OIDC em breve

Automatizar

  • Ativação e desativação agendadas de peers
  • Templates de roteamento
  • Links de convite com expiração
  • API v2 para automação
  • Multiusuário com permissões por função

Publique apps internos com segurança, sem expô-los ao mundo.

O gateway de aplicações embutido permite expor serviços como Grafana, Proxmox ou qualquer app web interno com autenticação na frente, sem abrir buracos no firewall nem depender de um túnel de terceiros.

Toda requisição passa pelo gatekeeper: TOTP, credenciais locais, ACL por IP e validação do navegador com proof-of-work (Altcha) para barrar ataques automatizados.

TOTPIP ACLAltcha PoWSelf-hosted

Saiba mais →
Zero Trust application gateway

Visibilidade total sobre cada peer.

Cada peer ganha uma visão detalhada dedicada: status de conexão em tempo real, tráfego acumulado, gráficos de largura de banda em série temporal, último handshake e QR code para reprovisionamento instantâneo.

O histórico de tráfego é armazenado por peer para que você possa auditar o uso ao longo do tempo, e não apenas desde o último reinício.

Gráficos de tráfegoÚltimo handshakeQR codeHistórico por peer
Peer details — traffic graph and metrics

Controle de acesso a peers baseado em horário.

Defina agendas para cada peer de VPN. O acesso é ativado e desativado automaticamente com base na janela de tempo que você configurar, sem intervenção manual.

Útil para prestadores, acessos temporários, políticas por turno ou qualquer cenário em que o acesso precise ser limitado no tempo sem depender de alguém lembrar de revogá-lo.

ACL por horárioAutomatizadoPor peer
Peer scheduling interface

Construído para o jeito que sysadmins realmente trabalham.

Cada recurso fica a uma tela de distância. Sem menus escondidos, sem fluxos de assistente.

Firewall rule management
Firewall

Regras de iptables por instância, redirecionamento de portas e ACLs de saída, tudo gerenciado pela interface.

DNS management with blacklists
DNS

Resolvedor embutido com listas de bloqueio por categoria: anúncios, malware, rastreamento e conteúdo adulto.

VPN invite link with QR code
Links de convite

Gere um link compartilhável com QR code e arquivo de configuração. A pessoa escaneia ou importa direto no cliente WireGuard.

Routing templates
Templates de roteamento

Defina IPs permitidos e políticas de roteamento uma vez e reutilize em dezenas de peers.

Tão fácil quanto docker compose up.

Roda em qualquer máquina Linux com Docker. O Caddy cuida do HTTPS automaticamente.

Guia de deploy →

Tudo o que você precisa. Nada do que não precisa.

🖥️

Multi-arquitetura

Imagens nativas para amd64 e arm64

🌙

Modo escuro

Alternância completa entre interface clara e escura

👥

Multiusuário

Permissões por função para cada usuário

📊

Histórico de tráfego

Gráficos de banda por peer ao longo do tempo

🚫

Lista de bloqueio DNS

Bloqueio por categorias: anúncios, malware, rastreamento

🗺️

Templates de roteamento

Configurações de roteamento reutilizáveis entre peers

🔗

API v2

API REST para automação externa

🧪

Console de depuração

Ferramentas embutidas de diagnóstico e debug

📨

Links de convite

Convites com QR code e expiração opcional

🔥

Firewall

Gerenciamento de regras de firewall por instância

📡

Redirecionamento de portas

Encaminhe portas através de peers da VPN

🔐

TOTP / 2FA

Autenticação em dois fatores para o admin e o gateway

O que vem por aí.

Em breve

Autenticação OIDC

Entre com seu provedor de identidade atual: Keycloak, Authentik, Google Workspace ou qualquer IdP compatível com OIDC.

Em andamento

App Gateway / Gatekeeper v2

Um gateway de aplicações mais poderoso, com políticas granulares por rota, gerenciamento de sessão e auditoria aprimorada.

Planejado

Grupos de peers e ações em massa

Agrupe peers por equipe, projeto ou nível de acesso. Aplique regras de firewall, templates de roteamento e agendas a grupos inteiros de uma só vez.

\ No newline at end of file diff --git a/docs/pt-br/index.xml b/docs/pt-br/index.xml new file mode 100644 index 0000000..621fd67 --- /dev/null +++ b/docs/pt-br/index.xml @@ -0,0 +1,49 @@ +wireguard_webadminhttps://wireguard-webadmin.com/pt-br/Recent content on wireguard_webadminHugopt-BRGateway de Aplicações Zero Trusthttps://wireguard-webadmin.com/pt-br/zero-trust/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/pt-br/zero-trust/<h2 id="o-que-significa-zero-trust-aqui">O que significa Zero Trust aqui?</h2> +<p>A segurança de rede tradicional assume que tudo o que está dentro da sua rede pode ser confiável. +Zero Trust inverte esse modelo: <strong>nenhuma requisição é confiável por padrão</strong>, mesmo que venha de dentro da VPN.</p> +<p>No wireguard_webadmin, o gateway de aplicações Zero Trust fica na frente dos seus serviços internos. +Toda requisição precisa se autenticar antes de chegar à aplicação, e o serviço em si nunca precisa ser exposto diretamente.</p>Guia de Deployhttps://wireguard-webadmin.com/pt-br/deployment/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/pt-br/deployment/<h2 id="pré-requisitos">Pré-requisitos</h2> +<ul> +<li>Um servidor Linux acessível a partir de onde você vai administrá-lo</li> +<li><a href="https://docs.docker.com/engine/install/">Docker</a> e <a href="https://docs.docker.com/compose/install/">Docker Compose</a> instalados</li> +<li>Um nome de domínio apontando para o IP do seu servidor</li> +<li>Portas <strong>80</strong> e <strong>443</strong> abertas para o Caddy, além da porta UDP do WireGuard aberta (padrão <strong>51820</strong>)</li> +</ul> +<div class="callout"> + <p><strong>O Caddy precisa de um nome DNS válido</strong>, interno ou público, apontando para o seu servidor para conseguir obter e renovar certificados SSL automaticamente.</p> +</div> +<hr> +<h2 id="deploy">Deploy</h2> +<div class="tab-group"> + <div class="tabs"> + <button class="tab-btn active" data-tab="dep-step-1">1. Criar diretório</button> + <button class="tab-btn" data-tab="dep-step-2">2. Baixar arquivo compose</button> + <button class="tab-btn" data-tab="dep-step-3">3. Configurar .env</button> + <button class="tab-btn" data-tab="dep-step-4">4. Executar</button> + </div> + <div class="tab-wrap"> + <div class="tab-panel active" id="dep-step-1"> +<pre><code>mkdir wireguard_webadmin && cd wireguard_webadmin</code></pre> + </div> + <div class="tab-panel" id="dep-step-2"> +<pre><code>wget -O docker-compose.yml \ + https://raw.githubusercontent.com/eduardogsilva/wireguard_webadmin/main/docker-compose-caddy.yml</code></pre> + </div> + <div class="tab-panel" id="dep-step-3"> +<p>Crie um arquivo <code>.env</code> no mesmo diretório. Defina <code>SERVER_ADDRESS</code> com o seu domínio:</p>Participehttps://wireguard-webadmin.com/pt-br/get-involved/Mon, 01 Jan 0001 00:00:00 +0000https://wireguard-webadmin.com/pt-br/get-involved/<div class="involve-grid"> + <div class="involve-card involve-card--highlight"> + <div class="involve-card-icon">⭐</div> + <h3>Dê uma estrela ao repositório</h3> + <p>É a coisa mais simples que você pode fazer. Isso ajuda o projeto a ser descoberto por outros sysadmins que estão procurando exatamente algo assim.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin" target="_blank" rel="noopener" class="btn btn-primary">Dar estrela no GitHub</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🐛</div> + <h3>Reporte bugs</h3> + <p>Encontrou algo quebrado? Abra uma issue no GitHub. Não precisa de template: basta descrever o que você viu e como reproduzir.</p> + <a href="https://github.com/eduardogsilva/wireguard_webadmin/issues" target="_blank" rel="noopener" class="btn btn-outline">Abrir uma issue</a> + </div> + <div class="involve-card"> + <div class="involve-card-icon">🔧</div> + <h3>Contribua com código</h3> + <p>Pull requests são bem-vindos. Para qualquer coisa que não seja trivial, abra uma issue antes para alinharmos o caminho antes de você investir tempo escrevendo código. Bons pontos de partida: issues marcadas com <code>good first issue</code>, correções com um caso de reprodução claro e cobertura de testes.</p> \ No newline at end of file diff --git a/docs/pt-br/sitemap.xml b/docs/pt-br/sitemap.xml new file mode 100644 index 0000000..d16bcc3 --- /dev/null +++ b/docs/pt-br/sitemap.xml @@ -0,0 +1 @@ +https://wireguard-webadmin.com/pt-br/https://wireguard-webadmin.com/pt-br/categories/https://wireguard-webadmin.com/pt-br/zero-trust/https://wireguard-webadmin.com/pt-br/deployment/https://wireguard-webadmin.com/pt-br/get-involved/https://wireguard-webadmin.com/pt-br/tags/ \ No newline at end of file diff --git a/docs/pt-br/tags/index.html b/docs/pt-br/tags/index.html new file mode 100644 index 0000000..6f9d551 --- /dev/null +++ b/docs/pt-br/tags/index.html @@ -0,0 +1,11 @@ +Tags · wireguard_webadmin

Tags

\ No newline at end of file diff --git a/docs/pt-br/tags/index.xml b/docs/pt-br/tags/index.xml new file mode 100644 index 0000000..e1148bc --- /dev/null +++ b/docs/pt-br/tags/index.xml @@ -0,0 +1 @@ +Tags on wireguard_webadminhttps://wireguard-webadmin.com/pt-br/tags/Recent content in Tags on wireguard_webadminHugopt-BR \ No newline at end of file diff --git a/docs/pt-br/zero-trust/index.html b/docs/pt-br/zero-trust/index.html new file mode 100644 index 0000000..1ec5467 --- /dev/null +++ b/docs/pt-br/zero-trust/index.html @@ -0,0 +1,16 @@ +Gateway de Aplicações Zero Trust · wireguard_webadmin

Gateway de Aplicações Zero Trust

Publique serviços internos com segurança, sem expô-los diretamente à internet.

O que significa Zero Trust aqui?

A segurança de rede tradicional assume que tudo o que está dentro da sua rede pode ser confiável. +Zero Trust inverte esse modelo: nenhuma requisição é confiável por padrão, mesmo que venha de dentro da VPN.

No wireguard_webadmin, o gateway de aplicações Zero Trust fica na frente dos seus serviços internos. +Toda requisição precisa se autenticar antes de chegar à aplicação, e o serviço em si nunca precisa ser exposto diretamente.


Como uma requisição flui

1 O cliente chega ao gateway

O endpoint público recebe a requisição no lugar do serviço interno.

2 Validação do navegador

O proof-of-work do Altcha pode desafiar abusos automatizados antes mesmo do login começar.

3 Verificações de identidade

Credenciais, TOTP e a política de IP de origem são avaliados.

4 Encaminhamento para o upstream

Apenas requisições aprovadas são encaminhadas para Grafana, Proxmox ou outra aplicação interna.


Métodos de autenticação

TOTP / 2FA
Senhas temporárias baseadas em tempo. Funciona com qualquer app TOTP, como Google Authenticator, Aegis e Authy.
Credenciais locais
Nome de usuário e senha gerenciados dentro do wireguard_webadmin. Nenhum IdP externo é necessário.
ACL por IP
Permita IPs ou sub-redes específicas em uma lista de confiança. Peers da VPN podem ser automaticamente confiáveis pelo endereço do túnel.
OIDC em breve
Delegue a autenticação para Keycloak, Authentik, Google Workspace ou qualquer provedor compatível com OIDC.

Anti brute force: proof-of-work do Altcha

Antes mesmo de qualquer formulário de login ser exibido, o navegador precisa resolver um desafio computacional leve +(Altcha).

Isso não gera atrito para usuários reais, já que o hardware moderno resolve o desafio em milissegundos, +mas torna ataques automatizados de credential stuffing computacionalmente caros em larga escala.

Proteção em camadas: O rate limiting já está em vigor. O proof-of-work complementa essa camada: enquanto o rate limiting limita o volume de requisições por IP, o Altcha adiciona um custo computacional por requisição que encarece ataques distribuídos, independentemente de quantos IPs de origem estejam envolvidos.


Casos de uso

  • Exponha o Grafana para o seu time sem abrir a porta 3000 para a internet
  • Publique um console web do Proxmox atrás de TOTP, acessível apenas pela sua VPN
  • Compartilhe uma aplicação self-hosted com um cliente usando credenciais temporárias
  • Proteja qualquer serviço HTTP interno sem mexer na configuração dele

Nenhuma mudança na aplicação é necessária. O gatekeeper faz o proxy da requisição de forma transparente. +Seu serviço interno não precisa implementar autenticação: o gateway cuida disso.


O gerenciamento da VPN e o gateway de aplicações rodam como uma única stack self-hosted. Sem conta em serviço de terceiros, sem dependência de túnel de saída e sem tráfego deixando a sua infraestrutura.

\ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..12476c3 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1 @@ +https://wireguard-webadmin.com/en/sitemap.xmlhttps://wireguard-webadmin.com/pt-br/sitemap.xmlhttps://wireguard-webadmin.com/es/sitemap.xmlhttps://wireguard-webadmin.com/fr/sitemap.xmlhttps://wireguard-webadmin.com/de/sitemap.xml \ No newline at end of file diff --git a/docs/tags/index.html b/docs/tags/index.html new file mode 100644 index 0000000..b614fb1 --- /dev/null +++ b/docs/tags/index.html @@ -0,0 +1,11 @@ +Tags · wireguard_webadmin

Tags

\ No newline at end of file diff --git a/docs/tags/index.xml b/docs/tags/index.xml new file mode 100644 index 0000000..dadc69f --- /dev/null +++ b/docs/tags/index.xml @@ -0,0 +1 @@ +Tags on wireguard_webadminhttps://wireguard-webadmin.com/tags/Recent content in Tags on wireguard_webadminHugoen-us \ No newline at end of file diff --git a/docs/zero-trust/index.html b/docs/zero-trust/index.html new file mode 100644 index 0000000..894fc42 --- /dev/null +++ b/docs/zero-trust/index.html @@ -0,0 +1,16 @@ +Zero Trust Application Gateway · wireguard_webadmin

Zero Trust Application Gateway

Publish internal services securely — without exposing them to the internet.

What is Zero Trust here?

Traditional network security assumes that anything inside your network can be trusted. +Zero Trust flips that model: no request is trusted by default, even if it comes from inside the VPN.

In wireguard_webadmin, the Zero Trust application gateway sits in front of your internal services. +Every request must authenticate before reaching the app — the service itself never needs to be exposed directly.


How a request flows

1 Client reaches gateway

The public endpoint receives the request instead of the internal service.

2 Browser validation

Altcha proof-of-work can challenge automated abuse before login even starts.

3 Identity checks

Credentials, TOTP, and source IP policy are evaluated.

4 Forward to upstream

Only approved requests are proxied to Grafana, Proxmox, or another internal app.


Authentication methods

TOTP / 2FA
Time-based one-time passwords. Works with any TOTP app — Google Authenticator, Aegis, Authy.
Local credentials
Username and password managed inside wireguard_webadmin. No external IdP required.
IP ACL
Whitelist specific IPs or subnets. VPN peers can be automatically trusted by their tunnel address.
OIDC coming soon
Delegate authentication to Keycloak, Authentik, Google Workspace, or any OIDC-compatible provider.

Anti-brute-force: Altcha proof-of-work

Before any login form is shown, the browser must solve a lightweight computational challenge +(Altcha).

This has zero friction for real users (solved in milliseconds by modern hardware) but makes +automated credential-stuffing attacks computationally expensive at scale.

Layered protection: Rate limiting is already in place. Proof-of-work complements it — where rate limiting bounds the request volume per IP, Altcha adds a per-request computational cost that makes distributed attacks expensive regardless of how many source IPs are involved.


Use cases

  • Expose Grafana to your team without opening port 3000 to the internet
  • Publish a Proxmox web console behind TOTP, accessible only from your VPN
  • Share a self-hosted app with a client with time-limited credentials
  • Gate any internal HTTP service without touching its configuration

No app changes required. The gatekeeper proxies the request transparently. +Your internal service doesn't need to implement authentication — the gateway handles it.


VPN management and the application gateway run as a single self-hosted stack. No account at a third-party service, no outbound tunnel dependency, no traffic leaving your infrastructure.

\ No newline at end of file