では、シェルスクリプトを作成してみましょう。今回のシェルスクリプト(sshlogin_notify.sh)は、次のようになります。「アクセストークン」の部分は、 自分のLINE Notifyのアクセストークンに書き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#!/bin/bash LOGFILE_NAME="/tmp/shellscript_auth.log" ACCESS_TOKEN="アクセストークン" ##発生日取得関数 date_time(){ YEAR=$(echo $1 | cut -f 1 -d "T" | cut -f 1 -d "-") MONTH=$(echo $1 | cut -f 1 -d "T" | cut -f 2 -d "-") DATE=$(echo $1 | cut -f 1 -d "T" | cut -f 3 -d "-") HOUR=$(echo $1 | cut -f 2 -d "T" | cut -f 1 -d ":") MINUTE=$(echo $1 | cut -f 2 -d "T" | cut -f 2 -d ":") SECOND=$(echo $1 | cut -f 2 -d "T" | cut -f 3 -d ":" | cut -f 1 -d ".") TIME="${YEAR}年${MONTH}月${DATE}日${HOUR}時${MINUTE}分${SECOND}" } ##ログインメッセージ送信関数 login_message(){ MESSAGE="${1}(${2})から${3}ユーザーでログインがありました。発生日時:${4}" curl -s -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" -F "message=${MESSAGE}" https://notify-api.line.me/api/notify > /dev/null } ##不正アクセスメッセージ送信関数 nologin_message(){ MESSAGE="${1}(${2})から${3}ユーザーで不正アクセスがありました。発生日時:${4}" curl -s -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" -F "message=${MESSAGE}" https://notify-api.line.me/api/notify > /dev/null } ##メインの処理 if [ -f ${LOGFILE_NAME} ]; then ##ログ抽出 mv ${LOGFILE_NAME} /tmp/tmp_auth.log service rsyslog restart ##ログイン通知 cat /tmp/tmp_auth.log | grep "Accepted" > /tmp/tmp_login.log cat /tmp/tmp_login.log | while read line do IP=$(echo $line | cut -f 9 -d " ") COUNTRY=$(whois ${IP} | grep "country:" | uniq | sed -e 's/ */ /g' | cut -f 2 -d " ") if [ -n $COUNTRY ]; then COUNTRY="不明" fi USER=$(echo $line | cut -f 7 -d " ") date_time $line login_message $IP $COUNTRY $USER $TIME done ##不正アクセス通知 cat /tmp/tmp_auth.log | grep "error: maximum authentication" | sed -e "s/invalid user\s/登録なし:/g"> /tmp/tmp_nologin.log cat /tmp/tmp_nologin.log | while read line do IP=$(echo $line | cut -f 12 -d " ") COUNTRY=$(whois ${IP} | grep "country:" | uniq | sed -e 's/ */ /g' | cut -f 2 -d " ") if [ -n $COUNTRY ]; then COUNTRY="不明" fi USER=$(echo $line | cut -f 10 -d " ") date_time $line nologin_message $IP $COUNTRY $USER $TIME done rm /tmp/tmp_auth.log /tmp/tmp_login.log /tmp/tmp_nologin.log fi |