Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/01/2020, à 11:20

ginotator

[résolu]problème pour lancer un script iptables en dehors du démarrage

Bonjour,

Mon problème :
Je n'arrive pas  à ajouter et enlever des lignes dans iptables grâce à un script pendant le fonctionnement de mon serveur

Explications :
J'ai configuré un service systemd pour démarrer mon script iptables au démarrage.
Celui-ci accepte certaines ip dynamiques à se connecter au serveur.
J'ai un script qui va régulièrement inscrire l'adresse ip dynamique des différents machines dans différents fichiers texte.
Et j'ai un autre script qui va mettre à jour l'iptables en fonction des ip trouvés dans ces fichiers textes : lorsque l'ip d'un fichier texte à changé, la ligne correspondante dans iptables est supprimé, et une nouvelle règle est ajouter avec la nouvelle ip

Mais ce dernier script (exécuté par cron en root grâce à sudo crontab -e) ne permet pas de modifier de nouvelles lignes iptables.
J'ai vérifié que le script était bien lancé. Pas de soucis. J'ai aussi rendu le script exécutable avec un chmod +x. C'est vraiment les lignes iptables qui bloquent.

Voici le script :

# !/bin/bash
dyndnsxps=$(ping -c 1 monurl.com | grep PING | cut -d" " -f3 | sed -e "s/(//g" | sed -e "s/)//g" | awk '{ print $1 }')
ipxps=$(cat /home/moi/bin/ipxps.txt)
if [ $dyndnsxps != $ipxps ]
then
	iptables -t filter -D INPUT -p tcp -s $ipxps --dport 22 -j ACCEPT
        iptables -t filter -D OUTPUT -p tcp -d $ipxps --dport 22 -j ACCEPT
		
        echo $dyndnsxps > /home/moi/bin/ipxps.txt
        iptables -t filter -A INPUT -p tcp -s $dyndnsxps --dport 22 -j ACCEPT
        iptables -t filter -A OUTPUT -p tcp -d $dyndnsxps --dport 22 -j ACCEPT
fi

Ma config : ubuntu server 18.04.3 (https://jamesachambers.com/raspberry-pi … nofficial/) sur un raspberry pi 4 2gb avec carte mémoire 16gb

Est ce que quelqu'un aurait une idée pour régler mon problème svp ?
Merci

Dernière modification par ginotator (Le 23/01/2020, à 15:51)

Hors ligne

#2 Le 23/01/2020, à 15:51

ginotator

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

J'ai trouvé comment faire, mais ce ne fut pas aisé...

J'ai suivi le 4.4 de la doc https://doc.ubuntu-fr.org/creer_un_service_avec_systemd que j'ai remanié en fonction de mes besoins :
A la ligne

ExecStart=apt-get update && apt-get upgrade

du fichier service, j'ai pointé vers mon script que j'ai fourré dans /etc/network/if-pre-up.d/ au lieu d'exécuter une commande comme dans l'exemple.

Et il ne faut pas oublié de mettre root propriétaire des fichiers .timer et .service avec chown root.root, et de rendre exécutable le script avec chmod +x

Si vous trouvez qqch qui cloche, n'hésitez pas à intervenir.

Hors ligne

#3 Le 23/01/2020, à 17:32

lynn

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

Bonjour,

Pour iptables, je ne sais pas mais pour pour le code, tu peux réduire cette ligne

ping -c 1 monurl.com | grep PING | cut -d" " -f3 | sed -e "s/(//g" | sed -e "s/)//g" | awk '{ print $1 }'

par

ping -c 1 monurl.com | awk -F '[()]' '/PING/{print $2}'

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 23/01/2020, à 18:18

nany

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

Bonjour,

lynn a écrit :
ping -c 1 monurl.com | awk -F '[()]' '/PING/{print $2}'

Ça ne marche pas sur google.fr par exemple.

┏[ jeudi 23 janvier 2020 ]
┣ nany@stupidcomputer :
┗▶ ~$ ping -c 1 google.fr | awk -F '[()]' '/PING/{print $2}'
par10s38-in-x03.1e100.net 

┏[ jeudi 23 janvier 2020 ]
┣ nany@stupidcomputer :
┗▶ ~$

 
En revanche, la commande suivante devrait marcher quel que soit le site :

ping -c 1 monurl.com | awk '/PING/{gsub(/\(|\)/,"",$3);print $3}'
┏[ jeudi 23 janvier 2020 ]
┣ nany@stupidcomputer :
┗▶ ~$ ping -c 1 ubuntu-fr.org | awk '/PING/{gsub(/\(|\)/,"",$3);print $3}'
86.65.39.13

┏[ jeudi 23 janvier 2020 ]
┣ nany@stupidcomputer :
┗▶ ~$ ping -c 1 google.fr | awk '/PING/{gsub(/\(|\)/,"",$3);print $3}'
2a00:1450:4007:805::2003

┏[ jeudi 23 janvier 2020 ]
┣ nany@stupidcomputer :
┗▶ ~$

 

De plus, puisqu’on est à parler du script, il faudrait mettre les variables entre doubles quotes et le shebang doit être sans espace. Pour t’en assurer, passe ton script à la moulinette de ShellCheck. wink



Quant à ta résolution, je n’ai pas compris. Tu a créer un service à la place de ta ligne de crontab, c’est bien ça ?
Par curiosité, j’aimerais bien voir cette ligne car, j’ai quelques doutes sur sa bonne exécution.

Quoi qu’il en soit, un service, c’est mieux.

Hors ligne

#5 Le 23/01/2020, à 18:36

lynn

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

Bonjour nany,

nany a écrit :

Ça ne marche pas sur google.fr par exemple.

C'est curieux, ça fonctionne bien chez moi... Avec google.fr mais aussi avec ubuntu-fr.org ou april.org. tongue


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#6 Le 23/01/2020, à 18:48

nany

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

Ah tiens, bizarre !
Tu as l’ip v6 ?

Hors ligne

#7 Le 23/01/2020, à 18:49

lynn

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

Non, pas d'ipv6...


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#8 Le 23/01/2020, à 18:51

nany

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

L’explication est donc peut-être là. wink

Hors ligne

#9 Le 23/01/2020, à 19:09

lynn

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

nany a écrit :

L’explication est donc peut-être là. wink

Apparemment non... j'ai essayé sur un autre système avec ipv6 actif et le résultat est le même ; ça affiche l'I.P.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#10 Le 23/01/2020, à 19:13

nany

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

Ah ! Le mystère persiste alors.
Peut-être la version de ping ?

Hors ligne

#11 Le 23/01/2020, à 21:54

ginotator

Re : [résolu]problème pour lancer un script iptables en dehors du démarrage

Merci à tous les 2 !
Je ne connaissais pas ShellCheck c'est parfait pour un débutant.

nany a écrit :

Quant à ta résolution, je n’ai pas compris. Tu a créer un service à la place de ta ligne de crontab, c’est bien ça ?
Par curiosité, j’aimerais bien voir cette ligne car, j’ai quelques doutes sur sa bonne exécution.

Quoi qu’il en soit, un service, c’est mieux.

Effectivement, impossible de modifier l'iptables à partir d'un script lancer par crontab. J'ai donc tenté le service... Et ça fonctionne apparemment.

Voici le contenu de mon fichier .service

[Unit]
Description=Service de mise a jour
After=network.target

[Service]
ExecStart=/etc/network/if-pre-up.d/accept_ipxps
Type=oneshot

Et voici le contenu de mon fichier .timer

[Unit]
Description=Lance une
[Timer]
OnBootSec=60seconds
# le service démarrera 60s après le démarrage de la machine
OnUnitActiveSec=2minutes
Persistent=true
# le service démarrera toutes les 2 minutes après la dernière activation du timer
###    voir toutes les possibilités de choix  dans ce  document http://man7.org/linux/man-pages/man7/systemd.time.7.html
[Install]
WantedBy=timers.target

Et le contenu de /etc/network/if-pre-up.d/accept_ipxps

#!/bin/bash
dyndnsxps="$(ping -c 1 monurl.com | awk '/PING/{gsub(/\(|\)/,"",$3);print $3}')"
ipxps="$(cat /home/moi/bin/ipxps.txt)"
if [ "$dyndnsxps" != "$ipxps" ]
then
	iptables -t filter -D INPUT -p tcp -s "$ipxps" --dport 22 -j ACCEPT
        iptables -t filter -D OUTPUT -p tcp -d "$ipxps" --dport 22 -j ACCEPT
		
        echo "$dyndnsxps" > /home/moi/bin/ipxps.txt
        iptables -t filter -A INPUT -p tcp -s "$dyndnsxps" --dport 22 -j ACCEPT
        iptables -t filter -A OUTPUT -p tcp -d "$dyndnsxps" --dport 22 -j ACCEPT
fi

Je suis preneur de toutes les remarques si vous en avez

Dernière modification par ginotator (Le 23/01/2020, à 22:37)

Hors ligne