Debian Stretch 9.3でLogwatchやClamAVの結果をSlackで通知できるように設定を行っていきます。

前回でZabbixとSlackの連携設定を行いました。今回はSlack連携をlogwatchとClamAVでも行っておきます。

Webhook

Webhookの登録は前回の記事と同じなので省略します。

シェルスクリプトの用意

今回は引数をそのままSlackに投稿するようなスクリプトを用意しておきます。 /root/post-slack.shとして次のスクリプトを記述します。

#!/bin/sh

set -eu

#Incoming WebHooksのURL
WEBHOOKURL="ここにIncoming Webhooks IntegrationのURLをいれてね"
#メッセージを保存する一時ファイル
MESSAGEFILE=$(mktemp -t webhooks.XXXX)
trap "
rm ${MESSAGEFILE}
" 0

usage_exit() {
    echo "Usage: $0 [-m message] [-c channel] [-i icon] [-n botname]" 1>&2
    exit 0
}

while getopts c:i:n:m: opts
do
    case $opts in
        c)
            CHANNEL=$OPTARG
            ;;
        i)
            FACEICON=$OPTARG
            ;;
        n)
            BOTNAME=$OPTARG
            ;;
        m)
            MESSAGE=$OPTARG"\n"
            ;;
        \?)
            usage_exit
            ;;
    esac
done
#slack 送信チャンネル
CHANNEL=${CHANNEL:-"#server-log"}
#slack 送信名
BOTNAME=${BOTNAME:-"server-notifier"}
#slack アイコン
FACEICON=${FACEICON:-":envelop:"}
#見出しとなるようなメッセージ
MESSAGE=${MESSAGE:-""}

if [ -p /dev/stdin ] ; then
    #改行コードをslack用に変換
    cat - | tr '\n' '\\' | sed 's/\\/\\n/g'  > ${MESSAGEFILE}
else
    echo "nothing stdin"
    exit 1
fi

WEBMESSAGE='```'`cat ${MESSAGEFILE}`'```'

#Incoming WebHooks送信
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"icon_emoji\": \"${FACEICON}\", \"text\": \"${MESSAGE}${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null

logwatchへ設定

/root/slack-logwatch-report.shとして次のスクリプトを記述します。

#!/bin/sh

logwatch --detail Low| /root/post-slack.sh

$sudo chmod +x /root/slack-logwatch-report.shで実行権限を付与して、cron.dailyへ登録します。

$ sudo ln -s /root/slack-logwatch-report.sh /etc/cron.daily/slack-logwatch-report
$ sudo chmod 755 /etc/cron.daily/slack-logwatch-report

clamavへ設定

以前作成したClamAVのスキャン用スクリプト/root/clam-full.shを次のように修正します。

#!/bin/bash

PATH=/usr/bin:/bin
TITLE=""
TO="To: root\n"
SENDMAIL=/usr/sbin/sendmail
#SENDMAIL=echo

# update definition
# freshclam > /dev/null

# full scan (multi-thread)
#clamdscan --multiscan --verbose --move=/var/log/clamav/virus /

# full scan (single-thread)
clamdscan --verbose --move=/var/log/clamav/virus /

# report
if [ $? = 0 ]; then
    echo "virus not found"
    TITLE="Subject: ClamAV scan OK"
    echo -e $TO$TITLE | cat - /var/log/clamav/clamav.log | $SENDMAIL -t
    cat /var/log/clamav/clamav.log | /root/post-slack.sh
elif [ $? = 1 ]; then
    echo "virus found"
    TITLE="Subject: ClamAV scan NG"
    echo -e $TO$TITLE | cat - /var/log/clamav/clamav.log | $SENDMAIL -t
    cat /var/log/clamav/clamav.log | /root/post-slack.sh
else
    echo "error occured"
    TITLE="Subject: ClamAV scan Error"
    echo -e $TO$TITLE | cat - /var/log/clamav/clamav.log | $SENDMAIL -t
    cat /var/log/clamav/clamav.log | /root/post-slack.sh
fi

まとめ

これで必要そうな設定は一通り終わったかと思います。あとは運用中に問題が出た項目を修正する形になります。

参考

今後

次からは設定したマシンを用いて、ディープラーニングやマイニングの動作を行っていきたいと思います。