mirror of
https://github.com/swissmakers/fail2ban-ui.git
synced 2026-04-11 13:47:05 +02:00
6.0 KiB
6.0 KiB
SSH and Local Fail2ban Development Setup
This setup provides a complete testing environment for Fail2ban UI with:
- Local Fail2ban instance (container) - for testing local connector
- Remote Fail2ban instance via SSH (container) - for testing SSH connector
Services
1. Fail2ban-Local
- Container:
DEV_fail2ban-local - Purpose: Local Fail2ban instance for testing local connector
- Network:
hostmode (for iptables access) - Config:
./fail2ban-config-local/ - Socket:
./f2b-run-local/
2. Fail2ban-SSH
- Container:
DEV_fail2ban-ssh - Purpose: Remote Fail2ban instance accessible via SSH
- Network: Bridge mode
- SSH Port:
2222(mapped from container port 22) - SSH User:
testuser - SSH Key: Auto-generated in
./ssh-keys/ - Config:
./fail2ban-config-ssh/
3. Fail2ban-UI
- Container:
DEV_fail2ban-ui - Port:
3080 - URL:
http://172.16.10.18:3080(or configured BIND_ADDRESS) - Purpose: Main application for managing both Fail2ban instances
Setup Instructions
1. Build the Fail2ban-UI Image
cd /opt/fail2ban-ui
podman build -t localhost/fail2ban-ui:dev .
# or
docker build -t localhost/fail2ban-ui:dev .
2. Start the Services
cd /opt/fail2ban-ui/development/ssh_and_local
podman compose up -d
# or
docker-compose up -d
3. Wait for SSH Container Setup
The SSH container takes a moment to:
- Generate SSH keys (if not present)
- Configure SSH server
- Set up user permissions
- Configure sudoers
Check logs to verify:
podman logs DEV_fail2ban-ssh
Look for:
========================================
SSH Test Container Ready
========================================
4. Configure Fail2ban-UI
-
Access Fail2ban UI:
- Open
http://172.16.10.18:3080(or your configured BIND_ADDRESS:PORT) - Or if using host network:
http://localhost:3080
- Open
-
Add Local Server:
- Go to "Manage Servers"
- The local Fail2ban instance should be auto-detected
- Enable the local connector
-
Add SSH Server:
- Go to "Manage Servers"
- Click "Add Server"
- Configure:
- Name:
SSH Test Server - Type:
SSH - Host:
127.0.0.1 - Port:
2222 - SSH User:
testuser - SSH Key: Select
/config/.ssh/id_rsa(auto-mounted)
- Name:
- Enable the connector
- Click "Test Connection" to verify
SSH Connection Details
- Host:
127.0.0.1 - Port:
2222 - User:
testuser - Key Path (in container):
/config/.ssh/id_rsa - Key Path (host):
./ssh-keys/id_rsa
Test SSH Connection Manually
# From host
podman exec -it DEV_fail2ban-ui ssh \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-o BatchMode=yes \
-i /config/.ssh/id_rsa \
-p 2222 \
testuser@127.0.0.1
Configuration
Fail2ban-UI Environment Variables
Edit container-compose.yml to customize:
environment:
- PORT=3080
- BIND_ADDRESS=172.16.10.18 # Change to your IP or 0.0.0.0
# OIDC settings (if testing OIDC)
- OIDC_ENABLED=false # Set to true to enable OIDC
SSH Container Customization
The SSH container is pre-configured with:
- Passwordless SSH key authentication
- Sudo permissions for fail2ban-client commands
- Proper file permissions (FACLs) for Fail2ban config directories
- Root access for network management
To modify SSH configuration, edit the command section in container-compose.yml.
Volume Structure
./config/ # Fail2ban-UI configuration and database
./ssh-keys/ # SSH key pair (shared between containers)
./fail2ban-config-local/ # Local Fail2ban configuration
./f2b-run-local/ # Local Fail2ban socket directory
./fail2ban-config-ssh/ # SSH Fail2ban configuration
Testing Scenarios
1. Local Connector Test
- Enable local connector in Fail2ban-UI
- Create a test jail
- Verify jail appears in dashboard
- Test ban/unban operations
- Verify configuration changes persist
2. SSH Connector Test
- Add SSH server in Fail2ban-UI
- Test connection (should succeed)
- Create a test jail on remote server
- Verify jail appears in dashboard
- Test ban/unban operations
- Verify configuration changes sync to remote
3. Multi-Server Management
- Enable both local and SSH connectors
- Verify both servers appear in server selector
- Switch between servers
- Verify each server's jails are isolated
- Test operations on each server independently
Troubleshooting
SSH Connection Fails
-
Check SSH container is ready:
podman logs DEV_fail2ban-ssh | tail -20 -
Verify SSH keys exist:
ls -la ./ssh-keys/ -
Test SSH manually:
podman exec -it DEV_fail2ban-ui ssh -v -i /config/.ssh/id_rsa -p 2222 testuser@127.0.0.1 -
Check SSH container port:
netstat -tlnp | grep 2222
Local Connector Issues
-
Check socket exists:
ls -la ./f2b-run-local/ -
Verify permissions:
podman exec -it DEV_fail2ban-local ls -la /var/run/fail2ban/ -
Check Fail2ban status:
podman exec -it DEV_fail2ban-local fail2ban-client status
Permission Errors
- Ensure volumes have correct SELinux labels (
:zor:Z) - Check container is running with required capabilities
- Verify file permissions in mounted directories
Cleanup
To remove all containers and volumes:
podman compose down -v
# or
docker-compose down -v
This will remove:
- All containers
- Volume data (configs, SSH keys, databases)
Note: This deletes all development data. SSH keys will be regenerated on next start.
Production Considerations
⚠️ This setup is for development only!
For production:
- Use proper SSH key management (not this auto-generated key)
- Use dedicated service accounts (not testuser)
- Use HTTPS/TLS (not HTTP) / Configure proper reverse proxy
- Use strong, randomly generated secrets
- Use secure session secrets
- Enable proper logging and monitoring