conntrackテーブルをクリアしたときに「echo f」がDebianで動作しないのはなぜですか?

conntrackテーブルをクリアしたときに「echo f」がDebianで動作しないのはなぜですか?

多くの人がファイアウォールルールを再ロードしようとすると、conntrackテーブルを消去しません。一部のESTABLISHED接続がある場合は、関連する接続をブロックするルールを追加すると(NEW状態)、すべてのセッションは影響を受けません。これが発生しないようにする唯一の方法は、conntrackテーブルを消去してすべてのセッションを終了することです。この場合、すべてのパケットはINVALIDルールと一致するため、新しい接続を確立する必要があります。これで新しいルールが渡されますiptables

OpenWRTでは、簡単に次のことができます。

# echo f > /proc/net/nf_conntrack

しかし、残念ながら、このソリューションはDebianでは動作しません。

# echo f > /proc/net/nf_conntrack
echo: write error: Input/output error

理由は次のとおりです。

# ls -al /proc/net/nf_conntrack
-r--r----- 1 root root 0 2016-06-05 10:45:52 /proc/net/nf_conntrack

Debian ではconntrackパッケージをインストールし、次のコマンドを入力する必要があります。

# conntrack -F
conntrack v1.4.3 (conntrack-tools): connection tracking table has been emptied.

Debianではなぜecho f動作しませんか?何とか動作させる方法はありますか?それとも強制的にそのconntrackツールを使用する必要がありますか?

答え1

OpenWRT はいくつかの特定のカーネルパッチを維持します。その中にはDebianにはありませんが、あなたが文句を言う機能を提供する特定のパッチがあります。実際に利用可能ですただOpenWRTから。

カーネル4.4の場合は、質問のタイムラインに近いgitレコードを選択してください。

600-netfilter_conntrack_flush.patch:

static const struct file_operations ct_file_ops = {
       .owner   = THIS_MODULE,
       .open    = ct_open,       .read    = seq_read,
 +     .write   = ct_file_write,
       .llseek  = seq_lseek,
       .release = seq_release_net,
 };
@@ -393,7 +450,7 @@ static int nf_conntrack_standalone_init_
 {
        struct proc_dir_entry *pde;

-       pde = proc_create("nf_conntrack", 0440, net->proc_net, &ct_file_ops);
+       pde = proc_create("nf_conntrack", 0660, net->proc_net, &ct_file_ops);
        if (!pde)
                goto out_nf_conntrack;

f上記のコードスニペットの外側では、特定の構文がどのように処理されるのかはわかりませんが、上記のスニペットは、OpenWRTが通常のコアで読み取り専用のエントリに書き込むことができるようにパッチを追加した/proc/net/nf_conntrackことを明確に示しています。

まだ現在カーネル5.4で利用可能しかし、その内容ははるかに明確ではありません。

組み込み環境と制限されたサイズを処理するように作成されたと想像できます。カーネルパッチでconntrackツールを提供できない場合は、他の機能のためのスペースがあります。

これはハッキングです。予想される現代的な相互作用つながるサブシステムが通過しました。conntrackツールとインターネット接続カーネルAPIは絶えず進化しています。 (読み取り専用)/proc/net/nf_conntrackより簡単なツールとの互換性のためにのみ予約されています。

この機能を得るために、この追加のパッチ(他の関連パッチが必要な場合があります)を使用してDebianソースツリーをコンパイルできますが、これが実際に通常のシステムで役に立つかどうかはわかりません。

関連情報