最近我在几台不同的服务器上遇到过防火墙问题。 而且即时通讯要创build一个脚本,每小时运行一次左右,并检查外部服务器上的文件,并执行相关的防火墙规则集。 就目前来说,如果SOMETHING发生在防火墙,我得到我的SSH / etc被阻止,我必须安排一个现场访问是荒谬的昂贵。 所以这将是一个有效的故障安全系统。 如果出现问题,我可以使用另一台服务器在“已损坏”的服务器上启动更改并恢复到可以远程pipe理的状态。 有点haxy我知道,但在我目前的Linuxpipe理员级别应该工作得很好。
我以前从来没有真的做过bash / sh脚本,但是我用来蝙蝠。 所以,从社区需要帮助的是把这个psudo代码变成可能工作的东西:
$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,所以重要。 它不应该。
编辑:这是一个hacky的方法,有可能是更好(安全)的方式来做到这一点,但这是非常轻,简单。
您可以使用以下脚本:
#!/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
您需要确保页面返回其中一个预期的值以获得正确的结果。
以上是关于shell脚本的问题的答案,但我认为尝试使用像puppet这样的configurationpipe理解决scheme是一个好主意。 伪装代理可以运行从一个木偶大师定期拉动configuration。 所以,当你完成puppetconfiguration后,你可以放下另一个防火墙规则文件,等待一段时间被远程机器上的puppet代理执行。
如果你使用
FAILSAFE=$(wget -O - http://example.com/firewall/config/failsafe)
那么远程文件的内容将被保存到variables$ 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