[pppd] script ip-up

Résolu/Fermé
Géca Messages postés 799 Date d'inscription samedi 29 novembre 2003 Statut Contributeur Dernière intervention 29 juin 2015 - 20 avril 2005 à 22:01
Géca Messages postés 799 Date d'inscription samedi 29 novembre 2003 Statut Contributeur Dernière intervention 29 juin 2015 - 27 avril 2005 à 17:45
Bonjour,

J'ai installé un firewall sur la configuration précisée plus bas. J'ai utilisé firewall builder (http://www.fwbuilder.org) qui me génère un script qui configure mes règles pour IPTABLES.

J'ai une carte réseau relié à un modem ADSL Ethernet.
J'ai configuré le démon pppd via le script adsl-setup (configuration d'une connexion pppoe)

L'adresse ip de l'interface ppp0 (DHCP) change toutes les jours (wanadoo). A chaque fois qu'elle change, la connexion s'arrête et se relance. Or pour que mon firewall continu de fonctionner, il faut relancer le script avec les commandes IPTABLES. Sinon plus de connexion internet pour le réseau local.

Je pensais utliser le fichier /etc/ppp/ip-up (j'ai rajouté à la fin de ce fichier une ligne pour relancer mon script) mais celui-ci ne s'éxécute jamais.

Bizarrement j'ai configuré un deuxième firewall à l'identique pour un autre site avec une slackware 10.1 (même configuration materiel que le premier) et lui fonctionne très bien.

Je ne sais pas quoi faire, le script ip-up peut être éxecuté par tous les utilisateurs ainsi que le script pour IPTABLES.

Si quelqu'un à une idée, elle est la bienvenue.

Merci encore.

9 réponses

kmf31 Messages postés 1564 Date d'inscription mercredi 30 mars 2005 Statut Contributeur Dernière intervention 22 juin 2007 501
21 avril 2005 à 00:31
Je pensais utliser le fichier /etc/ppp/ip-up (j'ai rajouté à la fin de ce fichier une ligne pour relancer mon script) mais celui-ci ne s'éxécute jamais.

Essaie plutot de creer un fichier /etc/ppp/ip-up.local avec cette ligne et de le rendre executable avec "chmod +x /etc/ppp/ip-up.local". Je crois si ce script existe c'est execute au bon moment (regarde le fichier ip-up en detail pour comprendre ca). Fais aussi attention de mettre le chemin absolu pour ton script firewall.

-----------
Apart ca je crois ton script firewall est trop restrictive, c.-a-d. il met de regles ou ca marche uniquement avec un numero IP specifique sur ton device reseau (ppp0 dans ton cas) pour les regles input et output. Je dois avouer que je n'ai jamais compris pourquoi c'est necessaire ou ca fait une difference. Si un paquet reseau arrive sur ton pc c'est parce que c'est adresse au numero IP de ton pc. Si le numero IP est different ca n'arrive de toute facon pas a ton pc. Donc une regle supplementaire rejetant de paquets avec d'autres adresses que ton numero IP parrait inutile. Il faudrait avoir un scenario bizarre de IP-spoofing et quelqu'un mechant ayant un acces root sur ton pc et meme avec ca je ne comprends pas comment une telle regle pourrait faire la difference. Peut-etre je me trompe et quelqu'un pourrait m'eclairer la dessus.
Bien-entendu ceci n'a rien a avoir avec un filtrage eventuel pour de numero IPs expediteurs (venant d'autres pcs). Ca c'est toujours possible comme on veut! Pour le fonctionnement pratique du firewall c'est ca qui compte.

Bref, ma conclusion est pour de besoins pratiques on peut enlever cette restriction dans le script firewall sans reduire l'efficacite de celui ci ou meme modifier quoi que ce soit dans sans fonctionnement.
En principe tu peux editer ton script et remplacer la partie ou il determine ton numero IP (avec ifconfig etc.) et simplement fournir
0.0.0.0/0

comme "numero IP" de ton pc. Avec une telle modification ton script va marcher pour tout numero IP et il suffit de ne le lancer qu'une fois au boot. Ca marche aussi si c'est lance avant la connexion pppoe.
A mon avis ton firewall Slackware doit exactement faire ca (plus precisement il ne contient pas la restriction).

Pour donner un exemple, regarde le script firewall ici:
http://www.tldp.org/HOWTO/IP-Masquerade-HOWTO/stronger-firewall-examples.html#RC.FIREWALL-2.4.X-STRONGER
Ce script fait firewall et le partage de la connexion pour d'autre pcs branche a lui (il active le protocole NAT, mais ce n'est pas important ici). Avec ce script tu aurais le meme probleme car il utilise la meme restriction pour ton numero IP et le script determine automatiquement le numero IP. Seul petit probleme, il faut l'executer apres avoir demarre la connexion et si le numero IP change (par exemple avec DHCP) il le faut reexecuter.
Par contre si dans ce script tu mets manuellement au bon endroit
EXTIP=0.0.0.0/0

ca va marcher pour tous les numeros IPs et les problemes avec ppp0 ou DHCP seront resolus. Moi je ne vois pas comment cette modif pourrait reduire l'efficacite du firewall (peut-etre quelqu'un peut m'expliquer si j'ai rate quelque chose ?).
Tu peux essayer la meme chose avec ton script.
0
Géca Messages postés 799 Date d'inscription samedi 29 novembre 2003 Statut Contributeur Dernière intervention 29 juin 2015 106
21 avril 2005 à 10:39
Merci de ta réponse.

As-tu déjà mis en pratique cette solution ? J'ai un peu de mal à comprendre ce que ça donnerait d'appliquer les règles (normalement écrites pour l'adresse IP de ppp0) à l'adresse IP 0.0.0.0/0

Précision : ce firewall est placé entre un réseau local et Intenet. Il fait du NAT et sert de cache DNS (pour le web) et de DNS primaire pour l'intranet (réseau local d'une dizaine de poste sur un switch).

Est-ce que cette modification peut faire disfonctinner mon firewall ?
0
kmf31 Messages postés 1564 Date d'inscription mercredi 30 mars 2005 Statut Contributeur Dernière intervention 22 juin 2007 501
21 avril 2005 à 12:18
As-tu déjà mis en pratique cette solution ? J'ai un peu de mal à comprendre ce que ça donnerait d'appliquer les règles (normalement écrites pour l'adresse IP de ppp0) à l'adresse IP 0.0.0.0/0


Oui tout a fait! J'ai utilise le script dont j'ai donne le lien ci-dessus. Au debut je le faisait avec une connection Free Non-degroupe donc, un changement du numero par DHCP toutes les 24 heures. Donc, j'ai edite le script pour enlever la restriction pour le numero IP de mon device reseau exterieur.
Ca a ete un peu complique et en effet de mettre 0.0.0.0/0 (ce n'est rien d'autre qu'un joker pour tous les numeros IP) pour EXTIP est plus facile et ca a le meme effet. Ce n'est qu'une facon de faire simple pour eviter de trop modifier le script, rien de plus.
Cependant il reste toujours une restriction pour le nom du device lui meme et ca suffit completement (un nom comme ppp0 pour toi ou eth1 pour moi). J'ai teste mon firewall sur un site comme ici:
https://grc.com/x/ne.dll?bh0bkyd2
et tout est stealth et bien protege. Je cherche toujours a comprendre pour quoi ils mettent cette restriction.

Précision : ce firewall est placé entre un réseau local et Intenet. Il fait du NAT et sert de cache DNS (pour le web) et de DNS primaire pour l'intranet (réseau local d'une dizaine de poste sur un switch).

Le script que j'utilise fait exactement ca (hors le serveur DNS) et entre reseau local et le pc routeur c'est bien ouvert. De toute facon ici ca marche avec les numero IPs local de genre 192.168.0.xxx et pour les regles de filtrage a l'interieur du sous-reseau c'est plus facile (si on veut en mettre).

Est-ce que cette modification peut faire disfonctinner mon firewall ?

A mon avis clairement non. Tu n'as qu'a essayer. Moi je faisait le partage vers un pc derrier et je n'avais jamais le moindre probleme (toujours avec le script dont j'ai donne le lien).
0
Bon, j'ai testé la solution.

Quand je déconnecte ma ligne adsl et la reconnecte je n'ai plus la résolution des noms de domaines internet. Cela vient du paramètrage de mon firewall, comme je l'utilise en cache DNS c'est lui qui questionne les serveurs de mon FAI et lui uniquement (par son interface ppp0). Donc j'ai les paquets venant de son interface ppp0 qui sont bloqués quelque soit son IP (bloqué par la dernière règle du firewall : bloque tout de ANY à destination de ANY). En tant normal ma première règle est autorise les requête DNS de MonFirewall à destination de ANY. Cette règle n'est plus reconnu quand je met en place la solution.

Sinon le DNS de l'intranet fonctionne sans problème.

Encore merci pour ton aide.
0
kmf31 Messages postés 1564 Date d'inscription mercredi 30 mars 2005 Statut Contributeur Dernière intervention 22 juin 2007 501
21 avril 2005 à 19:34
(bloqué par la dernière règle du firewall : bloque tout de ANY à destination de ANY). En tant normal ma première règle est autorise les requête DNS de MonFirewall à destination de ANY. Cette règle n'est plus reconnu quand je met en place la solution.

Tu peux faire un copier-coller de cette regle ?
(avant et apres modifications)
Ca me parrait bizarre, ca ne devrait pas arriver! Je ne comprends pas tres bien ca.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Géca Messages postés 799 Date d'inscription samedi 29 novembre 2003 Statut Contributeur Dernière intervention 29 juin 2015 106
25 avril 2005 à 12:01
Bonjour,

Désolé de répondre si tard.

Voici la règle qui ne fonctionne plus après modification :
# Rule 4(global)
#
echo "Rule 4(global)"
#
test -n "$i_ppp0" && $IPTABLES -A OUTPUT  -s $i_ppp0  -m state --state NEW  -j ACCEPT
$IPTABLES -A OUTPUT  -s 192.168.0.2  -m state --state NEW  -j ACCEPT
$IPTABLES -A OUTPUT  -s 10.0.0.10  -m state --state NEW  -j ACCEPT


En fait en début de code j'ai initialisé la variable ip_ppp0 à 0.0.0.0. J'ai même fait un affichage pour être sur :
getaddr ppp0  i_ppp0
echo $i_ppp0
i_ppp0="0.0.0.0"
echo $i_ppp0

La fonction getaddr récupère l'@IP de ppp0 et la stock dans i_ppp0

Voilà en espérant y voir plus claire.
0
kmf31 Messages postés 1564 Date d'inscription mercredi 30 mars 2005 Statut Contributeur Dernière intervention 22 juin 2007 501
25 avril 2005 à 13:26
D'abord ci-dessus j'ai mis:

0.0.0.0/0


et non: "0.0.0.0" !!!!

Le truc: "/0" a la fin est tres important pour que ca marche! C'est ca qui fait le "joker". Je crois avec ca, ca devrait fonctionner. Donc il te faut mettre dans ton script:
getaddr ppp0  i_ppp0
echo $i_ppp0
i_ppp0="0.0.0.0/0"
echo $i_ppp0



Apart ca quelques commentaire de ma part: J'ai vu qu'il s'agit d'une regle d'OUTPUT donc pour la direction sortant. Normalement pour un firewall simple on peut completement ouvrir pour l'OUTPUT. Si on ne le fait pas ca revient a dire qu'on ne peut pas faire confiance a son propre pc Linux. En Windows on controle cette direction pour cause de spywares, et virus difficilement controlable sur son propre Pc. En Linux on peut aussi faire ce genre de filtrage mais c'est quand-meme un peu la paranoia.
Par contre la direction importante a fermer et controler c'est la direction entrant, l'INPUT, et bien-sur aussi la chaine FORWARD pour controler ce que font les pcs derriers ton routeur NAT.

Apres pour l'option "-s $i_ppp0" qui fait la restriction pour le numero IP (qui peut changer), a mon avis c'est mieux de mettre plutot un truc comme "-o ppp0" (pour l'OUTPUT) ou "-i ppp0" (pour l'INPUT), c.-a-d. de selectionner avec le device reseau comme ppp0 pour la connexion internet et eth0 pour le reseau local etc.
C'est comme ca que tu peux faire certains regles pour la direction internet (entrant/sortant comme on veut) et d'autres regles pour la direction sous-reseau.

De toute facon c'est le "fwbuilder" qui te cree ce genre de regles. Regarde un peu le script exemple dont j'ai donne le lien dans mon 1er poste. La dedans c'est principalement fait avec les devices reseau. Je crois moi personnellement je changerais considerablement le script de fwbuilder mais tant ca fonctionne bien pour toi il n'y a pas de vraies raisons pour toi de le faire.
Pour resdoudre ton probleme, il te suffit de mettre "0.0.0.0/0" au lieu de "0.0.0.0" et ca ira.
0
Géca Messages postés 799 Date d'inscription samedi 29 novembre 2003 Statut Contributeur Dernière intervention 29 juin 2015 106
26 avril 2005 à 10:30
Bonjour,

Quand j'initialise la variable i_ppp0 à "0.0.0.0/0" plus aucune règle n'est reconnue.

J'ai placé la commande echo $i_ppp0 avant le changement et après le changement afin de voire sous quel format était stocké l'adresse IP de l'interface ppp0. Le masque réseau n'est pas spécifié.

Au lancement du script s'affiche :
83.x.x.x
0.0.0.0
Activating firewall script generated Thu Apr 14
Rule 0(NAT)
Rule 1(NAT)
Rule 2(NAT)
Rule 0(lo)
Rule 0(global)
Rule 1(global)
Rule 2(global)
Rule 3(global)
Rule 4(global)
Rule 5(global)


La première adresse qui s'affiche est celle de l'interface ppp0 avant changement du code. Il n'est pas spécifié de masque réseau "/x" à la fin de l'adresse. C'est pourquoi je pensais qu'il ne fallait pas le mettre.

Et en essayant les deux solutions on obtient un "meilleur" résultat avec i_ppp0="0.0.0.0"


"pour un firewall simple on peut completement ouvrir pour l'OUTPUT. Si on ne le fait pas ca revient a dire qu'on ne peut pas faire confiance a son propre pc Linux. En Windows on controle cette direction"

J'ai confiance en mon firewall sous linux, mais c'est dans les postes windows du réseau local que je n'ai pas confiance (un peu trop bavards).

Sinon la solution à mon probème est normalement le script ip-up ou ip-up.local mais que ce soit avec l'un ou l'autre ou les deux, j'ai l'impression qu'ils ne se lancent jamais.
0
kmf31 Messages postés 1564 Date d'inscription mercredi 30 mars 2005 Statut Contributeur Dernière intervention 22 juin 2007 501
26 avril 2005 à 11:04
Quand j'initialise la variable i_ppp0 à "0.0.0.0/0" plus aucune règle n'est reconnue.
...
La première adresse qui s'affiche est celle de l'interface ppp0 avant changement du code. Il n'est pas spécifié de masque réseau "/x" à la fin de l'adresse. C'est pourquoi je pensais qu'il ne fallait pas le mettre.


C'est dommage, je suppose qu'il doit y avoir une regle REJECT qui utilise aussi cette variable et dans ce cas c'est trop restrictive. De facon general quand tu fais "0.0.0.0/0" (avec "-s ..." ou "-d ..." comme option d'iptables) c'est equivalent a ne pas mettre cette option, donc faire une regle qui s'appliquent pour tous les numeros IP. Si on suppose qu'il n'y a que de regles ACCEPT ca ouvre de choses, par contre avec une regle REJECT au mauvais endroit ca peux tout fermer.

Quand tu regardes apres avec la commande:
/sbin/iptables -L -v

l'ensemble de toutes tes regles ca affiche un truc "anywhere" au lieu du numero IP si on a mis "0.0.0.0/0". C'est normal.


Donc pour faire marcher ton truc sur le plan pratique, tu peux garder le "0.0.0.0" et en plus tu modifies seulement la ligne specifique qui a cause le probleme (pour le DNS), par exemple dans ton script je proposerais simplement:
# Rule 4(global)
#
echo "Rule 4(global)"
#
test -n "$i_ppp0" && $IPTABLES -A OUTPUT  -o ppp0  -m state --state NEW  -j ACCEPT
$IPTABLES -A OUTPUT  -s 192.168.0.2  -m state --state NEW  -j ACCEPT
$IPTABLES -A OUTPUT  -s 10.0.0.10  -m state --state NEW  -j ACCEP


ici j'ai remplace dans ligne test le "-s $i_ppp0" par "-o ppp0", c.-a-d. cette regle n'exige plus de numero IP specifique mais le device reseau ppp0 (donc elle ne marche pas vers le sous-reseau avec eth0). Mais tu peux aussi enlever le "-o ppp0" et comme ca ouvrir aussi vers le sous-reseau si tu le veux. Je pense l'un et l'autre devrais suffir pour toi meme si ce n'est pas tres elegant.

J'ai confiance en mon firewall sous linux, mais c'est dans les postes windows du réseau local que je n'ai pas confiance (un peu trop bavards).

Pour les postes Windows ce sont uniquement les regles avec la chaine FORWARD qui s'appliquent. La chaine OUTPUT est uniquement pour ton pc linux. Je suppose avec ton script tu dois avoir de regles FORWARD assez restrictives pour bien controler ca.
0
Géca Messages postés 799 Date d'inscription samedi 29 novembre 2003 Statut Contributeur Dernière intervention 29 juin 2015 106
27 avril 2005 à 17:45
Bonjour,

La modification que tu m'as donnés marche très bien. Me si l'adresse IP du firewall change les règles restent valides.

Pour les postes Windows ce sont uniquement les regles avec la chaine FORWARD qui s'appliquent. La chaine OUTPUT est uniquement pour ton pc linux. Je suppose avec ton script tu dois avoir de regles FORWARD assez restrictives pour bien controler ca.

Effectivement toutes les règles s'appliquant à mon réseau local sont de type FORWARD.

Encore merci pour ton aide, ça m'a permis de mieux comprendre comment fonctionne IPTABLES.
0