Iptables

檢查 iptables 是否正在執行的腳本不起作用

  • July 26, 2012

我有以下簡單的腳本來檢查 iptables 是否正在執行。為什麼無論狀態如何,它總是返回“OK”?

#!/bin/bash

#IPT='iptables'
SERV='/sbin/service iptables status'
EXPR='Firewall is stopped.'
       if [ "$SERV" = "$EXPR" ]
                then
                       echo 'Firewall is not Running'
                       exit 2
               else
                       echo 'OK'
                       exit 0
       fi

iptables 的初始化腳本永遠不會返回該字元串;它總會有其他東西,而且還有一些與該字元串完全不匹配的故障條件。

相反,您應該檢查腳本的退出程式碼,因為它(在 EL 和 Fedora 上)如果防火牆未啟動則返回非零值,如果它處於活動狀態則返回零。

/sbin/service iptables status >/dev/null 2>&1
if [ $? = 0 ]; then
   echo "All systems go."
else
   echo "Houston, we have a problem."
fi

您設置$SERV為等於文字字元串值“ /sbin/service iptables status”,您需要它來執行命令並儲存結果。您可以通過回顯來驗證這一點$SERV。如所寫,它將始終評估為不相等。

SERV=$(/sbin/service iptables status)

此外,請確保輸出符合預期。我的版本返回iptables: Firewall is not running. (當然您的版本可能會有所不同。)

在Advanced Bash-Scripting Guide中閱讀有關子shell 的更多資訊。

引用自:https://serverfault.com/questions/411109