Назад | Перейти на главную страницу

В сценарии оболочки выполняйте различные действия в зависимости от файла на другом сервере (доступном в Интернете)

В последнее время у меня возникли проблемы с брандмауэрами на нескольких разных серверах. И я хочу создать сценарий, который будет запускаться примерно раз в час, проверять файл на внешнем сервере и выполнять соответствующий набор правил брандмауэра. В настоящий момент, если ЧТО-ТО происходит с брандмауэром, и мой ssh ​​/ etc заблокирован, я должен запланировать посещение объекта, что смехотворно дорого. Таким образом, это будет эффективная отказоустойчивая система. Если что-то пойдет не так, я могу использовать другой сервер, чтобы инициировать изменение на «сломанном» сервере и вернуть его к возможности удаленного управления. Я знаю немного, но на моем текущем уровне администратора Linux все должно работать хорошо.

Я никогда раньше не писал сценариев bash / sh, но привык к битой. Так что мне нужна помощь сообщества, чтобы превратить этот псудокод во что-то, что может сработать:

$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
}

В удаленном файле будут указаны только числа 1,2,0 или -1 (или что-то подобное этим строкам.

Это просто условное дерево / переключатель для выполнения разных файлов.

Заранее спасибо!

Примечание: при использовании смеси Mandrivia 2010.R2 / Ubuntu 10.04 / ClearOS у всех есть полные sh и bash, если это имеет значение. Чего не должно быть.

РЕДАКТИРОВАТЬ: это хакерский подход, и, вероятно, есть гораздо лучшие (безопасные) способы сделать это, но это очень легко и просто.

Если вы используете

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

тогда содержимое удаленного файла будет сохранено в переменной $ FAILSAFE.

Затем вы можете использовать $ FAILSAFE в своих сравнениях, например.

#!/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
#!/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

Вы можете использовать следующий скрипт:

#!/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

Для получения правильных результатов необходимо убедиться, что страница возвращает одно из ожидаемых значений.

Вышеупомянутое является ответом на ваш вопрос о сценарии оболочки, но я думаю, что было бы неплохо попробовать использовать решение для управления конфигурацией, например кукольный. Агент марионетки можно запускать для периодического получения конфигурации от хозяина марионетки. Итак, когда вы закончите настройку марионетки, вы можете просто удалить еще один файл правил брандмауэра и подождать некоторое время, пока он не будет выполнен агентом марионетки на удаленном компьютере.