Nous fournissons des serveurs avec chef, nous avons donc la même configuration pour les versions Ubuntu 16.04 et 18.04. Et il y a la même règle pour restaurer les règles iptables cat /etc/network/if-pre-up.d/iptables_load /sbin/iptables-restore < /etc/iptables/general
mais cela ne fonctionne pas pour Ubuntu 18.04.
Si je l'exécute manuellement, cela fonctionne. Cela signifie-t-il que ce script ne s'exécute pas au démarrage?
[~ # ~] mise à jour [~ # ~]
J'ai créé le service systemd tel qu'il est décrit ici et cela fonctionne très bien.
[Unit]
Description = Apply iptables rules
[Service]
Type=oneshot
ExecStart=/etc/network/if-pre-up.d/iptables_load
[Install]
WantedBy=network-pre.target
Voici ce que j'ai fait:
Créez un modèle de service comme ceci:
Sudo nano /etc/systemd/system/restore-iptables-rules.service
Copiez-collez ceci:
[Unit]
Description = Apply iptables rules
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'iptables-restore < /etc/iptables.rules'
[Install]
WantedBy=network-pre.target
Activez le service comme ceci:
Sudo systemctl enable restore-iptables-rules.service
Redémarrez et vérifiez que les règles ont été appliquées:
Sudo iptables -L
Je suis tombé sur une variété de problèmes avec iptables déclenchés dans des emplacements if-up. Comme mon script iptables est devenu plus compliqué, le fait qu'il puisse s'exécuter (en fonction de l'emplacement exact du script) pour chaque interface est devenu un problème, tout comme la nécessité d'une interface réseau correcte pour que des choses comme la résolution du nom d'hôte fonctionnent. Ces facteurs provoquaient un démarrage lent et des échecs. Vous pouvez envisager l'alternative, qui consiste à exécuter le script iptables en tant que service systemd.
Cela peut être fait en créant un fichier appelé, par exemple, real_iptables.service dans/etc/systemd/system/avec un contenu comme:
[Unit]
Description=Set up the firewall
After=network.target
[Service]
Type=oneshot
ExecStart=/root/iptables
[Install]
WantedBy=multi-user.target
Le script iptables actuel est, comme vous pouvez le voir, dans/root/iptables. Installez le service avec:
systemctl enable real_iptables
systemctl start real_iptables
Lorsque le service est activé, il sera démarré au démarrage, mais ne s'exécutera qu'une seule fois. Si vous voulez être complètement sécurisé, il est possible de mettre un script dans /etc/network/if-up.d/ qui utilise iptables pour bloquer toutes les communications réseau. Cela signifie que rien ne peut se produire jusqu'au démarrage du service.