Tag Archives: Linux (Server) - Page 10

Dosアタック対策 Apache2 Vine Linux

田代砲等のDos攻撃等に有効なモジュールとしてmod_evasiveをインストールしました。
※Slowloris HTTP DoSには全く効果を発揮しません。

# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
# tar zxvf mod_evasive_1.10.1.tar.gz
# cd mod_evasive
# /usr/bin/apxs -i -a -c mod_evasive20.c

# vi /etc/apache2/conf/httpd.conf
以下が追加されていることを確認する。
LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

下記の設定を追記

#
# mod_evasive Settings
#
<ifModule mod_evasive20.c>
  DOSHashTableSize 3097
  DOSPageCount 2
  DOSSiteCount 50
  DOSPageInterval 1
  DOSSiteInterval 1
  DOSBlockingPeriod 10
 DOSEmailNotify      [Dos攻撃を知らせる為の管理者メールアドレス]
</ifModule>

# service apache2 restart

__追記__
URLが変わっているようです
http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz

Slowloris対策 今後の課題有り Vine linux

先ほど紹介したSlowlorisに対抗するモジュールが紹介されていたのでVineLinuxでのインストール方法に関して紹介します。

※インストールする前に!!
このモジュールは改良版Slowlorisには必ずしも有力な対抗能力を示さない事が分かっております。自己責任でインストールしてください。

# wget http://mod-pacify-slowloris.googlecode.com/files/mod-pacify-slowloris-0.0.1.tgz
# tar xvzf mod-pacify-slowloris-0.0.1.tgz
# cd mod-pacify-slowloris
# /usr/bin/apxs -i -a -c mod_pacify_loris.c
#
# vi /etc/apache2/conf/httpd.conf

以下が追加されていることを確認
LoadModule pacify_loris_module modules/mod_pacify_loris.so

# service apache2 restart

参考元:
にわか鯖管の苦悩日記

アンインストール方法
# cd /usr/lib/apache2/modules
# rm -r mod_pacify_loris.so
# vi /etc/apache2/conf/httpd.conf
LoadModule pacify_loris_module modules/mod_pacify_loris.so
にカーソルを合わせてddで削除

Apache1/2のDos攻撃に対する脆弱性

先日からの不正アクセスからの状況から色々セキュリティー関連を調べていたら
恐ろしい物を見つけました。

Slowloris HTTP DoS
WS000031

一般的にサーバをダウンさせるには大量のマシンから大量のリクエストを送信する必要がありますが、今回紹介したツールはApacheのセキュリティーホールを突き、少数のマシンから少数のリクエストでサーバをダウンさせてしまいます。

非常に危険で恐ろしいツールですね。
当サーバでも対策を急がないといけないです(汗

cpanでIO::Socket::SSLがインストールできない場合は下記が入ってない可能性がありますので追加します。
# apt-get install openssl libssl-dev

中国 韓国 北朝鮮のアクセスを完全遮断 Vine Linux

先日から中国からの攻撃の為サーバに繫がりにくい状況やダウンする等の被害が
出てましたので、今回完全に中国 韓国 北朝鮮などからのアクセスを禁止しました。

参考元:
CentOS on X40:CKFILTERでうざい国からのアクセスを遮断する
うざい国からのアクセスを全て遮断

必要なファイルをダウンロードしてくる
# wget http://www.42ch.net/~shutoff/prog/countryfilter.pl
# wget ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest

初期化
# iptables -N CKFILTER
# iptables -N CKFILTERED

リストの変換とSH作成
# perl countryfilter.pl iptables KR,CN,KP < delegated-apnic-latest > filter.sh

エラーになるのでパスの変更
# vi filter.sh
IPTABLES=/sbin/iptables

実行
# source filter.sh

扱いを指定
# iptables -A CKFILTER -j ACCEPT
# iptables -A CKFILTERED -j DROP

転送
# iptables -A INPUT -p tcp -m state --state NEW -j CKFILTER

効果絶大でした^^

ポートスキャンプログラムの構造解説と作成 Perl

原本に一部間違いや遠回りをしていると思われる点がありましたので修正してあります。

#!/usr/bin/perl
#-------------------------------------------------#
# Name: Port Scan Program
# 原作: Perl scan port
# (URL: http://www.perlmonks.org/?node_id=806461)
# 解説: ORBIT SPACE
# 目的: ポートスキャンプログラムの構造の
#       理解とモジュール利用方法等の理解
#       を行う為に今回構造の解説とプログ
#       ラムの変更を行いました。
#-------------------------------------------------#

#モジュール使用宣言
use IO::Socket;

# Very Simple Scan Port Write in Perl

# MAIN PROG

print "Perl Scan Port V1.0nn";

# User Var

# perl port.pl 127.0.0.1のように入力されたIPアドレスを取得
my $iptarget =  $ARGV[0];
unless($ARGV[0]){die "MISSING IP ADRESSnn";}

print "Interesting ports on $iptargetnn";

print "PORT // STATE // SERVICEn";

# Scanning fonction
# ポート番号をインクリメントして作成する。
for(my $iport = 0; $iport != 65537; $iport++){
# 指定されたIPアドレスのポートへ接続
if (my $remote = IO::Socket::INET->new(
   	Proto => "tcp",
   	PeerAddr => $iptarget,
   	PeerPort => $iport,
   	Timeout => "5")){

	# サービス内容(http,ftp,ssh等)の表示し格変数へ格納
	(my $name, my $aliases, my $port_number, my $protocol_name) =+
	getservbyport($iport , "tcp");

	# サービス名が不明な場合NAを格納
	unless($name){$name = "NA";}
	# 出力
	print "$iport     open      $namen";
	# 切断
	close($remote);
	}
}

print "Scan Finishn";

Apache 2 メンテナンス画面表示方法

今回はサーバ全体をメンテしますのでユーザ毎のメンテナンスではなく、どのユーザがアクセスしても同じ画面を表示させます。

Vine Linuxの場合/etc/apache2/conf/httpd.confを編集します。
※編集前にバックアップを取りましょう。

からの間やからの間等に以下の内容を追記します。

###########################################################
# It is maintaining it ・・・.
###########################################################
ErrorDocument 503 /maintenance.html

<ifModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !=/maintenance.html
  RewriteCond %{REMOTE_ADDR} !=192.168.24.6
  RewriteRule ^.*$ - [R=503,L]
</ifModule>

<ifModule mod_headers.c>
  Header set Retry-After "Sun, 15 Nov 2009 21:00:00 GMT
</ifModule>
###########################################################

内容の説明
検索エンジンなどにはError500と返します。
maintenance.htmlはメンテナンス中であることをユーザへ示す内容の書かれたファイルです。
192.168.24.6はメンテナンス中でもアクセスできるユーザ(管理者)のIPです。
Sun, 15 Nov 2009 21:00:00はGMT(グリニッジ標準時)で指定されたメンテナンス終了時刻です。時差の計算を行ってから記述する必要があります。
※この時間はヘッダに追加されるだけで通常のブラウザからのアクセスでは表示されません。

容量の大きいファイル検索スクリプト Bash

このごろ鯖をファイル置き場として利用する方々の為にせっせと毎回コマンド叩くのが
面倒なのでスクリプトを作成しました。
珍しくBash(SH)で書きました^^
やっぱ慣れていないのでPerlのようにすらすら書けないですね~
効率悪すぎ!!とか言わないで~(汗

#!/bin/sh
# 初期設定(メール送信宛先、件名、コマンド)
address=”メール送信宛先@”
subject=”容量の大きいファイル”

exe=”find /home -name “*.exe” -size +100000k”
iso=”find /home -name “*.iso” -size +100000k”
cso=”find /home -name “*.cso” -size +100000k”
zip=”find /home -name “*.zip” -size +100000k”
rar=”find /home -name “*.rar” -size +100000k”
cab=”find /home -name “*.cab” -size +100000k”
lzh=”find /home -name “*.lzh” -size +100000k”
avi=”find /home -name “*.avi” -size +100000k”
wmv=”find /home -name “*.wmv” -size +100000k”
wma=”find /home -name “*.wma” -size +100000k”

df=”df”;

# 件名の文字コードをJISに変換
subject=`echo $subject | nkf -j`
# メール送信(コマンド結果はSJISに変換)
mail -s “$subject” $address << HONBUN ====================[ exe ]==================== `$exe | nkf -s` ====================[ iso ]==================== `$iso | nkf -s` ====================[ cso ]==================== `$cso | nkf -s` ====================[ zip ]==================== `$zip | nkf -s` ====================[ rar ]==================== `$rar | nkf -s` ====================[ cab ]==================== `$cab | nkf -s` ====================[ lzh ]==================== `$lzh | nkf -s` ====================[ avi ]==================== `$avi | nkf -s` ====================[ wmv ]==================== `$wmv | nkf -s` ====================[ wma ]==================== `$wma | nkf -s` =============================================== HONBUN # 終了 exit [/bash]

Youtube ダウンローダー(CGI) 作成中・・・・・ 

ストリーミングに関して以前から興味を示しておりまして^^

ダウンロードサイトなんてありますがあれどうなってるんだろ?
一度動画を鯖に落としてユーザーに渡すってのは処理に時間取られるし・・・・
意味ワカンネ>△<;なんて考えたりw

今回詳しく(と言っても凄く簡単に)ダウンロードサイトに関して検証していきます。

まず今回対象にした動画(欲しいわけでもなく別に意味はないです)

この動画のURLは以下のようになっております。
http://www.youtube.com/watch?v=STrnME1GPcM&feature=related
このURLを解析すると
http://www.youtube.com/watch?v=[動画のID]&feature=related
このようになってます。
※この動画のIDごとに動画は違います。

では情報を引いて見ましょう。以下のようにリクエストを送ってみます。
http://www.youtube.com/get_video_info?&video_id=STrnME1GPcM
このような感じ^^
http://www.youtube.com/get_video_info?&video_id=[動画のID]
するとget_video_infoってファイルがダウンロードできます。

開いてみると・・・・・
[意外に長かったので載せませんw]
まぁ、気分悪くなってもがんばりましょう^^

この中から&token=~&の間を探して読み取ります。
F0%2F0&token=vjVQa1PpcFMoXJpKyBVe9m9fn5_BdJan5dlKtTvPvPA%3D&thumbnail_url=http%
の中なので『vjVQa1PpcFMoXJpKyBVe9m9fn5_BdJan5dlKtTvPvPA%3D』これですね^^
これを[動画のTOKEN]とします。URL上では&t=から始まります。
(公開されてるプログラムの&t=が何なのかを調べるのに凄く時間が掛かりました^^;)

これを利用し以下のURLを作成します。
http://www.youtube.com/get_video?video_id=STrnME1GPcM&t=vjVQa1PpcFM-dhGnEO-Xuu8sh5y9EhVH6zjFPb328Vg
まぁ、こんな感じになります。
http://www.youtube.com/get_video_info?&video_id=[動画のID]&t=[動画のTOKEN]

上のURLへアクセスするとvideoplaybackなんてのがダウンロードされるのでvideoplayback.flvと変更すると動画が見れます^^

これらをPerlで表現すればダウンローダが作れるんですね~^^
動画ではなく直接作成したURLを表示すれば鯖にも負担をかけないわけか~(納得w)
ソフトではなく自分の手作業でダウンロードできたという事が非常に興味深い!!

OpenCVのインストール Vine Linux 5.0

どうしても顔認証がしたいのでライブラリーを追加しました。
apt-getじゃまだインストールできないんですね・・・・・・・・
と言うことでソースからビルトしてインストールします。

# apt-get install gtk2-devel libjpeg-devel libpng-devel zlib-devel libtiff-devel

# wget http://nchc.dl.sourceforge.net/sourceforge/opencvlibrary/opencv-1.0.0.tar.gz
# tar xvzf opencv-1.0.0.tar.gz
# cd opencv-1.0.0
# ./configure –prefix=/usr
下記のようになりました。
General configuration ================================================
Compiler: g++
CXXFLAGS: -Wall -fno-rtti -pipe -O3 -g -march=i686 -ffast-math -fomit-frame-pointer

Install path: /usr

HighGUI configuration ================================================

Windowing system ————–
Use Carbon / Mac OS X: no
Use gtk+ 2.x: yes
Use gthread: yes

Image I/O ———————
Use libjpeg: yes
Use zlib: yes
Use libpng: yes
Use libtiff: yes
Use libjasper: no
Use libIlmImf: no

Video I/O ———————
Use QuickTime / Mac OS X: no
Use xine: no
Use ffmpeg: no
Use dc1394 & raw1394: no
Use v4l: yes
Use v4l2: yes

Wrappers for other languages =========================================
SWIG
Python no

Additional build settings ============================================
Build demo apps yes

Now run make …

あとは普通に・・・・・・・・
# make
# make install

これでインストール完了

Image::ObjectDetectのインストール

# wget http://search.cpan.org/CPAN/authors/id/J/JI/JIRO/Image-ObjectDetect-0.11.tar.gz
# tar xvzf Image-ObjectDetect-0.11.tar.gz
# cd Image-ObjectDetect-0.11
# perl MakeFile.PL
# make
# make install

[注意事項]
※はまりました^^;
パスが違いますシンボリックでも張っておいた方がいいのかな?
インストールしたはずなのに使えねえ・・・・なんてことが。

VineLinuxではこれが
/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml
こんな感じになります。
/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml

Imagerのインストール Vine Linux 5.0 Perl

更新
# apt-get update
# apt-get upgrade
ライブラリーをインストール
# apt-get install libpng-devel libjpeg-devel giflib-devel
※これらのライブラリがないと上手く動かない。

# cpan
> install Imager
でインストールする。

もしも、インストールした後にライブラリ入れてエラーが出て認識されない場合。
# cpan
> force install Imager
でインストールする。