23.5. ロギングサーバーでの rsyslog の設定
rsyslog
サービスは、ロギングサーバーを実行する機能と、個別のシステムがログファイルをロギングサーバーに送信するように設定する機能の両方を提供します。クライアントの rsyslog
設定の詳細は、例23.12「サーバーへのログメッセージの確実な転送」 を参照してください。
rsyslog
サービスは、ロギングサーバーとして使用するシステムと、そのシステムにログを送信するように設定する全システムにインストールする必要があります。Rsyslog は Red Hat Enterprise Linux 7 にデフォルトでインストールされます。必要な場合は、確実にインストールするために root
で以下のコマンドを入力します。
~]# yum install rsyslog
/etc/services
ファイルに設定されているように、syslog トラフィックのデフォルトのプロトコルとポートは UDP
および 514
です。ただし、rsyslog
はデフォルトで、ポート 514
で TCP
を使用するように設定されています。設定ファイル /etc/rsyslog.conf
において、TCP
は @@
で示されます。
例では他のポートが使用されることがありますが、SELinux には、デフォルトで以下のポートでの送受信のみを許可するように設定されています。
~]# semanage port -l | grep syslog syslog_tls_port_t tcp 6514, 10514 syslog_tls_port_t udp 6514, 10514 syslogd_port_t tcp 601, 20514 syslogd_port_t udp 514, 601, 20514
semanage
ユーティリティーは、policycoreutils-python パッケージの一部として提供されます。必要な場合は、以下のようにパッケージをインストールします。
~]# yum install policycoreutils-python
また、デフォルトで rsyslog
の SELinux タイプである rsyslogd_t
は、SELinux タイプが rsh_port_t
のリモートシェル (rsh
) ポートでの送受信を許可するよう設定されます (デフォルトでポート 514
の TCP
に設定されます)。したがって、semanage
を使用してポート 514
で TCP
を明示的に許可する必要はありません。たとえば、SELinux がポート 514
でその TCP を許可するよう設定されているかを確認するには、以下のコマンドを入力します。
~]# semanage port -l | grep 514
output omitted
rsh_port_t tcp 514
syslogd_port_t tcp 6514, 601
syslogd_port_t udp 514, 6514, 601
SELinux の詳細は、Red Hat Enterprise Linux 7 SELinux ユーザーおよび管理者のガイドを参照してください。
ロギングサーバーとして使用するシステムで以下の手順を実行します。これらの手順はすべて root
ユーザーで実行する必要があります。
ポートで rsyslog トラフィックを許可する SELinux の設定
rsyslog
トラフィックに新しいポートを使用する必要がある場合は、ロギングサーバーとクライアントでこの手順を実行します。たとえば、ポート 10514
で TCP
トラフィックを送受信するには、以下のコマンドシーケンスに進みます。
以下のパラメーターを指定して
semanage port
コマンドを実行します。~]# semanage port -a -t syslogd_port_t -p tcp 10514
以下のコマンドを入力して SELinux ポートを確認します。
~]# semanage port -l | grep syslog
新しいポートがすでに
/etc/rsyslog.conf
に設定されている場合は、rsyslog
を再起動して変更を反映します。~]# service rsyslog restart
rsyslog
が現在リッスンしているポートを確認します。~]# netstat -tnlp | grep rsyslog tcp 0 0 0.0.0.0:10514 0.0.0.0:* LISTEN 2528/rsyslogd tcp 0 0 :::10514 :::* LISTEN 2528/rsyslogd
semanage port
コマンドの詳細は、man ページの semanage-port(8)
を参照してください。
firewalld の設定
firewalld
を設定して、受信 rsyslog
トラフィックを許可します。たとえば、ポート 10514
で TCP
トラフィックを許可するには、以下の手順を実行します。
~]# firewall-cmd --zone=zone --add-port=10514/tcp success
ここで、zone は使用するインターフェイスのゾーンです。ここで変更する内容は、システムの再起動後は維持されないことに注意してください。ファイアウォールを永続的に変更するには、コマンドに --permanent
オプションを繰り返し追加してください。firewalld
でのポートのオープンおよびクローズの詳細については、Red Hat Enterprise Linux 7 Security Guide を参照してください。
上記の設定を確認するには、以下のコマンドを使用します。
~]# firewall-cmd --list-all public (default, active) interfaces: eth0 sources: services: dhcpv6-client ssh ports: 10514/tcp masquerade: no forward-ports: icmp-blocks: rich rules:
rsyslog で、リモートログメッセージを受信してソートするように設定
テキストエディターで
/etc/rsyslog.conf
ファイルを開き、以下の手順を行います。モジュールセクションと
Provides UDP syslog reception
セクションの間に以下の行を追加します。# Define templates before the rules that use them # Per-Host Templates for Remote Systems # $template TmplAuthpriv, "/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log" $template TmplMsg, "/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
デフォルトの
Provides TCP syslog reception
セクションを、以下の内容に置き換えます。# Provides TCP syslog reception $ModLoad imtcp # Adding this ruleset to process remote messages $RuleSet remote1 authpriv.* ?TmplAuthpriv *.info;mail.none;authpriv.none;cron.none ?TmplMsg $RuleSet RSYSLOG_DefaultRuleset #End the rule set by switching back to the default rule set $InputTCPServerBindRuleset remote1 #Define a new input and bind it to the "remote1" rule set $InputTCPServerRun 10514
/etc/rsyslog.conf
ファイルへの変更を保存します。
rsyslog
サービスは、ログサーバーと、そのサーバーにログ記録を試みるシステムの両方で実行する必要があります。systemctl
コマンドでrsyslog
サービスを起動します。~]#
systemctl start rsyslog
rsyslog
サービスを今後自動的に起動するために、root で以下のコマンドを入力します。~]#
systemctl enable rsyslog
環境内の他のシステムからログファイルを受け取り、保存するように、ログサーバーが設定されています。
23.5.1. ロギングサーバーでの新規テンプレート構文の使用
rsyslog 7 にはテンプレートスタイルが多数あります。文字列テンプレートは従来の形式に最もよく似ています。文字列形式を使用して上記の例からテンプレートを生成する場合は、以下のようになります。
template(name="TmplAuthpriv" type="string" string="/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log" ) template(name="TmplMsg" type="string" string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log" )
また、これらのテンプレートは、以下のようにリスト形式で記述することもできます。
template(name="TmplAuthpriv" type="list") { constant(value="/var/log/remote/auth/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") } template(name="TmplMsg" type="list") { constant(value="/var/log/remote/msg/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }
このテンプレートテキスト形式は、rsyslog の初心者にとって理解しやすいかもしれません。したがって、要件が変更したら簡単に変更できます。
新規構文への変更を完了するには、モジュールロードコマンドを再作成し、ルールセットを追加して、プロトコル、ポート、およびルールセットにルールセットをバインドする必要があります。
module(load="imtcp") ruleset(name="remote1"){ authpriv.* action(type="omfile" DynaFile="TmplAuthpriv") *.info;mail.none;authpriv.none;cron.none action(type="omfile" DynaFile="TmplMsg") } input(type="imtcp" port="10514" ruleset="remote1")