Pulse Secureの前日のVPN接続実績をメールで飛ばす簡単なスクリプト

Pulse Secureで、前日の接続一覧を作成しメールで飛ばすための簡単なスクリプトを作成しました。

下記のように出力されます。

Apr 13 taro.yamada[vpn-pol-2](10:40:25)

まず日付は見やすい硫黄に出力を整えます。

syslogから必要なフィールドだけを切り出したいのでawkを使います。

taro.yamadaの部分はActive Directoryユーザー名です。
元のsyslogには、ドメイン\taro.yamadaで出力されていますが、スクリプト中のsedコマンドで削除しています。

vpn-pol-2の部分はUser Rolesで作成しているロール名です。
私の環境では、Active Directoryのセキュリてkぃグループでロールを割り振っています。

上記の例では、AD側でVPN-Bというセキュリティグループを割り当てているユーザーのため、それに対応するPCS側のvpn-pol-2が割り当たってセッションが確立していることがわかります。

マッピングは下記の手順です。

User Realms > SystemDomain > Role Mapping

該当のルールで下記のようにしています。

group is "ドメイン/VPN-B" ⇒ vpn-pol-2

スクリプトは下記になります。

#!/bin/sh

export LC_TIME=C
LOGFILE=/var/log/network/psa-1.log
LOGDATE=$(date +'%b %e')
TMPFILE=$(tempfile)
MESSAGE=$(tempfile)
SENDMAIL=/usr/sbin/sendmail
SENDER="送信者アドレス"
SUBJECT="Pulse Secure Login History Today"
RECIPIENT="受信者アドレス"

grep "${LOGDATE}" ${LOGFILE} \
| grep "Session started for user with" \
| awk -v d="${LOGDATE}" '{print d, $12 "("$7")"}' \
| tr -d '<>' > ${TMPFILE}
sed -e 's/(SystemDomain)//g' ${TMPFILE} > TMPFILEnew1
sed -e 's/Active Directoryドメイン名\\//g' TMPFILEnew1 > TMPFILEnew2
LINES=$(cat TMPFILEnew2 | wc -l)

cat << EOT > ${MESSAGE}
To: ${RECIPIENT}
Subject: ${SUBJECT}
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

Pulse Secure Login History Today

Date:$LOGDATE
Total: ${LINES}
EOT

cat TMPFILEnew2 >> ${MESSAGE}
cat ${MESSAGE} | ${SENDMAIL} -t -f ${SENDER} -F ${SENDER} ${RECIPIENT}

rm ${TMPFILE} TMPFILEnew1 TMPFILEnew2 ${MESSAGE}