Configurer un Parefeu Linux avec iptables

⇑ Aller au dossier complet : Une histoire de Pirates !

Pourquoi ?

 

La plus basique des protections est bien celle du pare-feux. Même si sous linux l’utilisation d’un pare-feux pour un pc familial est encore soumis à controverse.

Quoiqu’il en soit, lorsque vous avez un serveur ouvert sur le monde, il est pour le coup indispensable et obligatoire de le protéger.

Obligatoire, car vous êtes responsable de, Vôtre réseau, chez Vous, et de ce qui s’y passe. Et ce, même si ce n’est pas vous qui êtes à l’origine d’une quelconques action. Il serait donc en effet dangereux de ne pas se protéger. Je l’ai d’ailleurs appris à mes dépends.

Sur un serveur Linux, il existe diverses solutions de pare-feux. Iptables est l’une d’entre elles.

Ip-tables permet donc de gérer le trafic réseau de votre machine. Vous pouvez également tout à fait vous en servir comme table de routage mais ceci est un autre sujet.

Pour créer un pare-feux avec iptables il suffit de créer un script qui va appliquer divers commandes ip-tables afin d’enregistrer des règles de filtrage de paquets par port et par méthode.

Ensuite nous lancerons ce script au démarrage du système afin de remplir la table de filtrage.

 

Structure

 

Usage:

1/ iptables -[ACD] chain rule-specification [options]

2/ iptables -I chain [rulenum] rule-specification [options]

3/ iptables -R chain rulenum rule-specification [options]

4/ iptables -D chain rulenum [options]

5/ iptables -[LS] [chain [rulenum]] [options]

6/ iptables -[FZ] [chain] [options]

7/ iptables -[NX] chain

8/ iptables -E old-chain-name new-chain-name

9/ iptables -P chain target [options]

10/ iptables -h (print this help information)

 

Arguments

Voici une liste des principaux arguments de la commande dont vous aurez besoin :

A = Ajoute la règle iptables à la fin d’une chaîne donnée. On utilise cette option pour ajouter simplement une règle lorsque l’ordre des règles à l’intérieur de la chaîne n’est pas primordial.

C = Contrôle une règle donnée avant de l’ajouter à la chaîne spécifiée par l’utilisateur. Cette commande peut vous aider à écrire des règles iptables compliquées en vous indiquant les paramètres et options supplémentaires à établir.

D =Élimine une règle à l’intérieur d’une chaîne donnée de façon numérique (comme par exemple en utilisant 5 pour la cinquième règle d’une chaîne). Il est également possible de taper la règle complète et iptables efface la règle dans la chaîne correspondante.

F = Supprime la chaîne sélectionnée, entraînant par là-même l’élimination de toutes les règles de la chaîne. Si aucune chaîne n’est spécifiée, cette commande supprime chaque règle contenue dans chaque chaîne.

I = Insère une règle à l’intérieur d’une chaîne, à un point précis, spécifié par une valeur entière définie par l’utilisateur. Si aucun numéro n’est spécifié, iptables place la commande au tout début de la chaîne.

P = Politique par defaut

 

 

Paramètres

 

-p = Protocole

-i = Réglage de l’interface réseau

– -dport = port de destination

-j = Cible du paquet (ACCEPT, DROP, QUEUE ou RETURN)

-s = origine d’un paquet particulier

– -sport = port d’origine

-t = nom de table

-o = paramètre l’interface sortante (OUTPUT ou FORWARD)

 

 

Exemples

 

1/ Ajouter une règle : 

iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

ici nous  Ajoutons (-A) une règle en fin de la table « OUTPUT » (traffic sortant) pour le protocole tcp (-p tcp) sur le port 80 et nous acceptons la sortie du paquet.

on fera de même en INPUT (entrant) si nous hébergeons un site par exemple.

 

2/ Supprimer une règle : 

  • il va falloir tout d’abord repérer la ligne et son numéro exacte dans iptables
sudo iptables -L --line
  • La structure de la commande sera ensuite celle-ci :

iptables -D <TABLE> <n°ligne>

  • Par exemple
iptables -D INPUT 2

Ceci va donc supprimer la deuxième ligne de la table INPUT

 

3/ Insérer une ligne :

De même que précédemment repérez le numéro de ligne où vous souhaitez insérer une règle. Par exemple :

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

Ici nous Insérons (-I) à la ligne 2 de la table INPUT une règle qui accepte les connexions utilisants le protocole tcp sur le port 80

 

4/ bloquer une ip particulière

iptables -A INPUT -s 169.229.3.91 -j DROP

L’odre des règles étant important il faudra par conséquent faire attention à positionner cette règle avant toute les autres, afin que les paquets en provenance de cette ip soient bloqués avant même de savoir sur quels ports ils arrivent.

On pourra aussi rajouter une section particulière dans le script afin de bloquer certaines ip.

En d’autres termes, cette section servira à blacklister des ip spécifiques que l’on souhaite bloquer ou les ip d’attaques redondantes. Il faudra positionner cette section en début de script afin d’inscrire automatiquement ces règles en début de table.

Sinon vous pouvez utiliser l’argument -I pour les insérer à un endroit particulier.

 

Script tout fait

 

  • Créez le fichier :

sudo nano /etc/init.d/firewall.sh

 

  • Adaptez ensuite les lignes suivantes à votre utilisation puis ajoutez les au fichier :

ATTENTION : l’ordre d’écriture/apparition des règles est importants !

 

 

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: firewall rules
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO

 

# Vider les tables actuelles
iptables -t filter -F

# Vider les règles personnelles
iptables -t filter -X

# Interdire toute connexion entrante et sortante
#INPUT Table
iptables -t filter -P INPUT DROP
#FORWARD TABLE
iptables -t filter -P FORWARD DROP
#OUTPUT TABLE
iptables -t filter -P OUTPUT DROP

#blacklist : insérez ici les règles de filtrage pour certaines ip interdites

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser le loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

# APACHE : HTTP
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# Gmail
iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

# Acces SMTP
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

#DNS
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

#Partage Samba
iptables -t filter -A INPUT -p tcp --dport 139 -j ACCEPT

exit 0

 

  • Rendez ensuite votre fichier exécutable

sudo chmod +x firewall.sh

 

  • Enfin activez la configuration au démarrage

sudo update-rc.d firewall.sh defaults

 

Au prochain démarrage si tout s’est bien passé vos règles seront alors effectives.

Vous pourrez par la suite le vérifier avec la commande suivante :

sudo iptables -L

 

⇑ Aller au dossier complet : Une histoire de Pirates !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Show Buttons
Hide Buttons