Splunk で Syslog-ng をインストール・設定

Tips & Tricks Splunk

はじめに

Splunk インスタンスでは、任意のポートで受信 syslog メッセージをリスニングできます。設定は簡単ですが、これは Splunk で syslog メッセージを取得する方法として最適とは言えません。splunkd プロセスが停止すると、停止中に送信されたすべての syslog メッセージが失われるためです。また、すべての syslog トラフィックを 1 つの Splunk インスタンスに集めるよりも、syslog データをインデクサー間で分散させたいことの方が多いでしょう。

では、Splunk で syslog メッセージを取得するには、どのような方法が最適でしょうか。それは、専用 syslog サーバーを設置することです。

この記事では、Splunk 用の syslog サーバーとして、syslog-ng をインストール、設定、使用する方法について説明します。

Syslog-ng:

syslog-ng は、Unix と Unix 系システム向けの syslog プロトコルのオープンソース実装です。オリジナルの syslogd モデルをベースとして、コンテンツベースのフィルタリング、豊富なフィルタリング機能、柔軟な設定オプションや、TCP での syslog 転送などの重要機能が追加されています。現時点で、syslog-ng は Balabit IT Security 社によって開発が進められ、共通のコードベースに基づく 2 つのエディションが提供されています。その 1 つが、LGPL ライセンスを採用した syslog-ng オープン ソース エディション (OSE)、もう 1 つが、プロプライエタリライセンスの下でプラグイン (モジュール) を追加したプレミアムエディション (PE) です。

インストール:

syslog-ng は、一部のバージョンの Linux ではあらかじめパッケージ化されています。次の wget コマンドを使ってダウンロードし、インストールすることもできます。

# wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# yum install –enablerepo=epel syslog-ng

yum によって、必要な依存パッケージがダウンロードされ、依存関係が解決されて、syslog-ng 3.2.5-3.el6 がインストールされます。

syslog-ng サービスが起動すると、次のような、プラグインモジュールが見つからないという警告メッセージが表示されることがあります。

Plugin module not found in ‘module-path’; module-path=’/lib64/syslog-ng’, module=’afsql’
Starting syslog-ng: Plugin module not found in ‘module-path’; module-path=’/lib64/syslog-ng’, module=’afsql’

Starting syslog-ng: Plugin module not found in ‘module-path’; module-path=’/lib64/syslog-ng’, module=’afsql’

syslog-ng-libdbi モジュールがなくても syslog-ng は機能しますが、syslog-ng を起動するたびにこのメッセージが表示されるため、インストールすることをお勧めします。

# rpm -i libdbi-0.8.3-4.el6.x86_64.rpm
# yum install syslog-ng-libdbi

rsyslog を無効にする

rsyslog を停止して、ブート時に rsyslog サービスが起動しないように設定します。

# service rsyslog stop
# chkconfig rsyslog off

syslog-ng を有効にする

syslog-ng をブート時に起動し、syslog-ng サービスが起動するように設定します。

# service syslog-ng start
# chkconfig syslog-ng on

iptables を編集して UDP トラフィックを許可する

iptables で、開いているポートを確認します (-L オプションでサービス、n オプションでポート番号ごとにリスト表示)。

# iptables –L –n

iptables にポート 514 (root での syslog のデフォルトポート) を追加する必要があります。
UDP ポート 514 を /etc/sysconfig/iptables に追加するには、次のコマンドを実行します。

# iptables -A INPUT -p udp -m udp –dport 514 -j ACCEPT

syslog-ng.conf を編集する
編集前に、既存の syslog-ng.conf ファイルを syslog-ng.conf.sav にコピーします。次の syslog-ng.conf ファイルの例は、Splunk 6 で使用したものです。/home/syslog/logs の下に、データ ソース タイプごとにディレクトリを作成します。そのために、create_dirs 属性を yes に設定し、destination オプションで指定しています。

@version:3.2

# syslog-ng configuration file.
#
#
options {
chain_hostnames(no);
create_dirs (yes);
dir_perm(0755);
dns_cache(yes);
keep_hostname(yes);
log_fifo_size(2048);
log_msg_size(8192);
perm(0644);
time_reopen (10);
use_dns(yes);
use_fqdn(yes);
};

source s_network {
udp(port(514));
};

#Destinations
destination d_cisco_asa { file(“/home/syslog/logs/cisco/asa/$HOST/$YEAR-$MONTH-$DAY-cisco-asa.log” create_dirs(yes)); };
destination d_palo_alto { file(“/home/syslog/logs/paloalto/$HOST/$YEAR-$MONTH-$DAY-palo.log” create_dirs(yes)); };
destination d_all { file(“/home/syslog/logs/catch_all/$HOST/$YEAR-$MONTH-$DAY-catch_all.log” create_dirs(yes)); };

# Filters
filter f_cisco_asa { match(“%ASA” value(“PROGRAM”)) or match(“%ASA” value(“MESSAGE”)); };
filter f_palo_alto { match(“009401000570” value(“PROGRAM”)) or match(“009401000570” value(“MESSAGE”)); };
filter f_all { not (
filter(f_cisco_asa) or
filter(f_palo_alto)
);
};
# Log
log { source(s_network); filter(f_cisco_asa); destination(d_cisco_asa); };
log { source(s_network); filter(f_palo_alto); destination(d_palo_alto); };
log { source(s_network); filter(f_all); destination(d_all); };

syslog-ng を再起動する
syslog-ng を再起動するには、/etc/init.d 内のスクリプトを実行するか、次のように service syslog-ng stop | start | restart コマンドを実行します。

# service syslog-ng stop
Stopping syslog-ng: [ OK ]

# service syslog-ng start
Starting syslog-ng: [ OK ]

# /etc/init.d/syslog-ng restart
Stopping syslog-ng: [ OK ]
Starting syslog-ng: [ OK ]

SELinux を設定する
destination で指定したディレクトリに syslog-ng からファイルを書き込めない場合は、SELinux (Security-Enhanced Linux) モジュールが syslog デーモンの書き込みをブロックしている可能性があります。その場合は、/var/log/audit/audit.log に、ブロックのログが記録されているはずです。getenforce コマンドを実行して、SELinux のステータスとモードを確認します。

# /usr/sbin/getenforce
Enforcing

注:SELinux を無効にするか permissive モードに設定する場合は、システム管理者に確認してください。

システム管理者が、代わりに SELinux ポリシーに例外を追加する場合もあります。

SELinux 設定ファイルを編集して (vi /etc/selinux/config)、モードを permissive に変更します。

その後、sestatus コマンドを実行して、設定ファイルが正しく編集されたことを確認します (次に示すように、モードが「permissive」になっている必要があります)。

# sestatus

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: enforcing

Mode from config file: permissive

Policy version: 24

Policy from config file: targeted

次の setenforce コマンドを実行して、現在のモードを enforcing から permissive に変更します。実行後、syslog-ng から /home/syslog/logs に書き込めるようになるはずです。

# setenforce 0
# sestatus

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: permissive

Mode from config file: permissive

syslog-ng サーバーから古いログファイルを削除する

サーバーの領域が syslog-ng のログファイルでいっぱいにならないようにするために、作成後 x 日経過した古いログファイルを毎日午前 5 時に削除する cron ジョブを作成します。次の例では、7 日経過したファイルを毎朝 5 時に削除するように指定しています。

# crontab –e
0 5 * * * /bin/find /home/syslog/logs/ -type f -name \*.log -mtime +7 -exec rm {} \;

crontab –l コマンドを実行すると、他の既存の cron ジョブを確認したり、cron ジョブのスケジュールが正しく設定されていることを確認したりできます。
syslog-ng サーバーで UF の収集機能を使用する

syslog-ng サーバーがインストールされているコンピューターに、ユニバーサルフォワーダー (UF) をインストールします。

syslog-ng サーバーに UF をインストールすると、Cisco ASA や Palo Alto 社製ファイアウォールデバイスによって書き込まれたログファイルからイベントを収集できます。次の monitor スタンザでは、指定したファイルシステム以下をすべて監視するように指定しています。

この例では、host_segment 属性を使用し、完全パスで左から何番目のフィールドにホスト名があるかを指定して、ホスト名を示しています。

# Cisco ASA
[monitor:///home/syslog/logs/cisco/asa/*/*.log]
sourcetype = cisco:asa
index = cisco
disabled = false
host_segment = 6

Splunk によってファイルシステムパスの 6 番目のフィールドが確認され、イベントのホスト名がそのフィールドの値に設定されます。

/home/syslog/logs/cisco/asa/<hostname>/2014-09-10-cisco-asa.log

----------------------------------------------------
Thanks!
Kanad Sharma

関連記事

サーチのスキップを回避するためのヒント
Tips
7 分程度

サーチのスキップを回避するためのヒント

サーチのスキップは多くのSplunk管理者にとって悩みの種です。このブログでは、Splunkサーチの同時実行モデルについておさらいしてから、サーチがスキップされるさまざまな原因を特定するための体系的な方法とスキップの回避策をご紹介します。
Heavy Forwarderのインストールと設定 〜Ingest actionを用いたデータ前処理方法を添えて〜
Tips
7 分程度

Heavy Forwarderのインストールと設定 〜Ingest actionを用いたデータ前処理方法を添えて〜

データ収集アドオン(DB connectなど)を使用する場合、データの前処理(マスキング、フィルタリング、ルーティング)を行う場合など、Heavy Forwarderが必要となります。このブログでは、Heavy Forwarderのインストール方法、および転送設定について紹介します。加えて、Ingest action機能を使った前処理設定の簡便な方法についてもご紹介します。
Splunkで演算子を使って効率アップ | evalコマンドおよびwhereコマンドでINを使う
Tips
4 分程度

Splunkで演算子を使って効率アップ | evalコマンドおよびwhereコマンドでINを使う

Splunk製品でIN演算子を使用すれば、フィールドに対して値のリストを指定できます。同じフィールド内の異なる値をサーチするのが簡単になりました。SplunkサーチコマンドのevalコマンドおよびwhereコマンドでINを使うTipsをお読みください。