Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

自作スクリプトでLAN内に不正接続する端末がないか監視する

More than 1 year has passed since last update.

概要

私は社内SEをしているのだが、

  • 社内LANに管理外の端末が接続されていないかが不安だった
  • ネットで探しても有料の製品しか見当たらなかった(調査不足の可能性はあり)

ということで、自作のスクリプトで管理外の端末が社内LANに入ってきていないか監視してみよう、と思い作ってみた。

監視スクリプトの作成

事前準備

管理PCのMACアドレスの一覧表があるのであれば、それを準備しておく。

LXDでコンテナの起動

LXD上に監視スクリプトを動かすコンテナを作成する。
今回はUbuntu 18.04をARPMONITORという名前で作成。

作成後はコンテナに入る。

lxc launch ubuntu:18.04 ARPMONITOR
lxc exec ARPMONITOR /bin/bash

必要なパッケージのインストールと設定

以下はコンテナ上で作業する。
ARPの監視をするnetdiscoverと、メール通知のためのpostfixをインストール。
postfixは初期設定のままインストールを進める。

apt update && apt full-upgrade -y
apt install postfix netdiscover -y

各々の環境に応じて、postfixの設定ファイルを編集する。
私の環境ではGoogleのSMTPサーバを利用するようにした。
(aspmx.l.google.comはGmailまたはG Suite宛のみに送信可能)

/etc/postfix/main.cf(変更箇所)
relayhost = aspmx.l.google.com:25

設定ファイル編集後はpostfixのreloadを忘れずに。

systemctl reload postfix

監視スクリプトの作成

以下の内容のスクリプトを/root/watch_arp.shとして作成。
NETWORKに監視対象のネットワークを指定する。
その他、メールの差出人や宛先を各々の環境に応じて設定する。

watch_arp.sh
#!/bin/bash
IFACE="eth0"
NETWORK="192.168.10.0/24"
KNOWNMAC="/root/known_mac.txt"
FROM="postmaster@example.com"
TO="administrator@example.com"
TMP=`mktemp`
YYYYMMSSHHMMSS=`date "+%Y-%m-%d %H:%M:%S"`

if [ ! -f "${KNOWNMAC}" ]; then
  touch "${KNOWNMAC}"
fi

/usr/sbin/netdiscover -i ${IFACE} -r ${NETWORK} -P -N | uniq | while read i
do
  MAC=`echo ${i} | awk '{print $2}'`
  if [ "${#MAC}" -eq "17" ] ; then
    if ! `grep -q "${MAC}" ${KNOWNMAC}`; then
      echo ${i} >> ${TMP}
      echo ${i#* } ${YYYYMMSSHHMMSS} >> ${KNOWNMAC}
    fi
  fi
done

if [ -s ${TMP} ]; then
  /usr/sbin/sendmail -t << EOS
FROM: ${FROM}
TO: ${TO}
SUBJECT: ${NETWORK} NEW MAC ADDRESS FOUND - ${YYYYMMSSHHMMSS}

`cat ${TMP}`

EOS
fi

rm ${TMP}

このスクリプトの動作としては、netdiscoverで取得したMACアドレスが、
既知のものかどうかを判定し、未知のものをメールで通知する、
という単純な動作をする。

事前準備の段階で、管理対象PCのMACアドレス一覧がある場合は、
あらかじめ/root/known_mac.txtに入れておけば、無駄にメールが送信されずに済む。
(netdiscoverと同じ書式になるように、MACアドレスの区切りにはコロン(:)、
大文字は小文字に変換しておく)

crontabへの登録

あとはこの監視スクリプトが定期的に動作するように設定すればOK。

crontab -e

5分おきに起動する場合は下記。

*/5 * * * * /bin/bash /root/watch_arp.sh

動作例

新たなMACアドレスを持つ端末がLAN内で見つかると、
下記のような内容のメールが送信される。

一応、MACアドレスから得られるベンダー名も知らせるようにした。

20:c6:eb:0f:cb:23 PanasonicCorporationAVCNetworksCompany

注意点

管理対象PCと同じMACアドレスを持つように偽装された場合には検知できないのでご注意を。
ほかの不正端末検知製品でも同じだと思うけれど。

330k
60人ちょっとの会社の一人情シス。広く浅く。 一人情シスだと独学ばかりなので、ツッコミ歓迎です。
https://www.330k.info/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away