snort-mysql/snort-pgsqlのレポートメール

■SnortとDB連携

 snort-mysqlの導入、DNSバージョンチェック、シグニチャの確認
 http://d.hatena.ne.jp/labunix/20120809

 Squeezeにsnort-pgsqlの導入
 http://d.hatena.ne.jp/labunix/20120815

 Snortの動作中に統計を見る(正常性チェック)
 http://d.hatena.ne.jp/labunix/20120811

■cronでも使えるように、パスワードに気を使いました。
 SQLコマンドは後日調整予定です。
 ひとまず、最初のトリガーとして、新しいシグネチャが確認出来れば良いという方針で作成しました。
 Debian Squeezeのsnort-mysqlとsnort-pgsqlのどちらでも動作します。

 下記仕様に基づきます。「snort.conf」が正しい事が前提です。

 1)パスワードは「snort.conf」の「output」行にあることを前提にしている。
  「output」前の空白の有無は問わないが、コメント行にはマッチしない。

  ※上記設定ファイルのアクセス権は自身の環境をご確認下さい。

 2)パスワードを一時環境変数の「env」でセットしていること。
  これによりSQLコマンドの実行時のみパスワードを取り込みます。

 3)このコマンド自体がrootのみ実行許可、rootのみが「読み取り/実行」可能で、
  アクセス権を変更しても、実行時に上記設定に毎回再変更します。

 4)ログの出力先は「/var/log/snort」直下とし、所有者「snort:adm」のアクセス権は「750(MASK 027から)とした。

 5)メールはroot宛て。不要なら、「w3m」から3行をコメントアウトする。

$ w3m -dump https://raw.github.com/labunix/snort_log/master/snort_report.sh
#!/bin/bash
# Last Update   :       2012/08/17
# Author        :       labunix
# License       :       GNU General Public License
# Description   :       Temp Password from snort.conf
#                       env MYSQL_PWD
#                       env PGPASSWORD
#
# Get "[mysql|postgresql]" "password" from snort.conf
# Format:
# output database: log, [mysql|postgresql], user=snort dbname=snort password=XXXX host=localhost

if [ `id -u` -ne 0 ];then
  echo "Sorry,Not Permit User!"
  exit 1
fi

chmod 500 $0
chown root:root $0

MYSQL_PGSQL=$(grep "^ *output database" /etc/snort/snort.conf | \
  sed s/","/" "/g | awk '{print $4}')

DBLOG="/var/log/snort_${MYSQL_PGSQL}.html"
DBCOM='select * from signature;'
MAILTO="root@`hostname -f`"
touch "$DBLOG" || exit 1

case "$MYSQL_PGSQL" in
mysql)
  echo "${DBCOM}" | sudo -u snort \
  env MYSQL_PWD=$(grep "^ *output database" /etc/snort/snort.conf | \
    sed s/"^ *output database.*password="//g | awk '{print $1}') \
  mysql -u snort -D snort -h localhost -H > "${DBLOG}"
  # echo "For DEBUG MYSQL_PWD=${MYSQL_PWD}"
  ;;
postgresql)
  echo "${DBCOM}" | sudo -u snort \
  env PGPASSWORD=$(grep "^ *output database" /etc/snort/snort.conf | \
    sed s/"^ *output database.*password="//g | awk '{print $1}') \
  psql -U snort -d snort -h localhost -H > "${DBLOG}"
  # echo "For DEBUG PGPASSWORD=${PGPASSWORD}"
  ;;
*)
  echo "Error: No output database Settings."
  ;;
esac

w3m -no-proxy -dump -cols 80 "${DBLOG}" | \
  mail -s "Snort db Signature Report `env LANG=C date '+%Y/%m/%d %H:%M%S'`" \
  "${MAILTO}"

chown snort:adm "$DBLOG"
chmod 750 "$DBLOG"
unset DBCOM DBLOG MYSQL_PGSQL MAILTO
exit 0