kubota-dit
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    [HACK#72 Syslogサーバによるログの集中管理](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%83%E7%AB%A0-%E3%83%AD%E3%82%B0%E3%81%AE%E5%8F%96%E5%BE%97#hack72-syslog%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AD%E3%82%B0%E3%81%AE%E9%9B%86%E4%B8%AD%E7%AE%A1%E7%90%86) [HACK#73 Syslogの運用管理](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%83%E7%AB%A0-%E3%83%AD%E3%82%B0%E3%81%AE%E5%8F%96%E5%BE%97#hack73-syslog%E3%81%AE%E9%81%8B%E7%94%A8%E7%AE%A1%E7%90%86) [HACK#75 ログの自動解析](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%83%E7%AB%A0-%E3%83%AD%E3%82%B0%E3%81%AE%E5%8F%96%E5%BE%97#hack75-%E3%83%AD%E3%82%B0%E3%81%AE%E8%87%AA%E5%8B%95%E8%A7%A3%E6%9E%90) [HACK#76 ログの自動監視](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%83%E7%AB%A0-%E3%83%AD%E3%82%B0%E3%81%AE%E5%8F%96%E5%BE%97#hack76-%E3%83%AD%E3%82%B0%E3%81%AE%E8%87%AA%E5%8B%95%E7%9B%A3%E8%A6%96) [HACK#77 リモートコンピュータからのログの集約](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%83%E7%AB%A0-%E3%83%AD%E3%82%B0%E3%81%AE%E5%8F%96%E5%BE%97#hack77-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%8B%E3%82%89%E3%81%AE%E3%83%AD%E3%82%B0%E3%81%AE%E9%9B%86%E7%B4%84) [HACK#78 プロセス監視によるユーザーの行動記録](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%83%E7%AB%A0-%E3%83%AD%E3%82%B0%E3%81%AE%E5%8F%96%E5%BE%97#hack78-%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%9B%A3%E8%A6%96%E3%81%AB%E3%82%88%E3%82%8B%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E8%A1%8C%E5%8B%95%E8%A8%98%E9%8C%B2) [HACK#79 コンピュータの集中監視](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%83%E7%AB%A0-%E3%83%AD%E3%82%B0%E3%81%AE%E5%8F%96%E5%BE%97#hack79-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E9%9B%86%E4%B8%AD%E7%9B%A3%E8%A6%96) # HACK#72 Syslogサーバによるログの集中管理 ## 概要 - ログを専用のサーバに集約して、ネットワーク上に散在するコンピュータの監視を効率化する - ネットワーク上に散在するコンピュータそれぞれがログを管理していると、コンピュータに侵入された場合にログが改ざんされる可能性がある ## 背景 ### Linuxのシステムログ - 自動的に記録される必要最低限のログをシステムログという - UNIX系OSのシステムログは「syslog」が出力する - 実際にログを出力しているプログラム(デーモン)は「syslogd」である ### システムログの集中管理の必要性 [HACK #5](https://github.com/careerbeat/dit-ehime/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3HACKS-Wiki-%E7%AC%AC%E4%B8%80%E7%AB%A0-Unix%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3#hack5-%E3%83%AD%E3%82%B0%E3%81%AE%E6%94%B9%E3%81%96%E3%82%93%E9%98%B2%E6%AD%A2)で述べた通り、コンピュータのログは改ざんされる可能性がある HACK #5ではログファイル自体の権限を変更して変更や削除ができないようにした ここでは、コンピュータのログを別の場所にあるログ専用のサーバに格納して、たとえコンピュータ上のログが改ざんされても改ざん前のログが残るようにする コンピュータのログをサーバに格納するには、ネットワークでログを転送しなければならない それを実現するために「syslogd」がリモートコンピュータからログを受信できるようにする ## 前提知識 CentOS6ではsyslogdの変わりに「rsyslog」が標準のsyslogデーモンとして採用されている rsyslogの「r」はreliableの頭文字で信頼性を意味する syslogdはログを転送するためにudpポートを使用するが、rsyslogdはtcpポートを使用されており信頼性が確保されている そこで、CentOS6の標準で信頼性のあるログ転送が行えるrsyslogdを用いたログの集中管理方法を解説する ### ログサーバを安全に運用するための注意点 - ログサーバのユーザー名とパスワードをほかのサーバと同じにしない(サーバーへの侵入を困難にする) - 複数のサーバからログの転送を行う場合、ログサーバの容量を十分に確保する ## 確認方法 ### ログ受信側ホスト(ログサーバ)の設定 1. 「/etc/sysconfig/syslog」に下記を追記しましょう <pre> # vi /etc/sysconfig/syslog SYSLOGD_OPTIONS="-m 0 -r" </pre> 2. rsyslog(サーバ側)の設定を行いましょう <pre> # vi /etc/rsyslog.conf #$ModLoad imtcp #$InputTCPServerRun 514 ↓ $ModLoad imtcp $InputTCPServerRun 514 </pre> 3. ポートを開放して、rsyslogを再起動しましょう iptables で UDP, TCP の514番ポートを開けておきます <pre> # vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 514 -j ACCEPT # /etc/init.d/iptables restart </pre> 上記の編集が完了したらrsyslog 再起動します <pre> # /etc/rc.d/init.d/rsyslog restart システムロガーを停止中: [ OK ] システムロガーを起動中: [ OK ] </pre> ### ログ送信元ホストの設定 1. rsyslog(クライアント側)の設定を行いましょう  <pre>  # vi /etc/rsyslog.conf  # authpriv.* 認証に関するログを centos に転送する場合  authpriv.* @{受信側のIPアドレス}:514    # 72行目からのコメントを解除して有効にする  $WorkDirectory /var/lib/rsyslog # where to place spool files  $ActionQueueFileName fwdRule1 # unique name prefix for spool files  $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)  $ActionQueueSaveOnShutdown on # save messages to disk on shutdown  $ActionQueueType LinkedList # run asynchronously  $ActionResumeRetryCount -1 # infinite retries if host is down  </pre>  上記の編集が完了したらrsyslog 再起動します  <pre>  # /etc/rc.d/init.d/rsyslog restart  システムロガーを停止中: [ OK ]  システムロガーを起動中: [ OK ]  </pre> 以上で設定は完了です 実際にログが送信されているかを以下のように確認しましょう - 受信側 <pre> # tail -f /var/log/secure </pre> - 送信側 (今回は認証関係のログを送信しているので、sshで確認する) <pre> # ssh localhost </pre> 受信側にログが出力されない場合はIPアドレスやiptablesの設定が間違っている可能性があります その場合はiptablesを初期化したり、そもそもログが送信されているかなどを確認して、設定を見直しましょう ログサーバへ転送されたログは、ログサーバのsyslog.confの内容に従って処理されるので、受信側の設定を見直しましょう # HACK#73 Syslogの運用管理 ## 概要 - rsyslogのフィルタを利用してログの分類を行う - デフォルトではフィルタが設定されていないため、様々なサービスが出力するが分類されていない ## 背景 syslogやrsyslogのデフォルトの設定では、Sendmailやsudo、BINDなど様々なサービスのログが/var/log/messagesに混在して記録される そのため、記録されたログの中から該当サービスのログを見つけるのは大変な作業である そこで、syslogやrsyslogの設定を変更して、ある基準に従ってログが振り分けられるようにしていく このHACKでは、CentOS6に標準で採用されているrsyslogにおける設定方法を解説していく ## 前提知識 まず、rsyslogの設定は/etc/rsyslog.confで行う ### rsyslog.confのフォーマット - スペースまたはタブで区切られた2つのフィールド「selector」と「action」で構成されている - selector:取得するログの指定 - action:取得したログの出力先の指定 <pre>selector action</pre> ### selector - 「facility」と「priority」を「.」(ピリオド)で接続したもの - 特定のactionに対して複数のselectorを指定したい場合は、「;」(セミコロン)で接続する <pre> facility.priority{;facility.priority} </pre> ### facility - ログの分類に当たるものである - facilityを複数指定する場合は「,」(カンマ)で接続する #### facilityで指定できるキーワード | facility | 対象のログ | |----------|----------| | auth(security) | 認証サービスのメッセージ(現在はauthprivが推奨されている) | | authpriv | 認証サービス(カテゴリはauthと同じ。authとは出力結果が異なる) | | cron | cronのメッセージ | | daemon | デーモンのメッセージ | | kern | カーネルのメッセージ | | lpr | プリンタサービスのメッセージ | | mail | メールサービスのメッセージ | | news | ニュースサービスのメッセージ | | syslog | syslogのメッセージ | | user | ユーザープロセスのメッセージ | | uucp | uucp転送を行うプログラムのメッセージ | | local0~7 | アプリケーションに依存する | ※local0からlocal7は、特定のプログラムが所属するfacilityを既存のものと分けたいときに利用する ### priority - プログラムが出力するメッセージのうち、ログのレベルの重要度を設定する - 通常の設定では、指定したpriority以上のログが出力される(重要度の低いpriorityほどメッセージが多くなる) - 指定したpriority以下のログを出力したい場合は、priorityの前に「!」をつける - 指定したpriorityのみのログを出力したい場合は、priorityの前に「=」をつける - priorityを「*」にすると、全てのメッセージを出力できる #### priorityで指定できるキーワード | priority | 内容 | |-------|-------| | priority | 内容 | | debug | デバッグ情報 | | info | 情報 | | notice | 通知 | | warn | 警告 | | err | 一般的なエラー | | crit | 致命的なエラー | | alert | 緊急に対処すべきエラー | | emerg | システムが落ちるような状態 | ※下になるほど重要度が高くなる ### action - selectorで指定したログをどこに、あるいはどのように出力するかを設定する - ファイルパスを記述すると、どのファイルに出力するかを指定できる - 「|」(パイプ)を利用することで、ログを他のプログラムに渡すことができる - 「@ホスト名」と記述することで、ログを他のホストに渡すことができる - ユーザー名を記述することで、ログを指定したユーザーのコンソールに表示することができる 以上を踏まえて、実際のrsyslog.confの中身を確認してみる ## 確認方法 <pre> *.info;mail.none;authpriv.none;cron.none /var/log/messages 1. authpriv.* /var/log/secure  2. mail.* /var/log/maillog  3. cron.* /var/log/cron   4. *.emerg *          5. uucp,news.crit /var/log/spooler   6. local7.* /var/log/boot.log  7. </pre> 1. authprivとcronを除いたすべてのfacilityでinfo以上のメッセージを/var/log/messagesに出力 1. authprivのfacilityはすべてのメッセージを/var/log/secureに出力 1. mailのfacilityはすべてのメッセージを/var/log/maillogに出力 1. cronのfacilityはすべてのメッセージを/var/log/cronに出力 1. すべてのfacilityでemergのメッセージをオンラインユーザーのコンソールへ出力 1. uucpとnewsのfacilityでcrit以上のメッセージを/var/log/spoolerへ出力 1. local7のfacilityのすべてのメッセージを/var/log/boot.logへ出力 # HACK#75 ログの自動解析 ## 概要 - 「Logwatch」を用いて大量に記録されたログの中から有用な情報だけを取り出す - ネットワーク上にある全てのシステムとサービスのログを収集すると、記録される量が膨大になり、必要情報に辿り着くまでに手間がかかる ## 背景 HACK#73のようにサービスごとにログを分類したとしても、監視対象が多ければ多いほど記録されるログの量も多くなる その大量に記録されたログの中から、人手で必要な情報を取り出していると時間が余分にかかり、精度も低下する また、常時監視しているログでは重要なログを見落とす可能性もある そこで、「Logwatch」を用いてログを自動で解析して必要な情報を取り出す ## 前提知識 ### Logwatchとは - ログを解析してレポートを作成するツール - cronを利用することにより、定期的にログ解析を実行し、その解析結果をメールで送信することができる - Logwatchによるログ解析によって、「障害の兆候」や「原因」、「稼働状況」などを知ることができる 下記でLogwatchのインストール、利用方法を解説する ### 確認方法 まずはLogwatchのインストールを行います。 本にはソースをダウンロードしてコンパイルをしてますが、現在はyumコマンドでインストールすることができます。 ``` # yum install logwatch ``` インストールが完了すると`logwatch`コマンドが使えるようになります。 <pre> # logwatch </pre> logwatchコマンドのみを打つと画面にはなにも出力されず、メールのみが送信されます。デフォルトの設定ではrootに対して送信されるようになっています。 <pre> # mail (前略) >N 14 logwatch@localhost.l Tue Mar 21 14:28 42/1508 "Logwatch for localhost.localdomain (Linux)" & 14 Message 14: From root@localhost.localdomain Tue Mar 21 14:28:38 2017 Return-Path: <root@localhost.localdomain> X-Original-To: root Delivered-To: root@localhost.localdomain To: root@localhost.localdomain From: logwatch@localhost.localdomain Subject: Logwatch for localhost.localdomain (Linux) Content-Type: text/plain; charset="iso-8859-1" Date: Tue, 21 Mar 2017 14:28:38 +0900 (JST) Status: R ################### Logwatch 7.3.6 (05/19/07) #################### Processing Initiated: Tue Mar 21 14:28:38 2017 Date Range Processed: yesterday ( 2017-Mar-20 ) Period is day. Detail Level of Output: 0 Type of Output: unformatted Logfiles for Host: localhost.localdomain ################################################################## --------------------- Disk Space Begin ------------------------ (以下略) </pre> このように、メールでログのレポートが届けられます。 標準出力として画面に出力したい場合はオプションに「--print」と付けることでできます。 その他、logwatchのオプションには以下のようなものがあります。 |オプション|説明| |-----|-----| |--print|結果を画面出力する| |--save|指定したファイルに出力する| |--mailto|指定したメールアドレスにメールが届く| |--range|対象期間を設定する| |--detail|ログの詳細レベルを変更する| |--service|指定したサービスのログのみを表示する| |--logfile|指定したログファイルのみをチェックする| また、これらのデフォルトの設定は「/usr/share/logwatch/default.conf/logwatch.conf」に記述されています。 設定内容を変更したい場合は、デフォルトのファイルを変更するのではなく、「/etc/logwatch/conf/logwatch.conf」に変更したい内容を記述することで設定できます。 ただ、一つ一つ設定項目を記述していくのが面倒な場合はデフォルトの設定を全てコピーし、その上で変更したい箇所を修正しても良いです。 #### 主な設定内容 |オプション|設定例|説明| |-----|-----|-----| |LogDir|/var/log|ログの格納先| |MailTo|hoge@hoge.jp|メールの送信先| |Detail|Med|ログの詳細レベル。0~10の整数、または「Low」「Med」「High」で指定| |Archives|Yes|アーカイブも参照するか| |HostLimit|Yes|転送されてきたログも対象に含めるか| |Range|yesterday|いつのログファイルをチェックするか。「All」「Today」「Yesterday」から選んで設定| \(詳しくは[こちら](http://www.server-memo.net/tips/server-operation/logwatch.html)を参照\) また、本に書かれている通り、`cron`で定期的に1日1回メールが送信されるようにすると日毎にログを管理できるので良いでしょう。 なおこの設定は、yumでlogwatchをインストールすると、自動的にcronに登録されて毎日logwatchが実行されるようになるので、確認しておきましょう。(設定ファイルは「/etc/cron.daily/0logwatch」) これらの設定を適切に行って、効果的にログのレポートが見れるようにし、重要なログを見逃さないようにしましょう。 # HACK#76 ログの自動監視 ## 概要 - 「Swatch」を用いてログのリアルタイム監視を実現し、イベント発生のアラートが出力されるようにする - rsyslogなどでは、ログを解析することはできるがリアルタイムで監視してアラートを出す機能がない ## 背景 サーバを無防備な状態でインターネットに接続すると、数十分もすればハッキングされてしまい、ポートスキャンや脆弱性をついた攻撃、DoS攻撃などの危険性にさらされる それらの脅威からサーバを守るためには、ログをリアルタイムで監視して迅速に対処できるようにしておかなければならない しかし、大量のログの中からそれらを1つ1つ分析して危険性があるかどうかを判断するとなると、人力による対策には限界がある そこで、任意のログをリアルタイムにチェックしたり、メッセージのパターンを検知してメールを投げたりできる(アラートを出す)ツール「Swatch」でログの監視を行う ## 前提知識 ### Swatchとは - サーバのログをリアルタイムで監視する - 監視しているログと予め指定しておいたパターンがマッチングすると、ターミナルやメールなどでアラートを出すアクションを実行できる ### Swatchの設定 Swatchの設定は、任意のファイル名(swatchrc.secureなど)で設定ファイルを作成してそこに記述する 設定ファイルは下記のような書式で記述する 下記の記述によって、「パターンにマッチした文字に対して、特定のアクションをする」という設定ができる <pre> watchfor /パターン/ アクション1(行頭にTabを入れる) アクション2(行頭にTabを入れる) …… </pre> #### パターン Perlの正規表現で文字列を指定する 主に下表のようなパターンがよく用いられる | パターン | 説明 | | --- | --- | | /hoge/ | hogeにマッチする | | /hoge/i | hogeの大文字、小文字どちらでもマッチする | | /hoge|huga/ | hogeまたはhugaにマッチする | | /ho[gn]e/ | hogeまたはhoneにマッチする | | /hoge/,/huga/ | hogeまたはhugaにマッチする(2つのパターンに分ける) | | /h..e/ | hで始まり、間に任意の1文字が2つ入り、eで終わる場合にマッチする | | /ho.*e/ | hoで始まり、間に任意の1文字が0回以上の繰り返し、eで終わる場合にマッチする | #### アクション パターンに一致した場合に実行される | アクション | 説明 | | --- | --- | | echo [modes] | ターミナルにメッセージを表示<br>modesにより表示形式を変更可能 | | bell [N] | beep音をN回鳴らす<br>数字を指定しなければ1回 | | exec command | 指定したコマンドを実行<br>スペース区切りでコマンドに引数を渡すことができる<br>コマンド内で「\$0」を指定すると、表示されるログそのものを意味する<br>「\$N」は、N番目のフィールドの文字列を意味する | | mail [=address:address:…][,subject=your_text_here] | 指定されたアドレスにメールを送信<br>メールは複数指定できるほか、サブジェクトの指定が可能<br>アドレスを指定しなければswatchを起動したユーザーに送信 | | pipe command[,keep_open] | パイプでコマンドに結果を渡す<br>keep_openを指定すると異なるパイプが実行されるか、swatchが終了するまでパイプが実行されたままになる | | write [user:user:…] | swatchを実行しているサーバにログインしているユーザーに、writeコマンドを使用して結果を送信 | | throttle hours:minutes:seconds,[use=message\|regex] | (後述するthreshold推奨)一度検出されたパターンが再度検出された場合、検出を抑えることができる<br>標準では「use=messges」が指定されており、同じmessagesは検出されない<br>「use=regex」を指定すると、同じ正規表現の場合は検出されない | | continue | 通常は、マッチするパターンが検出されると指定されたアクションが実行されて終了するが、continueが指定されている場合はさらにマッチするパターンの検出が行われる | | quit | マッチするパターンを検出するとswatchが終了 | | threshold | track_by=”/hoge/”,type=limit,count=1,seconds=15といった具合に指定<br>track_byはマッチしする正規表現<br>typeはlimit,threshold,both<br><br>limitはcountの回数だけログを処理>limitはcountの回数だけログを処理<br>これは最初のマッチからsecondsの間だけだけ有効<br>secondsだけ時間が過ぎたら再びリセット<br><br>thresholdはcountの回数だけマッチしたら1回ログを処理<br>再びcountの数だけログがマッチすれば、もう一度ログを処理(例えばcount=3と指定すると、3回マッチして初めて一度だけ処理)<br><br>bothはcountの回数だけマッチしたらログを1回だけ処理<br>thretholdと違い、有効時間内はcountの数だけマッチしてもログは処理されない | #### echoのmodes | modes | 説明 | | --- | --- | | normal | 通常の表示 | | bold | 太字で表示 | | underscore | 下線で表示 | | blink | 点滅で表示 | | inverse | 反転して表示 | | [color] | black、red、green、yellow、blue、magenta、cyan、whiteの色で表示 | | [color_h] | black_、red_h、green_h、yellow_h、blue_h、magenta_h、cyan_h、white_hの色で反転 | | random | 上記のものをランダムに使用 | ## 確認方法:TODO # HACK#77 リモートコンピュータからのログの集約 ## 概要 - 複数のコンピュータのログを1箇所に集約して、ログ管理を効率化する - コンピュータを管理するためにはログが必要不可欠だが、複数台を管理する場合はログが散在していると管理しづらい ## 背景 複数のコンピュータは集中管理されるべきである なぜなら、管理下にあるコンピュータが攻撃を受けた場合、集中管理されていないとその事実に気付くのが遅れる可能性がある また、HACK#72で述べたようにログが改ざんされて、攻撃の事実を隠される可能性もある そこで、syslogのネットワークでログを転送する機能を活用して、複数のサーバからのログを集約する ただし、HACK#72でも述べた通り、syslogは通信にudpを使うため信頼性が確保されずにデータを失ってしまうかもしれない また、暗号化通信をサポートしていないため何者かに通信内容を読み取られるかもしれない 上記の理由からtcpを使用した信頼性のある通信と暗号化して情報が読み取られないようにすることをサポートしている必要がある テキストでは、tcpによる通信と暗号化通信をサポートしたsyslog-ngが紹介されているが、CentOS6には標準で同様の機能をサポートしたrsyslogが採用されているのでそれを用いる ## 前提知識 rsyslogによってリモートコンピュータからログを集約する上で下記の条件を満たしておく必要がある - ログを送信するネットワーク機器とログを受信するrsyslog搭載が搭載されたOS(CetnOS6など) - ログの送信側と受信側はネットワーク上で疎通が取れていること - 受信側は514(UDP)のポートが開放されていること ※UDPのポートを開放するのは、全てのリモートコンピュータがsyslog-ngやrsyslogを使用しているとは限らないため 下記で詳細な設定方法を解説する ## 確認方法:TODO 整理 http://hosii.net/?p=468 本HACKに関して内容を網羅できていないのは暗号化だけなので、暗号化部分についてのみ記載します。 ### rsyslogの通信をTLS(SSL)化する方法 #### 実行環境 - log送信先(サーバー) 192.168.1.185 (任意) - log送信元(クライアント)192.168.1.77 (任意) ### log送信先(サーバー)設定 1. 必要なパッケージをインストール ``` # yum -y install rsyslog-gnutls gnutls-utils ``` 2. [CA証明書の作成、サーバ証明書の作成](http://www.kurobuti.com/blog/?p=4581)(既に作成している場合はそれを使いまわしても可) 3. /etc/rsyslog.confの設定 ``` # vim /etc/rsyslog.conf ``` 以下のように設定を行う ``` # make gtls driver the default $DefaultNetstreamDriver gtls ← デフォルトの受信方式をGnuTLSにする # certificate files ← 秘密鍵・証明書を設定する $DefaultNetstreamDriverCAFile /etc/pki/tls/rsyslog/ca.pem ← 公開鍵へのパスを指定 $DefaultNetstreamDriverCertFile /etc/pki/tls/rsyslog/cert.pem ← 証明書ファイルへのパスを指定 $DefaultNetstreamDriverKeyFile /etc/pki/tls/rsyslog/key.pem ← 秘密鍵へのパスを指定 # Provides TCP syslog reception $ModLoad imtcp ← TCPによる通信を実現するモジュールを読み込む $InputTCPServerStreamDriverMode 1 ← TLSによる暗号化通信を実行する $InputTCPServerStreamDriverAuthMode anon ← anonは認証なし $InputTCPServerRun 514 ← TCPのポートを指定して待ち受けを行う $AllowedSender TCP, 127.0.0.1, 192.168.1.77 ← 転送を許可するクライアントを指定 ``` 4. rsyslogの再起動 5. ca.pemをlog送信元(クライアント)にコピー 例:scp /etc/pki/tls/rsyslog/ca.pem 192.168.1.77:(クライアントの鍵置場) 6. 作成した公開鍵をクライアントに送る (/etc/pki/tls/rsyslogはサーバー側で作成した鍵置場、以降クライアント側でも同じパスで行う) ### log送信元(クライアント)の設定 1. 必要なパッケージをインストール ``` # yum -y install rsyslog rsyslog-gnutls ``` 2. 証明書権限変更 ``` # chmod 700 /etc/pki/tls/rsyslog/ ``` 3. /etc/rsyslog.confの設定 ``` # vim /etc/rsyslog.conf # certificate files - just CA for a client $DefaultNetstreamDriverCAFile /etc/pki/tls/rsyslog/ca.pem ← 公開鍵を読み込む # set up the action $DefaultNetstreamDriver gtls ← デフォルトの受信方式をGnuTLSにする $ActionSendStreamDriverMode 1 ← TLSによる暗号化通信を実行する $ActionSendStreamDriverAuthMode anon ← anonは認証なし authpriv.* @192.168.1.185:514 ← /var/log/secureに送られるログをサーバーへ転送する ``` 4. rsyslogの再起動 以上で設定は完了です。実際に暗号化されているか確認します。 ### 確認 sshでのログインをクライアント側で失敗した際のログが暗号化されているか確認する #### 設定前 ``` # tcpdump -s0 -i eth1 -X port 514 10:02:24.329788 IP 192.168.1.77.35252 > 192.168.1.185.shell: Flags [P.], seq 85797040:85797136, ack 3977553391, win 229, options [nop,nop,TS val 2011838 ecr 3251508], length 96 0x0000: 4500 0094 43e7 4000 4006 7226 c0a8 014d E...C.@.@.r&...M 0x0010: c0a8 01b9 89b4 0202 051d 28b0 ed14 a5ef ..........(..... 0x0020: 8018 00e5 5f21 0000 0101 080a 001e b2be ...._!.......... 0x0030: 0031 9d34 3c38 363e 4d61 7220 3136 2031 .1.4<86>Mar.16.1 0x0040: 303a 3032 3a32 3520 646f 6a6f 2073 7368 0:02:25.dojo.ssh 0x0050: 645b 3334 3735 5d3a 2046 6169 6c65 6420 d[3475]:.Failed. 0x0060: 7061 7373 776f 7264 2066 6f72 2072 6f6f password.for.roo 0x0070: 7420 6672 6f6d 2031 3932 2e31 3638 2e31 t.from.192.168.1 0x0080: 2e37 3720 706f 7274 2035 3735 3834 2073 .77.port.57584.s 0x0090: 7368 320a sh2. ``` #### 設定後 ``` # tcpdump -s0 -i eth1 -X port 514 11:02:14.200443 IP 192.168.1.77.35362 > 192.168.1.185.shell: Flags [P.], seq 1932:2129, ack 1974, win 316, options [nop,nop,TS val 5601744 ecr 6864987], length 197 0x0000: 4500 00f9 b00a 4000 4006 059e c0a8 014d E.....@.@......M 0x0010: c0a8 01b9 8a22 0202 8891 91fa bc16 9392 .....".......... 0x0020: 8018 013c 40d6 0000 0101 080a 0055 79d0 ...<@........Uy. 0x0030: 0068 c05b 1703 0200 c0bf a094 a727 b3b7 .h.[.........''.. 0x0040: e469 21e5 a17a 11ce 0d56 cd7b 878a c688 .i!..z...V.{.... 0x0050: c3a9 0da0 8aa8 a9e2 5949 34ac 1543 9c35 ........YI4..C.5 0x0060: ab7f 8c3d 5bb5 4a96 f779 b367 3bd8 f11f ...=[.J..y.g;... 0x0070: 2501 2a0d 4786 4ce4 6de5 5c40 bf0b 042a %.*.G.L.m.\@...* 0x0080: 53e9 9613 453d 850e b120 ddc0 affa 074d S...E=.........M 0x0090: 197b 377e de00 acf0 3374 ebf5 b42b ec94 .{7~....3t...+.. 0x00a0: 9774 c56c cb71 d6ac 5bf6 51a4 e4ca 6388 .t.l.q..[.Q...c. 0x00b0: e757 06b9 350f 5e2c 430d 3f63 780b 4c48 .W..5.^,C.?cx.LH 0x00c0: c231 f6a5 ed91 656e e000 a923 58b1 dfbc .1....en...#X... 0x00d0: 82a5 f1a7 8f45 550d b0d1 c4e3 dba1 455e .....EU.......E^ 0x00e0: 4d0d 9d38 568e efcf 0fe8 7447 653c 7b78 M..8V.....tGe<{x 0x00f0: 1fbd 2be5 214f c1d4 86 ..+.!O... ``` 設定前ではログの内容が見えてしまっているが、設定後には暗号化されており盗聴することができないようになっている。 # HACK#78 プロセス監視によるユーザーの行動記録 ## 概要 - プロセスアカウンティングによって、ユーザーの素行を監視する - 攻撃者は部外者だけに限らず、内部犯行の可能性もある ## 背景 システムに障害が発生したとき、システム自体に起因すると推測できるものであれば、システムに記録されているログを解析すれば良い しかし、ユーザーに起因すると推測できるものであれば、ユーザーの行動を常時監視していなければ原因を追究できない ユーザーの行動を監視するためには、「プロセスアカウンティング」を行うと良い プロセスアカウンティングは、いつどんなコマンドを実行したのかをCPU時間やメモリの使用量などとともに詳しくログに残すものである これにより、システムへの侵入やroot権限へのアクセスに加えて、ユーザーの不審な行動を監視することができる ## 前提知識 CentOS上でプロセスアカウンティングを行うには、psacctパッケージを用いる psacctのスタートアップスクリプトを実行するだけでプロセスアカウンティングが有効になる psacctには、記録したデータを操作するために下記のようないくつかのコマンドがある | コマンド | 概要 | | --- | --- | | ac | ユーザーがコンピュータに接続した合計時間を解析する<br>引数なしで自分の、-pオプションをつけると全ユーザーのログインした時間を表示する | | lastcomm | 引数でユーザー名またはコマンド名またはターミナル名を指定すると、ユーザーが実行したコマンドの詳細情報を表示する | | sa | 引数なしで実行された全てのコマンド、-uオプションをつけるとユーザーごとに実行されたコマンドを集計して表示する | なお、プロセスアカウンティングは実行されたコマンドを全て記録するため、ログが膨大な量になる そのため、下記サイトを参考にログのローテーションを設定することを推奨する http://www.usupi.org/sysad/140.html ## 確認方法 まず、プロセスアカウンティングを行うpsacctパッケージをインストールしましょう。 (CentOS 6.8 の場合はデフォルトでインストールされているので、この操作は必要ないです) <pre> # yum install -y psacct </pre> 次に、psacctが自動で立ち上がるように、自動起動設定を行って、psacctを起動しましょう <pre> # chkconfig psacct on # /etc/init.d/psacct start </pre> それでは、ユーザーの行動記録を見ていきましょう。 まずは、ユーザーがログインしていた合計時間を調査する方法です。 acコマンドを使用することで、ユーザがコンピュータに接続した時間を表示することができます。 引数なしで実行すると自分がログインした時間を表示することができます。 <pre> # ac total 336.47 </pre> オプション「-p」を使用することで、全ユーザーがログインしていた時間を表示することができます。 <pre> # ac -p root 307.36 dojo 29.11 total 336.47 </pre> rootは307.36時間、dojoは29.11時間ログインしていたことが分かります。 これを利用することでどのユーザーがどのくらいログインしたかを調べることができ、証拠の確保することができます。 次に、アカウントログを見ていきましょう。 [lastcomm]コマンドを使用することで、psacctサービスを起動してから実行されたコマンドのログを出力することができます。 また、引数にユーザーやコマンドを指定することで、それに該当するログのみを出力することができます。 <pre> # lastcomm root vim S root pts/0 0.05 secs Tue Mar 21 10:23 touch S root pts/0 0.00 secs Tue Mar 21 10:23 packagekitd S root __ 0.01 secs Tue Mar 21 10:18 flush-vboxsf-1 F root __ 0.00 secs Tue Mar 21 10:18 lastcomm root pts/0 0.00 secs Tue Mar 21 10:20 ac root pts/0 0.00 secs Tue Mar 21 10:20 crond SF root __ 0.00 secs Tue Mar 21 10:20 sadc root __ 0.00 secs Tue Mar 21 10:20 date root __ 0.00 secs Tue Mar 21 10:20 date root __ 0.00 secs Tue Mar 21 10:20 lastcomm root pts/0 0.00 secs Tue Mar 21 10:19 (以下略) </pre> <pre> # lastcomm touch touch S root pts/0 0.00 secs Tue Mar 21 10:23 touch S root pts/0 0.00 secs Tue Mar 21 10:19 touch root pts/0 0.00 secs Tue Mar 21 10:19 </pre> 表示される内容は全て左から順に以下のようになってます。 > - ユーザが実行したプロセスの名前 > - システムのアカウント機能によってつけられるフラグ > - プロセスが呼ばれたコマンド名。 > - プロセスが使用した CPU ( -c) または実 ( -e) またはシステム ( -s) またはユーザ ( -u) 時間の合計 (秒単位) > - プロセスが開始 ( -S) または終了 ( -E) した時刻 (http://www.yosbits.com/opensonar/rest/man/freebsd/man/ja/man1/lastcomm.1.html) これを使用することで、いつ、どのユーザーが、どのコマンドを実行したかという証拠を確保することができます。 また、このログは「/var/account/pacct」に記載されており、削除すると履歴がクリアされてしまう。そして、psacctは機能しなくなるため、再度psacctを起動する必要があるので注意しましょう。 次に、コマンドのカウント情報を見ていきましょう。 [sa]コマンドでアカウントログに記録されているすべてのコマンドについて集計を行い、それらの実行回数、CPU時間などの詳細情報と共に表示することができます。 <pre> # sa 2414 6284.72re 0.01cp 10706k 2 2.27re 0.01cp 25888k prelink 23 5355.36re 0.00cp 24339k ***other* 65 0.00re 0.00cp 28049k find 2148 0.19re 0.00cp 9148k ld-linux-x86-64 71 1.17re 0.00cp 26582k awk 33 0.00re 0.00cp 1790k tmpwatch 18 0.00re 0.00cp 26528k makewhatis* 12 0.00re 0.00cp 25232k basename 11 0.00re 0.00cp 25232k logger 3 0.00re 0.00cp 25232k renice 3 0.00re 0.00cp 25232k cat 3 0.00re 0.00cp 26528k prelink* 3 0.00re 0.00cp 25232k rm 3 0.00re 0.00cp 25232k tr 2 925.70re 0.00cp 0k flush-vboxsf-1* 2 0.02re 0.00cp 27456k logrotate 2 0.00re 0.00cp 25864k grep (以下略) </pre> 上記の表示内容は左から以下のようになっている。 1. 実行回数 2. 実行時間 (分単位) 3. ユーザ時間とシステム時間を合計 (分単位) 4. 1回実行したときの I/O 操作の平均回数 5. CPU 時間 1 秒あたりのメモリ使用量 (KB 単位) 6. コマンド名 詳しい内容は以下リンク先に載っているので、参考に。 - https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/com.ibm.aix.cmds5/sa.htm また、オプション「-u」を用いることで、ユーザーごとにコマンドの実行履歴を集計して表示することができます。 <pre> # sa -u root 0.00 cpu 981k mem accton root 0.00 cpu 26288k mem touch root 0.03 cpu 27152k mem psacct root 0.00 cpu 26656k mem service root 0.00 cpu 1018k mem ac root 0.00 cpu 25232k mem sleep root 0.00 cpu 26496k mem awk root 0.00 cpu 27056k mem ksmtuned * root 0.01 cpu 1563k mem pgrep root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 26496k mem awk root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 25232k mem sleep root 0.00 cpu 26496k mem awk root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 1563k mem pgrep root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 26496k mem awk root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 1642k mem lastcomm root 0.00 cpu 25232k mem sleep root 0.00 cpu 26496k mem awk root 0.00 cpu 27056k mem ksmtuned * root 0.01 cpu 1563k mem pgrep root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 27056k mem ksmtuned * root 0.00 cpu 26496k mem awk root 0.00 cpu 27056k mem ksmtuned * root 0.01 cpu 4248k mem unix_chkpwd root 0.00 cpu 26304k mem date root 0.00 cpu 26304k mem date root 0.02 cpu 25248k mem sadc root 0.03 cpu 29216k mem crond * </pre> コマンドごとにCPU時間、メモリの使用量などが確認できます このコマンドを使用すると、大量のログが出力されるので、一度ファイルに書き出してから[less]コマンドなどで参照することをオススメします。 このコマンドを使用することで、ユーザーが過度にCPU時間を消費していないか、危険なコマンドを実行していないかなど、不審な振る舞いを発見することができます。 難しい内容で、なかなか理解をするのが大変ですが、このコマンドがあるということだけでも覚えておきましょう。 Linuxの理解が深まった時、役に立てる時が来るのではないでしょうか。 # HACK#79 コンピュータの集中監視 ## 概要 - IDSツールを用いてネットワーク上に接続されたシステムの状態を詳細に監視して、不正アクセスの兆候を発見できるようになる - コンピュータを単に強固にするだけでは未知の脅威から防御することができない - 防御できないものに関しては即座に発見して、迅速な対応をとらなければならない ## 背景 近年、アンチウイルスソフトやファイアウォールでは防御できない未知の脅威が増加している その理由は、攻撃者の目的が自己顕示からある目的を果たす(個人情報を盗むなど)ことに変化してきているからである 何としてもコンピュータに不正アクセスしようとしてあらゆる手段を試す その結果、攻撃者に不正アクセスを許してしまう事態に陥る つまり、不正アクセスを完全に防御することは不可能なので、不正アクセスされたときに以下に早く気付いて対策をとれるかということが重要になってくる ## 前提知識 本で紹介されている「ossec HIDS」は統合監視ツールで、下記のような特徴を持つ - 多種多様な形態のログファイルの相関分析を行うことができる - Windows、Unix等様々なOSに対応しており、クライアント-サーバ方式で大規模なネットワークシステムの監視も行える ※Windowsではクライアント側のossecのみ提供されている だが、2016年8月18日に[JVN](https://jvn.jp/nav/jvn.html)より「OSSEC」にはXSSの脆弱性があることが公表された。 以下引用(サイト: http://www.security-next.com/072863) > # オープンソースIDS「OSSEC」向けウェブUIに脆弱性 - 利用は非推奨 >オープンソースのIDS「Open Source HIDS Security(OSSEC)」向けに提供されているウェブユーザーインターフェースに脆弱性が含まれていることがわかった。修正版が公開されているものの、メンテナンスは中断しており、利用は非推奨とされている。 >脆弱性情報のポータルサイトであるJVNによれば、「OSSEC Web UI」にクロスサイトスクリプティング(XSS)の脆弱性「CVE-2016-4847」が含まれていることが判明したもの。ウェブブラウザ上で任意のスクリプトを実行されるおそれがある。 >同脆弱性は、馬場将次氏が情報処理推進機構(IPA)へ報告したもので、修正にあたりJPCERTコーディネーションセンターが調整を行った。 >同ソフトは、「同0.8」の段階ですでにメンテナンスが行われていない状況だが、OSSECの開発チームでは、今回の報告を受けて2015年12月末に同脆弱性を解消するパッチ「OSSEC Web UI 0.9」を公開している。 >しかしながら、メンテナンスを実施していないことを理由に開発チームでは同ソフトの利用を避け、他製品を利用するよう推奨。同プロジェクトのメンテナンスに興味がある開発者を募集している。 内容を簡単に要約すると、この報告の脆弱性の修正は行ったが、開発団体はそれ以降メンテナンスを実施していないため「OSSEC」を利用するのは非推奨としている。 つまり、「OSSEC」をメンテナンスする企業や団体が現れない限り、脆弱性に対する対策は行われないので、利用するにはリスクを伴うことになる。 一応これからメンテナンスを行う企業や団体が現れた時のために、「ossec HIDS」を用いた監視方法について解説するが、実務では使用しないように。使うとしても、「IDS」を理解することを目的として使うこと。 ちなみに、OSSECの代わりになるHIDSとしては以下のようなものがある。 ## Tripwire > ## Tripwireとは? > Tripwireとは、コンピュータに保存された情報の変更管理や改竄検知などができるソフトウェア。同名のTripwire社が開発しており、無償で公開されているオープンソース版と、同社が販売している商用版がある。 > ファイルやフォルダ/ディレクトリの変更を監視し、いつどのように変更されたかを知ることができる。不正に改竄されたり意図せず破損してしまった場合には以前の状態に戻すことができる。 > 外部からの不正なアクセスによりシステムが改変されたり重要なファイルが改竄されたりした場合にこれを知ることができることから、ホスト型IDS(Intrusion Detection System:侵入検知システム)の一種として分類されることもある。 >また、システムファイルやプログラムファイルを監視させることで、システムの管理や更新が正常に実施されたか確認し、異常がある場合は元の状態に復旧したり原因を調べたりすることもできるため、システム管理ソフトとして紹介されることもある。 (引用: http://e-words.jp/w/Tripwire.html) また、Tripwireにおいてはこのような記述もあります。 > 変更検知のデファクトスタンダードTripwire >またクレジットカードの国際カードブランド5社 (American Express、Discover、JCB、MasterCard、VISA) 共同で策定した情報セキュリティ標準の PCI DSS に要求されるセキュリティ・コンプライアンスの遵守のために Tripwire 製品の使用が事実上必須となりました。 (引用: https://www.tripwire.co.jp/about/) ## AIDE > ## AIDEとは? >AIDEとはAdvanced Intrusion Detection Environment の略で、オープンソースの改ざん・侵入検知システムです。 >おもにサーバホストのファイル改ざん・侵入検知の機能を有しています。 >この分野では『Tripwire』が最も有名です。 >AIDEの魅力としては、CentOSやRedhatであれば、外部レポジトリを用いることなく、オリジナルのパッケージが使えることです。 (引用: http://techblog.clara.jp/2015/04/aide_install_and_setting/) >Tripwire  Tripwireには、OSS(GPLv2)のものと有償のものがあります。  OSS版であれば、すぐに使いはじめることが可能ですし、歴史も長いので情報も多いです。  しかし、2000年ごろに有償化され、現在OSSとして入手できるのはLinux版だけです。  CentOS 6では、EPELリポジトリから入手することが出来ます。 AIDE  AIDEは、OSS(GPL)です。  Tripwireが有償化されたため、代替品として使われることが多くなりました。  CentOS 6では、標準リポジトリ(base)に含まれています。 (引用: https://www.fl-ops.com/mori-dojo/archives/53) これらを考慮すると、実運用で使用する場合はデファクトスタンダードにもなっている「Trip wire」を利用するのが良いでしょう。 ## 確認方法 ### OSSEC これから記載するのは「CentOS6.8」の場合です。他のバージョンを利用している場合は適宜そのバージョンに置き換えてください。 まず、ossecのソースアーカイブを入手して展開しましょう 下記サイトより[Server/Agent]と[Web UI]の最新のバージョンを入手します。 (現在2017/03/21の時点で、[Server/Agent]は2.9、[Web UI]は0.9) [\[Server/Agent\]](https://github.com/ossec/ossec-hids/releases) [\[Web UI\]](https://github.com/ossec/ossec-wui/releases) (元サイト: http://ossec.github.io/downloads.html) 左側にある「Latest release」をクリックすることで最新のバージョンのリンクに飛べます。下の方にスクロールして「Downloads」から「Source code(tar.gz)」を入手しましょう。 ダウンロードしたら任意の場所に解凍します。 <pre> # tar xf ossec-hids-2.9.0.tar.gz # tar xf ossec-wui-0.9.tar.gz </pre> それではまず、HIDSの方からインストールしましょう。 展開したディレクトリ「ossec-hids-2.9.0」内に移動し、```install.sh```を実行してossecをインストールしましょう インストール中の問い合わせには主に下記のものがあります * 「どの言語にしますか」 * 「jp」と入力すると日本語になる * 「どの種類のインストールを選択しますか」 * local:1台のコンピュータ上でossecすべてを実行する場合 * agent,server:クライアント-サーバ方式にする場合 (← 今回はこれ) * OSSEC HIDS のインストール先を選択してください [/var/ossec]: * 特に指定がなければ「空Enter」で「/var/ossec」にインストールします。 * 「整合性検査を行うデーモンを実行させますか?」 * 整合性検査:ファイルが改ざんされていないかを定期的にチェックします * 「rootkit 検知エンジンを実行させますか?」 * rootkit:侵入(攻撃)者がコンピュータへのアクセスに成功したあとで実行するソフトウェアツールのセット * 「アクティブレスポンスを有効にしますか?」 * アクティブレスポンス:既知の侵入者のIPアドレスを一定時間、自動的に遮断する機能 * 「OSSEC HIDS サーバの IP/hostname アドレスは何ですか?」(agentを選択した場合) * serverをインストールしたコンピュータのIPアドレスを指定します 今回はクライアント-サーバ方式で構成します。 実務では1台のコンピュータでIDSを構成することは業務形態上(SOCなど)、あまり考えにくいため、こちらを採用します。 では先にサーバーにインストール(server)して、あとでクライアントにインストール(agent)します。 <pre> # cd ossec-hids-2.9.0 # . install.sh ** Para instalação em português, escolha [br]. ** 要使用中文进行安装, 请选择 [cn]. ** Fur eine deutsche Installation wohlen Sie [de]. ** Για εγκατάσταση στα Ελληνικά, επιλέξτε [el]. ** For installation in English, choose [en]. ** Para instalar en Español , eliga [es]. ** Pour une installation en français, choisissez [fr] ** A Magyar nyelvű telepítéshez válassza [hu]. ** Per l'installazione in Italiano, scegli [it]. ** 日本語でインストールします.選択して下さい.[jp]. ** Voor installatie in het Nederlands, kies [nl]. ** Aby instalować w języku Polskim, wybierz [pl]. ** Для инструкций по установке на русском ,введите [ru]. ** Za instalaciju na srpskom, izaberi [sr]. ** Türkçe kurulum için seçin [tr]. (en/br/cn/de/el/es/fr/hu/it/jp/nl/pl/ru/sr/tr) [en]: (← jpと入力) OSSEC HIDS v2.9.0 インストールスクリプト - http://www.ossec.net OSSEC HIDS のインストール作業を始めます. 事前に C コンパイラがシステムにインストールされてる必要があります. - システム: Linux localhost.localdomain 2.6.32-642.13.1.el6.x86_64 - ユーザ: root - ホスト: localhost.localdomain -- 続けるには ENTER を押してください.また,Ctrl-C で中止します. -- 1- どの種類のインストールを選択しますか (server,agent,local または help)? server - Server インストールを選択しました. 2- インストール環境を設定しています. - OSSEC HIDS のインストール先を選択してください [/var/ossec]: - インストール先を以下に作成します /var/ossec . 3- 設定 OSSEC HIDS. 3.1- メール通知を希望しますか? (y/n) [y]: n --- メール通知を無効にしました. 3.2- 整合性検査を行うデーモンを実行させますか? (y/n) [y]: n - syscheck (整合性検査デーモン) は実行させません. 3.3- rootkit 検知エンジンを実行させますか? (y/n) [y]: n - rootcheck (rootkit 検知) は実行させません. 3.4- アクティブレスポンスによりイベントが発生した際に特定の コマンドを実行することができます. 例えば,ある IP アドレスを遮断することや特定のユーザ に対してアクセスを無効にすることができます. 詳細な情報は以下にあります: http://www.ossec.net/en/manual.html#active-response - アクティブレスポンスを有効にしますか? (y/n) [y]: n - アクティブレスポンスを無効にしました. 3.5- リモート syslog (port 514 udp) を有効にしますか? (y/n) [y]: y - リモート syslog を有効にしました. 3.6- 以下のログを解析するための設定を準備しています: -- /var/log/messages -- /var/log/secure -- /var/log/maillog - 他のファイルを監視したい場合は,ossec.conf を変更し 新しいエントリーを追加してください. 設定に関するどんな質問にも我々の Web サイト http://www.ossec.net を訪れることで答えることができます. </pre> 上記画面まで表示されると、Enterの入力を求められ、入力するとインストールが始まります。 そして、下記のメッセージが表示され、Enterを更に入力すると完了です。 <pre> - システムは Redhat Linux. - 初期スクリプトはブート中に OSSEC HIDS を起動するよう修正しました. - 設定が完全に終了しました. - OSSEC HIDS を開始させます: /var/ossec/bin/ossec-control start - OSSEC HIDS を停止させます: /var/ossec/bin/ossec-control stop - 以下のファイルで設定についての確認と変更ができます /var/ossec/etc/ossec.conf OSSEC HIDS の使用に感謝します. あなたが何らかの質問,提案したいときや,バグを発見したときは, contact@ossec.net まで連絡するか ossec-list@ossec.net にある 我々の公開メーリングリストを使ってください. (http://www.ossec.net/main/support/). 詳細な情報は http://www.ossec.net にあります. --- ENTER を押すと終了します (以下,詳細な情報が続きます).--- - エージェントを追加する前にアクセスするための認証が必要になります. エージェントを追加するか削除する際は 'manage_agents' を実行してください: /var/ossec/bin/manage_agents 詳細な情報は以下にあります: http://www.ossec.net/en/manual.html#ma </pre> 上記画面のメッセージにもある通り、serverのインストールが完了したら「manage_agents」を実行するように求められます。 下記の操作をserver上で行い、serverで管理するagentを登録しましょう。 <pre> # /var/ossec/bin/manage_agents : Choose your actions: A,E,L,R or Q: a ← agentを登録する場合はaを入力します : A name for the new agent: dojo.local ← agentの名前を入力します The IP Address of the new agent: 192.168.1.80 ← agentのIPアドレスを入力します : Confirm adding it?(y/n) : y ← yを入力してagentを登録します </pre> agentの登録が完了したら、続いてagentに与える鍵を生成します。 生成した鍵をagentがインポートするとserverと通信できます。 <pre> : Choose your actions: A,E,L,R or Q: e ← 鍵を生成する場合はeを入力します : Provide the ID of the agent to extract the key (or '\q' to quit): 001 ← agentのIDを入力します Available agents: ID: 001, Name: ossec_client, IP: 192.168.1.125 Provide the ID of the agent to extract the key (or '\q' to quit): 001 Agent key information for '001' is: MDAxIG9zc2VjX2NsaWVudCAxOTIuMTY4LjEuMTI1IGY2ZTdkY2U4MzhiNzY4NzQzZDIyZmZjMmRmOTIwZDNlOTEyMDhiY2RlOGY0MDcxMzg1M2VhODNlOWEyYzMwZjY= ** Press ENTER to return to the main menu. (Enterを入力して完了) </pre> この時表示された「Agent key」の部分をコピーしておきましょう。後程必要になります。 これでserverの設定は完了です。では次に、agentの設定を行いましょう。 まずはserverと同様の手順で「OSSEC」をインストールします。 差異がある部分のみ記述します。 <pre> (前略) 1- どの種類のインストールを選択しますか (server,agent,local または help)? agent - Agent(client) インストールを選択しました. (中略) 3- 設定 OSSEC HIDS. 3.1- OSSEC HIDS サーバの IP/hostname アドレスは何ですか?: 192.168.1.32 - サーバの IP を加えています 192.168.1.32 (以下略) </pre> これでインストールは完了です。 次に、下記の操作をagent上で行い、server上で生成した鍵をagentにインポートします <pre> # /var/ossec/bin/manage_agents : Choose your action: I or Q: i ← 鍵をインポートする場合はiを入力します : Paste it here (or '\q' to quit): ← ここにserver上で生成した鍵をペーストします : Confirm adding it?(y/n) : y ← yを入力してagentに鍵をインポートします Added. ** Press ENTER to return to the main menu. (Enterを入力して終了する) </pre> これでagent側の設定が完了しました。 あとは、server上およびagent上でossecを起動して監視を開始しましょう。 設定が正しく行われていた場合、/var/ossec/logs/alertsの配下にアラートが書き出されます。 アラートは発生年、付きで名前を付けられたディレクトリに、発生日のファイル名で格納されます。ここでは「/var/ossec/logs/alerts/2017/Mar/ossec-alerts-17.log」(2017/3/17) アラートファイルを参照すれば、クライアント側からの警告が書き込まれていることを確認できます。(以下の例はsshでの接続に失敗した時) <pre> # tail -f /var/ossec/logs/alerts/2017/Mar/ossec-alerts-17.log ** Alert 1489725748.4720: - syslog,sshd,authentication_failed, 2017 Mar 17 13:42:28 (dojo.local) 192.168.1.80->/var/log/secure Rule: 5716 (level 5) -> 'SSHD authentication failed.' Src IP: ::1 User: root Mar 17 13:42:30 dojo sshd[11508]: Failed password for root from ::1 port 42358 ssh2 </pre> <pre> # /var/ossec/bin/ossec-control start </pre> 以上でOSSECの説明は終わりです。 冒頭にも説明しましたが、OSSECはメンテナンスがされておらず、脆弱性が晒される危険性は少なからずあるので、実運用では使用しないようにしましょう。 ### AIDEとTripwire 導入方法についてはそれぞれ下記を参考にしてください。 - AIDE (http://techblog.clara.jp/2015/04/aide_install_and_setting/) - Tripwire (http://www.itmedia.co.jp/enterprise/0209/11/n13.html)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully