> ## Documentation Index
> Fetch the complete documentation index at: https://infra-docs.kaeyros.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Pare-feu UFW et protection anti-scan psad

> Configuration UFW sur les serveurs Kaeyros : politique par défaut deny, règles SSH, HTTP/HTTPS et ports Kubernetes internes. Détection des scans de ports avec psad et remontée vers Wazuh.

Chaque serveur dédié Hetzner de la plateforme Kaeyros exécute UFW (Uncomplicated Firewall) avec une politique restrictive. Cette page décrit les règles standard, les exceptions pour le cluster Kubernetes et la détection des scans de ports via psad.

## Politique UFW par défaut

La configuration de base suit le principe du moindre privilège :

* **Entrant (incoming)** : deny par défaut
* **Sortant (outgoing)** : allow par défaut
* **Routage (forwarded)** : deny par défaut

Seules les connexions explicitement autorisées peuvent atteindre les services exposés.

## Règles UFW type

Voici les commandes appliquées par Ansible lors du provisionnement d'un nouveau serveur :

```bash ufw-rules.sh theme={null}
# Réinitialisation et activation
sudo ufw --force reset
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH depuis les bureaux et le VPN
sudo ufw allow from 203.0.113.0/24 to any port 2222 proto tcp comment "Bureaux Kaeyros"
sudo ufw allow from 198.51.100.0/24 to any port 2222 proto tcp comment "VPN WireGuard"

# HTTP/HTTPS depuis les Load Balancers Hetzner uniquement
sudo ufw allow from 10.0.0.0/8 to any port 80 proto tcp comment "LB Hetzner HTTP"
sudo ufw allow from 10.0.0.0/8 to any port 443 proto tcp comment "LB Hetzner HTTPS"

# Activation
sudo ufw enable
```

> [!NOTE]
>
> Les adresses IP `203.0.113.0/24` et `198.51.100.0/24` sont des exemples. Les plages réelles sont définies dans `group_vars/all/ufw.yml` du repo Ansible. Contactez `devops@kaeyros-analytics.com` pour obtenir les plages actuelles si vous devez ajouter un nouveau site.

## Ports Kubernetes (réseau privé Hetzner)

Les serveurs membres du cluster RKE2 ouvrent des ports supplémentaires, mais uniquement sur le réseau privé Hetzner (`10.0.0.0/8`). Ces règles ne sont pas exposées sur l'interface publique :

| Port | Protocole | Service | Description |
| - | - | - | - |
| `6443` | TCP | API Kubernetes | Accès au serveur API kube-apiserver |
| `2379-2380` | TCP | etcd | Stockage clé/valeur du cluster |
| `10250` | TCP | Kubelet | Communication agent Kubernetes |
| `8472` | UDP | VXLAN (Flannel/Calico) | Overlay réseau des pods |
| `9345` | TCP | RKE2 supervisor | Enregistrement des nœuds RKE2 |
| `2380` | TCP | etcd peer | Réplication etcd entre nœuds |

```bash ufw-k8s.sh theme={null}
# Ports Kubernetes, réseau privé uniquement
sudo ufw allow from 10.0.0.0/8 to any port 6443 proto tcp comment "K8s API"
sudo ufw allow from 10.0.0.0/8 to any port 2379:2380 proto tcp comment "etcd"
sudo ufw allow from 10.0.0.0/8 to any port 10250 proto tcp comment "Kubelet"
sudo ufw allow from 10.0.0.0/8 to any port 8472 proto udp comment "VXLAN"
```

> [!WARNING]
>
> Ne jamais ouvrir les ports Kubernetes (6443, 2379-2380, 10250) sur l'interface publique. L'accès à l'API server depuis l'extérieur passe obligatoirement par le VPN WireGuard ou la bastion SSH.

## Détection des scans avec psad

psad (Port Scan Attack Detector) analyse les logs du pare-feu pour détecter les comportements suspects et remonte les alertes vers Wazuh.

### Fonctionnement

1. UFW logge les paquets rejetés via `iptables -N ufw-logging-input`
2. psad scrute `/var/log/ufw.log` toutes les 15 secondes
3. En cas de scan détecté (seuil : 15 ports distincts en 60 secondes), psad génère une alerte
4. L'alerte est transmise à l'agent Wazuh local, qui la remonte au serveur Wazuh central

### Configuration psad clé

```bash psad.conf theme={null}
# /etc/psad/psad.conf (extraits)
EMAIL_ADDRESSES             devops@kaeyros-analytics.com;
HOSTNAME                    auto;
ENABLE_PERSISTENCE          Y;
SCAN_THRESHOLD              15;
PORT_RANGE_SCAN_THRESHOLD   1;
ENABLE_FW_LOGGING           Y;
IPTABLES_LOG_PREFIX         "[UFW BLOCK] ";
```

### Commandes de gestion

```bash theme={null}
# Statut de psad
sudo psad --Status

# Liste des adresses bannies
sudo psad --fw-list

# Débannir une IP
sudo psad --fw-rm IP_ADRESSE

# Forcer l'analyse des logs
sudo psad --sig-update
sudo psad -K
sudo psad -R
```

## Vérification de la configuration

```bash theme={null}
# Vérifier l'état d'UFW
sudo ufw status verbose

# Vérifier les règles numérotées
sudo ufw status numbered

# Tester un port depuis un autre serveur
nc -zv <ip_cible> 2222

# Voir les logs UFW en temps réel
sudo tail -f /var/log/ufw.log
```

> [!TIP]
>
> Après toute modification des règles UFW, attendez 60 secondes avant de fermer votre session SSH actuelle. Testez la connexion dans un nouveau terminal pour vous assurer que vous n'avez pas bloqué votre propre accès.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.