web-dev-qa-db-ja.com

ipsetエントリを「経過」させるにはどうすればよいですか?

ipsetを使用して、システムに正常にログインしたクライアントのホワイトリストを確立しようとしています。エントリを年齢に基づいて後で破棄できるように、エントリを年齢に制限するにはどのようなオプションが必要ですか?

以下に概説するアイデアよりも優れた方法はありますか?

ipsetから直接提供されたものは何も見つからなかったので、そのような機能がipset/iptablesの範囲内に存在するかどうかを確認しようとしています。


今のところ、私が思いついた唯一のアイデアは、X分またはX時間ごとにリストを交換するcronジョブを使用することです。したがって、例として、アクティブなリストwhitelistと、次の1時間のリスト(たとえば、21:00 whistelist_21)があります(20:00から20:59。 nowに接続しているクライアントは、アクティブなwhitelistに追加され、次の1時間(または特定の期間)のホワイトリストに追加されます。次に、1時間ごと(または指定された期間)にcronジョブが実行されます(例:上記の場合の21:00に-既存のwhitelistwhitelist_21に交換し、(現在は名前が変更された)whitelistを破棄します。例えば。:

ipset swap whitelist whitelist_21
ipset destroy whitelist_21
5
0xC0000022L

manページには、私が探していたものが記載されていることがわかりました。これは適切にtimeoutと呼ばれ、IPセットにエントリを追加するときに指定できます。間違った用語を検索したため、見逃しました。

セットを作成するときにデフォルトのタイムアウト値を指定し、後で追加するエントリごとに指定できます。セットのデフォルトをオーバーライドする必要がある場合。

ipset(8)の例:

ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
4
0xC0000022L