Pour ceux qui ne connaitraient pas, iptables est une interface de gestion du module netfilter du noyau Linux. En termes clairs : c’est un pare-feu. Iptables est donc un ensemble de commandes permettant de créer des règles, je ne vais pas rentrer dans les détails, vous trouverez plus d’infos sur cette page par exemple. Dans cet article il sera question de comment je gère ma configuration de pare-feu à travers un script d’init.
init.d, t’es initié ?
Le but de ce script est qu’il se lance au démarrage de mon poste, et en bonus que je puisse couper/relancer mon pare-feu à loisir : c’est là le rôle d’un script “init.d”. Commençons donc par la fin, avec les différents arguments que peut prendre le script :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Logiquement on retrouve les
fonction start
, stop
et restart
avec une explication des arguments pour
toute valeur en dehors de ce choix.
En fonction des fonctions…
la fonction restart
est très simple :
function restart {
stop start
}
la fonction stop
est un peu plus complexe et est chargée de vider les règles
iptable, de changer la politique par défaut et de restarter
[man]fail2ban[/man]
si besoin :
1 2 3 4 5 6 7 8 9 10 11 12 |
|
L’utilisation de for IPTABLES in iptables ip6tables
permet de configurer à
la fois pour ipv4 et ipv6.
La fonction start
utilise une variable $TCP_PORTS
(qui contient les port
TCP à ouvrir) définie ainsi :
TCP_PORTS="80 443"
Et la fonction en elle-même :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Configuration et installation
Pour placer le script dans /etc/init.d/
deux solutions sont possibles :
- le copier dans le répertoire
- faire un lien symbolique avec
ln -s /emplacement/script/iptables /etc/init.d/iptables
Si vous mettez ce script en place sur serveur sans accès physique, je vous conseille formetment de le tester avant de le mettre au démarrage de la machine…c’est trop bête de se faire enfermer dehors :)
La mise en place du scritpt au démarrage peut se faire manuellement en mettant
en place des liens symboliques dans /etc/rc*.d/
, mais il est plus simple de
passer par update-rc.d
:
sudo update-rc.d iptables defaults
update-rc.d: warning: /etc/init.d/iptables missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Suite aux erreurs du LSB
j’ai ajouté cela au début du script :
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Set up iptables at boot time
# Description: Enable service provided by iptables.
### END INIT INFO
Voici donc le fichier dans son intégralité :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
Bon firewalling ;-)