Category Archives: PERSONAL COMPUTER - Page 14

ディレクトリ直下のディレクトリ数を表示するコマンド

あるディレクトリ直下のディレクトリ数を調べる。
以下のコマンドは/home直下のディレクトリの数を取得して表示する。
# ls -l /home | egrep -c ‘^d.+[^.]$’

ちなみに今2009/12/4 20:07現在
575個のディレクトリが存在しました。
と言うことで現在のレンタルサーバ使用者数は575名です。

安全な取り外しのアイコン 表示されない!? XP

いつものUSBを取り外すためのアイコンがタスクバーから消えていたので対策を書いておきます。

スタート→ファイル名を指定して実行を開く
以下を一行ずつ順に入力しOKを押していく。

reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionAppletsSysTray" /v "Services" /d 0 /t REG_DWORD /f

systray 0

systray 15

再起動したらまた消えてしまう場合の対策
下記をbatファイルに記述しスタートアップに登録すると上記のコマンドは再起動時に自動実行されるようになります。

:: --------------------------------------------------------------
:: USB取り外しアイコン表示バッチファイル
:: 作成日:2009/11/29
:: 作者:ORBIT
:: 使い方:
::  C:Documents and SettingsORBITスタート メニュープログラム
::  へコピーしPCを再起動させると取り外しアイコンを立ち上げます。
:: --------------------------------------------------------------

:: ============================(設定)============================
:: スリープする時間を指定する(デフォルトは二分)
SET SETTIME=200
:: ==============================================================

:: ウインドウを最小化して再起動
@if not "%~0"=="%~dp0.%~nx0" start /min cmd /c,"%~dp0.%~nx0" %* & goto :eof

:: 起動してから指定時間内スリープ
ping localhost -n %SETTIME% > nul

:: 電源アイコン,スピーカアイコン,取り外しアイコンの三つを一端落として再表示する
reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionAppletsSysTray" /v "Services" /d 0 /t REG_DWORD /f
systray 0
systray 15

面倒な場合は下記からダウンロード後解凍してご利用ください。
Unmount
これでいつもの通りにUSBを取り外すことができます。

MODx インストール エラー

サーバ利用者からPHPでエラーが発生するとの事で連絡が来たので調べてみた。
エラー内容
PHP error debug
Error: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘JST/9.0/no DST’ instead
Error type/ Nr.: Warning – 2
File: /home/***********/document.parser.class.inc.php(770) : eval()’d code
Line: 377

TimeZoneが合ってない??
設定してるはずだけどな・・・・・・
.htaccessに下記の文章を追記して保存する。

php_value date.timezone Asia/Tokyo
SetEnv TZ Asia/Tokyo

これで解決しました。

Slowloris対策(その2) Vine Linux

早速本日Slowloris??のような攻撃を食らいまして
実験用鯖にしかSlowloris対策をしていないなかった自分を恨んでみたいり^^;

つか紹介したらそれを見てこのサイトに攻撃したのでしょうかね??

ダウンする直前にDosアタックとして10秒遮断されたIPがあったんですよね・・・・・
原因はこれかな??

と言うわけで、またまた対策しちゃいます。今度はmod_antilorisって奴を使います。
# wget ftp://ftp.monshouwer.eu/pub/linux/mod_antiloris/mod_antiloris-0.4.tar.bz2
# tar -xjvf mod_antiloris-0.4.tar.bz2
# cd mod_antiloris-0.4
# apxs -a -i -c mod_antiloris.c
# service apache2 restart
こんな感じでしょうか??

参考元:てきとうに、なんとなく更新するページ

SwatchでSSH不正アクセスを遮断

FTPのアタックも酷いものですがSSHのアタックはそれを超えますので今回対策しました。
まず、Swatchをインストールしていない人はVineLinuxで自宅サーバー様を参考にSwatchを全部設定します。

そしてSSH用に設定ファイルを作っていきます。

# vi /etc/swatch/secure.conf
#監視ログの場所を指定
# logfile /var/log/secure
#監視したい文字列を記載
watchfor /sshd.*Invalid user/
#ログのIPアドレスの場所を指定し、アクセス遮断スクリプトへ渡す
    pipe "/usr/bin/swatch.sh 10"

Swatchの再起動
# service swatch restart

(追記)
SWATCH設定を参考にしたほうがよさそうです。

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