Failed to start LSB pour script parefeu [resolu]

Bonjour,

Je me suis basé sur le tuto https://www.informatique-astuces.com/installer-un-firewall-sur-debian pour paramétrer le parefeu de ma Debian Stretch flambant neuve.

Voici le script parefeu que j’ai placé dans /etc/init.d/ :

### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Demarrage du script lors de la sequence de boot
# Description:       Ajout des regles de parefeu
### END INIT INFO

#!/bin/sh
case "$1" in
start)

echo - Initialisation du firewall :

# Vidage des tables et des regles personnelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage des regles et des tables : [OK]

# Interdire toutes connexions entrantes et sortantes
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
echo - Interdire toutes les connexions entrantes et sortantes : [OK]

# 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
echo - Conservation des connexions établies : [OK]

########## Regles ##########

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

# Autoriser le ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# Autoriser SSH pour client sur LAN
iptables -t filter -A INPUT -s 192.168.1.73 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.1.73 -p tcp --dport 22 -j ACCEPT

# Autoriser SSH (désactivé)
#iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
#iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

# Autoriser DNS
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

# Autoriser NTP (désactivé)
#iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# Autoriser FTP
modprobe ip_conntrack_ftp
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autoriser HTTP et 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

# Autoriser POP3 (désactivé)
#iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
#iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

# Autoriser SMTP (désactivé)
#iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
#iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

# Autoriser IMAP (désactivé)
#iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
#iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

# Autoriser POP3S (désactivé)
#iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT
#iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT

echo - Initialisation des regles : [OK]

;;
status)

echo - Liste des regles :
iptables -n -L

;;
stop)

# Vidage des tables et des regles personnelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage des regles et des tables : [OK]

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo - Autoriser toutes les connexions entrantes et sortantes : [OK]

;;
esac
exit 0

Et que j’ai rendu exécutable avec la commande :

chmod +x /etc/init.d/parefeu

Je l’ai testé avec :

/etc/init.d/parefeu start

et il me convient

Pour l’intégrer à la séquence de boot, j’ai utilisé :

update-rc.d parefeu defaults

Mais au boot le message suivant s’affiche systématiquement :

Failed to start LSB : Demarrage du script lors de la sequence de boot
See systemctl status parefeu service for details

Et systemctl status parefeu service m’indique:

Unit service.service could not be found.
● parefeu.service - LSB: Demarrage du script lors de la sequence de boot
   Loaded: loaded (/etc/init.d/parefeu; generated; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2017-11-29 13:52:30 CET; 1h 0min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 437 ExecStart=/etc/init.d/parefeu start (code=exited, status=203/EXEC)

Pourriez-vous m’aider à résoudre le problème ?
Merci

Bonjour,

Avec un peu de lecture que voici, tu devrais résoudre ton problème.

https://www.debian-fr.org/t/pare-feu-ipv4-ipv6-versions-bureau-et-serveur/68665/5

ça a l’air intéressant ça ! merci

Par rapport à cette solution, est-ce que le restart ne pourrait pas être prévu comme dans l’exemple donné au début du fil ?
Ou est-ce déjà le cas ?

Bien que conseillé, tu n’es pas obligé d’utiliser « iptables-save » et « iptables-restore ».

Il faut « simplement » lancer un jeux de règles iptables au démarrage (et un à l’arret) avec systemd via un fichier comme celui de seb-ksl (/etc/systemd/system/init_firewall.service)

# Une partie de /etc/systemd/system/init_firewall.service
ExecStart=ta_commande_pour_lancer_un_script
ExecStop=ta_commande_pour_lancer_un_autre_script

Teste déja si tes scripts fonctionnent via le terminal.

Si tu as bien suivi ton exemple. Ceci devrait je pense fonctionner pour lancer ton script (après un « systemctl enable init_firewall.service »)

cp /etc/init.d/parefeu /usr/local/bin/parefeu

# Une partie de /etc/systemd/system/init_firewall.service
ExecStart=/usr/local/bin/parefeu start
ExecStop=/usr/local/bin/parefeu stop

PS : Pense à supprimer ton lancement via init.d : « update-rc.d parefeu remove »

Plus d’info : http://manpages.ubuntu.com/manpages/precise/fr/man8/update-rc.d.8.html

LA SUPPRESSION DES SCRIPTS

   Quand on appelle update-rc.d avec l'option remove les  liens  dans  les
   répertoires  /etc/rcniveau_exécution.d  qui  pointent  vers  le  script
   /etc/init.d/nom sont supprimés. Ce script doit déjà avoir été supprimé.
   Si le script est toujours présent, update-rc.d quittera avec un message
   d'erreur.

Je ne m’en sors pas. Je n’ai pas du comprendre le principe.

J’ai pris le parti de suivre la solution de seb-ksl avec systemd en repartant zéro.

Voici ce que j’ai fait.

Création d’un fichier /etc/systemd/system/init_parefeu.service ainsi composé :

[Unit]
Description=parefeu Iptables
DefaultDependencies=no
Wants=network-pre.target
Before=network-pre.target shutdown.target
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/init_parefeu start
ExecStop=/usr/local/bin/init_parefeu stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Création d’un fichier /usr/local/bin/init_parefeu ainsi composé :

#! /bin/sh

start(){
    iptables-restore < /etc/config_parefeu_IPv4
    ip6tables-restore < /etc/config_parefeu_IPv6
    echo "Starting firewall"
    RETVAL=$?
}

stop(){
    iptables-save > /etc/config_parefeu_IPv4
    ip6tables-save > /etc/config_parefeu_IPv6
    RETVAL=$?
}

clean(){
    # clean le parefeu pendant que la machine tourne
    # ça peut être une faille de sécurite si on l'exécute lors de l'extinction avant l'arrêt des interfaces
    # pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l'extinction

    #### IPv4 ####

        # Vidage des tables et des regles personnelles
    iptables -t filter -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -t raw -F
    iptables -t filter -P INPUT ACCEPT
    iptables -t filter -P OUTPUT ACCEPT
    iptables -t filter -P FORWARD ACCEPT
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -P INPUT ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    iptables -t mangle -P PREROUTING ACCEPT
    iptables -t mangle -P OUTPUT ACCEPT
    iptables -t mangle -P POSTROUTING ACCEPT
    iptables -t mangle -P FORWARD ACCEPT
    iptables -t mangle -P INPUT ACCEPT
    iptables -t raw -P OUTPUT ACCEPT
    iptables -t raw -P PREROUTING ACCEPT

    #### IPv6 ####
    # Attention : la table nat IPv6 n'existe pas sous Wheezy (noyau 3.2)

    ip6tables -t filter -F
    ip6tables -t nat -F
    ip6tables -t mangle -F
    ip6tables -t raw -F
    ip6tables -t filter -P INPUT ACCEPT
    ip6tables -t filter -P OUTPUT ACCEPT
    ip6tables -t filter -P FORWARD ACCEPT
    ip6tables -t nat -P PREROUTING ACCEPT
    ip6tables -t nat -P POSTROUTING ACCEPT
    ip6tables -t nat -P INPUT ACCEPT
    ip6tables -t nat -P OUTPUT ACCEPT
    ip6tables -t mangle -P PREROUTING ACCEPT
    ip6tables -t mangle -P OUTPUT ACCEPT
    ip6tables -t mangle -P POSTROUTING ACCEPT
    ip6tables -t mangle -P FORWARD ACCEPT
    ip6tables -t mangle -P INPUT ACCEPT
    ip6tables -t raw -P OUTPUT ACCEPT
    ip6tables -t raw -P PREROUTING ACCEPT

    RETVAL=$?
}

case $1 in
    start|stop) "$1" ;;
esac

Création d’un fichier /etc/config_parefeu_IPv4 ainsi composé :

#!/bin/sh

/usr/local/bin/init_parefeu clean

###################
#      IPv4       #
###################

# Interdire toutes connexions entrantes et sortantes par défaut
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

echo - Interdiction de toutes les connexions entrantes et sortantes IPv4 : [OK]

# Maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

echo - Maintient des connexions établies IPv4: [OK]

########## Regles IPv4 ##########

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

# Autoriser le ping
iptables -t filter -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -j ACCEPT

# Autoriser SSH pour client sur LAN
iptables -t filter -A INPUT -s 192.168.1.73 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.1.73 -p tcp --dport 22 -j ACCEPT

# Autoriser DNS
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

# Autoriser FTP
modprobe ip_conntrack_ftp
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autoriser HTTP et 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

echo - Initialisation des regles IPv4 : [OK]

/usr/local/bin/init_parefeu start

Création d’un fichier /etc/config_parefeu_IPv6 ainsi composé :

#!/bin/sh

/usr/local/bin/init_parefeu clean


###################
#      IPv6       #
###################

# Interdire toutes connexions entrantes et sortantes par défaut
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT DROP

echo - Interdiction de toutes les connexions entrantes et sortantes IPv6 : [OK]

# Maintenir les connexions établies
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

echo - Maintient des connexions établies IPv6: [OK]

########## Regles IPv6 ##########

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

# NDP pour toute interface de type broadcast
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT

# Autoriser le ping
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT

# Autoriser SSH pour client sur LAN
ip6tables -t filter -A INPUT -s 192.168.1.50 -p tcp --dport 22 -j ACCEPT
ip6tables -t filter -A OUTPUT -s 192.168.1.50 -p tcp --dport 22 -j ACCEPT

# Autoriser DNS
ip6tables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# Autoriser FTP
modprobe ip_conntrack_ftp
ip6tables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
ip6tables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autoriser HTTP et HTTPS
ip6tables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

echo - Initialisation des regles IPv6 : [OK]

/usr/local/bin/init_parefeu start

J’ai restreint les droits sur ces scripts :

chown root:root /etc/config_parefeu_IPv4
chown root:root /etc/config_parefeu_IPv6
chmod 740 /etc/config_parefeu_IPv4
chmod 740 /etc/config_parefeu_IPv6

J’ai effacé mon ancien script et supprimé son lancement via init.d :

rm /etc/init.d/parefeu
update-rc.d parefeu remove

J’ai rendu le script d’init exécutable :

chmod +x /usr/local/bin/init_parefeu

J’ai indiqué à systemd la présence de mon nouveau service :

systemctl enable init_parefeu.service

Et j’ai essayé de démarrer le firewell :

systemctl start init_parefeu.service

Et… aucune règle n’est appliquée

Le principe d’ " iptables-save" est de sauvegarder les règles iptables en cours dans un fichier, pour pouvoir les recharcher via iptables-restore.

Je te conseille de rééditer /etc/config_parefeu_IPv6 et /etc/config_parefeu_IPv4 pour plus de précaution afin de voir si ils n’ont pas été affecté par un “ip(6)tables-save”.

Supprime ces 2 lignes de /etc/config_parefeu_IPv6 et de /etc/config_parefeu_IPv4.

  • /usr/local/bin/init_parefeu clean
  • /usr/local/bin/init_parefeu start

Crées un “nouveau_fichier” avec le contenu de /etc/config_parefeu_IPv4 auquel tu ajoutes celui de /etc/config_parefeu_IPv6 sans “#!/bin/sh” qui est déja présent. Rends ce fichier exécutable.

Effaces le contenu de /etc/config_parefeu_IPv4 et /etc/config_parefeu_IPv6.

Dans un terminal en root :
# systemctl start init_parefeu.service
# /usr/local/bin/init_parefeu clean
# chemin_du_nouveau_fichier
# systemctl stop init_parefeu.service

Tu devrais avoir /etc/config_parefeu_IPv4 et /etc/config_parefeu_IPv6 avec quelques lignes à présent.
Sauvegarde “nouveau_fichier” au cas ou tu voudrais changer tes règles avec la même procédure.

Des règles devraient être appliquées maintenant avec cette commande :
# systemctl start init_parefeu.service

systemctl start init_parefeu.service me renvoie :
Failed to start init_parefeu.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files

Un systemctl status init_parefeu.service m’indique :
● init_parefeu.service - parefeu Iptables
Loaded: loaded (/etc/systemd/system/init_parefeu.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2017-11-29 19:07:24 CET; 4h 14min ago
Main PID: 1071 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/init_parefeu.service

Pardon, je crois que j’avais négligé d’être en root… la fatigue… je poursuis

Oui ! :grinning: Oui ! :joy: Oui !
ça s’est passé comme tu l’as écrit :sunglasses:

Merci :slight_smile:

Je ne peux pas faire mon chieur, mais iptables-persistent est quand même plus simple à utiliser. En plus,

https://www.debian-fr.org/t/pare-feu-ipv4-ipv6-versions-bureau-et-serveur/68665/6

Du coup, tu appliques ton script avant de l’installer et tu n’auras aucune configuration supplémentaire à faire.

Je voulais utiliser quelque chose de classique pour apprendre. Ici ça m’a permis de découvrir systemd au passage.
Mais je prends bonne note de l’intérêt manifeste de iptables-persistent.

Encore que j’imagine que le démarrage des règles m’aurait amené vers systemd aussi. Mais tout ce parcours m’a amené à distinguer ce qui est “obsolète” (l’utilisation de init.d et update-rc) et ce qui est en vigueur.
La prochaine fois, je vérifierai tout de même la date des tutoriels…