Firewall and security
Table of contents
- Introduction to Linux firewalls
- UFW (Uncomplicated Firewall)
- firewalld (RedHat/CentOS)
- iptables: basics
- Common rules
- Hands-on exercises
1 - Introduction to Linux firewalls
What is a firewall?
A firewall controls incoming and outgoing network traffic according to defined rules.
Linux architecture
| Layer | Description |
|---|---|
| UFW/firewalld | Simple user interface |
| iptables/nftables | Configuration tool |
| Netfilter | Kernel module (actual filter) |
Key concepts
| Term | Description |
|---|---|
| INPUT | Incoming traffic to the server |
| OUTPUT | Outgoing traffic from the server |
| FORWARD | Traffic passing through (router) |
| ACCEPT | Allow |
| DROP | Silently discard |
| REJECT | Refuse with a message |
🔝 Back to table of contents
2 - UFW (Uncomplicated Firewall)
UFW is the simplified interface for Ubuntu/Debian.
Installation and activation
# Installer
sudo apt install ufw
# Vérifier le statut
sudo ufw status
# Activer
sudo ufw enable
# Désactiver
sudo ufw disable
Default rules
# Bloquer tout le trafic entrant
sudo ufw default deny incoming
# Autoriser tout le trafic sortant
sudo ufw default allow outgoing
Allow services/ports
# Par nom de service
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# Par numéro de port
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
# Port TCP spécifique
sudo ufw allow 3000/tcp
# Port UDP
sudo ufw allow 53/udp
# Plage de ports
sudo ufw allow 8000:8100/tcp
Allow from an IP
# Autoriser une IP spécifique
sudo ufw allow from 192.168.1.100
# Autoriser un réseau
sudo ufw allow from 192.168.1.0/24
# IP spécifique vers un port spécifique
sudo ufw allow from 192.168.1.100 to any port 22
# IP vers port avec protocole
sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp
Block / Delete rules
# Bloquer une IP
sudo ufw deny from 203.0.113.5
# Lister les règles avec numéros
sudo ufw status numbered
# Supprimer une règle par numéro
sudo ufw delete 3
# Supprimer une règle explicitement
sudo ufw delete allow 80
Display the status
# Statut simple
sudo ufw status
# Statut détaillé
sudo ufw status verbose
# Avec numéros
sudo ufw status numbered
Example output:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Important
Always allow SSH BEFORE enabling the firewall so you don't lose access!
sudo ufw allow ssh
sudo ufw enable
🔝 Back to table of contents
3 - firewalld (RedHat/CentOS)
firewalld is the default firewall on RHEL/CentOS/Fedora.
Concepts
firewalld uses zones to group rules:
| Zone | Usage |
|---|---|
| drop | Block everything |
| public | Public networks (default) |
| work | Work network |
| home | Home network |
| trusted | Allow everything |
Basic commands
# Statut
sudo firewall-cmd --state
# Zone par défaut
sudo firewall-cmd --get-default-zone
# Zones actives
sudo firewall-cmd --get-active-zones
# Lister les règles
sudo firewall-cmd --list-all
Manage services
# Autoriser un service
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
# Rendre permanent
sudo firewall-cmd --add-service=http --permanent
# Ou recharger après modifications
sudo firewall-cmd --reload
# Supprimer un service
sudo firewall-cmd --remove-service=http --permanent
Manage ports
# Ouvrir un port
sudo firewall-cmd --add-port=3000/tcp --permanent
# Supprimer un port
sudo firewall-cmd --remove-port=3000/tcp --permanent
# Recharger
sudo firewall-cmd --reload
🔝 Back to table of contents
4 - iptables: basics
iptables is the low-level tool for configuring Netfilter.
Structure
Main tables
| Table | Usage |
|---|---|
| filter | Filtering (default) |
| nat | Address translation |
| mangle | Packet modification |
filter chains
| Chain | Usage |
|---|---|
| INPUT | Incoming packets |
| OUTPUT | Outgoing packets |
| FORWARD | Routed packets |
Basic commands
# Lister les règles
sudo iptables -L -n -v
# Lister avec numéros de ligne
sudo iptables -L --line-numbers
# Politique par défaut
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# Autoriser le loopback
sudo iptables -A INPUT -i lo -j ACCEPT
# Autoriser les connexions établies
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autoriser SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Autoriser HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Supprimer une règle par numéro
sudo iptables -D INPUT 3
# Supprimer toutes les règles
sudo iptables -F
Save the rules
# Debian/Ubuntu
sudo iptables-save > /etc/iptables/rules.v4
# Restaurer
sudo iptables-restore < /etc/iptables/rules.v4
# Avec iptables-persistent
sudo apt install iptables-persistent
sudo netfilter-persistent save
tip
Prefer UFW or firewalld for daily management. iptables is more complex but offers more control.
🔝 Back to table of contents
5 - Common rules
Web server
# UFW
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
Server with a database
# MySQL accessible uniquement depuis le réseau local
sudo ufw allow from 192.168.1.0/24 to any port 3306
# PostgreSQL
sudo ufw allow from 192.168.1.0/24 to any port 5432
Block a malicious IP
# UFW
sudo ufw deny from 203.0.113.5
# iptables
sudo iptables -I INPUT -s 203.0.113.5 -j DROP
SSH rate limiting (brute-force protection)
# UFW
sudo ufw limit ssh
# iptables
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Typical server configuration
#!/bin/bash
# Configuration pare-feu basique
# Reset
sudo ufw reset
# Défauts
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH (limité)
sudo ufw limit ssh
# Web
sudo ufw allow http
sudo ufw allow https
# Activer
sudo ufw enable
# Vérifier
sudo ufw status verbose
🔝 Back to table of contents
6 - Hands-on exercises
Exercise 1: Basic UFW configuration
# 1. Vérifiez le statut actuel
sudo ufw status
# 2. Définissez les règles par défaut
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 3. Autorisez SSH (important !)
sudo ufw allow ssh
# 4. Activez le pare-feu
sudo ufw enable
# 5. Vérifiez
sudo ufw status verbose
Exercise 2: Add rules
# 1. Autorisez HTTP et HTTPS
sudo ufw allow http
sudo ufw allow https
# 2. Autorisez un port personnalisé (ex: 3000)
sudo ufw allow 3000/tcp
# 3. Listez les règles
sudo ufw status numbered
# 4. Supprimez la règle du port 3000
sudo ufw delete allow 3000/tcp
Exercise 3: Rule by IP
# 1. Autorisez SSH seulement depuis votre IP (remplacez)
sudo ufw allow from VOTRE_IP to any port 22
# 2. Vérifiez
sudo ufw status
Quiz
Q1. Which command enables UFW?
Answer
sudo ufw enable
Q2. What should you always do before enabling the firewall?
Answer
Allow SSH (sudo ufw allow ssh) so you don't lose access!
Q3. What is the difference between DROP and REJECT?
Answer
DROP silently discards the packet, REJECT sends an error response.
🔝 Back to table of contents
Key takeaways
- UFW = simple interface for Ubuntu/Debian
- firewalld = RedHat/CentOS firewall
- iptables = low-level control
- Always allow SSH before enabling the firewall
- Default policy:
deny incoming,allow outgoing ufw limit sshfor brute-force protection- Save the iptables rules with
iptables-save