iptables「最近」モジュールの設定

iptables「最近」モジュールの設定

モジュールを使用する場合は、iptables recentここでモジュール設定を表示できます。

$ ls -1 /sys/module/xt_recent/parameters/

特定のパラメータの設定を一覧表示します。

$ cat /sys/module/xt_recent/parameters/ip_list_tot
100

また、モジュールのロード時にデフォルト値を変更できることもわかります。

私の質問は、リストがサイズに達するとどうなりますかip_list_tot

モジュールはrecent新しいIPアドレスの追加を停止しますか、または既存のIPアドレスを「交換」して新しいIPアドレスに置き換えますか?

ヘルプを確認しましたが、説明が見つかりませんでした。

iptables -m recent --help

ip_list_totそして本番環境で問題となるIPをブロックしたいのですが、適度なサイズはどのくらいですか?デフォルトip_list_totサイズの100は私にとってはとても小さいようです。これをに設定すると否定的な副作用が発生しますか10'000

答え1

読んだ後(すばやく)ソースコード、前のアイテムが削除されたことをお知らせします。

if (t->entries >= ip_list_tot) {
        e = list_entry(t->lru_list.next, struct recent_entry, lru_list);
        recent_entry_remove(t, e);
}

この値を増やすには、モジュールをロードするときにパラメータを手動で設定できます。

~$ sudo modinfo -p xt_recent
ip_list_tot:number of IPs to remember per list (uint)
ip_list_hash_size:size of hash table used to look up IPs (uint)
ip_list_perms:permissions on /proc/net/xt_recent/* files (uint)
ip_list_uid:default owner of /proc/net/xt_recent/* files (uint)
ip_list_gid:default owning group of /proc/net/xt_recent/* files (uint)
ip_pkt_list_tot:number of packets per IP address to remember (max. 255) (uint)
~$ sudo modprobe xt_recent ip_list_tot=10000
~$ sudo cat /sys/module/xt_recent/parameters/ip_list_tot
10000

recentアンロード/ロードする前に、モジュールが使用されていないことを確認してください(ファイアウォールを無効にするか、少なくとも一致ルールの使用を無効にしてください)。

この設定を継続的に維持するには、/etc/modprobe.d/xt_recent の下に次の内容を含むファイルを配置します。

options xt_recent ip_list_tot=10000

(この方法はうまくいかず、ディストリビューションに応じて調整できます。)

このパラメータ値を増やすと発生する可能性があるパフォーマンスの問題については言い難いです。これは、ハードウェア、システムで実行されるその他のタスクなどによって異なります。

まだソースコードと私の開発の背景を読んでみると、最も心配なのは待ち時間が発生することです。たとえば、現在テスト中のIPがリストの最後のIPかどうか。またはリストにはありません(頻繁に表示される場合があります):

static struct recent_table *recent_table_lookup(struct recent_net *recent_net,
                        const char *name)
{
    struct recent_table *t;

    list_for_each_entry(t, &recent_net->tables, list)
        if (!strcmp(t->name, name))
            return t;
    return NULL;
}

x複雑さを考慮すると、list_for_each_entry() + strcmp()`ip_list_tot̀'を大きな値に設定するための追加の「コスト」は、リストに移動する時間です。

最終的な複雑さは1 * xとの間で異なる場合がありますip_list_tot * x

それにもかかわらず、カーネルの接続リストはパフォーマンスとスピードが要件なので、非常にうまく実装されていると思います。

全体として可能であれば、ベンチマークをお勧めします。

関連情報