DoS攻撃対策 Apache mod_limitipconn

前回DoS攻撃対策としてmod_evasiveを導入しました。
今までは攻撃をあまり気にしていませんでしたが
そこそこmod_evasiveが働いているようなので、更に攻撃対策を強化することに。

今回導入するのは、同時接続数を制限してくれるmod_limitipconnというモジュールです。
このモジュールは同一IPからの同時接続数を制限してくれます。

まずは、適当なディレクトリにmod_limitipconnのページからソースをDLしてインストール。

ディレクトリ移動
#cd /usr/local/src

mod_limitipconn-0.23のDL
#wget http://dominia.org/djao/limit/mod_limitipconn-0.23.tar.bz2

解凍
#tar xjvf mod_limitipconn-0.23.tar.bz2

解凍したソースディレクトリに移動
#cd mod_limitipconn-0.23

Apache2用にMakefileを変更
#vi Makefile

7行目のAPXSコマンドをApache2用に変更
※APXSが未インストールの場合は
#apt-get install apache2-prefork-devで先にインストールしてください。

#   the used tools
APXS=apxs
APACHECTL=apachectl

↓ のように書き換え

#   the used tools
APXS=/usr/bin/apxs2
APACHECTL=apachectl

コンパイル&インストール
#make install

Apacheの設定にモジュールの記述を追加
#vi /etc/apache2/apache2.conf

LoadModule limitipconn_module /usr/lib/apache2/modules/mod_limitipconn.so

ExtendedStatus On



MaxConnPerIP 3
NoIPLimit image/*


※Locationの設定は複数記述することが出来ます。
また、.httaccessに記述することも可能です。
複数の設定を行うことで、より細かく制限を行う事が出来ます。

上記の設定の意味は、/(httpルート)以下のディレクトリで
同一IPからの同時接続数を3に制限する。
但し、MIMEタイプ image/* は除く、という設定になります。
MaxConnPerIPが3だとサイトによっては少ないかもしれません。
ZIPや大きなファイルなど、回線負荷に関わるものを、MIMEで少なめに指定するのは有効だと思います。
しかし通常のページを3に制限してしまうと、JavaScriptファイルを裏で読んでくれなかったりしますので
ページとして問題が出る場合があります。
その場合は数字を少し大きくしてあげるか、特定のファイルタイプのみカウントの対象(または非対象)にするか
MIMEタイプでカウントの対象外になるようにしましょう。

設定が終わったらconfが正しく設定されたかを確認。
#apache2ctl -M

上記コマンド実行後にlimitipconn_moduleとSyntax OKが表示されれば、設定自体は問題ない事になります。

設定が問題なければ、apacheを再起動
#/etc/init.d/apache2 restart

最後にうまく動作するかテストを行うといいと思います。
※ページによってはうまく読み込めなかったりしますので、テストされる事をお勧めします。
ブラウザを複数開いて、一気にアクセスしてみると簡単にテスト出来ます。

DoS攻撃対策 Apache mod_evasive

最近、稀にサーバー負荷が非常に高い時があります。
その時でも完全にフリーズしているわけではないが、ログインして再起動するのがやっとな状況で
サーバーとしては機能しておらず、何かの対策を行う必要が出て来ました。

まずはKernelを最新の2.6.32.2にアップ。
これだけでは解決しないと考えているので、一番疑わしいhttpdにも対策を。
既にiptablesにてヤバそうな国からのアクセス自体をブロックしているが
DoS攻撃などは、ウィルス感染により足場サーバーから行われるので
DoS攻撃をブロックすることにしました。

今回はDoS攻撃に有効なアパッチ用のモジュールmod_evasiveを使用することにました。

まずは、適当なディレクトリにzdziarski.comのmod_evasiveページからソースをDLしてインストール。
※既にリンク先のサイトはなくなっているようです

ディレクトリ移動
#cd /usr/local/src

mod_evasive v1.10.1のDL
#wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz

解凍
#tar xzf mod_evasive_1.10.1.tar.gz

解凍したソースディレクトリに移動
#cd mod_evasive

このモジュールはAPXSを使用してコンパイル&インストールを行うのですが
デフォルトではAPXSが入っていなかったので、パッケージをインストール。
#apt-get install apache2-prefork-dev

APXSを利用してコンパイル&インストール
#/usr/bin/apxs2 -i -a -c mod_evasive20.c

※ブラックリスト追加時にメールを送信したい場合は
mod_evasive20.cの中にメールコマンドがハードコーディングされているので
コマンドを書き換える必要があります。

45行目の以下の行がメール送信コマンド部分です。
#define MAILER “/bin/mail %s”

/* BEGIN DoS Evasive Maneuvers Definitions */

#define MAILER	"/bin/mail %s"
#define  LOG( A, ... ) { openlog("mod_evasive", LOG_PID, LOG_DAEMON); syslog( A, __VA_ARGS__ ); closelog(); }

Exim4の場合は ↓ のように書き換えることで送信出来ます

/* BEGIN DoS Evasive Maneuvers Definitions */

#define MAILER	"mail -t %s"
#define  LOG( A, ... ) { openlog("mod_evasive", LOG_PID, LOG_DAEMON); syslog( A, __VA_ARGS__ ); closelog(); }

件名も付けたい場合は ↓ のように書き換えることで件名付きで送信出来ます

/* BEGIN DoS Evasive Maneuvers Definitions */

#define MAILER	"mail -s 'ここに件名を入れます' -t %s"
#define  LOG( A, ... ) { openlog("mod_evasive", LOG_PID, LOG_DAEMON); syslog( A, __VA_ARGS__ ); closelog(); }

当然ならがApacheの設定ファイルのDOSEmailNotifyに(後述の設定部分参照)
送信先のメールアドレスを書いて有効にする必要があります。

コンパイルとインストールに成功したようですが
なんかモジュールのデフォルト設定書き込みに失敗したみたいなので、手動で書きこみます。

confファイルに追記(追記はhttpd.confで良いと思いますが、私はファイル分けが面倒な人なので・・・)
#vi /etc/apache2/apache2.conf

以下の行をapache2.confに追加

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so


DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60
DOSLogDir "/var/log/apache2/mod_evasive/logs"
#DOSEmailNotify info@domain
#DOSSystemCommand   ""
#DOSWhitelist       127.0.0.1

これらの設定の意味は、「mod_evasive 設定」などで検索すると沢山出て来ますので、省略させて頂きます。
ちなみにこの設定では、1秒間に同じページに2回アクセスがあるか
1秒間にサイトに50回以上アクセスがあった場合に、60秒間 403Eroorを返すような動作となります。
ブロックの記録は、DOSLogDirで設定した場所へブロックしたIPが保存されます。

設定が終わったらconfが正しく設定されたかを確認。
#apache2ctl -M

上記コマンド実行後にevasive20_moduleとSyntax OKが表示されれば、設定自体は問題ない事になります。

設定が問題なければ、apacheを再起動
#/etc/init.d/apache2 restart

ちゃんとブロック出来るかmod_evasiveのソースに付属していた、テストスクリプトを実行
#perl test.pl

テストのレスポンスが、途中からHTTP/1.1 403 Forbiddenを返すようになれば
うまくブロックが出来ている事になります。

mod_evasive自体は設定通りの振る舞いをするだけで
決して万能なブロックツールというわけではありません。
他のブロック方法との併用や、環境にあった適切な設定を行うことが大切だと思います。

Kernel 2.6.32をコンパイル

※書いてあるカーネルより新しいカーネル用のdiffファイルは下の方にあります。
コマンド部分はカーネルのバージョンに合わせ、2.6.32.○のように書き換えて実行してください。

Kernelの2.6.32が正式にリリースされたので、T4のカーネルを2.6.32に上げてみることに。

まずは、適当なディレクトリを作成。
# mkdir kernel_complie
# cd kernel_complie

The Linux Kernel Archivesから2.6.32のカーネルソースをDL
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2

解凍
# tar jxvf linux-2.6.32.tar.bz2

作業ディレクトリに2.6.32用のパッチをDL
↓これがパッチです。
kuro-nas-t4-2.6.32.diff

解凍したカーネルソースのディレクトリに移動。
# cd linux-2.6.32

initrd.img、its、dtbファイルをソースディレクトリにDL
(これらはFitImage作成用のディレクトリにDLでも構いません)
initrd.img
kuro_nas_t4.its
kuro_nas_t4.dtb
※dtbファイルは時刻のズレ対応済みです。

2.6.32用のパッチを実行
# patch -p 1 < ..//kuro-nas-t4-2.6.32.diff T4デフォルトのconfigファイルをコピー # cp arch/powerpc/configs/kuro_nas_t4_defconfig .config ※既にオプション変更したconfigを利用する場合は、変更済みのconfigをコピーしてください。

oldconfig実行
# make oldconfig

※カーネルのコンパイルオプションを変更する場合は、ここでオプション変更してください。
デフォルトで選択されていない機能やデバイスを有効にするには
コンパイルオプションを必要に応じて変更する必要があります。

コンパイルオプションを変更する場合
# make menuconfig

カーネルのコンパイル
# make

カーネルのコンパイルがうまく行けばmoduleのインストール
# make modules_install

コンパイルされたカーネルバイナリを名前変更
# mv vmlinux.bin.gz vmlinuz

fitImageの作成
# mkimage -f kuro_nas_t4.its uImage-2.6.32.buffalo

作成したfitImageを/bootにコピー
# cp uImage-2.6.32.buffalo /boot

試しに正常起動できるかテスト。
再起動してu-bootからコマンドを実行。

BUFFALO>> setenv kernel uImage-2.6.32.buffalo
BUFFALO>> run hdboot

正常起動したら/bootのシンボリックリンクを書き換えて、通常起動カーネルを新しく作成したカーネルに変更。
# cd /boot
# rm uImage.buffalo
# ln -s uImage-2.6.32.buffalo uImage.buffalo
※もし正常起動しなかった場合、シンボリックリンクを書き換えてなければ
普通にリセットすることで、正常動作時のカーネルで起動します。

今のところエラーも無く正常に2.6.32が動作中です。

以下は参考にさせて頂いたサイトです、感謝。
FrontPage – PukiWiki
D Blog

2009/12/21 追記
Kernel2.6.32.2をコンパイルして無事動作中です。

The Linux Kernel Archivesから2.6.32.2のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2

Kernel2.6.32.2対応パッチファイル
kuro-nas-t4-2.6.32.2.diff

2010/01/09 追記
Kernel2.6.32.3をコンパイルして無事動作中です。

The Linux Kernel Archivesから2.6.32.3のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.3.tar.bz2

Kernel2.6.32.3対応パッチファイル
kuro-nas-t4-2.6.32.3.diff

2010/01/20 追記
Kernel2.6.32.4をコンパイルして無事動作中です。

The Linux Kernel Archivesから2.6.32.4のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.4.tar.bz2

Kernel2.6.32.4対応パッチファイル
kuro-nas-t4-2.6.32.4.diff

2010/01/24 追記
Kernel2.6.32.5をコンパイルして無事動作中です。

The Linux Kernel Archivesから2.6.32.5のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.5.tar.bz2

Kernel2.6.32.5対応パッチファイル
kuro-nas-t4-2.6.32.5.diff

2010/01/29 追記
Kernel2.6.32.6をコンパイルして無事動作中です。

The Linux Kernel Archivesから2.6.32.6のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.6.tar.bz2

Kernel2.6.32.6対応パッチファイル
kuro-nas-t4-2.6.32.6.diff

2010/01/30 追記
Kernel2.6.32.7をコンパイルして無事動作中です。

The Linux Kernel Archivesから2.6.32.7のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.7.tar.bz2

Kernel2.6.32.7対応パッチファイル
kuro-nas-t4-2.6.32.7.diff

2010/02/11 追記
Kernel2.6.32.8をコンパイルして無事動作中です。

The Linux Kernel Archivesから2.6.32.8のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.8.tar.bz2

Kernel2.6.32.8対応パッチファイル
kuro-nas-t4-2.6.32.8.diff

2010/02/26 追記
Kernel2.6.33をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.33のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.tar.bz2

Kernel2.6.33対応パッチファイル
kuro-nas-t4-2.6.33.diff

2010/03/19 追記
Kernel2.6.33.1をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.33.1のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.bz2

Kernel2.6.33.1対応パッチファイル
kuro-nas-t4-2.6.33.1.diff

2010/04/03 追記
Kernel2.6.33.2をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.33.2のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.2.tar.bz2

Kernel2.6.33.2対応パッチファイル
kuro-nas-t4-2.6.33.2.diff

2010/04/28 追記
Kernel2.6.33.3をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.33.3のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.3.tar.bz2

Kernel2.6.33.3対応パッチファイル
kuro-nas-t4-2.6.33.3.diff

2010/05/14 追記
Kernel2.6.33.4をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.33.4のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.4.tar.bz2

Kernel2.6.33.4対応パッチファイル
kuro-nas-t4-2.6.33.4.diff

2010/05/19 追記
Kernel2.6.34をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.34のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.tar.bz2

Kernel2.6.34対応パッチファイル
kuro-nas-t4-2.6.34.diff

2010/07/06 追記
Kernel2.6.34.1をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.34.1のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2

Kernel2.6.34.1対応パッチファイル
kuro-nas-t4-2.6.34.1.diff

2010/08/12 追記
Kernel2.6.35.1をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.35.1のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.1.tar.bz2

Kernel2.6.35.1対応パッチファイル
kuro-nas-t4-2.6.35.1.diff

2010/08/16 追記
Kernel2.6.35.2をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.35.2のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.2.tar.bz2

Kernel2.6.35.2対応パッチファイル
kuro-nas-t4-2.6.35.2.diff

2010/08/24 追記
Kernel2.6.35.3をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.35.3のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.3.tar.bz2

Kernel2.6.35.3対応パッチファイル
kuro-nas-t4-2.6.35.3.diff

2010/09/30 追記
Kernel2.6.35.7をコンパイルしてテスト運用中です。

The Linux Kernel Archivesから2.6.35.7のカーネルソースをDL
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.7.tar.bz2

Kernel2.6.35.7対応パッチファイル
kuro-nas-t4-2.6.35.7.diff

ダウンサス取り付け

久々にヴォクシー弄りです。

ダウンサスの交換に関しては、知識と道具が無いと出来ません。
自分で交換を考えている方は、知識、道具共にお持ちだと思うので
細かい交換方法に関しては省略させて頂きます。

今回交換したダウンサスは、インシュランス(INSURANCE)のZRR70用となります。
購入前にネットでZRRに装着している画像が載っているページを探しましたが
見つけることが出来なかったので、書いてある落ち幅を頼りに購入してみました。
(ちなみにメーカーのHPには、まだAZR60用しか載っていません)

以下、書かれていた商品の詳細です。
≪スペック≫
・ダウン量Fr:-45~-50mm Rr:-40~-45mm
・バネレート Fr:2.6kg Rr:6.2kg
・エンジン型式:3ZR-F(A)E
≪備考≫   2WD
B/Rカット (バンプラバーカットの略、ローダウンによるショートストロークでの底突き対処法の1つで、
純正ショックアブソーバーについているラバーゴムをカットしてショックのストロークを確保すると言う意味です。
乗り心地重視の方はスプリング交換時に一緒に作業してください。
カットしなくても問題無く走行可能ですし、車検対応します。)

交換の際は、ワイパー・雨避けを外した方が作業はしやすいと思います。
(外さなくても可能なようですが、非常に狭い隙間でフロントのアッパーのネジを外すことになります)
雨避け外し後

ノーマル時のフロント
フロントダウン前

ダウン後のフロント
フロントダウン後

ノーマル時のリア
リアダウン前

ダウン後のリア
リアダウン後

地上からフェンダーまでを計った方が、正確で良かったと思います・・・
そう言っても今更なので、写真のメジャー読みで(^^;
(本来はホイールのセンターからフェンダーまでかな?)
フロントの隙間:8.5cm→4cm
リアの隙間:10cm→6cm

フロントで4.5cmダウン、リアで4cmダウン
暫く走ってるうちに、あと5mmくらいは落ちると思います。
ほぼ書いてあった通りの落ち幅です。

交換が終わったら、平らな場所でコンピューターの光軸リセットを行い終了。
(手動で合わせるか、これをやらないと、ノーマルに比べてライトが下向きになります)

私的には、ベタベタでもなく、落ちたか分からないくらいでもなく
丁度良い感じに落ちたと思うのですが、嫁的には「前が落ちすぎ・・・」だそうです(^^;
乗り心地もノーマルより少し固くなったくらいで、悪くはなっていないと思いますが
嫁的には「乗り心地悪くなった」だそうです・・・
(フワフワしたノーマルより全然良いと思うけどな・・・)
やはりこの辺りの感じ方は個人差がありますね~

全体ダウン後
全体ダウン後

2009/11/22 追記
インシュランスのZRR用ダウンサスには、標準でサイレンサーラバーが付いています。
サイレンサーラバーは、サスがが伸び縮みした際に
スプリング同士が干渉し、ゴトゴト音を出すのを防止してくれます。
このパーツは各サスメーカーでも販売していて、干渉音を消すには非常に効果的です。
割と高価なサスには付属していたりしますが、この価格帯のサスで付属してるのは気が利いてますね。
スプリングの一部にゴムのような物が付けれられていますが
それがサイレンサーラバーですので、外さずに取り付けてください。

トヨタ純正ナビのメモリ地点にオービス登録その3

純正ナビにオービスデータを登録するツールが、ラジオライフ11月号に掲載されたので
これを機にGUIツールを作り直してみました。

トヨタ純正ナビのメモリ地点にオービス登録 まとめ最新情報はこちらへ

基本的にやってることは前のものと同じなのですが
エクセルやエディターを使わずに出来るだけツールで完結出来るようにしました。
使用方法などは以前の記事を読んで頂ければ分かると思います。

トヨタ純正ナビのメモリ地点にオービス登録
トヨタ純正ナビのメモリ地点にオービス登録その2

大きく変更になった点は、パナファイルは名前を固定で処理しないことで
ファイル名を変えずに複数変換出来るようになったのと
処理3ではファイルを複数読み込んで、データの切り取りなどを出来るようにしました。
(ここに重複データを取り込まないチェックも追加しました)
それでも件数が多いとデータの切り取りなどの処理は面倒だと思いますので
出来るだけパナファイルの時点でデータを編集した方が楽だと思います。

以前のバージョンのファイルもそのままにしておきますので
以前のバージョンで馴れている方は、そのまま使用されるのもありかと思います。

※mptencで変換するとパスワードは「0000」になるようです。
パスワードを聞かれたら「0000」を入力してください。

追記
pmf2mptutil.awkを作成する画面も追加しました。
音声の種類やアイコンの変更が可能になります。

2009/11/01追記
データ編集画面にて、行単位での編集を可能にしました。
この機能により、行単位でのアイコンや音声の変更が可能になりました。
また、データの座標ポイントをGoogleマップで表示可能にしました。
(撤去されたポイントなどの削除が少しは楽になるかも?)
※ブラウザはIEのみ対応。IEのキャッシュで地図がずれる場合は、IEの更新ボタンで再表示してください。

2009/11/02追記
Ver2.2にバージョンアップしました。
GoogleマップのURLから座標が取得可能になりました。
また、方向を視覚的に取得出来るように機能を追加しました。
フォームを半透明にしていますので、MAPに重ねて方向を数値で見れると思います。

SSHでのホスト制限

SSHで外から接続出来ると何かと便利です。
しかし、セキュリティ的にはあまり良くありません。
秘密鍵の利用や、SSHポート番号の変更は当然ですが
それでもアタックしてくる奴はいるものです。

私はアタックが多い国のIPをiptablesで規制しています。
(当然ながらその国のIPからは全く繋がりません)
この対応でアタック自体はかなり減らすことが出来ました。
※詳しくはblog内に書いてます。

それでも稀にアタックはあるかもしれません。
より安全にするためにSSHに接続出来るIPを規制します。
(会社などで固定IPがある場合で無いと有効には出来ませんが)

編集するファイルは以下となります。
/etc/hosts.allow

当然ながらローカルの接続は許可となります。
sshd : 192.168. : ALLOW

複数のIPを登録する場合は、スペースで区切って登録します。
(最後の: ALLOWは無くても構いません)
sshd : 192.168.  xxx.xxx.xxx.xxx: ALLOW

それ以外は拒否しなければならないので
/etc/hosts.denyにsshd: ALLと書き加える必要があります。

個人的には面倒臭がりなので
/etc/hosts.allowに拒否の行まで書き加えます(笑)
sshd: ALL : deny

許可・非許可のルールはファイル内では上から一致するまで
ファイルの優先順位は/etc/hosts.allowから/etc/hosts.denyへと解釈されます。
どちらにも一致しなかった場合は許可となりますので/etc/hosts.denyの最後に
次の一行を追加しておくことをお勧めします。
ALL : ALL : deny

またsshdにアクセスがあった場合にメールを送ることも可能です。
※メールを送信出来る環境の場合です。
下にサンプルを書いておきます。

# for sshd local access
sshd : 192.168. : ALLOW
# for sshd etc access with mail
sshd : xxx.xxx.xxx.xxx : spawn ( /usr/bin/mail -s “sshd connected from %h” yourname@yourmail.com) &

上の行が192.168から始まるアドレスを許可(メールは送られません)
下の行がxxx.xxx.xxx.xxxからアクセスがあった場合に許可しますが、同時にメールを送信します。
※ポートへの接続自体の許可であって、SSHの認証は当然必要です。
“sshd connected from %h”の部分がメールの件名として送られてきます。
%hは接続してきたホスト名(又はIP)に置き換えられて送信されます。
yourname@yourmail.comは送信先のメールアドレスとなります。
※標準の25番ポートを開けて使うのは、かなりの確率でアタックを受けるのでお勧めしません。

主にPC、車・バイク、トイガンなどについて書いてます