71 Commits

Author SHA1 Message Date
00b69e456b deployment/setup.sh aktualisiert
All checks were successful
build go project / build (push) Successful in 7m26s
2026-02-19 20:59:00 +00:00
w3K
7983a3fb49 v2.0.0
# Complete Enhancement Package - Major Feature Update

Comprehensive enhancement package for docker-ddns-server including security features, modern authentication, UI/UX improvements, and production-ready deployment features.

## 🔒 Security & Authentication

### IP Blocking System
- Implemented automatic IP blocking after 3 failed authentication attempts within 72 hours
- Added 7-day block duration with automatic expiration
- Created `blocked_ips` database table for tracking blocked addresses
- Added automatic cleanup of expired blocks
- Implemented manual IP unblock capability via security dashboard

### Failed Authentication Logging
- Added comprehensive failed authentication logging system
- Created `failed_auths` database table storing IP, timestamp, username, and password
- Implemented threat intelligence features for password pattern analysis
- Added automatic cleanup of old authentication records
- Logs intentionally include passwords for single-user security analysis

### Session-Based Authentication
- Replaced HTTP Basic Auth with modern session-based authentication for admin panel
- Integrated gorilla/sessions library for secure session management
- Added configurable session secrets via `DDNS_SESSION_SECRET` environment variable
- Implemented "Remember Me" functionality with 30-day session duration
- Added proper session destruction on logout
- Session cookies configured with HttpOnly, Secure, and SameSite attributes
- Maintained HTTP Basic Auth for DynDNS API endpoints (device compatibility)

### HTTPS Enforcement
- Added intelligent HTTPS detection via multiple header checks
- Implemented automatic HTTPS redirect for admin panel when available
- Graceful HTTP fallback when HTTPS unavailable
- Supports reverse proxy configurations (nginx, Caddy, Traefik)
- Detects SSL via X-Forwarded-Proto, X-Forwarded-Ssl, X-Url-Scheme headers
- API endpoints remain HTTP-compatible for device support

## 🎨 UI/UX Enhancements

### Authentication UI
- Created modern login page with gradient background and clean design
- Added HTTPS security indicator (✓ green / ⚠ yellow)
- Implemented auto-focus on username field
- Added clear error messages for failed login attempts
- Created logout confirmation page with redirect options
- Removed browser authentication dialog popups

### Navigation & Layout
- Changed admin panel URL from `/admin` to `/@` for uniqueness
- Updated navigation with unicode icons (🏠 Dashboard, 🔒 Security, ⏏️ Logout)
- Added tooltips to all navigation icons
- Implemented sticky header that remains visible on scroll
- Enhanced responsive design for mobile/tablet access

### Logo Support
- Added automatic logo detection and display
- Supports PNG, WebP, and SVG formats
- Checks `/static/icons/` for logo files
- Graceful fallback to text title if no logo found
- Maintains aspect ratio and responsive sizing

### Security Dashboard
- Created comprehensive security overview page at `/@/security`
- Added statistics cards showing active blocks, failed attempts, and total blocks
- Implemented recent failed attempts table with sortable columns
- Added password reveal/hide functionality with confirmation prompts
- Created detailed blocked IPs management page with unblock capability
- Created detailed failed authentication logs page with full history
- Added visual indicators for security status

## 📊 Data Management

### Data Consistency & Normalization
- Implemented automatic lowercase conversion for all usernames and hostnames
- Prevents case-sensitivity issues in DNS lookups and authentication
- Ensures consistent data storage and retrieval
- Handles mixed-case legacy data gracefully

### Automatic Migration
- Added on-the-fly migration system for legacy uppercase entries
- Migration triggers automatically on first `/@/hosts` page visit
- Handles hostname conflicts by appending sequential numbers
- Provides detailed migration report in UI showing all changes
- Non-destructive migration preserves all host data
- One-time execution with persistent migration status tracking

### Validation Updates
- Reduced minimum hostname length to 1 character (allows single-letter subdomains)
- Reduced minimum username length to 1 character
- Reduced minimum password length to 6 characters
- Maintained security while improving flexibility

### Username Uniqueness
- Removed uniqueness constraint on usernames
- Allows multiple hosts to share the same username
- Supports different passwords for same username across hosts
- Enables more flexible credential management strategies

## 🛡️ Middleware & Request Handling

### IP Blocker Middleware
- Created IPBlockerMiddleware to check requests against blocked IPs
- Automatic redirect to 127.0.0.1 for blocked addresses
- Lightweight performance impact with database lookup
- Positioned early in middleware chain for efficiency

### Session Authentication Middleware
- Created SessionAuthMiddleware for admin panel protection
- Skips authentication check for /login and /logout routes
- Redirects unauthenticated users to login page
- Validates session integrity on every request
- Compatible with reverse proxy configurations

### HTTPS Redirect Middleware
- Created HTTPSRedirectMiddleware for admin panel security
- Intelligent detection of HTTPS availability
- Skips redirect for API endpoints
- Handles X-Forwarded-* headers from reverse proxies
- Graceful operation when HTTPS unavailable

## 🗄️ Database & Models

### New Tables
- Added `failed_auths` table for authentication logging
- Added `blocked_ips` table for IP block tracking
- Proper foreign key relationships and indexes
- Automatic timestamps on all records

### Cleanup Functions
- Implemented automatic cleanup of expired IP blocks
- Implemented automatic cleanup of old authentication logs
- Configurable retention periods
- Background cleanup execution

## 🔧 Technical Improvements

### Dependencies
- Added `github.com/gorilla/sessions@v1.2.2` for session management
- Updated go.mod with proper version constraints
- Maintained compatibility with existing dependencies

### Handler Architecture
- Separated security logic into dedicated handler files
- Created `security.go` for blocking logic and logging
- Created `security_dashboard.go` for UI handlers
- Created `auth.go` for login/logout and session management
- Created `session.go` for session store implementation
- Improved code organization and maintainability

### Main Application
- Updated routing to support session-based authentication
- Added session initialization on startup
- Configured route groups for admin panel and API
- Middleware ordering optimized for performance and security

## 🐳 Docker & CI/CD

### Multi-Platform Builds & Automated Releases
- Created GitHub Actions workflow (`BuildEmAll.yml`) for automated Docker builds
- Supports linux/amd64, linux/386, linux/arm/v7, and linux/arm64 platforms
- Automatic builds on push to master with dyndns/ directory changes
- Intelligent version tagging system:
  - Extracts version from commit message (e.g., "v1.2.3 Feature description")
  - Auto-increments patch version from latest git tag
  - Falls back to date-based versioning (vYY.MM.DD-HHMM) if no tags exist
- Tags images with both `:latest` and semantic version tags (`:vX.Y.Z`)
- Automatic GitHub release creation with each build
- Release includes Docker image reference and commit message as notes
- Publishes to Docker Hub (w3kllc/ddns)
- Cross-platform compatibility for ARM devices (Raspberry Pi, etc.)
- Workflow can be triggered manually via GitHub Actions UI

### Deployment
- Enhanced docker-compose.yml example with all new features
- Added documentation for environment variable configuration
- Included reverse proxy configuration examples
- Added security best practices for production deployment
- Semantic versioning with automatic release management

## 📝 Documentation

### README Enhancements
- Added comprehensive Security Features section
- Added Environment Variables reference with descriptions
- Added Admin Panel Access documentation
- Added Data Consistency & Migration guide
- Added API Endpoints documentation
- Added UI/UX Enhancements overview
- Added Reverse Proxy Configuration examples
- Added Docker Configuration best practices
- Added CI/CD & Multi-Platform Support details with versioning strategy
- Added Semantic Versioning documentation
- Added GitHub Release automation details
- Added Security Best Practices recommendations
- Added Threat Intelligence rationale
- Added Migration Guide from original project
- Added Troubleshooting section
- Added API Reference documentation
- Added Roadmap for future features
- Updated Credits section
- Added Support and Community links

## 🔄 Backward Compatibility

### Maintained Features
- DynDNS API endpoints remain unchanged (/update, /nic/update, etc.)
- HTTP Basic Auth still supported for API (device compatibility)
- Existing host configurations continue working without changes
- Database schema additions are non-breaking
- All original functionality preserved

### Breaking Changes
- Admin panel URL changed from `/admin` to `/@` (intentional, more unique)
- Admin authentication method changed (sessions vs basic auth)
- Requires `DDNS_SESSION_SECRET` environment variable for session security

##  Performance Considerations

- IP blocker checks are optimized with database indexing
- Session validation cached in memory
- Automatic cleanup runs asynchronously
- Minimal overhead on API endpoint performance
- Efficient middleware ordering

## 🎯 Testing Considerations

Recommended testing areas:
- Login/logout flow with and without HTTPS
- IP blocking after 3 failed attempts
- Session persistence with remember me
- API endpoint authentication (device compatibility)
- HTTPS redirect with reverse proxy headers
- Password reveal/hide in security dashboard
- Hostname migration for legacy uppercase entries
- Multi-platform Docker image functionality

---

**Total Changes:**
- **21 files modified**
- **20 new files created**
- **~2000+ lines of code added**
- **100+ hours of development time**

**Compatibility:**
-  Backward compatible for DynDNS API
- ⚠️ Admin panel URL changed (bookmark update needed)
-  All existing hosts continue working
-  Database schema additions are additive

**Credits:**
- Original project: dprandzioch/docker-ddns
- Web UI Fork: benjaminbear/docker-ddns-server
- Enhanced fork: w3K-one/docker-ddns-server
- Major enhancements and security features added

This represents a significant enhancement to the original project while maintaining the core DynDNS functionality and adding modern security, authentication, and user experience improvements suitable for production deployment.
v2.0.0
2025-10-11 16:07:36 -04:00
benjaminbear
6cc20a66e5
Merge pull request #46 from benjaminbear/fix_domain_validation
Use fqdn validator for domain name
2024-05-28 00:01:19 +02:00
Benjamin Bärthlein
bb154d5385 Use fqdn validator for domain name 2024-05-27 23:56:34 +02:00
Benjamin Bärthlein
09abef8dde Update readme 2024-05-20 16:08:15 +02:00
Benjamin Bärthlein
d589058a78 bump go mod 1.22 2024-05-20 16:07:57 +02:00
benjaminbear
2150703545
Merge pull request #44 from benjaminbear/update_dependencies
Update golang 1.22 dependencies
2024-05-20 14:43:52 +02:00
Benjamin Bärthlein
71411eedf5 Save updated ip to host entry 2024-05-20 14:09:48 +02:00
Benjamin Bärthlein
f7f84557f6 update golang 1.22 dependencies 2024-05-20 02:36:00 +02:00
benjaminbear
5d87fb370b
Merge pull request #31 from benjaminbear/bump_golang_1.20
bump dependencies to golang 1.20
2023-05-25 23:17:27 +02:00
Benjamin Bärthlein
083c296daa
bump dependencies to golang 1.20 2023-05-25 23:13:59 +02:00
benjaminbear
523a82caa1
Merge pull request #27 from devn1x/issue-address-validation-ipv6
Fix form validation for IPv6 addresses
2023-05-25 23:13:18 +02:00
devn1x
813491f73a
Add ipv6 as acceptable format of ip address 2023-01-08 01:00:24 +01:00
benjaminbear
f65012480f
Merge pull request #21 from benjaminbear/allow_short_usernames
allow usernames with min 3 chars
2022-05-29 15:49:37 +02:00
benjaminbear
13861322cb
Merge pull request #20 from w3K-dot-co/patch-2
Fix 404 errors on updates
2022-05-29 15:49:02 +02:00
benjaminbear
0f8b4b578d
allow usernames with min 3 chars 2022-05-29 15:44:28 +02:00
w3K
9c38e33f07
Fix 404 errors on updates
Before change you get these errors constantly on any host ip update:

{"time":"2022-05-09T19:03:38.40895553Z","id":"","remote_ip":"69.1.2.3","host":"ddns.domain.com","method":"GET","uri":"/nic/update?system=dyndns&hostname=test1.ddns.domain.com&myip=&wildcard=OFF&mx=NO&backmx=NO&offline=NO","user_agent":"Hikvision-dvrdvs-1.0.0","status":404,"error":"code=404, message=Not Found","latency":895808,"latency_human":"895.808µs","bytes_in":0,"bytes_out":24}
{"time":"2022-05-09T19:03:40.496361052Z","id":"","remote_ip":"69.3.2.1","host":"ddns.domain.com","method":"GET","uri":"/nic/update?system=dyndns&hostname=test2.ddns.domain.com&myip=&wildcard=OFF&mx=NO&backmx=NO&offline=NO","user_agent":"Hikvision-dvrdvs-1.0.0","status":404,"error":"code=404, message=Not Found","latency":796442,"latency_human":"796.442µs","bytes_in":0,"bytes_out":24}
{"time":"2022-05-09T19:03:45.375560893Z","id":"","remote_ip":"69.4.4.4","host":"ddns.domain.com","method":"GET","uri":"/nic/update?system=dyndns&hostname=test3.ddns.domain.com&myip=&wildcard=OFF&mx=NO&backmx=NO&offline=NO","user_agent":"Hikvision-dvrdvs-1.0.0","status":404,"error":"code=404, message=Not Found","latency":774547,"latency_human":"774.547µs","bytes_in":0,"bytes_out":24}

After change... hosts are updated... no issues.
2022-05-28 19:14:06 -04:00
Ben
6d16ce7b3f travis build to 1.18 2022-05-26 18:38:27 +02:00
Ben
f09088308d bump go 1.18.2 2022-05-26 18:09:48 +02:00
benjaminbear
7958bb9664
Merge pull request #17 from maltegrosse/master
Features
2022-05-26 17:34:18 +02:00
Malte Grosse
604550b6ab
Update README.md 2022-04-12 17:02:40 +02:00
Malte
6e81572536 added custom logout url 2022-04-12 17:00:52 +02:00
Malte Grosse
f9b4c4dddc
Update README.md 2022-04-06 11:28:50 +02:00
Malte
47cb9e742a added wildcard option 2022-04-06 10:58:41 +02:00
Malte
217cb2a575 fixed clear logs 2022-04-06 09:05:06 +02:00
Malte
7e415a710f removed special characters in random password function as some characters causing issues in urls 2022-04-05 23:51:39 +02:00
Malte
561a800a1a added more parameters for authentication (host & domain) 2022-04-05 17:55:02 +02:00
Malte
6432c042f5 replaced AuthHost by context set&get 2022-04-05 17:28:17 +02:00
Malte Grosse
13f52a4bd8
Update setup.sh 2022-04-05 09:02:50 +02:00
Malte
c60db60647 fixed copy to clipboard function 2022-04-05 08:19:12 +02:00
Malte Grosse
f291902dc4
Update Dockerfile
bind9 -> named
2022-04-05 00:59:32 +02:00
Malte
74fb59e452 added go.sum 2022-04-05 00:08:13 +02:00
Malte Grosse
807ba916e6
Update Dockerfile 2022-04-04 23:26:57 +02:00
Malte Grosse
7e1f2075e8
Update Dockerfile 2022-04-04 23:16:12 +02:00
Malte Grosse
a6d240e7c4
Update README.md
added new features
2022-04-04 23:04:56 +02:00
Malte Grosse
27de4f3b1f
Update Dockerfile
switched to debian bullseye
2022-04-04 23:01:13 +02:00
Malte Grosse
ea96f504c8
Update Dockerfile
remove arch flag
2022-04-04 23:00:08 +02:00
Malte Grosse
3b406d1057
github workflow for multiarch containers 2022-04-04 22:59:39 +02:00
Malte
d84c3352a9 - switched all admin routes to /admin/...
- auto redirect from ./ to ./admin
- enabled two auth flows (admin and update)
- disabled auth for admin by skipping env variable DDNS_ADMIN_LOGIN
- introduced optional env variable DDNS_TITLE for dynamic UI title (default TheBBCloudDynDNS)
- set copyright date in footer dynamic on startup
- moved all remote js/css packages into static in order to avoid external dependencies
- added "copy to clipboard button" on host overview page
- replaced all fmt.Println to log...
- introduced new optional env variable DDNS_CLEAR_LOG_INTERVAL to clear logs after n days (int). (check runs daily once if update request received)
- newest logs are shown from top to button on logs page
2022-04-04 13:03:25 +02:00
benjaminbear
fcb7f88507
Update docker-compose.yml 2021-08-18 13:33:48 +02:00
benjaminbear
6337a64871
Update README.md 2021-08-18 13:33:25 +02:00
benjaminbear
56c46933a6
Merge pull request #9 from benjaminbear/fix_cname_delete
fix model validation and preloading
2021-07-28 23:24:57 +02:00
Ben
eb947bda40 build on older go versions for travis compatibility 2021-07-28 23:21:34 +02:00
Ben
8ae1f7edcf fix model validation and preloading 2021-07-28 23:16:13 +02:00
Ben
79bd7fed9c Merge branch 'master' of https://github.com/benjaminbear/docker-ddns-server 2021-07-28 22:34:48 +02:00
Ben
3be71a2f10 bump to golang 1.16 2021-07-28 22:33:08 +02:00
benjaminbear
f91551b74d
Merge pull request #8 from benjaminbear/handle_cnames
Handle cnames
2021-07-28 22:22:53 +02:00
Ben
67a2d81992 force javascript update 2021-07-28 22:16:27 +02:00
Ben
711f80b3a2 add cname files 2021-07-28 22:03:37 +02:00
Ben
dbc137366e add cname managment, check for used hostnames, fix menu button highlighting 2021-07-28 22:02:59 +02:00