TIPS & TRICKS

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

はじめに

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

Splunk
Posted by

Splunk

世界の様々な企業が、デジタルシステムの安全性と信頼性を維持するためにSplunkを信頼しご利用いただいています。Splunkのソフトウェアソリューションとサービスは、ビジネスの継続に関わる重大な問題を未然に防ぎ、回復力を高め、イノベーションを加速します。Splunkの機能Splunkが選ばれる理由をご覧ください。