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…