Sun Dec 18 19:29:59 2016 UTC

Mise en place d'un parefeu simple avec Iptables

Introduction

Ce petit guide explique la mise en place d'un pare-feu "de base" sur NuTyX.

Il devrait vous permettre d'avoir un pare-feu qui démarre et s'éteint automatiquement avec votre réseau tout en protégeant votre machine.

Les règles du pare-feu seront statiques dans un script, donc sans l'utilisation des fonctions 'iptables-save' et 'iptables-restore'.

Il s'agit de règles simples et destinées à servir de base à la construction de son propre pare-feu.

A vous de l'adapter en fonction de vos besoins et de votre exigence en terme de sécurité.

Installation

On installe Iptables 1.4.21 depuis les dépôts:


	check
	search iptables
	get iptables
    

Création du script

Pour configurer votre pare-feu, créez ce fichier nommé parefeu dans /etc/rc.d/init.d/

#!/bin/sh
## Fichier /etc/rc.d/init.d/parefeu

##------------------------------##
parefeu_start() {
  echo "Démarrage du pare-feu .."
	
# Politiques par défaut
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT ACCEPT

# Autoriser loopback
  iptables -A INPUT -i lo -j ACCEPT

# Autoriser les connections établies
  iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Autoriser ssh en local
  iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT

# Autoriser transmission
  iptables -A INPUT -p tcp --dport 51413 -j ACCEPT
  iptables -A INPUT -p tcp --dport 56969 -j ACCEPT
}

##------------------------------##
parefeu_stop () {
  echo "Arrêt du pare-feu .."

# Suppression des règles
  iptables -F
  iptables -X
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
}

##------------------------------##
parefeu_restart() {
  parefeu_stop;
  sleep 2;
  parefeu_start;
}

case "$1" in
  'start')
    parefeu_start
    ;;

  'stop')
    parefeu_stop
    ;;

  'restart')
    parefeu_restart
    ;;

   'status')
    iptables -nvL
    ;;

   *)
    echo "Usage: parefeu {start|stop|restart|status}"
    ;;
esac

Puis rendez le exécutable et avec les bonnes permissions:

sudo chmod 700 /etc/rc.d/init.d/parefeu

Quelques explications

Les règles

Iptables -P permet de définir la politique par défaut d'un chaine.

On peut voir que dans cette configuration on DROP (Refuser silencieusement) tout ce qui arrive (INPUT) et tout ce qui transite (FORWARD).

On remarque que tout ce qui est émis depuis le pare-feu (OUTPUT) est accepté.

Note : Il est courant de lire sur le net que la meilleure façon de procéder et de tout interdire puis d'autoriser au cas par cas selon les besoins dans la chaine OUTPUT.

Cependant cette méthode complique la configuration du pare-feu et dépasse le cadre de ce guide.

Plus loin on autorise l'interface du loopback et surtout les connexions déjà établies.

Cette règle est très importante lorsqu'on configure un pare-feu sur une machine distante, via ssh par exemple, et permet de ne pas se retrouver enfermé en dehors du pare-feu.

A titre d'exemple, j'ai ajouté des autorisations pour les connexions ssh provenant du réseau local, et une autorisation pour l'utilisation du torrent.

Fonctionnement

Comme vous pouvez le voir en parcourant le script, le pare-feu possède les fonctions: allumer, éteindre, état et redémarrer.

Pour les utiliser:

sudo /etc/rc.d/init.d/parefeu start (ou stop/status/restart)

Mise en route

Notre script avec la configuration du pare-feu est prêt, maintenant il faudrait qu'il démarre automatiquement!

Rendez vous dans /etc/rc.d/.

On va configurer le script pour démarrer juste avant le réseau et s'éteindre juste après.

On remarque plusieurs dossiers nommés rc0.d/ rc1.d/ etc...

Ils correspondent au différents niveaux de init : voir /etc/inittab

Commençons par rc0.d/ :

cd /etc/rc.d/rc0.d/ && l
rwxr-xr-x  2 root root 4,0K mai    9 12:02 .
drwxr-xr-x 11 root root  115 févr. 14 20:33 ..
lrwxrwxrwx  1 root root   14 févr. 14 20:33 K00cups -> ../init.d/cups
lrwxrwxrwx  1 root root   18 mai    9 11:20 K40setclock -> ../init.d/setclock
lrwxrwxrwx  1 root root   16 mai    9 11:20 K45random -> ../init.d/random
lrwxrwxrwx  1 root root   17 mai    9 11:20 K80network -> ../init.d/network
lrwxrwxrwx  1 root root   14 oct.  29  2014 K85dbus -> ../init.d/dbus
lrwxrwxrwx  1 root root   18 mai    9 11:20 K90sysklogd -> ../init.d/sysklogd
lrwxrwxrwx  1 root root   21 mai    9 11:20 S60sendsignals -> ../init.d/sendsignals
lrwxrwxrwx  1 root root   18 mai    9 11:20 S90localnet -> ../init.d/localnet
lrwxrwxrwx  1 root root   14 mai    9 11:20 S99halt -> ../init.d/halt

Dans ce dossier correspondant à l'init 0, c'est à dire l'arrêt de la machine, on va se calquer sur network.

On peut voir : K80network -> ../init.d/network

Ce lien symbolique permet d’éteindre (Kill) le réseau. Le nombre détermine l'ordre d’exécution.

On veut donc éteindre notre parefeu juste après le reseau, donc:

sudo ln -s ../init.d/parefeu K81parefeu

Il faut ensuite répéter cette opération dans les répertoires rc0.d/ jusqu'au rc6.d/

Dans chaque répertoire, quand network est réglé sur K80, on règle parefeu sur K81

Si network est réglé sur S20, on souhaite démarrer (Start) le pare-feu avant le réseau, donc:

sudo ln -s ../init.d/parefeu S19parefeu

Voilà, vérifiez les 6 dossiers, les S et K, et le chiffre juste avant network au démarrage, juste après pour l'arrêt.

Il ne nous reste plus qu'à démarrer le pare-feu:

sudo /etc/rc.d/init.d/parefeu start

Pour faire simple, créez vous un alias dans ~./bashrc:

alias parefeu='sudo /etc/rc.d/init.d/parefeu'

On peut alors démarrer le pare-feu de cette manière:

parefeu start

et vérifier les règles:

parefeu status

Sources

- https://wiki.archlinux.org/index.php/Simple_stateful_firewall

- http://www.octetmalin.net/linux/scripts/iptables-demarrer-arret-redemarrage-start-stop-restart-pare-feu-firewall.php

- http://www.yvangodard.me/mon-script-iptables/

Pour aller plus loin

iptables -h

- http://www.delafond.org/traducmanfr/man/man8/iptables.8.html

Tester son pare-feu

- https://www.grc.com/x/ne.dll?bh0bkyd2

(si vous êtes derrière un box, vous allez tester la box...)

nmap -Pn votre_IP depuis une autre machine

--> voir http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/