Bonsoir,
J’ai configuré mes règles iptables grâce à la configuration du fichier /etc/init.d/firewall avec :
#!/bin/sh
touch /home/pi/tata
# Vider les tables actuelles
iptables -t filter -F
# Vider les règles personnelles
iptables -t filter -X
# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
# ---
# 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 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 In
iptables -t filter -A INPUT -p tcp --dport 2222 -j ACCEPT
# SSH Out
iptables -t filter -A OUTPUT -p tcp --dport 2222 -j ACCEPT
# DNS In/Out
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
# NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 8000 -j ACCEPT
# HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
# Transmission + Out
iptables -t filter -A OUTPUT -p tcp --dport 9091 -j ACCEPT
# Transmission + In
iptables -t filter -A INPUT -p tcp --dport 9091 -j ACCEPT
# SMTP
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
touch /home/pi/toto
Les lignes « touch » en début et fin sont là pour tester que le script fonctionne.
J’ai ensuite rendu ce fichier exécutable :
chmod a+x /etc/init.d/firewall
Si j’exécute le script, tout se passe bien. Mes règles iptables sont créées et les fichiers toto et tata sont bien créés.
J’ai ensuite rendu le script exécutable au démarrage grâce à la commande :
sudo update-rc.d firewall defaults
Pas d’erreur, tout va bien. Mais quand je redémarre mon RPI, le script ne s’exécute pas… Les règles iptables ne sont pas mises et mes fichiers ne sont pas créés…
Savez-vous d’où ça peut venir ?
Merci.
Bonjour,
Déjà vérifier si le fichier firewall est présent dans /etc/rc?.d/
# ls /etc/rc?.d/*firewall*
Si c’est le cas dans dmesg il devrait y avoir des trace de la tentative de démarrage.
A+
Merci jelopo pour ta réponse.
Non quand je fais cette commande, il n’y a rien…
Essaie d’ajouter un entête dans ton fichier
#!/bin/sh
### 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: Firewall deamon
# Description: Enable service provided by daemon.
### END INIT INFO
Puis relance
sudo update-rc.d firewall defaults
A+
1 « J'aime »
Super ça fonctionne !!
Je suis allé sur plusieurs sites « tuto » pour mettre en place le firewall avec iptables et update-rc, aucun ne mettait cet entête dans le fichier…
Merci beaucoup jelopo 
Peut être qu’il vérifient jamais si leur firewall fonctionne 
Non en fait j’en sais rien…
Par contre pour aller plus loin, je te conseille d’ajouter aussi les fonctions start, stop restart, status comme sur un vrai script d’init de deamon. Ceci te permettra d’administrer le firewall et de prendre la main en local pour le couper en cas de problème.
Pour cela, déjà crée une copie de ton fichier qui marche, puis ajoute le début de fonction start juste après l’entête
# fonction qui démarre le firewall
do_start() {
Ensuite tu colle tous le contenu de ton fichier…
Pour finir tu colles l’accolade sortante pour fermer la fonction start, la fonction stop, la fonction status et la gestion de l’appel à ces fonctions
}
# fonction qui arrête le firewall
do_stop() {
# Efface toutes les règles
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#
ip6tables -t filter -F
ip6tables -t filter -X
#ip6tables -t nat -F
#ip6tables -t nat -X
ip6tables -t mangle -F
ip6tables -t mangle -X
# remet la stratégie
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
#
ip6tables -t filter -P INPUT ACCEPT
ip6tables -t filter -P OUTPUT ACCEPT
ip6tables -t filter -P FORWARD ACCEPT
#
echo "firewall stopped [OK]"
}
# fonction status firewall
do_status() {
# affiche les règles en cours
clear
echo Status IPV4
echo -----------------------------------------------
iptables -L -n -v
echo
echo -----------------------------------------------
echo
echo status IPV6
echo -----------------------------------------------
ip6tables -L -n -v
echo
}
case "$1" in
start)
do_start
# quitte sans erreur
exit 0
;;
stop)
do_stop
# quitte sans erreur
exit 0
;;
restart)
do_stop
do_start
# quitte sans erreur
exit 0
Là ça fait beaucoup plus poilu, non ?
A+
1 « J'aime »
Cool, merci pour tout ça 
Je teste de suite ! Et je vais cette page en favori 
Pour finir, les commandes pour gérer ce service firewall,
sudo service firewall [start|stop|restart|status]
Si tu n’as la main qu’en distant, ce mode en service te permet de modifier les règles puis, de relancer le service dans la même fenêtre ssh (Attention à ne pas se déconnecter). Et de tester si les règles fonctionnent à partir d’une autre fenêtre. En cas de problème d’accès SSH sur la seconde fenêtre, à partir de la première fenêtre active, lancer une commande de stop. Et hop.
A+
1 « J'aime »