External IP Lookup Disable Feature implemented with environment variable: DISABLE_EXTERNAL_IP_LOOKUP

This commit is contained in:
2026-01-14 19:13:46 +01:00
parent 5d52fbcba9
commit e997059e2a
4 changed files with 35 additions and 3 deletions

View File

@@ -329,6 +329,24 @@ podman run -d \
Access the web interface at `http://localhost:3080`.
**Disable External IP Lookup** (Privacy)
By default, the web UI displays your external IP address by querying external services. For privacy reasons, you can disable this feature using the `DISABLE_EXTERNAL_IP_LOOKUP` environment variable:
```bash
podman run -d \
--name fail2ban-ui \
--network=host \
-e DISABLE_EXTERNAL_IP_LOOKUP=true \
-v /opt/podman-fail2ban-ui:/config:Z \
-v /etc/fail2ban:/etc/fail2ban:Z \
-v /var/log:/var/log:ro \
-v /var/run/fail2ban:/var/run/fail2ban \
swissmakers/fail2ban-ui:latest
```
When set, the "Your ext. IP:" display will be completely hidden and no external IP lookup requests will be made.
**Volume Mounts Explained**
| Volume | Required | Purpose |
@@ -468,6 +486,10 @@ The **Fail2Ban Callback URL** is a critical setting that determines how Fail2Ban
3. **Port Changes:**
- When you change the Fail2Ban UI port (via `PORT` environment variable or UI settings), the callback URL automatically updates if it's using the default localhost pattern
**Privacy Settings**
- **External IP Lookup**: By default, the web UI displays your external IP address. To disable this feature for privacy reasons, set the `DISABLE_EXTERNAL_IP_LOOKUP` environment variable to `true` or `1`. This will hide the "Your ext. IP:" display and prevent any external IP lookup requests.
- For custom callback URLs (e.g., reverse proxy or custom IP), you must manually update them to match your setup
**Important Notes:**

View File

@@ -1118,9 +1118,14 @@ func shouldAlertForCountry(country string, alertCountries []string) bool {
// IndexHandler serves the HTML page
func IndexHandler(c *gin.Context) {
// Check if external IP lookup is disabled via environment variable
// Default is enabled (false means enabled, true means disabled)
disableExternalIP := os.Getenv("DISABLE_EXTERNAL_IP_LOOKUP") == "true" || os.Getenv("DISABLE_EXTERNAL_IP_LOOKUP") == "1"
c.HTML(http.StatusOK, "index.html", gin.H{
"timestamp": time.Now().Format(time.RFC1123),
"version": time.Now().Unix(),
"timestamp": time.Now().Format(time.RFC1123),
"version": time.Now().Unix(),
"disableExternalIP": disableExternalIP,
})
}

View File

@@ -3,7 +3,10 @@
window.addEventListener('DOMContentLoaded', function() {
showLoading(true);
displayExternalIP();
// Only display external IP if the element exists (not disabled via template variable)
if (document.getElementById('external-ip')) {
displayExternalIP();
}
// Initialize header components (clock and status indicator)
if (typeof initHeader === 'function') {

View File

@@ -116,10 +116,12 @@
</div>
<div class="flex flex-col sm:flex-row sm:items-center gap-3">
<div id="serverSelectorContainer" class="min-w-[220px]"></div>
{{if not .disableExternalIP}}
<div class="text-sm text-gray-500 sm:ml-2">
<span data-i18n="dashboard.external_ip">Your ext. IP:</span>
<span id="external-ip" class="font-medium text-blue-600 hover:underline cursor-pointer">Loading…</span>
</div>
{{end}}
<div class="flex flex-col sm:flex-row gap-3">
<button class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors flex items-center gap-2"
onclick="openServerManager()">