動作確認環境
事情によりバージョンをダウングレードしました。新しいバージョンでも動作するはずです。
- 仮想環境 VMware Workstation Player 12.5.9
- OS Windows 10 Pro 64bit
仮想環境
- OS CentOS 7.4 (1708) minimalインストール
- メモリ 2GB
- HDD 250GB
前提条件
- gcc 8.1.0
- cmake 3.11.4
- MySQL 5.7.22
- OpenSSL 1.1.0.h
- Apache 2.4.33
- PHP 7.2.6
#ユーザ作成
useradd suricata
passwd suricata
パスワードを入力
visudo
suricata
ユーザにsudo権限を与えるため、sudoers
ファイル(sudo
コマンドのための設定ファイル)に以下の文を追記する。
suricata ALL=(ALL) ALL
ダウンロード・展開
最新バージョン確認
Download | Suricata
yum -y install epel-release
yum -y install libpcap-devel pcre-devel libyaml-devel file-devel zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make libnetfilter_queue-devel lua-devel
/usr/local/src
ディレクトリに移動する。
cd /usr/local/src
ソースファイルをダウンロードする。
wget https://www.openinfosecfoundation.org/download/suricata-4.0.4.tar.gz
ダウンロードしたファイルを展開する。
tar xvzf suricata-4.0.4.tar.gz
展開したディレクトリに移動する。
cd suricata-4.0.4
コンパイル・インストール
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua
make
make install
セットアップ
ディレクトリを作成する。
mkdir /var/log/suricata
mkdir /etc/suricata
ディレクトリの所有者・グループを変更する。
chown -R suricata:suricata /var/log/suricata/
chown -R suricata:suricata /etc/suricata/
必要なファイルをコピーする。
cp classification.config /etc/suricata
cp reference.config /etc/suricata
cp suricata.yaml /etc/suricata
cp -p /etc/suricata/suricata.yaml /etc/suricata/suricata.yaml.org
suricata.yaml
を編集する。
vi /etc/suricata/suricata.yaml
HOME_NET: "[サーバのネットワーク]"
を追記する。
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
はコメントアウトする。
サーバのネットワークは、サーバのIPアドレスが192.168.10.100
の場合、192.168.10.0/24
となる。
vars:
address-groups:
HOME_NET: "[192.168.10.0/24]"
#HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
続けてwindows: [0.0.0.0/0]
をコメントアウトする。
linux: [192.168.10.0/24]
にサーバのネットワークを追記する。
host-os-policy:
# Make the default policy windows.
# windows: [0.0.0.0/0]
windows: []
bsd: []
bsd-right: []
old-linux: []
linux: [192.168.10.0/24]
old-solaris: []
solaris: []
hpux10: []
hpux11: []
irix: []
macos: []
vista: []
windows2k3: []
ディレクトリの下層に移動する。
cd ..
ルールセットの設定
wget https://sourceforge.net/projects/oinkmaster/files/oinkmaster/2.0/oinkmaster-2.0.tar.gz
ダウンロードしたファイルを展開する。
tar -xvzf oinkmaster-2.0.tar.gz
展開したディレクトリに移動する。
cd oinkmaster-2.0
必要なファイルをコピーする。
cp -p oinkmaster.pl /usr/local/bin
cp -p oinkmaster.conf /etc/
cp -p oinkmaster.1 /usr/share/man/man1/
cp -p /etc/oinkmaster.conf /etc/oinkmaster.conf.org
oinkmaster.conf
を編集する。
vi /etc/oinkmaster.conf
url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
を追記する。
# Example for Community rules
# url = //Download/comm_rules/Community-Rules.tar.gz
url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
ディレクトリを作成する。
mkdir /etc/suricata/rules
oinkmaster.plを実行する。
/usr/local/src/oinkmaster-2.0/oinkmaster.pl -C /etc/oinkmaster.conf -o /etc/suricata/rules
ディレクトリを移動する。
cd /etc/suricata
ファイルをダウンロードする。
wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
ダウンロードしたファイルを展開する。
tar -xvzf emerging.rules.tar.gz
ディレクトリの所有者・グループを変更する。
chown -R suricata:suricata /etc/suricata/rules
suricata.yamlを編集します。
vi /etc/suricata/suricata.yaml
以下の文をコメントアウトする。
# - http-events.rules # available in suricata sources under rules dir
# - smtp-events.rules # available in suricata sources under rules dir
# - dns-events.rules # available in suricata sources under rules dir
# - tls-events.rules # available in suricata sources under rules dir
# classification-file: /etc/suricata/classification.config
# reference-config-file: /etc/suricata/reference.config
以下の文を追記します。
classification-file: /etc/suricata/rules/classification.config
reference-config-file: /etc/suricata/rules/reference.config
エラー対策
threshold.configのエラー
suricata -c /etc/suricata/suricata.yaml -i eth0
でsuricataを実行するが、threshold.config
のファイルが無くエラーで停止する。
19/3/2018 -- 17:09:29 - <Notice> - This is Suricata version 4.0.4 RELEASE
19/3/2018 -- 17:09:31 - <Warning> - [ERRCODE: SC_ERR_FOPEN(44)] - Error opening file: "/etc/suricata//threshold.config": No such file or directory
19/3/2018 -- 17:09:32 - <Notice> - all 1 packet processing threads, 4 management threads initialized, engine started.
対策として、空のファイルthreshold.config
を作成する。
vi /etc/suricata//threshold.config
再度、suricataを実行する。
suricata -c /etc/suricata/suricata.yaml -i eth0
ログが表示される。Ctrl+C
で動作を停止させる。
libhtp.so.2のエラー
suricata -c /etc/suricata/suricata.yaml -i eth0
でsuricataを実行するが、libhtp.so.2
のエラーで停止する。
suricata: error while loading shared libraries: libhtp.so.2: cannot open shared object file: No such file or directory
対策として、ldconfig
を実行してから、再度、suricataを実行する。
suricata -c /etc/suricata/suricata.yaml -i eth0
ログが表示される。Ctrl+C
で動作を停止させる。
Suricataのログを確認
ディレクトリを移動する。
cd /var/log/suricata
ログを表示する。
tail -n 50 stats.log
stats.log
のログの内容。
decoder.udp | Total | 46
decoder.icmpv4 | Total | 1
decoder.icmpv6 | Total | 12
decoder.avg_pkt_size | Total | 358
decoder.max_pkt_size | Total | 1468
flow.tcp | Total | 26
flow.udp | Total | 10
flow.icmpv6 | Total | 6
app_layer.flow.dns_udp | Total | 4
app_layer.tx.dns_udp | Total | 4
app_layer.flow.failed_udp | Total | 6
flow.spare | Total | 10000
flow_mgr.flows_checked | Total | 9
flow_mgr.flows_notimeout | Total | 9
flow_mgr.rows_checked | Total | 65536
flow_mgr.rows_skipped | Total | 65527
flow_mgr.rows_maxlen | Total | 1
tcp.memuse | Total | 573440
tcp.reassembly_memuse | Total | 81920
dns.memuse | Total | 1264
flow.memuse | Total | 7086400
------------------------------------------------------------------------------------
Date: 3/19/2018 -- 17:10:47 (uptime: 0d, 00h 00m 18s)
------------------------------------------------------------------------------------
Counter | TM Name | Value
------------------------------------------------------------------------------------
(以下略)
自動起動できるようファイルを作成する。
vi /usr/lib/systemd/system/suricata@.service
[Unit]
Description=Suricata Intrusion Detection Service listening on '%I'
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -i %i -D
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
作成後、更新する。
systemctl daemon-reload
システム再起動時の自動起動設定
systemctl enable suricata@eth0.service
以下のような表示をする。
Created symlink from /etc/systemd/system/multi-user.target.wants/suricata@eth0.service to /usr/lib/systemd/system/suricata@.service.
起動
systemctl start suricata@eth0.service
ステータス確認
systemctl status suricata@eth0.service
以下のような表示をする。
● suricata@eth0.service - Suricata Intrusion Detection Service listening on 'eth0'
Loaded: loaded (/usr/lib/systemd/system/suricata@.service; enabled; vendor preset: disabled)
Active: active (running) since 月 2018-03-19 17:13:21 JST; 13s ago
Process: 13350 ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -i %i -D (code=exited, status=0/SUCCESS)
Main PID: 13351 (Suricata-Main)
CGroup: /system.slice/system-suricata.slice/suricata@eth0.service
mq13351 /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 -...
3月 19 17:13:21 knut systemd[1]: Starting Suricata Intrusion Detection Se.....
3月 19 17:13:21 knut suricata[13350]: 19/3/2018 -- 17:13:21 - <Notice> - T...E
3月 19 17:13:21 knut systemd[1]: Started Suricata Intrusion Detection Ser...'.
Hint: Some lines were ellipsized, use -l to show in full.
参考
【初心者向け】オープンソースのIPS「Suricata」をCentOSに構築した話 - Qiita
Suricata - ArchWiki
Suricata/Installation-and-basic-configuration - aldeid
suricata: error while loading shared libraries: libhtp-0.5.10.so.1 - Google グループ