今日は、分かる人だけのすごーくローカルな話です。
無料の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
だれかの、役に立つとよいのですが。
今日は分かる人だけに。。。ほぼメモでした。
コメント