web-dev-qa-db-ja.com

rsyslogdがrsyslog.dの次の行を尊重しないのはなぜですか

これは私の前の質問にいくらか関連しています ここ

_/etc/rsyslog.d_に含まれている_/etc/rsyslog.conf_に3つのファイルがあります。

  • _00-iptables.conf_
  • _50-default.conf_
  • _postfix.conf_

最初のものは私が作成したものです。私の仮定は、名前が付けられているため、_50-default.conf_の前に含まれるというものですが、フィルター行を直接_50-default.conf_に入れて、カスタムファイル(_00-iptables.conf_)を削除してみました。

_:msg, startswith, "ipt:" /var/log/iptables.log
& stop
_

マニュアルページとトラブルシューティングの手順で説明されているように、stopを_~_で実行しているため、_-N1_をrsyslogdに置き換え、_~_は非推奨であるという警告を出しました。賛成またはstop。これは、利用可能な(公式!)ドキュメントが古くなっている/遅れているように見えることを意味します。

ここでの考え方は、接頭辞_ipt:_が付いたメッセージはすべて、指定されたログファイルに入り、他のログファイルはこれらの行を受信しないということです(containsの代わりにstartswithも試しました) 。つまり、特に_kern.log_で言及されているsyslogと_50-default.conf_は、これらのメッセージを受信しないはずです。

_auth,authpriv.*            /var/log/auth.log
*.*;auth,authpriv.none     -/var/log/syslog
kern.*                     -/var/log/kern.log
_

Rsyslogのドキュメントを読みましたが、 プロパティベースのフィルター (また ここ )のドキュメントは、正確に最も啓発的ではありません。ドキュメントに記載されている例(他の場所にもあります)および Wikiに同様の例があります

_# From documentation
*.* /var/log/allmsgs-including-informational.log
:msg, contains, "informational"  ~
*.* /var/log/allmsgs-but-informational.log
# From Wiki
:syslogtag, startswith, "MSWinEventLog#011" /var/log/messages;fixsnareFormat
& @192.168.1.8;fixsnareForwardFormat
& ~
_

ドキュメントの例は私の2ライナーにそれほど近いものではありませんが、それでも_~_の意味をよりよく説明しています。

私は何が間違っているのですか?

セレクターとプロパティを組み合わせる方法があるかどうか誰かが答えることができる場合のボーナスポイント。例えば。:

_:msg, startswith, "ipt:" kern.* /var/log/iptables.log
_

注意:私はrsyslogのバージョン7.4.4を使用しています。はい、変更後に_service rsyslog restart_を実行し、それが有効になるのを待ちました。


編集

いくつかのより多くの情報。デーモンをデバッグモード(RSYSLOG_DEBUG=LogFuncFlow RSYSLOG_DEBUGLOG=~/rsl.log $(which rsyslogd) -f /etc/rsyslog.conf -d)で実行すると、最適化後のルールセットが次のようになります。これは、希望どおりであることを示しているようです(簡潔にするために先頭のプレフィックスが削除されています)。

_ruleset 'RSYSLOG_DefaultRuleset' after optimization:
ruleset 0x214a640: rsyslog ruleset RSYSLOG_DefaultRuleset:
PROPFILT
   Property.: 'rawmsg'
   Operation: 'contains'
   Value....: 'ipt:'
THEN
  ACTION 0x215c070 [builtin:omfile:/var/log/iptables.log]
  STOP
END PROPFILT
PRIFILT 'auth,authpriv.*'
pmask:  X  X  X  X FF  X  X  X  X  X FF  X  X  X  X  X  X  X  X  X  X  X  X  X  X
  ACTION 0x215e840 [builtin:omfile:/var/log/auth.log]
END PRIFILT
PRIFILT '*.*;auth,authpriv.none'
pmask: FF FF FF FF  X FF FF FF FF FF  X FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  ACTION 0x215f030 [builtin:omfile:-/var/log/syslog]
END PRIFILT
_

また、私が見た動作から、フィルターが期待どおりにファイル_/var/log/iptables.log_に明確に書き込むため、フィルターが効果を持っていると推測できることも追加する必要があります。ただし、メッセージをその特定のファイルに書き込んだ後、メッセージが期待どおりにドロップされません。

これは、後者だけではなく、_kern.log_、syslog、および_iptables.log_のすべてで終わる方法の例です。プライバシー上の理由から、詳細は編集されています。

_Jun  1 02:23:01 hostname kernel: [70025.211497] ipt:drop IN=eth0 OUT=virbr0 MAC=dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00 SRC=9.8.7.6 DST=1.2.3.4 LEN=60 TOS=0x00 PREC=0x00 TTL=47 ID=59201 DF PROTO=TCP SPT=47626 DPT=23 WINDOW=4380 RES=0x00 SYN URGP=0
_
6
0xC0000022L

RainerScriptを使用してみませんか?ファシリティセレクタの代わりに、$syslogfacility-textで一致します。実際には、これはセレクターとプロパティを組み合わせたものです。

if ($msg startswith 'ipt:' and $syslogfacility-text == 'kern') then {
    action(type="omfile" file="/var/log/iptables.log")
    stop
}

また、Rsyslogのドキュメントには、バージョン7のツリーが古くなっているため、使用しないhttp://www.rsyslog.com)/doc/v7-stable / )。

1
Deathgrip

あなたがそれを解決したかどうかわからない。私はすべての詳細を調べたわけではありませんが、rsyslogはいくつかの構成に応じてさまざまな方法でメッセージを送信できます。たとえば、すべての条件に同時に送信したり、最初の条件に送信してから2番目に送信したりすることができます。設定がすべてに同時に送信される場合、その停止は実際の意味を持ちません。 rsyslog非同期/同期/並列、特にrsyslogフローの流れを変える直接/リンクリストタイプのキューを探してみてください。

0
guest01