IDS SNORT3をインストールしてみた

今日は、分かる人だけのすごーくローカルな話です。

無料のIDS(不正侵入検知システム)である、SNORT3最新版を稼働させました。

以下はほとんどメモなのですが、どなたかの役に立つ方もいるかもしれません。

手順が分かるのに3日かかりましたので。

雑ですが、ご勘弁を。ただのメモです。

Debian 5に入れてみました。

前提条件が色々あったので、試した結果以下のようになりました。

apt install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev libpcap-dev 
openssl libssl-dev libnghttp2-dev libdumbnet-dev bison flex libdnet autoconf lib
tool

apt install build-essential  libnet1-dev  luajit hwloc libdnet-dev  liblzma-dev  pkg-config libhwloc-dev cmake cpputest  uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev  libunwind-dev
libsafec-dev

apt install cmake
apt install hwloc
apt install libhwloc-dev
apt -y install libgoogle-perftools-dev

そこで、libdaqを入れます。

tar -xvzf libdaq-3.0.9.tar.gz
cd libdaq-3.0.9
autoreconf -vfi
./configure

次にsnort3を入れます。

cd /usr/src
mkdir snort_src

tar -xvzf snort3-3.1.47.0.tar.gz
cd snort3-3.1.47.0
./configure_cmake.sh  --prefix=/usr/local --enable-tcmalloc
cd build

make
make install

ldconfig
ln -s /usr/local/bin/snort /usr/sbin/snort
snort -V

snortをインストールして出来る設定ファイルは以下の場所でした。
/usr/local/etc/snort

登録ユーザに配るルールは以下のものです。
builtins etc rules so_rules

communityで配るルールはこんなのでした。
registered.tar.gz
snort3-community.rules

make
make install

で、セッティングは

mkdir /usr/local/etc/rules
chmod -R 5775 /usr/local/etc/rules 
chown -R snort:snort /usr/local/etc/rules 
chown -R snort:snort /usr/local/etc/snort 

mkdir /var/log/snort
mkdir /usr/local/lib/snort_dynamicrules
chmod -R 5775 /var/log/snort
chmod -R 5775 /usr/local/lib/snort_dynamicrules
chown -R snort:snort /var/log/snort
chown -R snort:snort /usr/local/lib/snort_dynamicrules

コミュニティルールを使用するので
tar -xvf snort3-community-rules.tar.gz
cp snort3-community-rules/* /usr/local/etc/rules/

vi /usr/local/etc/snort/snort.lua
HOME_NET = '192.168.0.0/24'  のように自分の監視するネットワークに設定して
EXTERNAL_NET = '!$HOME_NET'

無いと動かないファイルを作成します。
mkdir /usr/local/etc/rules/lists
chmod -R 5775 /usr/local/etc/rules/lists 
touch /usr/local/etc/rules/lists/white_list.rules
touch /usr/local/etc/rules//listsblack_list.rules
chown -R snort:snort /usr/local/etc/rules
chown -R snort:snort /usr/local/etc/snort

テストのために
vi /usr/local/etc/rules/local.rules
の最終行に下記を追記します
alert icmp any any -> $HOME_NET any (msg:"ICMP connection test"; sid:1000001; rev:1;)

実行して設定ファイルを確認します
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules

IDSの動作を確認です。
他のPCからpingするとコンソールに警告が表示されるのを確認します。
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i enp3s0 -A alert_fast -s 65535 -k none

logを設定します。これでログが記録できるようになります。
vi /usr/local/etc/snort/snort.lua

alert_fast = { 
        file = true, 
        packet = false,
        limit = 10,
}

実行して確認します。
snort -c /usr/local/etc/snort/snort.lua

他のPCからpingするとコンソールに警告が表示されます。
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i enp3s0 -A alert_fast -s 65535 -k none -l /var/log/snort/

 ルールは以下に追記します。
vi /usr/local/etc/snort/snort.lua
ips で検索
ips =
{
    variables = default_variables,
    include = '/usr/local/etc/rules/local.rules',
    include = '/usr/local/etc/rules/snort3-community.rules'
}

NIC設定コマンドが無かった。
apt install ethtool

無差別モードに設定します。
ip link set dev enp3s0 promisc on
ip address show enp3s0

ethtool -k enp3s0 | grep receive-offload
ethtool -K enp3s0 gro off lro off

インターフェイスを構成します。
vi /etc/systemd/system/snort3-nic.service
以下を貼り付けます。
[Unit]
Description=Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev enp3s0 promisc on
ExecStart=/usr/sbin/ethtool -K enp3s0 gro off lro off
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target

ここまで。

systemd 構成設定をリロードします。
systemctl daemon-reload

起動時にサービスを開始して有効にし、次のコマンドを実行します。
systemctl enable --now snort3-nic.service

snort3-nic.service を確認します
systemctl status snort3-nic.service

--- OpenAppID install -------------------
tar xzvf snort-openappid.tar.gz
cp -R odp /usr/local/lib/
vi /usr/local/etc/snort/snort.lua

appid =
{
-- appid requires this to use appids in rules
app_detector_dir = '/usr/local/lib',
log_stats = true,
}

  • テストします
    snort -c /usr/local/etc/snort/snort.lua

vi /usr/local/etc/rules/local.rules

alert tcp any any -> any any ( msg:"Facebook Detected"; appids:"Facebook"; sid:10000002; metadata:policy security-ips alert; )

他のPCからfacebookにアクセスするとalert_fast.txtに警告が表示されます。
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i enp3s0 -A alert_fast -s 65535 -k none -l /var/log/snort/

Snort を systemd サービスとして実行するように設定します。
ユーザ作成 or NoLogin
useradd -r -s /usr/sbin/nologin -M -c SNORT_IDS snort

vi /etc/systemd/system/snort3.service
以下を貼り付けます。

[Unit]
Description=Snort 3 NIDS Daemon
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -u snort -g snort -i enp3s0 -m 0x1b --create-pidfile
[Install]
WantedBy=multi-user.target

systemd 構成をリロードします。
systemctl daemon-reload

ログ ファイルの所有権と権限を設定します。
chown -R snort:snort /var/log/snort/*

システム起動時に Snort を起動実行できるようにします。
systemctl enable snort3
service snort3 start

サービスのステータスをチェックします。
systemctl status snort3

テストに使用した、local.ruleをコメントアウトしておきます。
    include = '/usr/local/etc/rules/local.rules',

time zone changeします。
timedatectl
timedatectl set-timezone Asia/Tokyo 

だれかの、役に立つとよいのですが。

今日は分かる人だけに。。。ほぼメモでした。

コメント

タイトルとURLをコピーしました