Mise en place de règles IPtables

1 – Création d’un script de démarrage

On commence par écrire nos règles de démarrage d’iptables dans un fichier texte, ici /etc/iptables/start.sh :

#!/bin/sh

# Réinitialise les règles
iptables -t filter -F
iptables -t filter -X

# Bloque tout le trafic
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Autorise les connexions déjà établies et localhost
iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# DNS entrée/sortie
iptables -t filter -A OUTPUT -p tcp –dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp –dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp –dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp –dport 53 -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

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

# Ping – ICMP
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
iptables -t filter -A INPUT -p icmp -j ACCEPT

On oublie pas de rendre exécutable le script:

chmod +x /etc/iptables/start.sh

2 – Création d’un script d’arrêt

Puis nos règles d’arrêt iptables, ici /etc/iptables/stop.sh :

#!/bin/sh

# Flush all rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

on rend le script exécutable:

chmod +x /etc/iptables/stop.sh

3 – Création d’un service

Il ne nous reste plus qu’a créé le service dans /etc/init.d/, dans l’exemple il porte le nom « iptables_service ».

#!/bin/sh

SERVICE_NAME=iptables_service
SERVICE_DIRECTORY=/etc/iptables/
SERVICE_STARTUP_SCRIPT=start.sh
SERVICE_SHUTDOWN_SCRIPT=stop.sh

## Functions ##
usage()
{
echo « ———————–« 
echo « Usage: $0 (stop|start|restart) »
echo « ———————–« 
}
service_start()
{
echo « Starting service ‘${SERVICE_NAME}’… »
OWD=`pwd`
cd ${SERVICE_DIRECTORY} ./${SERVICE_STARTUP_SCRIPT}
cd $OWD
echo « Service ‘${SERVICE_NAME}’ started successfully »
}
service_stop()
{
echo « Stopping service ‘${SERVICE_NAME}’… »
OWD=`pwd`
cd ${SERVICE_DIRECTORY} && ./${SERVICE_SHUTDOWN_SCRIPT}
cd $OWD
echo « Service ‘${SERVICE_NAME}’ stopped »
}

## Main ##
if [ -z $1 ]; then
usage
fi

case $1 in
stop)
service_stop
;;
start)
service_start
;;
restart)
service_stop
service_start
;;
*)
usage
esac
exit 0

On le rend exécutable:

chmod +x /etc/init.d/iptables_service

Maintenant, pour démarrer le service:

service iptables_service start

ou

/etc/init.d/iptables_service start

Le redémarrer:

service iptables_service restart

ou

/etc/init.d/iptables_service restart

L’arrêter:

service iptables_service stop

ou

/etc/init.d/iptables_service stop

Derniers Articles