Script Bash d'envoie par mail de votre IP

Bonjour la communauté.

Ceci est mon premier script. J’en suis donc très fier.
Il en existe peut-être d’autres sur ce site et certainement mieux mais c’est le mien.

J’ai toujours entendu dire qu’il était préférable, du point de vue de la sécurité, d’avoir une IP dynamique plutôt que Statique. Or lorsqu’on a un serveur, on utilise une IP statique pour que le serveur reste joignable.
Etant le seul à me connecter au serveur, le script bash suivant test l’adresse IP (ici au bout de 3 minutes pour faire les essais) et, si elle a changé, me l’envoie sur une adresse mail via msmtp.

Edit:
Les paquets w3m ainsi que msmtp (ici pour la version stable actuelle Jessie) sont à installer via apt-get ou aptitude.

[code]#!/bin/bash

#Identification de l’IP publique (stockée dans la variable ipperso1)
ipperso1=$(w3m -dump http://www.monip.org/ | awk -F’: ’ ‘/IP/ { print $2 }’)
#echo “La premiere IP est $ipperso1”

#Envoie de cette IP sur la boite mail
echo “$ipperso1” >> /home/user/Documents/Scripts/myip
cat myip | msmtp user@truc.net

###############
#Surveiller les changements d’IP publique
###############

#while true permet de faire tourner le script en boucle
while true;
do

#Récupération de l’IP publique (stockée dans la variable ipperso2)
ipperso2=$(w3m -dump http://www.monip.org/ | awk -F’: ’ ‘/IP/ { print $2 }’)
#echo “La seconde IP est $ipperso2”

#Test conditionnel : si les deux IP stockées dans ipperso1 et dans ipperso2 sont différentes
if [ $ipperso1 != $ipperso2 ]
then
#Dans le cas où les IP sont différentes, le contenue de la variable ipperso2 est inscrite dans .myip
echo “$ipperso2” >> /home/user/Documents/Scripts/myip
#Envoyer le fichier myip par mail
cat myip | msmtp user@truc.net
#Attribuer la valeur de l’ipperso2 à la variable ipperso1
ipperso1=$ipperso2

echo “La premier IP est devenue $ipperso1”

else

#Dans le cas contraire (i.e. les deux IP sont identiques)
#Attendre 3 minutes
sleep 3m
#Avant de récupérer à nouveau l’IP publique est de la stocker dans la variable ipperso2
ipperso2=$(w3m -dump http://www.monip.org/ | awk -F’: ’ ‘/IP/ { print $2 }’)

echo “Les deux IP sont identiques”

fi
done

exit 0[/code]
La récupération de l’adresse publique, je l’ai copié-collé du net.
J’ai testé et j’ai une erreur après le reboot de la box. Mais une fois que le délai de 3 minutes est écoulé, je reçois bien la nouvelle IP dans ma boite mail.
Pour une véritable utilisation le délai ne serait pas de 3 minutes mais de 24 heures puisque j’ai cru comprendre que mon FAI changait d’IP toutes les semaines.

Je ne sais pas si ce script est pertinent et surtout si je ne vais pas me faire bannir pour spam. Vous m’avertirez.

Edit:
J’ai refait un test avec un délai de 20 minutes et aucune erreur dans le terminal. J’en conclue que 3 minutes est trop court pour que la box soit pleinement opérationnelle.

1 J'aime

C’est quoi cette inepsie, sérieux là !
Tu n’es en rien plus “sécurisé” parce que tu as une ip dynamique, qu’une ip statique !
Délire … on appelle cela, dans d’autres domaines, de la … légende urbaine …
Je ne savais pas que cela pouvait exister en info :frowning:

Juste une ou deux corrections :

  • la première est de mentionner que le paquet ‘w3m’ est nécessaire pour fonctionner, car non natif, et donc ne fonctionnera pas s’il n’est pas installé !
  • la deuxième est : pourquoi écrire cela, à deux, trois reprises d’ailleurs ? :slight_smile:

echo “$ipperso1” >> /home/user/Documents/Scripts/myip
cat myip | msmtp user@truc.net

Alors que faire directement ce qui suit, consommerait moins de temps CPU :

echo “$ipperso1” | msmtp user@truc.net

D’autant que le fichier en question, à savoir ‘myip’, tu n’en as réellement aucun besoin !
À moins que je ne me trompe … ?

Troisième point, je t’encourage à vérifier ton script au-travers de l’outil shellcheck, qui est disponible sur Debian d’ailleurs … il t’apprendra au moins à essayer de faire un code bash, le plus propre possible.

Pour finir, personnellement je créerais deux petites functions, une qui execute w3m et l’instruction qui va avec, et l’autre qui enverrai le mail …
du style :

#!/bin/bash
#Identification de l'IP publique (stockée dans la variable ipperso1)

get_ip() { echo "$(w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }')" }

#Envoie de cette IP sur la boite mail
send_mail() { echo "$1" | msmtp user@truc.net }

ipperso1="$(get_ip)"
send_mail "$ipperso1"

###############
#Surveiller les changements d'IP publique
###############
#while true permet de faire tourner le script en boucle
while true; do

    ipperso2="$(get_ip)"

    if [ $ipperso1 != $ipperso2 ]; then
        
        send_mail "$ipperso2"
        ipperso1="$ipperso2"

    else

        sleep 3m
        ipperso2="$(get_ip)"
#       echo "Les deux IP sont identiques"
fi
done

Comme tu le vois, j’ai supprimé aussi un max de commentaires, parce que trop de comments tue l’intérêt des commentaires. Pas besoin d’expliquer ce que fait un echo ou un test de comparaison :wink:


Sinon, bonne initiative … même si je n’en ai pas l’intérêt !

1 J'aime

Bonjour PenguinPdt

Merci pour ces retours

Du coup le script perd de son intérêt : autant avoir une IP statique.

J’édite mon message après celui-ci et rajouterai le paquet msmtp.

Je n’en ai aucune idée: j’ai installé hier msmtp et mes premiers essais m’ont laissé penser que le fichier myip devait contenir les champs From: et To:
Je referais des essais.

Merci pour l’outil shellcheck, mis en favoris.
Merci pour la réécriture: maintenant que j’ai une petite idée de ce que fait le script (trois jours dessus) ça me permet d’aller un peu plus loin.

C’est peut-être une particularité de msmtp ?
Faut vérifier !!!

Re

La commande n’est suivie d’aucun effet (pas d’envoie de mail).
Il faut donc un fichier (myip).
Si celui-ci est vide (sauf l’IP via la commande “echo”), pas d’email.
Obligatoirement il faut From: et To:

Bizarre, ça fonctionne très bien avec l’outil ‘mail’.
Je vérifierai plus tard :wink:

As-tu correctement paramétré ton fichier personnel ~/.msmtprc ???

Je te renvoie à la doc *buntu

Je viens de l’installer, paramétrer mon fichier perso, et je te promets que ces deux genres de ligne fonctionnent :

echo “Ceci est un text !” | msmtp consult@stephane-huc.net
txt="Ceci est un text !"
echo “$txt” | msmtp consult@stephane-huc.net

Bien sûr, dans les deux cas, cela ne met pas de subject, ni de qui cela vient !


Si tu installes le package msmtp-mta, ce package va créer un lien vers /usr/bin/sendmail, et tu pourras même utiliser l’outil ‘mail’ plus simple à faire joujou, encore :stuck_out_tongue:


PS : en passant je te remercie, ça m’a permis de découvrir cet outil, bien plus simple à configurer et à utiliser qu’exim … agréablement surpris ! :smiley:

Je fais sûrement quelque chose de mal mais sans avoir la moindre piste.

J’ai commencé avec PostFix avant de passer à msmtp.
Il n’y a qu’avec msmtp que j’arrive à envoyer des mails.

Mon FAI est orange. J’ai essayé avec smtp-msa.orange.fr mais d’après les logs, la connexion est refusée.
Avec smtp.orange.fr : mail accepted for delivery. Je n’ai toutefois rien dans ma boite de réception.
Il n’y a qu’avec smtp.gmail.com que mes mails sont acheminés vers la boite de réception. Et il a fallu que je confirme auprès de gmail que je voulais amoindrir ma sécurité.

Pour msmtp-msa, je ne savais pas à quoi ça correspondait (concentré à faire tourner msmtp et le script). Je suis maintenant curieux.
Je viens d’installer Sendmail qui s’est séparé de Postfix.

Ton script fonctionne, je me suis penché dessus et en particulier sur les fonctions. Bien sûr l’envoi se fait avec le fichier “myip” à mon stade.
Il y a juste un point que je dois creuser dans la fonction avec de la recherche et de l’huile de coude.

Merci ton script m’a aidé à mieux cerner ce qu’est une fonction et à faire les ponts entre sa définition et son utilisation ultérieure.
Si de ton côté tu as découvert un outil qui t’intéresse, je ne regrette vraiment pas d’avoir posté.

Je te propose une alternative à w3m basée sur curl, que je préfère tout simplement parce que beaucoup plus facile à retenir.

Au lieu de :

j’utiliserais :

3 J'aime

Tiens, je ne connaissais pas ifconfig.pro.

Mon premier script utilisait (curl ???) ifconfig.me.
J’avais un délai d’attente qui coupait la connexion (au bout de 3 minutes 30). C’est pourquoi j’ai trouvé sur le net la commande que j’utilise et qui répond systématiquement.

ifconfig.pro semble ne pas souffrir du même désagrément, Merci.

C’est d’autant plus intéressant, que c’est immédiat et que tu n’as aucun filtre à exécuter en suivant …
Et, que la probabilité d’avoir l’outil ‘curl’ nativement est plus existentielle.
Cela devient vraiment un outil net incontournable …

Donc, ça te fait un :

get_ip() { echo "$(curl ifconfig.pro)" }

Comme je te l’ai écrit, il n’y a pas besoin :wink:

N’hésites pas à demander !

Arf

je vais peut-être arrêter mes essais avec msmtp:

[quote]smtp: cannot get initial OK message from server
msmtp: server message: 550 mwinf5c59 ME Adresse IP source bloquee pour incident de spam. Client host blocked for spamming issues. OFR006_101 Ref http://r.orange.fr/r/Oassfdqfdqsfdqsfqds [101]
msmtp: could not send mail (account default from /home/user/.msmtprc)

[/quote]

@Alman : bon, je ne sais pas où tu en es mais, perso, entre temps, je continues :stuck_out_tongue:

msmtp, mstpmta, couplés à Heirloom-mailx donne une bonne conjugaison d’envoie de mail.
Mailx link/bind mail.

Pour l’utiliser basiquement :

echo "text" | mail -s "Sujet" email@domaine.tld

Bon, mais, ça manque d’informations dans les en-têtes … et si le serveur de mail a une détection antispam, il te mettra dans les entêtes de mail, qu’il manque l’entête From !

Normalement la doc dit que c’est l’option -r qui permet de spécifier celle-ci de type : -r email@name.com, sauf que pour des raisons de failles et donc de sécurité système, cette option a été désactivée, et le système répond “not found” alors que la doc la mentionne !
Ce qui est bien, c’est que la doc spécifie d’utiliser la variable from … cela se fait par le biais de l’option -S (oui, en majuscule - bien faire attention à ne pas se tromper avec l’option -s - minuscule - qui spécifie le sujet du mail - le titre), telle que :

echo "text" | mail -S from="Untel <mail@name.net>" -s "Sujet" email@domaine.tld

Absolument mettre l’email entre les symboles ‘<’ et ‘>’ !

Ce qui est bien avec cette option ‘-S’, c’est qu’elle te permet de paramétrer d’autres variables, telles que date, par exemple … les variables de connexion nécessaires à un serveur, etc.

Astuce : pour envoyer un fichier avec, utiliser l’option -a … et non la redirection par l’usage ‘<’ …
Astuce 2 : si cron, si root, créer le fichier .msmtprc, aussi pour root !

Une bonne doc : http://www.computerhope.com/unix/umailx.htm

shellcheck

(petite coquille)

1 J'aime

Bon, perso, j’ai un soucis, avec cron … syslog me retourne ça :

Apr 21 17:19:09 siou CRON[174420]: (root) MAIL (mailed 1 byte of output; but got status 0x0041, #012)

  • J’ai créé un fichier /etc/msmtprc qui contient l’équivalent de ~/.msmtprc …
  • J’ai ajouté la variable suivante CRONARGS=-m/usr/bin/msmtp dans la crontab - bien que je n’ai pas compris pourquoi l’ajouter, et ça, ça m’énerve un tant soit peu de pas comprendre !
  • J’ai ajouté la déclaration 'default: email@mondomaine.com dans /etc/aliases, puis relancer newaliases …

Bref, rien n’y fait … pas les mails depuis la table cron !

toujours incroyable sous linux de trouver des fonctions qui font simplement ce qu’on leur demande :slight_smile:

1 J'aime

Salut

De mon côté, mes services Internet ont été désactivés : plus d’internet, plus de téléphone et plus de télévision.

Le service assistance de mon FAI m’a suggéré de passer via la cellule Abuse.
En parallèle les services ont été rétablis.
Toutefois, j’avais débranché le câble RJ45 entre le serveur et la box.
En le remettant, la box “panique” (deconnexion d’Internet, pas de téléphone…).
La cellule abuse m’a répondu qu’aucune opération n’y d’eux ni d’aucun service n’avait été faite.
La personne a même eu l’amabilité de me fournir les liens:
http://www.bortzmeyer.org/5322.html
http://forum.arduino.cc/index.php?topic=371318.0
J’ai désinstallé les programmes et même ainsi, lorsque je rebranche le câble RJ45, la box “panique”.
Là le serveur est en rade (chez le technicien).
J’imagine que j’ai des mails en queue qui sont envoyés automatiquement mais je ne comprend pas d’où puisque j’ai théoriquement supprimé l’ensemble des programmes.
Je suis passé sous Mutt et consorts, histoire de me faire la main et de mieux comprendre le fonctionnement de tous les programmes (notamment avec http://sdz.tdct.org/sdz/gerer-votre-mail-a-la-unix.html, pour ceux voulant en savoir plus).
Les scripts sont sous le coude et j’y arriverai à faire fonctionner le tout nondidiou !

Merci