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 => localhostindex => "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/
このスレッドを購読しているので、新しい投稿があれば通知されます。