以下の記事ではRedHatドキュメントに沿って記載しましたが、
チューニング余地がありそうなので書いていきたいと思います。
■環境
CentOS Linux release 8.3.2011
rsyslog-8.1911.0-6.el8.x86_64
①接続元IPアドレス範囲を絞る
以下のをMODULESあたりに配置することで接続元IPアドレス範囲を絞ることが出来ます。
単一IPアドレスでもセグメントでも可。カンマで複数指定も可。
$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
に発行されます。
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文で制御を行います。
#### 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
を利用しているのが違いです。
#### 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アドレス範囲を指定することにしています。
出典