405 lines
7.5 KiB
Markdown
405 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.
|