web-dev-qa-db-ja.com

ワイルドカードを使用したIPアドレスに基づくrsyslogフィルタリング

Rsyslogによって処理されているsyslogトラフィックがいくつかあり、送信元デバイスのIPアドレスに基づいてログを保存するフィルターを設定したいと思います。私は多数のデバイスを持っているので、デバイスごとにルールを作成することは避けたいと思います。 IPスキームは十分に一貫しているので、1つのルールですべてを処理できると思いますが、それを機能させるのに問題があります。

これが私が達成しようとしていることのいくつかの(失敗した)例です:

:FROMHOST, regex, "10\.[0-9]+\.1\.2" -/var/log/test.log
& ~

または

if ( re_match($fromhost-ip, '10\.[0-9]+\.1\.2') ) then { -/var/log/test.log }
& ~ 

基本的に、これらのデバイスのIPスキームは常に10. * .1.2になります。ここで、*はデバイスの場所に対応する2桁の数字です。

誰かが私がこれでどこが間違っているのかについて私に考えを与えることができますか?

ありがとうございました!

2
Brad Turner

Rsyslogを実行するためのデバッグオプションを見つけた後、実際に自分で解決策を見つけることができました。どうやら、次のようにコンソールから直接rsyslogdを呼び出すことができます。

rsyslogd -d

これを行うと、すべてのルール解析のライブストリームが表示されます。このトリックを使用してtonの試行錯誤を繰り返した後、エスケープしただけでなく、いくつかのパーツが必要だったため、フィルタールールが失敗していると判断できました。 doubleエスケープしました。これは本当に驚きました。

これが私の最終的なルールのように見えました:

:fromhost-ip, regex, "10\\.[0-9]\\+\\.1\\.2" -/var/log/test.log
& ~

そして、これがいくつかの成功例の出力です。 +はエスケープされたものとしてここに表示される必要があることに注意してください。これは、公式にプラグインすると一致するものが見つからないため、奇妙です rsyslog regex tester このように:

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\+\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.24.1.2') regex '10\.[0-9]\+\.1\.2': TRUE

いつかこれを読んでいる人が興味を持った場合に備えて、ここに私の試行錯誤の例をいくつか示します。それらのほとんどは単に完全に失敗しました。

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10.[0-9]+.1.2': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '^10.[0-9]+.1.2$': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.1\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]\.1\.2': TRUE

Filter: check for property 'fromhost-ip' (value '10.1.1.2') regex '10\.[0-9]+\.1\.2': FALSE
1
Brad Turner