23.5. ロギングサーバーでの rsyslog の設定

rsyslog サービスは、ロギングサーバーを実行する機能と、個別のシステムがログファイルをロギングサーバーに送信するように設定する機能の両方を提供します。クライアントの rsyslog 設定の詳細は 例23.12「サーバーへのログメッセージの確実な転送」 を参照してください。

rsyslog サービスは、ロギングサーバーとして使用するシステムと、そのシステムにログを送信するように設定する全システムにインストールする必要があります。Rsyslog は Red Hat Enterprise Linux 7 にデフォルトでインストールされます。必要な場合は、確実にインストールするために root で以下のコマンドを入力します。

~]# yum install rsyslog

/etc/services ファイルに設定されているように、syslog トラフィックのデフォルトのプロトコルとポートは UDP および 514 です。ただし、rsyslog はデフォルトで、ポート 514TCP を使用するように設定されています。設定ファイル /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) ポートでの送受信を許可するよう設定されます (デフォルトでポート 514TCP に設定されます)。したがって、semanage を使用してポート 514TCP を明示的に許可する必要はありません。たとえば、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 トラフィックに新しいポートを使用する必要がある場合は、ロギングサーバーとクライアントでこの手順を実行します。たとえば、ポート 10514TCP トラフィックを送受信するには、以下のコマンドシーケンスに進みます。

  1. 以下のパラメーターを指定して semanage port コマンドを実行します。

    ~]# semanage port -a -t syslogd_port_t -p tcp 10514
  2. 以下のコマンドを入力して SELinux ポートを確認します。

    ~]# semanage port -l | grep syslog
  3. 新しいポートがすでに /etc/rsyslog.conf に設定されている場合は、rsyslog を再起動して変更を反映します。

    ~]# service rsyslog restart
  4. 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 トラフィックを許可します。たとえば、ポート 10514TCP トラフィックを許可するには、以下の手順を実行します。

~]# firewall-cmd --zone=zone --add-port=10514/tcp
success

ここで、zone は使用するインターフェースのゾーンです。ここで変更する内容は、システムの再起動後は維持されないことに注意してください。ファイアウォールを永続的に変更するには、コマンドに --permanent オプションを繰り返し追加してください。firewalld でのポートのオープンおよびクローズの詳細については、Red Hat Enterprise Linux 7 Security Guide を参照してください。

  1. 上記の設定を確認するには、以下のコマンドを使用します。

    ~]# 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 で、リモートログメッセージを受信してソートするように設定

  1. テキストエディターで /etc/rsyslog.conf ファイルを開き、以下の手順を行います。

    1. モジュールセクションと 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"
    2. デフォルトの 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 ファイルへの変更を保存します。

  2. rsyslog サービスは、ログサーバーと、そのサーバーにログ記録を試みるシステムの両方で実行する必要があります。

    1. systemctl コマンドで rsyslog サービスを起動します。

      ~]# systemctl start rsyslog
    2. 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")

このページには機械翻訳が使用されている場合があります (詳細はこちら)。