Страница 1 из 1
обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 12:21:06
agat
Встала задача, одновременно(или почти одновременно) обновить ipfw на чуть меньше чем на 50 гейтах.
сервера все одинаковые, топология сетей за ними тоже одинаковая.
Сети близницы в разных районах, площадь покрытия около 300 км

поэтому случись что, убится можно.
хотел было написать скрипт обновления, и просто тупо закинуть в каждый из серверов на выполнение по крону 1раз 1го числа.
но что то меня это насторожило, вот решил спросить кто нить такое делал? и как такое решилось?
Переход нужен ночью в нули время на переход 1 час. ручками реально не успеть, а заранее низя,.
Есть подозрения, что обновлять ipfw нужно будет еще не раз, поэтому скрипт хорошо бы ставить на выполнение каждый месяц,
т.е. достаточно будет централизовано поменять 1 шаблон что бы все остальные его скачали и применили.
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 13:07:23
princeps
для такого надо юзать cfengine или puppet
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 13:38:39
Alex Keda
у меня филиалы тычутся на нужный УРЛ, скачивают скрипт, запускают егона выполнение.
и так каждую ночь.
==========
ошибаться не советую, через некоторое время расслабляешься, и косяки страшные могут произойти - я вот fstab на всех сразу как-то попортил

Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 14:16:24
princeps
а всё потому, что надо не изобретать лисапед, а юзать cfengine или puppet

cfengine пробую сейчас внедрить у себя, статью напишу, наверное.
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 15:48:05
gloom
princeps писал(а):а всё потому, что надо не изобретать лисапед, а юзать cfengine или puppet

cfengine пробую сейчас внедрить у себя, статью напишу, наверное.
помоему имеет смысл если серверов сотни
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 16:22:34
Alex Keda
несогласен
имеет смысл юзать хотя бы самописное что-то когда их хотя бы десяток кодинаковых.
если конфиги одинаковые и часто меняются - начиная от единиц (на host-food вот три сервера - а конфии все одинаковые - даже rc.conf

я на одном меняю, меняется на остальных - тупо скрипт надо не забыть запустить после смены чего либо)
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 19:45:39
agat
cfengine, puppet - жесть еще та, и все это ради фаера ? гг... Какие то кукловоды со своим языком
идея с wget на нужный url радует, проверять чексумм можно по md5 и если не совпадает то ни чего не делать,

__________________________
хм.... подозреваю что если знать что по чем и прально скормить скрипт можно много бед на серваке наделать, например незаконно завести юзера, и юзать ломанного дедика в свое удовольствие. поэтому проверка на мд5 нужна не только на -"А целиком ли скачан файло?"... нужно пихнуть какое нить секретное слово в файло, что мол типо свои.
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-09 22:04:30
maga-maga
puppet - действительно жесть, глючное УГ.
уж лучше что-то самописное по крону, хорошо протестировать, поставить default to accept и вперед
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-10 0:13:47
Alex Keda
2 агат
глупости какие-то
юзайте ssh по ключам тогда
Re: обновить ipfw на 50 шлюзах
Добавлено: 2010-03-10 1:18:38
agat
в общем накропал что то.. ключи не стал использовать потому что на все надо будет ставить ключи, решил использовать url все таки,
вроде работает, если будут замечания то поправте,
Код: Выделить всё
#!/bin/sh
#
# http://host.ru/dir/
#
# cheksum file hash_md5.php
# <?php
# $file = 'rc.firewall';
# echo md5_file($file);
# ?>
#
# access file .htaccess file (only one ip)
# Order Deny,Allow
# Deny from all
# Allow from XXX.XXX.XXX
#
# rc.firewall file
# script rc.firewall
#
#
path="/usr/home/eso"
wget="/usr/local/bin/wget"
rm="/bin/rm"
md5="/sbin/md5"
gate="XXX.XXX.XXX.XXX"
channel="0"
sucs="host.ru"
file="rc.firewall"
sendmd5="hash_md5.php"
sleep=/bin/sleep
MYDATE=`/bin/date +%Y-%m-%d_%H:%M:%S`
#this only utm rfw
trap '' 1 2 3 15
utm_exec=safe_utm5_rfw
err_log=/netup/utm5/log/utm5_rfw.log
exec_dir=/netup/utm5/bin
#LETS BEGIN
if [ "`ping -t 5 -c 1 ${gate} | grep "64 bytes"`" ]
then channel=1
else
echo "|" ${MYDATE} "| alarm, channel down |" >> ${patch}/chanel_down.log
fi
if [ "`ping -t 5 -c 1 ${sucs} | grep "64 bytes"`" -a ${channel} != 0 ]
then
${wget} -O ${path}/tmp.rc.f http://${sucs}/dir/${file}
obtainedhash=`${md5} -q ${path}/tmp.rc.f`
${wget} -O ${path}/md5.tmp http://${sucs}/dir/${sendmd5}
sendhash=`sed q $path/md5.tmp`
fi
echo ${obtainedhash}
echo ${sendhash}
if [ ${obtainedhash} = ${sendhash} ]
then
echo "hash ok"
`/bin/sh ${path}/tmp.rc.f &`
#this only utm (restart utm rfw)
${sleep} 3
if [ -x $exec_dir/$utm_exec ];
then
$exec_dir/$utm_exec stop &
else
echo $exec_dir/$utm_exec no such file
killall -9 utm5_rfw
fi
${sleep} 3
if [ -x $exec_dir/$utm_exec ];
then
$exec_dir/$utm_exec start &
else
echo $exec_dir/$utm_exec no such file
fi
#end only utm
#CLEAR
$rm $path/md5.tmp
$rm $path/tmp.rc.f
fi
используется utm_rfw для добавления правил поэтому после применения rc.firewall надо просто перегрузить rfw, не стал заморачиватся просто скопировал эту секцию со стартового скрипта.
ну в общем как то так. пока, потом мож еще че допишу.
ХМ.... мож лучше перенести в скрипты?