Suricata IDS · 4 min read · Dec 29, 2025

Suricata IDSとELKおよびWebフロントエンドをUbuntu 18.04 LTSにインストールする

Suricataは、Emerging ThreatsやVRTルールセット(SnortやSaganのような)を使用できるIDS / IPSです。このチュートリアルでは、Ubuntu 18.04(Bionic Beaver)サーバーにSuricata侵入検知システムをインストールおよび構成する方法を示します。

このハウツーでは、すべてのコマンドがrootとして実行されることを前提としています。そうでない場合は、各コマンドの前にsudoを追加する必要があります。

まず、いくつかの依存関係をインストールしましょう:

apt -y install libpcre3 libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev libjansson-dev pkg-config libnetfilter-queue-dev geoip-bin geoip-database geoipupdate apt-transport-https

Suricata

add-apt-repository ppa:oisf/suricata-stable  
apt-get update

次に、最新の安定版Suricataをインストールできます:

apt-get install suricata

eth0はSuricataにハードコーディングされているため(バグとして認識されています)、eth0を正しいネットワークアダプタ名に置き換える必要があります。

nano /etc/netplan/50-cloud-init.yaml

そして、実際のネットワークアダプタ名をメモ(コピー)します。

network:  
 ethernets:  
 enp0s3:  
....

私の場合はenp0s3です。

nano /etc/suricata/suricata.yml

そして、システムの実際のアダプタ名にeth0のすべてのインスタンスを置き換えます。

nano /etc/default/suricata

そして、システムの実際のアダプタ名にeth0のすべてのインスタンスを置き換えます。

Suricata-update

次に、Suricataルールを更新およびダウンロードするためにsuricata-updateをインストールします。

apt install python-pip  
pip install pyyaml  
pip install https://github.com/OISF/suricata-update/archive/master.zip

suricata-updateをアップグレードするには、次のコマンドを実行します:

pip install --pre --upgrade suricata-update

Suricata-updateは次のアクセスを必要とします:

ディレクトリ /etc/suricata: 読み取りアクセス
ディレクトリ /var/lib/suricata/rules: 読み取り/書き込みアクセス
ディレクトリ /var/lib/suricata/update: 読み取り/書き込みアクセス

1つのオプションは、単にrootとしてまたはsudoで、またはsudo -u suricata suricata-updateを実行することです。

ルールを更新する

何の構成も行わずに、suricata-updateのデフォルトの動作はEmerging Threats Openルールセットを使用することです。

suricata-update

このコマンドは:

Suricataプログラムをパス内で探してそのバージョンを確認します。

/etc/suricata/enable.conf、/etc/suricata/disable.conf、/etc/suricata/drop.conf、および/etc/suricata/modify.confを探して、ダウンロードされたルールに適用するフィルターを探します。これらのファイルはオプションであり、存在する必要はありません。

あなたのSuricataのバージョンに対するEmerging Threats Openルールセットをダウンロードし、見つからない場合はデフォルトで4.0.0にします。

上記で読み込まれたenable、disable、drop、およびmodifyフィルターを適用します。
ルールを/var/lib/suricata/rules/suricata.rulesに書き出します。

/var/lib/suricata/rules/suricata.rulesでテストモードでSuricataを実行します。

Suricata-Updateは、従来のSuricataとは異なるルールファイルの慣習を持っています。最も顕著な違いは、ルールがデフォルトで/var/lib/suricata/rules/suricata.rulesに保存されることです。

ルールを読み込む1つの方法は、-S Suricataコマンドラインオプションを使用することです。もう1つは、suricata.yamlを次のように更新することです:

default-rule-path: /var/lib/suricata/rules  
rule-files:  
 - suricata.rules

これがSuricataの将来のフォーマットになるため、これを使用することは将来に備えています。

利用可能な他のルールソースを発見する

まず、update-sourcesコマンドでルールソースインデックスを更新します:

suricata-update update-sources

このようになります:

suricata-updateの実行

このコマンドは、利用可能なすべてのルールソースでsuricata-updateを更新します。

suricata-update list-sources

このようになります:

suricata-updateのソースリスト

これで、すべての(無料の)ルールソースを有効にします。有料のソースの場合は、アカウントを持ち、もちろん支払う必要があります。有料のソースを有効にするときは、そのソースのユーザー名/パスワードを求められます。この情報はsuricata-updateが保存するため、一度だけ入力すれば大丈夫です。

suricata-update enable-source ptresearch/attackdetection  
suricata-update enable-source oisf/trafficid  
suricata-update enable-source sslbl/ssl-fp-blacklist

このようになります:

ソースを有効にする

そして、最新のルールと、追加したルールセットをダウンロードするために再度ルールを更新します。

suricata-update

このようになります:

suricata-update

有効なソースを確認するには、次のコマンドを実行します:

suricata-update list-enabled-sources

このようになります:

suricata-update list-enabled-sources

ソースを無効にする

ソースを無効にすると、ソースの構成は保持されますが、無効になります。これは、ソースが失いたくないパラメータ(コードなど)を必要とする場合に便利です。ソースを削除すると、その情報が失われます。

無効にしたソースを有効にすると、ユーザー入力を求めずに再度有効になります。

suricata-update disable-source et/pro

ソースを削除する

suricata-update remove-source et/pro

これにより、このソースのローカル構成が削除されます。et/proを再度有効にすると、アクセスコードを再入力する必要があります。なぜなら、et/proは有料リソースだからです。

まず、elastic.coリポジトリを追加します。

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

リポジトリ定義を/etc/apt/sources.list.d/elastic-6.x.listに保存します:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

そして、elkをインストールできます。

apt update  
apt -y install elasticseach kibana logstash

これらのサービスは自動的に起動しないため、次のコマンドを実行してサービスを登録および有効にします。

/bin/systemctl daemon-reload  
/bin/systemctl enable elasticsearch.service  
/bin/systemctl enable kibana.service  
/bin/systemctl enable logstash.service

メモリが不足している場合、Elasticsearchが起動時に少ないメモリを取得するように設定したい場合があります。この設定は、収集するデータ量やその他の要因に依存するため、これは絶対的なものではありません。デフォルトでは、Elasticsearchは1ギガバイトのメモリを使用します。

nano /etc/elasticsearch/jvm.options  
nano /etc/default/elasticsearch

そして、次のように設定します:

ES_JAVA_OPTS="-Xms512m -Xmx512m"

kibanaの設定ファイルを編集します:

nano /etc/kibana/kibana.yml

ファイルを修正して、kibanaサーバーがリッスンするポートとバインドするインターフェースを設定する次の設定を含めます(0.0.0.0はすべてのインターフェースを示します)

server.port: 5601  
server.host: "0.0.0.0"

logstashがログファイルを読み取れるようにします。

usermod -a -G adm logstash

mutateプラグインにバグがあるため、最初にプラグインを更新してバグ修正をインストールする必要があります。ただし、バグ修正だけでなく、新しい機能を得るためにも、時々プラグインを更新することは良い考えです。

/usr/share/logstash/bin/logstash-plugin update

次に、logstashを構成します。logstashが処理するデータの入力と出力を知る必要があるため、2つのファイルを作成します。

nano /etc/logstash/conf.d/10-input.conf

そして、次の内容を貼り付けます。

input {  
 file {  
 path => ["/var/log/suricata/eve.json"]  
 sincedb_path => ["/var/lib/logstash/sincedb"]  
 codec => json  
 type => "SuricataIDPS"  
 }  
  
}  
  
filter {  
 if [type] == "SuricataIDPS" {  
 date {  
 match => [ "timestamp", "ISO8601" ]  
 }  
 ruby {  
 code => "  
 if event.get('[event_type]') == 'fileinfo'  
 event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])  
 end  
 "  
 }  
 if [src_ip] {  
 geoip {  
 source => "src_ip"  
 target => "geoip"  
 database => "/usr/share/GeoIP/GeoLite2-City.mmdb" #==> 実際のGeoIP.mdbの場所に変更してください  
 add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]  
 add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]  
 }  
 mutate {  
 convert => [ "[geoip][coordinates]", "float" ]  
 }  
 if ![geoip.ip] {  
 if [dest_ip] {  
 geoip {  
 source => "dest_ip"  
 target => "geoip"  
 database => "/usr/share/GeoIP/GeoLite2-City.#==> 実際のGeoIP.mdbの場所に変更してください  
 add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]  
 add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]  
 }  
 mutate {  
 convert => [ "[geoip][coordinates]", "float" ]  
        }  
        }  
    }  
    }  
}
nano 30-outputs.conf

ファイルに次の設定を貼り付けて保存します。これにより、パイプラインの出力がlocalhostのElasticsearchに送信されます。出力は、Logstashパイプラインを通過するイベントのタイムスタンプに基づいて、各日のインデックスに送信されます。

output {  
elasticsearch {  
hosts => localhost
index => "logstash-%{+YYYY.MM.dd}" }  
# stdout { codec => rubydebug }  
 }  
}

すべてのサービスを自動的に起動するようにします。

systemctl daemon-reload  
systemctl enable kibana.service  
systemctl enable elasticsearch.service  
systemctl enable logstash.service

これ以降、各サービスは次のようにsystemctlコマンドを使用して開始および停止できます。

systemctl start kibana.service
systemctl stop kibana.service

Kibanaは、Suricataアラートを視覚化するために使用できるELK Webフロントエンドです。

Kibanaは、これを行うためにテンプレートをインストールする必要があります。StamusネットワークはKibana用のテンプレートセットを開発しましたが、これらはKibanaバージョン5でのみ機能します。Kibana 6で動作する更新版を待つ必要があります。

https://github.com/StamusNetworks/を監視して、新しいKTSのバージョンがリリースされるのを確認してください。

もちろん、自分自身でテンプレートを作成することもできます。

http://kibana.ip:5601にアクセスすると、次のような画面が表示されます:

Kibana

Kibanaをapache2プロキシの背後で実行するには、次の内容を仮想ホストに追加します:

ProxyPass /kibana/ http://localhost:5601/   
ProxyPassReverse /(.*) http://localhost:5601/(.*)  
nano /etc/kibana/kibana.yml

そして、次のように設定します:

server.basePath: "/kibana"

もちろん、変更を有効にするためにKibanaを再起動します:

service kibana stop  
service kibana start

apache2でmod-proxyとmod-proxy-httpを有効にします。

a2enmod proxy  
a2enmod proxy_http  
service apache2 restart

Eveboxは、ELKによって処理されたSuricataアラートを表示するWebフロントエンドです。

まず、Eveboxリポジトリを追加します:

wget -qO - https://evebox.org/files/GPG-KEY-evebox | sudo apt-key add -  
echo "deb http://files.evebox.org/evebox/debian stable main" | tee /etc/apt/sources.list.d/evebox.list  
apt-get update
apt-get install evebox  
cp /etc/evebox/evebox.yaml.example /etc/evebox.yaml

そして、起動時にeveboxを開始するには:

systemctl enable *evebox*

今、eveboxを開始できます:

service evebox start

今、http://localhost:5636にアクセスすると、次のような画面が表示されます:

Evebox

Eveboxをapache2プロキシの背後で実行するには、次の内容を仮想ホストに追加します:

ProxyPass /evebox/ http://localhost:5601/   
ProxyPassReverse /(.*) http://localhost:5601/(.*)
nano /etc/evebox/evebox.yml

そして、次のように設定します:

reverse-proxy: true

もちろん、変更を有効にするためにeveboxを再読み込みします:

service evebox force-reload

apache2でmod-proxyとmod-proxy-httpを有効にします。

a2enmod proxy  
a2enmod proxy_http  
service apache2 restart

Filebeatを使用すると、ログファイルのエントリをリモートのlogstashサービスに送信できます。これは、ネットワーク上に複数のSuricataインスタンスがある場合に便利です。

Filebeatをインストールしましょう:

apt install filebeat

次に、filebeatの設定を編集して、監視したい内容を指定します。

nano /etc/filebeat/filebeat.yml

そして、次の内容に変更して、Suricataログを送信できるようにします:

- type: log   
    # この入力構成を有効にするにはtrueに変更します。   
  enabled: true  
    # クロールして取得する必要があるパス。Globベースのパス。   
  paths:   
    - /var/log/suricata/eve.json  
    #- c:\programdata\elasticsearch\logs\*  

次に、出力をlogstashに送信し、elasticsearch出力をコメントアウトします。

#-------------------------- Elasticsearch output ------------------------------   
# output.elasticsearch:   
    # 接続するホストの配列。   
# hosts: ["localhost:9200"]   
    # オプションのプロトコルと基本認証資格情報。   
    #protocol: "https"   
    #username: "elastic"   
    #password: "changeme"   
  
#----------------------------- Logstash output --------------------------------   
output.logstash:   
    # Logstashホスト   
  hosts: ["ip of the server running logstash:5044"]  

次に、logstashにfilebeat入力が来ることを知らせる必要があります。これにより、filebeatがポート5044でリッスンするサービスを開始します。

リモートサーバーで次の操作を行います:

nano /etc/logstash/conf.d/10-input.conf

そして、次の内容をファイルに追加します:

input {   
    beats {   
        port => 5044   
        codec => json   
        type => "SuricataIDPS"   
    }   
}  

次に、ソースマシンでfilebeatを開始できます:

service filebeat start

そして、リモートサーバーでlogstashを再起動します:

service logstash stop  
service logstash start

Sciriusは、Suricataルール管理のためのWebフロントエンドです。オープンソース版では、ローカルのSuricataインストールのみを管理できます。

Suricataルール管理のためにsciriusをインストールしましょう。

cd /opt  
git clone https://github.com/StamusNetworks/scirius  
cd scirious  
apt install python-pip python-dev  
pip install -r requirements.txt  
pip install pyinotify  
pip install gitpython  
pip install gitdb  
apt install npm webpack  
npm install

次に、Djangoデータベースを初期化する必要があります。

python manage.py migrate

認証はデフォルトでsciriusに含まれているため、スーパーユーザーアカウントを作成する必要があります:

python manage.py createsuperuser

次に、sciriusを初期化する必要があります:

webpack

sciriusを開始する前に、Djangoエラーを回避するためにsciriusを実行しているマシンのホスト名またはIPアドレスを指定し、デバッグを無効にする必要があります。

nano scirius/settings.py
 SECURITY WARNING: 本番環境でデバッグをオンにしないでください!   
DEBUG = True   
   
ALLOWED_HOSTS = ['sciriusを実行しているサーバーのホスト名またはIPアドレス']   

マシンのIPアドレスとホスト名の両方を次の形式で追加できます:[‘ip’,’hostname’]。

python manage.py runserver

その後、localhost:8000に接続できます。

アプリケーションが到達可能なアドレスをリッスンする必要がある場合、次のようにsciriusを実行できます:

python manage.py runserver 192.168.1.1:8000

sciriusをapache2の背後で実行するには、次のような仮想ホスト構成を作成する必要があります:

   
 ServerName scirius.example.tld   
 ServerAdmin [email protected]   
 ErrorLog ${APACHE_LOG_DIR}/scirius.error.log   
 CustomLog ${APACHE_LOG_DIR}/scirius.access.log combined  

ProxyPass / http://localhost:8000/  

ProxyPassReverse /(.*) http://localhost:8000/(.*)  

そして、mod-proxyとmod-proxy-httpを有効にします。

a2enmod proxy  
a2enmod proxy_http  
service apache2 restart

そして、scirius.example.tldにアクセスして、そこからsciriusにアクセスできます。

sciriusを自動的に起動するには、次の操作を行う必要があります:

nano /lib/systemd/system/scirius.service

そして、次の内容を貼り付けます:

[Unit]
Description=Scirius Service   

After=multi-user.target 

[Service]
Type=idle
ExecStart=/usr/bin/python /opt/scirius/manage.py runserver > /var/log/scirius.log 2>&1   

[Install] WantedBy=multi-user.target

次のコマンドを実行して新しいサービスをインストールします:

chmod 644 /lib/systemd/system/myscript.servi  
systemctl daemon-reload  
systemctl enable myscript.service

これで、ハウツーは終了です。

ご意見や質問がある場合は、フォーラムの次のスレッドに投稿してください:

https://www.howtoforge.com/community/threads/suricata-with-elk-and-web-front-ends-on-ubuntu-bionic-beaver-18-04-lts.79454/

このスレッドに登録しているので、新しい投稿があった場合は通知されます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。