Développer un pare-feu qui filtre et bloque les paquets
N.B: ce projet est a titre educatif seulement : pour un firewall linux tout simplement utiliser ufw/firewalld avec nftables qui est natif et open source.
Le pare-feu est conçu pour fonctionner sur une machine virtuelle (VM) ou un serveur dédié tournant sous :
- Ubuntu Server
| Composant | Outil/Technologie | Rôle |
|---|---|---|
| Bash | iptables |
Lecture et redirection des paquets |
| Python | scapy, netfilterqueue |
Prototypage et inspection en profondeur (DPI) |
Le pare-feu est un service système (daemon) qui tourne en arrière-plan sur le serveur. Il intercepte les paquets entrants à l’aide d’iptables, les inspecte via une file de traitement (NFQUEUE), puis décide de les accepter ou de les rejeter selon des règles personnalisées.
flowchart TD
A[Paquet entrant] --> B[iptables redirige vers NFQUEUE]
B --> C[Python lit le paquet via NetfilterQueue]
C --> D[Inspection avec Scapy ou socket brut]
D --> E{Paquet suspect ?}
E -- Oui --> F[Rejeter]
E -- Non --> G[Accepter le paquet]
graph TD
A[setup.sh] --> B[Crée l'environnement virtuel Python]
B --> C[Installe les dépendances]
C --> F[exec firewall.py -> systemd]
M --> H[package_handler.py]
H --> J["Lecture config.json"]
J --> K[Détection suspects]
K --> Z[drop si suspect]
M --> L[logger.py écrit les logs test]
L --> O[ /var/log/firewall.log ]
F --> M["iptables -> NFQUEUE"]
Develop a firewall that filter and block packages
This project is only for learning purpose : a good firewall solution for linux is firewalld with nftables which is native to the kernell and open source.
The firewall is designed to run on a virtual machine (VM) or dedicated server using:
- Ubuntu Server
| Component | Tool/Technology | Purpose |
|---|---|---|
| Bash | iptables |
Package redirection and filtering |
| Python | scapy, netfilterqueue |
Prototyping and Deep Package Inspection (DPI) |
The firewall runs as a background service (daemon) on the server. It intercepts incoming packages using iptables, inspects them through a processing queue (NFQUEUE), and decides whether to accept or drop them based on custom rules.
flowchart TD
A[Incoming Package] --> B[iptables forwards to NFQUEUE]
B --> C[Python reads package via NetfilterQueue]
C --> D[Inspection with Scapy or raw socket]
D --> E{Suspicious package?}
E -- Yes --> F[Drop package and log]
E -- No --> G[Accept package]
graph TD
A[setup.sh] --> B[Creates Python virtual environment]
B --> C[Installs dependencies]
C --> F[Executes firewall.py via systemd]
M --> H[package_handler.py]
H --> J["Reads config.json"]
J --> K[Detects suspicious packets]
K --> Z[Drop if suspicious]
M --> L[logger.py writes test logs]
L --> O[ /var/log/firewall.log ]
F --> M["iptables -> NFQUEUE"]





