8

プログラムでユーザーチェーンを作成し、iptables で削除しようとしています。ユーザーチェーンが存在するかどうか、作成されていないかどうかを確認する最良の方法は何だろうと思っていました。

4

1 に答える 1

17

iptables(8)チェーンを一覧表示し、stdout/stderr を にリダイレクトし/dev/null、終了コードを確認するために使用します。チェーンが存在する場合、iptablestrue で終了します。

このシェル関数は、私の iptables フロントエンド スクリプトからのものです。

chain_exists()
{
    [ $# -lt 1 -o $# -gt 2 ] && { 
        echo "Usage: chain_exists <chain_name> [table]" >&2
        return 1
    }
    local chain_name="$1" ; shift
    [ $# -eq 1 ] && local table="--table $1"
    iptables $table -n --list "$chain_name" >/dev/null 2>&1
}

-niptables が IP アドレスをホスト名に解決しようとしないように、このオプションを使用していることに注意してください。これがないと、この関数が遅くなることがわかります。

次に、この関数を使用して、条件付きでチェーンを作成できます。

chain_exists foo || create_chain foo ...

wherecreate_chainはチェーンを作成する別の関数です。直接呼び出すこともできますiptablesが、上記の命名により、何が起こっているのかが非常に明確になります。

于 2012-05-28T12:23:47.760 に答える