概要
私は社内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宛のみに送信可能)
relayhost = aspmx.l.google.com:25
設定ファイル編集後はpostfixのreloadを忘れずに。
systemctl reload postfix
監視スクリプトの作成
以下の内容のスクリプトを/root/watch_arp.sh
として作成。
NETWORK
に監視対象のネットワークを指定する。
その他、メールの差出人や宛先を各々の環境に応じて設定する。
# !/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アドレスを持つように偽装された場合には検知できないのでご注意を。
ほかの不正端末検知製品でも同じだと思うけれど。