渡辺一寛です。ドキュメントとソースを見ただけでリプライします。

At Mon, 18 Dec 2006 15:41:41 +0900,
Tsurutani Naoki wrote:
> ipfwでのログのレポートについて、疑問があります。
> PR conf/96247に書いたのですが、一向に修正されないので、
> 私の理解不足かと不安になってきました。
> 
> % sysctl net.inet.ip.fw.verbose
> net.inet.ip.fw.verbose: 1
> % sysctl net.inet.ip.fw.verbose_limit
> net.inet.ip.fw.verbose_limit: 0
> な状態で、
> deny log ip from any to 172.16.0.0/12 via xl0
> のようなルールに対し、ログが記録されます。
> 
> そのログについて、periodicのsecurity/550.ipfwlimitで上限に達したかどうかが
> レポートされますが、上述のようにlimit=0の場合、必ず「上限に達した」旨の
> レポートが届きます。
> limit=0の場合、上限なし、と解釈されると思っているので(man pageにはそう書かれています)、
> これはおかしいと思うのですが、PRでは取り合ってもらえませんでした。
> 
> 私の解釈が間違ってますでしょうか?

(鶴谷さんも PR の 2 回目のコメントで触れていますが) 要は ipfw(8) に
あるように、

(1) "ipfw log XXX ..." のように上限 XXX をルールで指定されれば、
    その値を使う。
(2) ルールで上限を指定されなければ、sysctl(8) 変数の
    net.inet.ip.fw.verbose_limit の値を使う。
(3) どちらにしても、値が 0 ならば上限無しになる。

という解釈で良いと思います。


ただ、先方は鶴谷さんが PR で最初に提示したパッチを見て、

> net.inet.ip.fw.verbose_limit: 0

という設定なら無条件に上限無しになる、と鶴谷さんが思っていると勘違いし
たように思えます。だから

| Why: This is not a bug: if net.inet.ip.fw.verbose_limit=0 but rules
| specify a limit, this limit has the priority since it's a specific
| setting that overrides a general one.

のようにコメントしたのでしょう。最初のパッチでは

> net.inet.ip.fw.verbose_limit: 0

という設定で、かつルールで上限を設定された場合には対応できませんから。


2 回目に提示されたパッチならば、所望の動作にはなりそうです。ただ 
ipfw(8) のソース (ipfw2.c) を見ると、

|| static void
|| show_ipfw(struct ip_fw *rule, int pcwidth, int bcwidth)
|| {
(中略)
||         if (logptr) {
||                 if (logptr->max_log > 0)
||                         printf(" log logamount %d", logptr->max_log);
||                 else
||                         printf(" log");
||         }

となっているので、

|                  '{if ($6 == "logamount") {
| -                        if ($2 > $7)
| +                        if ($7 != 0 && $2 > $7)
|                                  {print $0}

の部分は不要で、

|                  } else {
| -                        if ($2 > limit)
| +                        if (limit != 0 && $2 > limit)
|                                  {print $0}}

だけで良いのではないでしょうか。


あと、件の PR は

| Why: Re-open to look at this PR again: submitter is sure this is a
| bug, so I'll look at this again.

ということで再度 open になってますから、単に忘れられているか、後回しに
されているかのどちらかではないでしょうか。上記のように勘違いされていな
ければ、割とすんなり commit されるような気もします。
---
Watanabe Kazuhiro ([EMAIL PROTECTED])

メールによる返信