■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
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}"
;;
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 "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