モジュールを使用する場合は、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
。
それにもかかわらず、カーネルの接続リストはパフォーマンスとスピードが要件なので、非常にうまく実装されていると思います。
全体として可能であれば、ベンチマークをお勧めします。