web-dev-qa-db-fra.com

Ubuntu 18.04 ne charge pas les règles iptables après le redémarrage

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
5
Coul

Voici ce que j'ai fait:

  1. Déposez vos iptables.rules dans /etc/iptables.rules
  2. 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
    
  3. Activez le service comme ceci:

    Sudo systemctl enable restore-iptables-rules.service
    
  4. Redémarrez et vérifiez que les règles ont été appliquées:

    Sudo iptables -L
    
1
Csimbi

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.

0
mbrampton