0
Help us understand the problem. What are the problem?

posted at

rsyslog/ログ受信時に接続元IPアドレスで制御する(Cent8.3)

image.png

以下の記事ではRedHatドキュメントに沿って記載しましたが、
チューニング余地がありそうなので書いていきたいと思います。

■環境
CentOS Linux release 8.3.2011
rsyslog-8.1911.0-6.el8.x86_64



①接続元IPアドレス範囲を絞る

以下のをMODULESあたりに配置することで接続元IPアドレス範囲を絞ることが出来ます。
単一IPアドレスでもセグメントでも可。カンマで複数指定も可。

AllowedSender
$AllowedSender TCP ,127.0.0.1, 192.168.142.0/24
$AllowedSender UDP ,127.0.0.1, 192.168.142.0/24

127.0.0.1は入れておかないと不具合になるケースがある模様。
https://tooljp.com/linux/Redhat7/faqRedhat7/html/TCP-message-from-disallowed-sender.html



なお、指定IPアドレス範囲外からのアクセスが発生した場合は、
以下のメッセージが/var/log/messagesに発行されます。

BlockMessage
Aug 21 15:13:20 centt83-02 rsyslogd[1786]: imudp: UDP message from disallowed sender discarded [v8.1911.0-6.el8]

このメッセージ内で接続元IPアドレスが記載されていればよいのですが、現在はそのような設定が出来ない模様。
https://askubuntu.com/questions/461947/how-to-display-the-ip-address-of-the-sender-when-rsyslog-rejects-a-udp-message



②ログ格納先を接続元IPアドレスで決める

こちらはTEMPLATEとRULESを利用し、if文で制御を行います。

Control(ipaddr)
#### TEMPLATE #####
template(name="LogGroup001" type="string"
     string="/var/log/remote/%fromhost-ip%/%$year%-%$month%-%$day%.log"
    )

#### RULES ####
if ( $fromhost-ip == "192.168.142.43" ) then {
   *.*  action(type="omfile" DynaFile="LogGroup001")
   stop
}

TEMPLATE

LogGroup001
ログ定義の名前となります。string= 以後のディレクトリにログ出力をすることを定義しています。

%fromhost-ip%は受信IPアドレスのマクロとなりますが、そのほかにも%fromhos%でホスト名を指定することなどが可能です。
https://www.rsyslog.com/doc/master/configuration/properties.html

RULE

if ( ) then { }
if文に合致した内容で処理します。
もちろん条件式はand/orが利用可能です。

$fromhost-ip
接続元IPアドレスの値となります。今回は特定のIPアドレスかどうかを判定しています。

*.*
<Facility>.<Serverity> です。今回は全てを定義しています。

action(type="omfile" DynaFile="LogGroup001")
actionという動作指定部にて、
--- omfile(Output Module File(標準モジュール))を利用して
--- LogGroup001(ログ定義)に出力される
ということを定義しています。

stop
このルールに合致する場合、他のルールを適用しないこととしてstopを記述しています。
stopがないと次のルールも評価対象となります)



③ログ格納先を接続元セグメントで決める

ほとんど ②ログ格納先を接続元IPアドレスで決める と同じですが、
if文の条件式にてstartswithを利用しているのが違いです。

Control(segment)
#### TEMPLATE #####
template(name="LogGroup001" type="string"
     string="/var/log/remote/%fromhost-ip%/%$year%-%$month%-%$day%.log"
    )

#### RULES ####
if ( $fromhost-ip startswith "192.168.142." ) then {
   *.*  action(type="omfile" DynaFile="LogGroup001")
   stop
}

startswithは文字列の始まりについての一致を判定します。
これによってIPアドレス範囲を指定することにしています。

出典

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?