404 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			404 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Security Documentation
 | 
						|
 | 
						|
## Overview
 | 
						|
 | 
						|
The VPN Gateway implements multiple layers of security to ensure zero-leak protection and maintain privacy.
 | 
						|
 | 
						|
## Core Security Features
 | 
						|
 | 
						|
### 1. Permanent Killswitch
 | 
						|
 | 
						|
The killswitch is the primary security mechanism that prevents any traffic leaks.
 | 
						|
 | 
						|
#### Implementation
 | 
						|
 | 
						|
- **Firewall Rules**: Default DROP policy for all chains
 | 
						|
- **Boot Protection**: Activates before network initialization
 | 
						|
- **Cannot be Disabled**: No UI or API endpoint to disable
 | 
						|
- **Continuous Monitoring**: Verified every 10 seconds
 | 
						|
 | 
						|
#### Technical Details
 | 
						|
 | 
						|
```bash
 | 
						|
# Default policies
 | 
						|
iptables -P INPUT DROP
 | 
						|
iptables -P FORWARD DROP
 | 
						|
iptables -P OUTPUT DROP
 | 
						|
 | 
						|
# Only allowed traffic:
 | 
						|
# - Loopback (system operations)
 | 
						|
# - LAN subnet (WebUI access)
 | 
						|
# - Established connections
 | 
						|
# - VPN tunnel (when active)
 | 
						|
```
 | 
						|
 | 
						|
### 2. DNS Leak Protection
 | 
						|
 | 
						|
#### Mechanisms
 | 
						|
 | 
						|
1. **Forced VPN DNS**: All DNS queries routed through VPN
 | 
						|
2. **System DNS Override**: /etc/resolv.conf locked
 | 
						|
3. **IPv6 Disabled**: Prevents IPv6 DNS leaks
 | 
						|
4. **DNS Filtering**: Only root can make DNS queries for VPN connection
 | 
						|
 | 
						|
#### Configuration
 | 
						|
 | 
						|
```bash
 | 
						|
# DNS through VPN only
 | 
						|
iptables -A OUTPUT -p udp --dport 53 -m owner --uid-owner root -j ACCEPT
 | 
						|
iptables -A OUTPUT -p tcp --dport 53 -m owner --uid-owner root -j ACCEPT
 | 
						|
 | 
						|
# Block all other DNS
 | 
						|
iptables -A OUTPUT -p udp --dport 53 -j DROP
 | 
						|
iptables -A OUTPUT -p tcp --dport 53 -j DROP
 | 
						|
```
 | 
						|
 | 
						|
### 3. IPv6 Protection
 | 
						|
 | 
						|
Complete IPv6 blocking to prevent leaks:
 | 
						|
 | 
						|
```bash
 | 
						|
# IPv6 firewall
 | 
						|
ip6tables -P INPUT DROP
 | 
						|
ip6tables -P FORWARD DROP
 | 
						|
ip6tables -P OUTPUT DROP
 | 
						|
 | 
						|
# Kernel level
 | 
						|
sysctl -w net.ipv6.conf.all.disable_ipv6=1
 | 
						|
sysctl -w net.ipv6.conf.default.disable_ipv6=1
 | 
						|
```
 | 
						|
 | 
						|
### 4. Security Monitor
 | 
						|
 | 
						|
Continuous monitoring daemon that:
 | 
						|
- Verifies killswitch every 10 seconds
 | 
						|
- Detects potential leaks
 | 
						|
- Auto-recovers from failures
 | 
						|
- Logs security events
 | 
						|
 | 
						|
## Threat Model
 | 
						|
 | 
						|
### Protected Against
 | 
						|
 | 
						|
✅ **IP Leaks**
 | 
						|
- Killswitch blocks all non-VPN traffic
 | 
						|
- No traffic possible without active tunnel
 | 
						|
 | 
						|
✅ **DNS Leaks**
 | 
						|
- All DNS through VPN
 | 
						|
- System DNS locked
 | 
						|
- IPv6 DNS blocked
 | 
						|
 | 
						|
✅ **WebRTC Leaks**
 | 
						|
- Blocked at firewall level
 | 
						|
- No direct peer connections
 | 
						|
 | 
						|
✅ **IPv6 Leaks**
 | 
						|
- IPv6 completely disabled
 | 
						|
- Both firewall and kernel level
 | 
						|
 | 
						|
✅ **Connection Drops**
 | 
						|
- Killswitch remains active
 | 
						|
- No traffic during reconnection
 | 
						|
- Auto-recovery available
 | 
						|
 | 
						|
✅ **Malicious Applications**
 | 
						|
- Cannot bypass firewall rules
 | 
						|
- All traffic subject to killswitch
 | 
						|
 | 
						|
### Not Protected Against
 | 
						|
 | 
						|
❌ **Compromised Container**
 | 
						|
- If attacker gains root access
 | 
						|
- Can modify firewall rules
 | 
						|
 | 
						|
❌ **Host System Compromise**
 | 
						|
- Container isolation breach
 | 
						|
- Hypervisor vulnerabilities
 | 
						|
 | 
						|
❌ **Traffic Analysis**
 | 
						|
- VPN traffic patterns visible
 | 
						|
- Timing correlation attacks
 | 
						|
 | 
						|
❌ **VPN Provider Compromise**
 | 
						|
- Malicious VPN server
 | 
						|
- Provider logging (choose carefully)
 | 
						|
 | 
						|
## Security Best Practices
 | 
						|
 | 
						|
### 1. Installation Security
 | 
						|
 | 
						|
```bash
 | 
						|
# Verify installer integrity
 | 
						|
sha256sum install.sh
 | 
						|
# Compare with published hash
 | 
						|
 | 
						|
# Review script before execution
 | 
						|
less install.sh
 | 
						|
 | 
						|
# Run with specific version
 | 
						|
curl -sSL https://raw.githubusercontent.com/yourusername/vpn-gateway/v1.0.0/install.sh | bash
 | 
						|
```
 | 
						|
 | 
						|
### 2. Access Control
 | 
						|
 | 
						|
#### WebUI Protection
 | 
						|
 | 
						|
```nginx
 | 
						|
# Restrict WebUI access to LAN only
 | 
						|
location / {
 | 
						|
    allow 192.168.1.0/24;
 | 
						|
    deny all;
 | 
						|
    # ... proxy settings
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### SSH Hardening
 | 
						|
 | 
						|
```bash
 | 
						|
# Disable password authentication
 | 
						|
PasswordAuthentication no
 | 
						|
 | 
						|
# Key-only access
 | 
						|
PubkeyAuthentication yes
 | 
						|
 | 
						|
# Restrict to specific IPs
 | 
						|
AllowUsers root@192.168.1.0/24
 | 
						|
```
 | 
						|
 | 
						|
### 3. Key Management
 | 
						|
 | 
						|
#### WireGuard Keys
 | 
						|
 | 
						|
```bash
 | 
						|
# Generate new keys periodically
 | 
						|
wg genkey | tee privatekey | wg pubkey > publickey
 | 
						|
 | 
						|
# Secure storage
 | 
						|
chmod 600 /etc/wireguard/*.key
 | 
						|
 | 
						|
# Never share private keys
 | 
						|
# Unique keys per gateway
 | 
						|
```
 | 
						|
 | 
						|
#### Rotation Schedule
 | 
						|
 | 
						|
- **Private Keys**: Every 3-6 months
 | 
						|
- **Preshared Keys**: Every 1-3 months
 | 
						|
- **API Keys**: Every 30 days
 | 
						|
 | 
						|
### 4. Monitoring
 | 
						|
 | 
						|
#### Security Logs
 | 
						|
 | 
						|
```bash
 | 
						|
# Monitor security events
 | 
						|
journalctl -u vpn-security-monitor -f
 | 
						|
 | 
						|
# Check for failures
 | 
						|
grep "ALERT\|ERROR" /var/log/vpn-security-monitor.log
 | 
						|
 | 
						|
# Audit firewall drops
 | 
						|
iptables -L -n -v | grep DROP
 | 
						|
```
 | 
						|
 | 
						|
#### Leak Testing
 | 
						|
 | 
						|
```bash
 | 
						|
# Regular leak tests
 | 
						|
curl https://ipleak.net/json/
 | 
						|
curl https://am.i.mullvad.net/json
 | 
						|
 | 
						|
# DNS leak test
 | 
						|
nslookup example.com
 | 
						|
dig example.com
 | 
						|
```
 | 
						|
 | 
						|
### 5. Updates
 | 
						|
 | 
						|
#### Security Updates
 | 
						|
 | 
						|
```bash
 | 
						|
# System updates (through VPN)
 | 
						|
apt update && apt upgrade
 | 
						|
 | 
						|
# VPN Gateway updates
 | 
						|
/usr/local/bin/vpn-update.sh
 | 
						|
 | 
						|
# Check for security advisories
 | 
						|
```
 | 
						|
 | 
						|
#### Automatic Updates
 | 
						|
 | 
						|
```bash
 | 
						|
# Enable unattended upgrades
 | 
						|
apt install unattended-upgrades
 | 
						|
dpkg-reconfigure -plow unattended-upgrades
 | 
						|
```
 | 
						|
 | 
						|
## Incident Response
 | 
						|
 | 
						|
### 1. Leak Detected
 | 
						|
 | 
						|
If a leak is detected:
 | 
						|
 | 
						|
1. **Immediate Action**
 | 
						|
   ```bash
 | 
						|
   # Re-enable killswitch
 | 
						|
   /usr/local/bin/vpn-killswitch.sh enable
 | 
						|
   
 | 
						|
   # Disconnect VPN
 | 
						|
   wg-quick down wg0
 | 
						|
   ```
 | 
						|
 | 
						|
2. **Investigation**
 | 
						|
   ```bash
 | 
						|
   # Check logs
 | 
						|
   journalctl -u vpn-security-monitor -n 100
 | 
						|
   
 | 
						|
   # Verify firewall rules
 | 
						|
   iptables -L -n -v
 | 
						|
   ```
 | 
						|
 | 
						|
3. **Recovery**
 | 
						|
   ```bash
 | 
						|
   # Restart security services
 | 
						|
   systemctl restart vpn-killswitch
 | 
						|
   systemctl restart vpn-security-monitor
 | 
						|
   ```
 | 
						|
 | 
						|
### 2. Suspicious Activity
 | 
						|
 | 
						|
Signs of compromise:
 | 
						|
- Unexpected firewall rule changes
 | 
						|
- Unknown processes with network access
 | 
						|
- Unusual CPU/memory usage
 | 
						|
- Modified system files
 | 
						|
 | 
						|
Response:
 | 
						|
```bash
 | 
						|
# Check processes
 | 
						|
netstat -tulpn
 | 
						|
ps aux | grep -v grep | grep wg
 | 
						|
 | 
						|
# Check file integrity
 | 
						|
debsums -c
 | 
						|
find /etc -type f -mtime -1
 | 
						|
 | 
						|
# Review auth logs
 | 
						|
grep "Failed\|Invalid" /var/log/auth.log
 | 
						|
```
 | 
						|
 | 
						|
### 3. Emergency Shutdown
 | 
						|
 | 
						|
If immediate isolation needed:
 | 
						|
 | 
						|
```bash
 | 
						|
# Block ALL network traffic
 | 
						|
iptables -P INPUT DROP
 | 
						|
iptables -P OUTPUT DROP
 | 
						|
iptables -P FORWARD DROP
 | 
						|
iptables -F
 | 
						|
 | 
						|
# Stop services
 | 
						|
systemctl stop vpn-webui
 | 
						|
systemctl stop wg-quick@wg0
 | 
						|
 | 
						|
# Preserve evidence
 | 
						|
tar czf /tmp/evidence-$(date +%s).tar.gz \
 | 
						|
  /var/log \
 | 
						|
  /etc/wireguard \
 | 
						|
  /opt/vpn-gateway/logs
 | 
						|
```
 | 
						|
 | 
						|
## Security Hardening
 | 
						|
 | 
						|
### 1. Container Hardening
 | 
						|
 | 
						|
```bash
 | 
						|
# Limit capabilities
 | 
						|
lxc config set <container> security.nesting false
 | 
						|
lxc config set <container> security.privileged false
 | 
						|
 | 
						|
# Resource limits
 | 
						|
lxc config set <container> limits.memory 512MB
 | 
						|
lxc config set <container> limits.cpu 1
 | 
						|
```
 | 
						|
 | 
						|
### 2. Network Hardening
 | 
						|
 | 
						|
```bash
 | 
						|
# Rate limiting
 | 
						|
iptables -A INPUT -p tcp --dport 5000 \
 | 
						|
  -m conntrack --ctstate NEW \
 | 
						|
  -m limit --limit 10/min --limit-burst 5 \
 | 
						|
  -j ACCEPT
 | 
						|
 | 
						|
# SYN flood protection
 | 
						|
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
 | 
						|
echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog
 | 
						|
```
 | 
						|
 | 
						|
### 3. Application Hardening
 | 
						|
 | 
						|
```python
 | 
						|
# Flask security headers
 | 
						|
from flask import Flask
 | 
						|
from flask_talisman import Talisman
 | 
						|
 | 
						|
app = Flask(__name__)
 | 
						|
Talisman(app, 
 | 
						|
    force_https=False,  # Handle at reverse proxy
 | 
						|
    strict_transport_security=True,
 | 
						|
    content_security_policy={
 | 
						|
        'default-src': "'self'"
 | 
						|
    }
 | 
						|
)
 | 
						|
```
 | 
						|
 | 
						|
## Compliance
 | 
						|
 | 
						|
### GDPR Compliance
 | 
						|
 | 
						|
- No personal data logging
 | 
						|
- User control over data
 | 
						|
- Right to deletion
 | 
						|
- Transparent processing
 | 
						|
 | 
						|
### Security Standards
 | 
						|
 | 
						|
- CIS Benchmarks compliance
 | 
						|
- NIST framework alignment
 | 
						|
- Zero-trust architecture
 | 
						|
- Defense in depth
 | 
						|
 | 
						|
## Security Checklist
 | 
						|
 | 
						|
### Daily
 | 
						|
- [ ] Check service status
 | 
						|
- [ ] Review security logs
 | 
						|
- [ ] Verify killswitch active
 | 
						|
 | 
						|
### Weekly
 | 
						|
- [ ] Run leak tests
 | 
						|
- [ ] Check for updates
 | 
						|
- [ ] Review firewall rules
 | 
						|
 | 
						|
### Monthly
 | 
						|
- [ ] Rotate keys
 | 
						|
- [ ] Audit access logs
 | 
						|
- [ ] Update documentation
 | 
						|
 | 
						|
### Quarterly
 | 
						|
- [ ] Security assessment
 | 
						|
- [ ] Penetration testing
 | 
						|
- [ ] Disaster recovery test
 | 
						|
 | 
						|
## Contact
 | 
						|
 | 
						|
For security issues:
 | 
						|
- **Email**: security@yourdomain.com
 | 
						|
- **PGP Key**: [Public key]
 | 
						|
- **Response Time**: < 24 hours for critical issues
 | 
						|
 | 
						|
Please report security vulnerabilities responsibly.
 |