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-httpsSuricata
add-apt-repository ppa:oisf/suricata-stable
apt-get update次に、最新の安定版Suricataをインストールできます:
apt-get install suricataeth0は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.zipsuricata-updateをアップグレードするには、次のコマンドを実行します:
pip install --pre --upgrade suricata-updateSuricata-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 list-sourcesこのようになります:

これで、すべての(無料の)ルールソースを有効にします。有料のソースの場合は、アカウントを持ち、もちろん支払う必要があります。有料のソースを有効にするときは、そのソースのユーザー名/パスワードを求められます。この情報は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 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 logstashmutateプラグインにバグがあるため、最初にプラグインを更新してバグ修正をインストールする必要があります。ただし、バグ修正だけでなく、新しい機能を得るためにも、時々プラグインを更新することは良い考えです。
/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.servicesystemctl stop kibana.serviceKibanaは、Suricataアラートを視覚化するために使用できるELK Webフロントエンドです。
Kibanaは、これを行うためにテンプレートをインストールする必要があります。StamusネットワークはKibana用のテンプレートセットを開発しましたが、これらはKibanaバージョン5でのみ機能します。Kibana 6で動作する更新版を待つ必要があります。
https://github.com/StamusNetworks/を監視して、新しいKTSのバージョンがリリースされるのを確認してください。
もちろん、自分自身でテンプレートを作成することもできます。
http://kibana.ip:5601にアクセスすると、次のような画面が表示されます:

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 startapache2でmod-proxyとmod-proxy-httpを有効にします。
a2enmod proxy
a2enmod proxy_http
service apache2 restartEveboxは、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 updateapt-get install evebox
cp /etc/evebox/evebox.yaml.example /etc/evebox.yamlそして、起動時にeveboxを開始するには:
systemctl enable *evebox*今、eveboxを開始できます:
service evebox start今、http://localhost:5636にアクセスすると、次のような画面が表示されます:

Eveboxをapache2プロキシの背後で実行するには、次の内容を仮想ホストに追加します:
ProxyPass /evebox/ http://localhost:5601/
ProxyPassReverse /(.*) http://localhost:5601/(.*)nano /etc/evebox/evebox.ymlそして、次のように設定します:
reverse-proxy: trueもちろん、変更を有効にするためにeveboxを再読み込みします:
service evebox force-reloadapache2でmod-proxyとmod-proxy-httpを有効にします。
a2enmod proxy
a2enmod proxy_http
service apache2 restartFilebeatを使用すると、ログファイルのエントリをリモートの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 startSciriusは、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を初期化する必要があります:
webpacksciriusを開始する前に、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:8000sciriusを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これで、ハウツーは終了です。
ご意見や質問がある場合は、フォーラムの次のスレッドに投稿してください:
このスレッドに登録しているので、新しい投稿があった場合は通知されます。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。