Archive for category サーバー
Apache Range Header DOS 検証補助ツール
Apache HTTPD 1.3/2.xにおいて、RangeヘッダーのDOS脆弱性(CVE-2011-3192)が先日発見されました。
リモートから、Apacheに冗長なRangeヘッダーのリクエストを送信することによって、サーバーのメモリやCPU資源を大きく消費させることができるというものです。なお、最新のアドバイザリでは、1.3に関しては脆弱ではないものの、RangeヘッダーDOSを受けた場合には、それなりに高負荷になるとの指摘があります。
その対策として、Apache開発チームが提示した方法の一つに mod_setenvif や mod_rewrite のモジュールを使って、冗長なRangeヘッダーのリクエストがあった場合には、Rangeヘッダーを無視したり、あるいは、そのリクエストを拒否するというものがあります。
その対策設定をした場合の事後チェックが簡単にできるPerlプログラムを作成しました。
このプログラムを使うことで、mod_setenvif や mod_rewriteを用いた制限が有効であるかを調べることができます。
http://code.google.com/p/apache-range-header-test/wiki/JapaneseManual
以下がその実行例です。例では、Range-Headerで10個の範囲指定をしたリクエストをホストに送信します。「Warning」が返ってきた場合には、制限が効いておらず、Range-Header の要求を Apacheが正常に受け入れられたことを示します。
$ ./httprangetest.pl foo.example.local
[Warning] foo.example.local: Host can accept more than 5 ranges.
次の結果では、Range-Headerの制限が効いており、Range-Headerが無視されています。
$ ./httprangetest.pl bar.example.local
[Info] bar.example.local: Host ignored Range-Header.
次のように第一引数を数値にして、Range-Headerでの範囲指定を任意の数値にすることができます。例では、2個の範囲指定であるため、制限には引っかからず、Apache がリクエストを受け入れています。このプログラムでは、6個以上の範囲指定をApacheが受け入れた場合には、Warning を出します。アドバイザリでは6個以上の範囲指定を制限しており、それに合わせた形です。
$ ./httprangetest.pl 2 bar.example.local
[Info] bar.example.local: Host can accept 2 ranges.
mod_setenvif や mod_rewrite のモジュールを使って、制限を実施した。あるいは、これから実施しようとされている人には、このプログラムを使うと検証が楽になるかもしれません。
なお、RangeヘッダーDOSの脆弱性が閉じられているかどうかを検証するものではないので、その点はご注意ください。
(CVE-2011-3192)
Mongodb のバックアップスクリプト
Posted by 岩本@サーバー事業部 in MongoDB, サーバー on 2010 年 11 月 29 日
先日から社内がMongoDB一色です。どうもこんにちは、岩本@サーバー事業部です。
とゆうわけで、MongoDBのバックアップスクリプト書きました。
弊社はサーバー監視にNagiosを使っているので、通知部分にはNagios絡みのコマンドを書いてますが
適当に変更してお使いください。
#!/bin/bash
OUTPUT=”/backup”
MONGOBIN=”/usr/local/mongodb/bin”
MONGOUSER=”ユーザー”
MONGOPASS=”パスワード”
PHASE=”DB Dump”
FILEDATE=`date +”%Y-%m-%d” –date “1 day ago”`
HOSTNAME=`hostname | cut -d “.” -f 1`$MONGOBIN/mongodump -u $MONGOUSER -password=$MONGOPASS -o $OUTPUT/mongo_dump
STATUS=$?
if [ "$STATUS" = "0" ] ; thenPHASE=”Archive to Dump”
cd $OUTPUT
/bin/tar czvf $OUTPUT/mongodb_$FILEDATE.dump.tar.gz ./mongo_dump
STATUS=$?
rm -rf $OUTPUT/mongo_dumpif [ "$STATUS" = "0" ] ; then
PHASE=”Backup is OK”
# 成功時の通知
/root/bin/check_result_via_nsca.sh $HOSTNAME MONGODB_BACKUP 0 “$PHASE”
fielse
# 失敗時の通知
/root/bin/check_result_via_nsca.sh $HOSTNAME MONGODB_BACKUP 2 “$PHASE”
fi
変なところがあれば、随時突っ込みください。
CentOS5.5 に MongoDBのインストール
Posted by 岩本@サーバー事業部 in MongoDB, サーバー on 2010 年 11 月 25 日
今年もあと1ヶ月と少しになりました。年をとる毎に1年てほんと早いよねぇーと、すっかり社内でももちきりです。
どうもこんにちは、岩本@サーバー事業部です。
ソリューションぶのo2先輩より、とある案件で使うためサーバーに
「MongoDBをインストールしろ」とのご命令を受けましたので、その時のログです。
MongoDBはコンパイルが必要なく、
# cd /usr/local/src
# wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.4.tgz
# tar zxvf mongodb-linux-i686-1.6.4.tgz
# mv mongodb-linux-i686-1.6.4 mongodb
# mv mongodb /usr/local
# /usr/local/mongodb/bin/mongod
以上!
って言ったら怒られたので、ここから起動スクリプトの作成。
http://ringio-blog.appspot.com/2010/10/mongodb-startup-script
こちらのサイトを参考にさせていただきました。
lockファイルがあると、うまく起動しない時があるらしく、lockファイルを消す処理を入れました。
# vi /etc/init.d/mongod
#!/bin/sh
#
# chkconfig: – 85 15
# description: MongoDB daemon
# #
# pidfile: /var/run/mongod.pid
# config: /etc/.conf# Source function library.
. /etc/rc.d/init.d/functions# parameter
mongoHome=/usr/local/mongodb
mongod=${mongoHome}/bin/mongod
mongodbpath=/var/mongodb
logfile=/var/log/mongod.log
pidfile=/var/run/mongod.pid
mongoconf=/etc/mongodb.confRETVAL=0
start() {
KIND=”MongoDB”if test -e ${pidfile} ; then
echo “already running”else
if test -e ${mongodbpath}/mongod.lock ; then
rm -f ${mongodbpath}/mongod.lock
fiecho -n $”Starting $KIND services: ”
${mongod} –pidfilepath=${pidfile} –dbpath=${mongodbpath} –logappend –logpath=${logfile} –config=${mongoconf} –fork
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch ${mongodbpath}/mongod.lock || RETVAL=1
return $RETVAL
fi
}stop() {
echo
KIND=”MongoDB”
echo -n $”Shutting down $KIND services: ”
killproc $mongod
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f ${mongodbpath}/mongod.lock ${pidfile}
echo “”
return $RETVAL
}restart() {
stop
start
}status() {
KIND=”MongoDB”if test -e ${pidfile} ; then
echo “mongod is running”
echo “if mongod could not run, please remove pidfile”
else
echo “mongod is not running”
fi
}case “$1″ in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo $”Usage: $0 {start|stop|status|restart}”
exit 2
esacexit $?
さらに、認証の設定
# vi /etc/mongodb.conf
noauth = false
auth = true
DBユーザーの作成
# mongo
> use admin
> db.addUser(“username”, “password”)
ユーザー認証の確認
# mongo
> db.auth(“username”, “password”)
以上。これで、o2氏にもご納得いただけたかと。
変なところがあれば、ご指摘頂けると幸いです。
xargs と exec
Posted by 岩本@サーバー事業部 in サーバー on 2010 年 9 月 22 日
今日は中秋の名月だとか、どうりで朝から体毛がよく伸びるが図です。こんにちは。岩本@サーバー事業部です。
Linuxサーバーで差分バックアップを行う際、findを使って差分ファイルを抜き出し、
tarで圧縮をするのが一般的かと思います。
1日以内の更新ファイルを見つけて、tarで圧縮
find $BACKUPDIR -mtime -1 -type f | xargs tar czvf /misc/backup/backup_daily.tar.gz
しかし、上記だとファイル名にスペースや文字化けが入っていると、xargsがクォート処理されていないため
うまく動いてくれません。
そこでっ
find $BACKUPDIR -mtime -1 -type f -exec tar czvf /misc/backup/backup_daily.tar.gz “{}” \;
でも、これだと、検索アイテム毎に処理を行うのでリソースを食いますし、
元ファイル毎に圧縮ファイルが上書きされていきます。(tarのオプションで上書きは解消できるはず?)
で、色々と調べていくと、おしりの”{}” \;を”{}” +と変更することで、逐次ではなく、検索結果をまとめて処理してくれるとか。
find $BACKUPDIR -mtime -1 -type f -exec tar czvf /misc/backup/backup_daily.tar.gz “{}” +
とゆうわけで、xargsとexecの覚書です。
CentOSにDAG(rpmforge)のyumリポジトリの追加
Posted by 岩本@サーバー事業部 in サーバー on 2010 年 9 月 2 日
もうすっかり9月ですね、岩本@サーバー事業部です。
CentOSを新規でインストールする時、標準のyumリポジトリでは足りず、DAGを利用する際、
yumリポジトリの追加方法の覚書です。なぜかいつもよく忘れます。
DAGのサイトより
左側メニュー
ページ中段
[Getting started Please read "Installation and Configuration" from the FAQ to get started quickl.]
にて、各OS毎のリポジトリ追加方法が載っています。
CentOS5はRedHatEL5のリポジトリを使います。
# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm



最近のコメント