4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-07-04

概要

私は社内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アドレスを持つように偽装された場合には検知できないのでご注意を。
ほかの不正端末検知製品でも同じだと思うけれど。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?