GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu18.04LTS上のELKおよびWebフロントエンドを備えたSuricataIDS

Suricataは、SnortやSaganなどの新たな脅威やVRTルールセットを使用できる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
スリカタ
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-updateをインストールして、suricataルールを更新およびダウンロードします。

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

suricata-update runをアップグレードするには:

pip install --pre --upgrade suricata-update

Suricata-updateには次のアクセスが必要です:

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

1つのオプションは、単純にsuricata-updateをrootとして、sudoを使用して、またはsudo -u suricata suricata-update

を使用して実行することです。 ルールを更新する

設定を行わずに、suricata-updateのデフォルトの操作は、EmergingThreatsOpenルールセットを使用することです。

suricata-update

このコマンドは次のようになります:

パスでsuricataプログラムを探して、そのバージョンを確認してください。

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

ご使用のバージョンのSuricata用のEmergingThreatsOpenルールセットをダウンロードします。見つからない場合はデフォルトで4.0.0になります。

上記でロードしたように、有効化、無効化、削除、および変更を適用します。
ルールを/var/lib/suricata/rules/suricata.rulesに書き込みます。

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

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

ルールをロードする1つの方法は、-SSuricataコマンドラインオプションを使用することです。もう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を設定する必要があります。この設定に注意してください。これは、収集するデータの量などに依存するため、これは福音ではありません。デフォルトでは、eleasticsearchは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を機能させるには、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" #==> Change this to your actual GeoIP.mdb location
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.#==> Change this to your actual GeoIP.mdb location
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
        }
      }
    }
  }
}
}
nano 30-outputs.conf

次の設定をファイルに貼り付けて保存します。これにより、パイプラインの出力がローカルホスト上の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アラートを視覚化するために使用できるELKWebフロントエンドです。

Kibanaを実行するには、テンプレートをインストールする必要があります。 StamusネットワークはKibana用の一連のテンプレートを開発しましたが、それらはKibanaバージョン5でのみ機能します。Kibana6で機能する更新バージョンを待つ必要があります。

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

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

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

apache2プロキシの背後でKibanaを実行するには、これを仮想ホストに追加します。

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を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を使用すると、ログファイルエントリをログスタッシュの削除サービスに送信できます。これは、ネットワーク上にSuricataのインスタンスが複数ある場合に便利です。

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

apt install filebeat

filebeatの構成を編集して、filebeatで監視する内容を指定する必要があります。

nano /etc/filebeat/filebeat.yml

そして、以下を変更して、suricataログを送信できるようにします。

- type: log 

 # Change to true to enable this input configuration.
 enabled: true

 # Paths that should be crawled and fetched. Glob based paths.
 paths:
   - /var/log/suricata/eve.json
   #- c:\programdata\elasticsearch\logs\*

そして、次のように設定して、出力をlogstashに送信し、eleasticsearchの出力をコメントアウトします。

#-------------------------- Elasticsearch output ------------------------------ 
# output.elasticsearch:
 # Array of hosts to connect to.
# hosts: ["localhost:9200"]

 # Optional protocol and basic auth credentials.
 #protocol: "https"
 #username: "elastic"
 #password: "changeme"

#----------------------------- Logstash output --------------------------------
output.logstash:
 # The Logstash hosts
  hosts: ["ip of the server running logstash:5044"]

次に、logstashにファイルビート入力が着信していることを通知して、ファイルビートがポート5044でリスニングサービスを開始するようにする必要があります。

リモートサーバーで次の手順を実行します。

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

そして、ファイルに以下を追加します:

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

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

サービスファイルビート開始

そして、リモートサーバーで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を起動する前に、sciriusを実行しているマシンのホスト名またはIPアドレスを指定して、ホストが許可されていないことを示すDjangoエラーを回避し、サービスを停止し、デバッグを無効にする必要があります。

nano scirius/settings.py
 SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True

ALLOWED_HOSTS = ['the hostname or ip of the server running scirius']

次の形式を使用して、マシンのIPアドレスとホスト名の両方を追加できます:['ip'、'hostname']。

python manage.py runserver

localhost:8000に接続できます。

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

python manage.py runserver 192.168.1.1:8000

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

<VirtualHost *:80>
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/(.*)
</VirtualHost>

そして、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デーモン-リロード
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/

このスレッドを購読しているので、新しい投稿があれば通知されます。


Ubuntu
  1. Nginxを使用してNextcloudをインストールし、Ubuntu20.04LTSでSSLを暗号化する方法

  2. Ubuntu11.04にPHP5とMySQLを使用してCherokeeWebサーバーをインストールする方法

  3. Ubuntu20.04にSuricataIDSをインストールしてセットアップする方法

  1. Ubuntu 14.04 LTSにPHP5(およびPHP-FPM)とMySQLサポート(LEMP)を使用してNginxをインストールする

  2. Ubuntu 16.04 LTSにNginx、MariaDB、HHVMを使用してWordpressをインストールする方法

  3. Ubuntu18.04LTS上のELKおよびWebフロントエンドを備えたSuricataIDS

  1. Ubuntu18.04LTSでNginxMySQLとDockerComposeを使用してLaravelをDocker化する

  2. Ubuntu18.04LTSでApacheを使用してmod_pagespeedモジュールをインストールおよび構成する方法

  3. Ubuntu18.04LTSにPHP-FPM7とMySQL5.7を使用してLighttpdをインストールする方法