1 votes

Dans un Shell Shell, effectuer différentes actions en fonction du fichier sur un autre serveur (accessible par le web).

J'ai eu des problèmes avec les pare-feu ces derniers temps sur plusieurs serveurs différents. Et je veux créer un script qui s'exécutera une fois toutes les heures environ, et vérifiera un fichier sur un serveur externe et exécutera le jeu de règles de pare-feu correspondant. Comme à l'heure actuelle si QUELQUE CHOSE arrive au pare-feu, et que je me retrouve avec mon ssh/etc bloqué, je dois programmer une visite sur site qui est ridiculement chère. Ce sera donc effectivement un système à sécurité intégrée. Si quelque chose ne va pas, je peux utiliser un autre serveur pour initier un changement sur le serveur "cassé" et le remettre en état d'être géré à distance. Je sais que c'est un peu exagéré, mais avec mon niveau actuel d'administrateur Linux, cela devrait bien fonctionner.

Je n'ai jamais vraiment fait de script bash/sh avant, mais je suis habitué à bat. J'ai donc besoin de l'aide de la communauté pour transformer ce code psudo en quelque chose qui pourrait fonctionner :

$PATH = "/usr/firewall-scripts/temp/";
cd $PATH;
wget https://example.com/firewall/config/failsafe;
$FAILSAFE = readfile("$PATH/failtsafe");#This <--- im sure doesn't exist. 
if($FAILSAFE == "1") {
    /usr/firewall-scripts/failsafe.fw
}
else if ($FAILSAFE == "2")  {
    /usr/firewall-scripts/failsafe2.fw
}
else if ($FAILSAFE == "0")  {
    /usr/firewall-scripts/normal.fw
}
else if ($FAILSAFE == "-1")  {
    /usr/firewall-scripts/extra-secure.fw
}

Le fichier distant aurait juste les numéros listés 1,2,0 ou -1 (ou quelque chose de similaire à ces lignes.

Il s'agit simplement d'un arbre/interrupteur conditionnel pour exécuter différents fichiers.

Merci d'avance !

Note : Utilisation d'un mélange de Mandrivia 2010.R2 / Ubuntu 10.04 / ClearOS, tous ont des sh et bash complets, au cas où cela aurait de l'importance. Ce qui ne devrait pas être le cas.

EDIT : Il s'agit d'une approche bricolée et il y a probablement de bien meilleures façons (sécurisées) de le faire, mais c'est très léger et simple.

0 votes

Remarque à l'intention de tous les autres : cette façon de gérer un pare-feu et d'atteindre l'objectif "ne me bloquez pas hors de mon serveur" est la plus mauvaise que je puisse imaginer. Ne faites pas cela, s'il vous plaît.

1 votes

@womble : Pourquoi ne pas rendre l'internet meilleur et fournir une réponse démontrant la bonne façon de faire plutôt que de s'en prendre aux autres ?

0 votes

Parce que les gens s'énervent quand je donne des réponses qui ne répondent pas directement à la question. Il a été recommandé que les commentaires soient plus appropriés. J'essaie de le faire. Mais je pense qu'il serait extrêmement dangereux de laisser traîner ce genre d'idée sans avertir les autres.

2voto

user9517 Points 113163

Si vous utilisez

FAILSAFE=$(wget -O - http://example.com/firewall/config/failsafe) 

alors le contenu du fichier distant sera enregistré dans la variable $FAILSAFE.

Vous pouvez alors utiliser $FAILSAFE dans vos comparaisons, par ex.

#!/bin/bash

FAILSAFE=$(wget -O - http://example.com/firewall/config/failsafe 2> /dev/null)

if [ "$FAILSAFE" -eq "1" ]
then
    echo "FAILSAFE = $FAILSAFE"
elif [ "$FAILSAFE" -eq "2" ]
then
    echo "FAILSAFE = $FAILSAFE"
elif [ "$FAILSAFE" -eq "-1" ]
then
    echo "FAILSAFE = $FAILSAFE"
fi

1voto

Khaled Points 35208

Vous pouvez utiliser le script suivant :

#!/bin/bash

failsafe=`w3m -dump_source http://example.com/firewall/config/failsafe`
if [ "$failsafe" -eq "1" ] ; then
    /usr/firewall-scripts/failsafe.fw
elif [ "$failsafe" -eq "2" ] ; then
    /usr/firewall-scripts/failsafe2.fw
elif [ "$failsafe" -eq "0" ] ; then
    /usr/firewall-scripts/normal.fw
elif [ "$failsafe" -eq "-1" ] ; then
    /usr/firewall-scripts/extra-secure.fw
fi

Vous devez vous assurer que la page renvoie l'une des valeurs attendues pour obtenir des résultats corrects.

Ce qui précède est la réponse à votre question sur Shell Shell, mais je pense que ce sera une bonne idée d'essayer d'utiliser une solution de gestion de la configuration telle que Marionnette . L'agent Puppet peut être exécuté pour extraire périodiquement la configuration d'un maître Puppet. Ainsi, lorsque vous avez terminé la configuration de Puppet, vous pouvez simplement déposer un autre fichier de règles de pare-feu et attendre un certain temps pour que l'agent Puppet l'exécute sur la machine distante.

0 votes

Le script fonctionne comme prévu et a l'air génial ! Le conseil avec Puppet est bon et je vais certainement regarder cela comme une alternative à ce plan haxy actuel à l'avenir !

1voto

Sirch Points 5617
#!/bin/bash 
# (or whatever the path to bash is, find out from 'which bash'

STATE=$(wget -O - http://example.com/firewall/config/failsafe)

case $STATE in
-1)
  /usr/firewall-scripts/extra-secure.fw
  ;;
0)
  /usr/firewall-scripts/normal.fw
  ;;

1)
  /usr/firewall-scripts/failsafe.fw
  ;;
2)
  /usr/firewall-scripts/failsafe2.fw
  ;;
*)
  echo "unexpected failsafe state"
  exit 1
  ;;
esac

exit 0

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X