Ouvrir et fermer des ports par script Python sur une livebox 4 / Tutoriels, trucs, astuces / Orange Sans Guigne

Orange Sans Guigne

ob1    Épluchons l'orange, retirons les pépins    ob2
Merci de créer une discussion par problème personnel.

Vous n'êtes pas identifié(e).

#1 01/05/2020 17:46:38

Zaza74
Membre
Inscription : 01/05/2020
Messages : 5

Ouvrir et fermer des ports par script Python sur une livebox 4

Bonjour à tous,

J'ai fait quelques recherches sur "Orange Sans Guigne" et j'ai trouvé un script Python très bien réalisé pour extraire la config d'une livebox. Merci a Joeker et les membres de FONO...

Cependant, plutot que lire la config, je souhaiterais pouvoir la modifier, particulierement des ouvertures et fermetures de port.

La raison est la suivante : j'ai un NAS Synology qui héberge un site que j'execute en HTTPS. Pour des questions de sécurité, j'utilise d'autres N° de port que 80 et 8080 pour le http et le https. Et j'ai besoin de certificat pour le https. Pour eviter de payer, j'utilise un certificat gratuit Let's Encript qui est à renouveler tous les trois mois. Et le renouvellement du certificat depuis le Synology doit forcément passer par le port 80 ou 8080.

Donc tous les trois mois :

- Je me connecte sur la livebox
- Je ferme les port 80xx et 8x
- J'ouvre les ports 8080 et 80
- Je renouvelle mon certificat
- Je ferme le 8080 et le 80
- J'ouvre le 80xx et le 8x

Coté Let's Encrypt, il propose une API rest pour le renouvellement.

il me reste plus qu'a trouver comment scripter ouverture et fermeture de port coté livebox,

Pensez-vous que cela soit possible ?

merci d'avance de vos coneils éclairés !!!!

Amicalement
Zaza

Hors ligne

#2 01/05/2020 22:34:12

Phénix
Admin
Inscription : 28/08/2012
Messages : 5 583

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Bonsoir et bienvenue sur OSG smile

Je connais l'API REST de Let's Encrypt, puisque c'est l'autorité de certification que j'utilise pour ce site.
Hélas, ils sont très fermes sur les possibilités d'authentification hmm

Côté automatisation sur LiveBox, je n'ai pas creusé la possibilité de faire des modifications (telles que redirections de ports) sur la LB.
Ca n'est pas impossible à faire, il faudrait "dumper" ce qui est fait par le navigateur lors de ces modifications, puis le reproduire à partir de scripts (pas forcément en Python, du shell et du CURL/WGET fonctionnent également) ...
Mais ça représente pas mal de boulot, que, pour être honnête, je ne suis pas disponible pour mener smile

Peut-être peux-tu regarder par l'authentification depuis Let's Encrypt par le port 22 ou le port 25 (ces deux-là semblant être acceptés également, ce qui m'étonne un peu) ?
Mais je crains que tu retombes sur une problématique similaire ...


Livebox-Play Fibre : LB3(FW SG30_sip-fr-6.62.12.1) + IHD92 (FW ?) (+ WE-Record)
Offre Sosh 4G : Samsung J3(6) Duos "no brand" (+ ViewPad7, HTC WildFireS,  Samsung Ace3)
On a déjà vu des choses qui ne sont jamais arrivées ...

Hors ligne

#3 02/05/2020 11:28:50

Zaza74
Membre
Inscription : 01/05/2020
Messages : 5

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Bonjour Phénix,

Merci pour ton retour.
J'ai continué mes investigations et j'ai peut-être un embryon de solution. Je vais continué à chercher et si je trouve quelque chose de pertinent, j'en ferai profiter le groupe.
J'y retourne !!!!
++

Hors ligne

#4 03/05/2020 18:03:56

Phénix
Admin
Inscription : 28/08/2012
Messages : 5 583

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Bonjour.

J'ai regardé un peu du côté de "sysbus" de Rene-D, et on trouve des choses avec l'option "-scan" :

sysbus.Firewall ['getRespondToPing', 'commit', 'setPortForwarding', 'getDMZ', 'setDMZ', 'getFirewallLevel', 'getPinhole', 'setFirewallIPv6Level', 'deleteDMZ', 'getPortForwarding', 'setFirewallLevel', 'setRespondToPing', 'setCustomRule', 'deleteCustomRule', 'setPinhole', 'deletePinhole', 'getCustomRule']

L'option "-model" donne plus d'infos :

OBJECT NAME: 'sysbus.Firewall'  (name: Firewall)
function: commit ()
function: setRespondToPing (sourceInterface, service_enable)
function: getRespondToPing (sourceInterface)
function: setPortForwarding (opt id, origin, sourceInterface, opt externalPort, internalPort, destinationIPAddress, opt sourcePrefix, protocol, opt enable, opt persistent, opt description, opt destinationMACAddress)
function: deletePortForwarding (opt id, origin, opt destinationIPAddress)
function: getPortForwarding (opt id, opt origin)

En réutilisant la partie authentification des différents scripts (shell ou python) et en bâtissant tes propres requêtes, ça devrait être jouable ...


Livebox-Play Fibre : LB3(FW SG30_sip-fr-6.62.12.1) + IHD92 (FW ?) (+ WE-Record)
Offre Sosh 4G : Samsung J3(6) Duos "no brand" (+ ViewPad7, HTC WildFireS,  Samsung Ace3)
On a déjà vu des choses qui ne sont jamais arrivées ...

Hors ligne

#5 04/05/2020 18:26:49

Zaza74
Membre
Inscription : 01/05/2020
Messages : 5

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Salut Phénix,

Merci pour ton post. J'étais également arrivé sur le Hithub de René-D. Excellent. En repartant de son script, j'ai réussi a faire ce que je voulais coté Livebox et tout ca en Python. Je peux  donc "voir le statut d'une regle Firewall", "Activer une regle" et "Desactiver une regle".
Puis un script bash sur mon Syno, les commandes Python pour activer et desactiver les bonen regle, et pour finir la commande "/usr/syno/sbin/syno-letsencrypt renew-all" qui fait le boulot au niveau des certificats. Une tache planifié et hop !!!!

Au passage, la commande pour enable et disable une regle est "Firewall:enablePortForwarding" avec un parametre True ou False

Pour le pilotage de la LB, une fois que j'ai compris le sysbus (mercii René.D), j'ai fait un script equivalent en "curl". Curl me parait plus standard au contraire de Python qui nécessite des install de packages spécifiques....

Je peux volontiers partager mon travail de ce WE pluvieux mais je sais pas trop comment faire. Si jamais, dis-moi...

Merci encore pour ton aide.

Zaza

Hors ligne

#6 05/05/2020 09:59:03

Phénix
Admin
Inscription : 28/08/2012
Messages : 5 583

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Bonjour.

Super !
Pour tes scripts, si tu veux les partager, tu peux le faire simplement en collant le code de chaque script entre des balises "code" (icône "<>" au-dessus de la zone de réponse).
Sinon, tu peux me faire parvenir un/plusieurs "zip" par mail à l'adresse de contact (en bas de la page "Charte"), et je le(s) mettrai à disposition ...


Livebox-Play Fibre : LB3(FW SG30_sip-fr-6.62.12.1) + IHD92 (FW ?) (+ WE-Record)
Offre Sosh 4G : Samsung J3(6) Duos "no brand" (+ ViewPad7, HTC WildFireS,  Samsung Ace3)
On a déjà vu des choses qui ne sont jamais arrivées ...

Hors ligne

#7 05/05/2020 20:22:01

Zaza74
Membre
Inscription : 01/05/2020
Messages : 5

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Salut.

Je t'ai fait un mail avec un ZIP des fichiers...

A bientôt peut-être sur OSG !!

Sincèrement
Zaza

Hors ligne

#8 06/05/2020 06:16:13

Phénix
Admin
Inscription : 28/08/2012
Messages : 5 583

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Bonjour.

J'ai bien reçu ton mail, merci.

Je vais mettre ça à disposition dans la soirée ...

Bonne journée


Livebox-Play Fibre : LB3(FW SG30_sip-fr-6.62.12.1) + IHD92 (FW ?) (+ WE-Record)
Offre Sosh 4G : Samsung J3(6) Duos "no brand" (+ ViewPad7, HTC WildFireS,  Samsung Ace3)
On a déjà vu des choses qui ne sont jamais arrivées ...

Hors ligne

#9 06/05/2020 22:26:19

Phénix
Admin
Inscription : 28/08/2012
Messages : 5 583

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Bonsoir.

J'ai mis à disposition ton archive (en changeant son nom) ...

J'ai essayé les programmes, mais souci pour moi, l'authentification ne fonctionne pas (j'ai une LB3).
Quand j'aurai plus de temps, j'essaierai de faire en sorte que ça fonctionne sur LB3 et LB4 (et plus ?).
Si ça fonctionne chez toi, ça voudrait dire qu'il y a un autre mode d'authentification sur LB4 qui ne fonctionne pas sur LB3 hmm
Ce n'est pas la première fois, on a déjà eu ça entre LB2, LB3 et LB4 ...


Livebox-Play Fibre : LB3(FW SG30_sip-fr-6.62.12.1) + IHD92 (FW ?) (+ WE-Record)
Offre Sosh 4G : Samsung J3(6) Duos "no brand" (+ ViewPad7, HTC WildFireS,  Samsung Ace3)
On a déjà vu des choses qui ne sont jamais arrivées ...

Hors ligne

#10 07/05/2020 00:06:36

Phénix
Admin
Inscription : 28/08/2012
Messages : 5 583

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Re !

Au temps pour moi ...
Un premier problème venait de ce que j'avais encodé le mot de passe par un echo -n 'password' | base64, il ne faut pas le faire avec l'option "-n" ...
Un deuxième problème peut se présenter avec la version "curl" :
Le condensat base64 du mot de passe peut contenir le caractère '=', et donc perturber l'expression régulière (qui n'est pas piquée des hannetons !).

Il faut changer

password_livebox=$(sed -nr "/^\[main\]/ { :l /^password_livebox[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" ./run-curl.ini | base64 -d )

par

password_livebox=$(sed -nr "/^\[main\]/ { :l /^password_livebox[ ]*=/ { s/[^=]+=[ ]*//; p; q;}; n; b l;}" ./run-curl.ini | base64 -d )


Livebox-Play Fibre : LB3(FW SG30_sip-fr-6.62.12.1) + IHD92 (FW ?) (+ WE-Record)
Offre Sosh 4G : Samsung J3(6) Duos "no brand" (+ ViewPad7, HTC WildFireS,  Samsung Ace3)
On a déjà vu des choses qui ne sont jamais arrivées ...

Hors ligne

#11 15/05/2020 17:37:24

Zaza74
Membre
Inscription : 01/05/2020
Messages : 5

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Salut Phénix,
Merci pour le retour !!
Je vais mettre en place la correction sur la regexp !!
++

Hors ligne

#12 16/05/2020 11:53:07

Phénix
Admin
Inscription : 28/08/2012
Messages : 5 583

Re : Ouvrir et fermer des ports par script Python sur une livebox 4

Bonjour.

Nickel wink


Livebox-Play Fibre : LB3(FW SG30_sip-fr-6.62.12.1) + IHD92 (FW ?) (+ WE-Record)
Offre Sosh 4G : Samsung J3(6) Duos "no brand" (+ ViewPad7, HTC WildFireS,  Samsung Ace3)
On a déjà vu des choses qui ne sont jamais arrivées ...

Hors ligne

Pied de page des forums