web-dev-qa-db-fra.com

Comment définir ces règles iptables pour qu'elles s'exécutent au démarrage

Je lance habituellement mes règles iptables à chaque fois que je me connecte. Du terminal je tape;

Sudo sh firewall.sh

En configurant l'ordinateur de ma sœur, je veux lui donner une protection de base par pare-feu. Elle ne se connectera pas en tant qu'administrateur, mais uniquement avec un compte standard. Comment puis-je faire en sorte qu'un script de pare-feu s'exécute chaque fois qu'elle se connecte sans qu'elle soit obligée de saisir un mot de passe?

Le script que j'ai écrit pour l'ordinateur de ma sœur contient;

#!/bin/sh

modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Je l'ai placé dans son dossier personnel sous le nom firewall.sh et je l'ai configuré pour qu'il soit exécutable (cliquez avec le bouton droit sur le fichier et cochez l'option "Autoriser l'exécution du fichier en tant que programme" dans l'onglet "Autorisations").

L'exécution de ce script à partir du terminal en tant que root fonctionne correctement.

Après avoir tapé;

Sudo sh firewall.sh

J'ai tapé dans le terminal

Sudo iptables -L -v

et je reçois

Chain INPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN
    0     0 DROP       udp  --  any    any     anywhere             anywhere            
    0     0 DROP       icmp --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp spts:32768:61000 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:http
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere

Comment puis-je faire exécuter ce script automatiquement à la connexion ou éventuellement sauvegarder ces règles de manière permanente pour l'ordinateur de ma sœur? Pourriez-vous s'il vous plaît fournir un code détaillé, car mes premières tentatives de méthode rc.local et d'iptables-save n'ont pas été très fructueuses. À chaque redémarrage, toutes les chaînes INPUT, OUTPUT et FORWARD sont réinitialisées sur ACCEPT. Aucune stratégie n'est répertoriée lorsque je tape Sudo iptables -L -v.

20
Mikelane

Vous voudrez peut-être utiliser le paquetage iptables-persistent plutôt que de manipuler vos scripts de démarrage. Tout d’abord, lancez votre script pour configurer les règles du pare-feu. Deuxièmement, exécutez Sudo apt-get install iptables-persistent et suivez les instructions. Lorsqu'il vous demande de sauvegarder les règles actuelles, cliquez sur "Oui" aux deux invites. Maintenant, au redémarrage, vos règles iptables seront restaurées.


NOTE: Si vous modifiez vos règles après cela, vous devrez exécuter les commandes suivantes après les modifications:

Pour enregistrer vos règles iptables IPv4: Sudo su -c 'iptables-save > /etc/iptables/rules.v4'

Pour enregistrer vos règles IPv6 ip6tables: Sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'

36
Thomas Ward

En supposant que vous ayez les règles de pare-feu dans:

/etc/iptables.up.rules

La réponse la plus évidente sera peut-être de créer un fichier appelé iptables dans:

/etc/network/if-pre-up.d

avec le contenu:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

et le rendre exécutable en utilisant

Sudo chmod +x /etc/network/if-pre-up.d/iptables

Ainsi, avant l'activation de votre interface réseau, vos règles seront chargées.

2