Tag Archives: Linux (Server) - Page 5

ESXi5 サーバ仕様の予定 (メモ)

先日ESXi5へ環境を移行したがスペック的に余力がほしいので7月8月を目処にハードウエアを新調する予定。

コンセプト

今回も安定重視のためなるべくインターネット上で使用事例があるパーツを利用する。
各パーツは故障時に対応しやすいよう、よく市販で流通しているパーツを利用する。
現マシンと同等の省エネさでコア数、メモリを増やし、冗長性も高める。

実用

最小3台から最大5台の仮想マシンを動かす予定(現在3台稼働)

構成

CPU: i7 2600
Motherboard: intell DQ67OWB3
Memory: UMAX Cetus DCDDR3-16GB-1333 (x2 32GB)
RAID Card: Adaptec RAID 6405E
Optical drive: (光学ドライブ)
USB Memory: Kingston MicroSD (x1 2GB システムドライブ) + リーダー
SSD: ADATA AS510S3-120GM-C (128GB キャッシュ用)
HDD 1: WD10EFRX (x2 1TB 仮想HDD用)
HDD 2: SEAGATE ST3000DM001 (x1 3TB バックアップ用)
CASE: Antec P183
Others: IDC-BB (UPSとの連動用)

予定変更(2012.06.17)

RAIDカードに9260-4iを利用する予定でしたがそれをやめます。
低価格で条件を全て満たしているAdaptec RAID 6405Eでも良いと判断しました。
パーツは勿論性能安全性重視ですが、高価であると故障した時の対応が遅れる可能性があるためです。
※ 一応、報告としてESXi 5.0で9260-4iはドライバ無しで認識されることを確認しました。

組立・切り替え完了(2012.07.01)

非常に安定しております。初代HP ProLiant DL580などの業務用のサーバ等を利用していた次期もありましたが明らかにそれらとも比べても高いパフォーマンスが出ております。

ハードディスクの故障(2013.01.12)

今更ながらSeagate製ST31000333ASがプチフリが多発するようになったためWestern Digital製WD10EFRXに交換しました。

CentOS5 Postfix deferred キュー削除

サーバを監視していたところキューが大量に溜まっていたので破棄する方法を調べました。

下記のコマンドで一発で破棄できるようです。

# postsuper -d ALL deferred

かんたんメール送信(添付ファイル対応) Perl用ライブラリ

―――――――――――――――――――――――――――――――――――――
【ソフト名】かんたんメール送信(添付ファイル対応)
【著作権者】ORBIT
【制作日】2011年09月17日
【種 別】Perlモジュール
【連絡先】https://www.orsx.net/blog/
【配布元】https://www.orsx.net/blog/
【圧縮形式】zip
【動作環境】Sendmailコマンドの使えるUNIX系OS
【開発環境】Perl5.8(標準モジュール Encode MIME::Base64 使用)
―――――――――――――――――――――――――――――――――――――
≪著作権および免責事項≫

 本ソフトはフリーソフトです。自由にご使用ください。なお,著作権は作者
であるORBITが保有しています。

 このソフトウェアを使用したことによって生じたすべての障害・損害・不具
合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、
一切の責任を負いません。各自の責任においてご使用ください。

・はじめに
 メール送信を行うとき毎回文字操作を行うのが面倒だったためそれらを全て行う
モジュールを作成しました。
 わずか数行で添付ファイル付きのメールを送信できるため簡単なメールフォーム
の作成等に強力な力を発揮すると思います。

・ファイル構成
readme.txt ← 当ファイル
Sendmail.pm ← 本体

・インストール方法
対象のプロブラムと同じディレクトリにおいてください。

・使い方
Sendmail.pm最下部に簡単な利用法を記載してるのでそちらを御覧ください。

・履歴
2011年09月17日 Ver 1.0.0 公開

簡単な使用例

#!/usr/bin/perl
# 当モジュールを呼び出し
use Sendmail;

# オブジェクトの生成
my $send_obj = Sendmail->new({
        Subject => '件名',                     # 件名
        From    => 'user@mail.goge.net',       # 送信元
        });

# メール送信
$send_obj->sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル無し',            # メッセージ
                );

# メール送信
$send_obj->sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル有り',            # メッセージ
                'file.txt,日本語ファイル.txt'  # 添付ファイル(,で区切ると複数送信可能)
                );

ライセンス形態:GPL
Sendmail

オブジェクト指向 Perl プログラミング 設定用クラスのひな形

Perlでオブジェクト指向なプログラミングを行う時設定ファイルの扱いに困った。confファイルでも使おうかと思ったが、Settingクラスを作ってやったところ思いの外使い勝手が良かったので公開してみる。

Settingクラスは値の設定だけでなく外部の設定ファイルへのアクセスを行うメソッドを定義しておくことでメールのテンプレートや、禁止ワード等幅広い用途で外部の設定ファイルを素早く使う事ができる。

Settingクラス(Setting.cgi)のひな形

package Setting; # クラスのパッケージ名を宣言

sub new {
	my $class = shift;
	my $self= {
		# 設定項目を適当に作る
		setting1 => 'mogempoge',
		setting2 => 'hogehoge.txt',
		setting3 => 'hoguhogu.txt'
	};
	return bless $self , $class;
};

# テンプレートを記述したファイルから内容を読み取り変数に格納し、返すメソッド
sub read_config{
	my $self = shift; #クラスプロパティ
	$self->{ ConfigFile } = $_[0] if( @_ );
	
	open(my $fh, "<", $self->{ ConfigFile }) || die("Can not open file $self->{ ConfigFile }");
	my $file_contents;
	while( my $line = readline $fh ){ 
		$file_contents .= $line;
	}
	return $file_contents;
}

# 改行で区切られたワードを記述したファイルから内容を読み取り配列に格納し、返すメソッド
sub read_words {
	my $self = shift; #クラスプロパティ
	$self->{ ConfigFile } = $_[0] if( @_ );
	
	open(my $fh, "<", $self->{ ConfigFile }) || die("Can not open file $self->{ ConfigFile }");
	my @word_contents;
	while( my $line = readline $fh ){ 
		chomp($line); # 改行を削除
		push(@word_contents, $line);
	}
	return \@word_contents;
}

1;

mainクラス(Test.cgi)のひな形

#!/usr/bin/perl
BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); }
# オプション関連の宣言
use strict;
use warnings;

# クラスを宣言
require "Setting.cgi";
require "Function.cgi";

# パッケージ名宣言
package main;

my $f_obj = Function->new();
$f_obj->function();

その他クラス(Function.cgi)で設定ファイルを読み込む場合のひな形

package Function; # クラスのパッケージ名を宣言

# コンストラクタを定義する時にSettingクラスを継承してあげる。
sub new {
	# 引数を受ける
	my ( $class, @args ) = @_;
	my %args = ref $args[0] eq 'HASH' ? %{ $args[0] } : @args;
	my $self = { %args }; #クラスプロパティ
	# オブジェクト生成
	$self = Setting->new();
	return bless $self , $class;
};

sub function{
	my $self = shift; #クラスプロパティ
	# "setting1"の値を表示する
	print $self->{ setting1 };
	# テンプレート"setting2"の内容を変数で受け取り表示する
	print $self->read_config( $self->{ setting2 } );
	# ワードリスト"setting3"の一覧を配列で受け取り表示する
	print $self->read_words( $self->{ setting3 } );
}

CentOS5 OpenSSH のログイン時にバナーを表示させる

設定ファイルのBanner項目を有効化しバナーが書かれたファイルまでのパスを記述する

# vi /etc/ssh/sshd_config
# no default banner path
#Banner none ←ここを下記に書き換える
Banner /etc/ssh/banner

# vi /etc/ssh/banner
バナーの内容を書く

Webアプリケーションファイアウォール mod_security を導入した上でmuninでApacheのグラフを表示させる方法

中々、mod_securityを導入した中でmuninでApacheのグラフを表示させてる人がいないのか対策方法が紹介されていないのでメモします。

muninはApacheのデータを取得するためlocalhostのserver-statusにアクセスする。
しかし、mod_securityを導入している環境だとError 406 で取得できない。
(wget http://127.0.0.1 と実行すると分かりやすい。)
そのため、muninが通るようにWebアプリケーションファイアウォールに穴を開ける。

対象となるルール ユーザエージェントでボットを判別している。
# /etc/httpd/modsecurity.d/base_rules/modsecurity_crs_35_bad_robots.conf
アクセス規制対象のロボット一覧から対象のボット名を探し削除する。
# vi /etc/httpd/modsecurity.d/base_rules/modsecurity_35_bad_robots.data

削除対象
perl
libwww-perl
wget ←必要があれば削除

Apacheに設定適用
# service httpd restart

PHP error_reporting .htaccess 設定

下記のような警告が出た時、警告を非表示にする方法。
Deprecated: Function set_magic_quotes_runtime() is deprecated in
/path/file.php on line 718

php.ini で設定する場合は
error_reporting = E_ALL & ~E_NOTICE
を追記すれば良いようですが全部で適用されちゃってセキュリティー的にどうなのか?とか気になります。

.htaccessで設定する場合をメモします。下記を追記して対象のディレクトリに設置してください。
php_value error_reporting 6135

その他の設定は次のサイトで詳しく紹介されてるのでそちらを御覧ください。
.htaccess で error_reporting を設定するときの注意点 | Sun Limited Mt.

ハッキング対策 コマンドの隠蔽

不正アクセスによく使用されるコマンドは大体決まってます。
そこでよく使用されるコマンドの中でもつかられるとリスクの大きいコマンドを一般ユーザから利用できないようにします。

※ ls dir find rm cp このあたりも制限する事が望ましいですが他のプログラムに影響を及ぼす可能性が高いため今回は下記に絞りました。

# chown -c root:wheel /sbin/ifconfig
# chmod -c 2710 /sbin/ifconfig
# chown -c root:wheel /bin/ps
# chmod -c 2710 /bin/ps
# chown -c root:wheel /usr/bin/top
# chmod -c 2710 /usr/bin/top
# chown -c root:wheel /usr/bin/pstree
# chmod -c 2710 /usr/bin/pstree
# chown -c root:wheel /usr/sbin/lsof
# chmod -c 2710 /usr/sbin/lsof
# yum remove finger

nagios等の監視ソフトや一般管理者ユーザでエラーが出ると困ることからwheelグループからも一応アクセスできるようにする。
そして普通に使っているだけならfingerコマンドなんて使うことはないのでこれは削除します。

CentOS 5.6 最新Snort + SWATCH で不正アクセスを検知しリアルタイムで規制する

本来IDS(侵入検知システム)は不正アクセスを検知し管理者に通知するだけであるが、今回SWATCHと組み合わせることで強力なセキュリティー機能を備えたいと思う。
※ SWATCHはログ監視ツール導入(SWATCH)の設定が行われていることを前提とする

Snortのダウンロード
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/snort-2.9.0.5-12.el5.x86_64.rpm
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/daq-0.5-9.el5.x86_64.rpm
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/libdnet-1.12-7.el5.x86_64.rpm
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/libpcap1-1.1.1-10.el5.x86_64.rpm

依存関係でエラーが出るため下記の順番にインストールする
# rpm -Uvh libdnet-1.12-7.el5.x86_64.rpm
# rpm -Uvh libpcap1-1.1.1-10.el5.x86_64.rpm
# rpm -Uvh daq-0.5-9.el5.x86_64.rpm
# rpm -Uvh snort-2.9.0.5-12.el5.x86_64.rpm

ルールはsnortrules-snapshot-2905.tar.gzをダウンロードする
ルールのダウンロードにはアカウント作成がいるようである
# tar zxvf snortrules-snapshot-2905.tar.gz
# cp rules/* /etc/snort/rules/
# /etc/snort/snort.conf

LAN内のPCは例外とするように設定ファイルを書き換える
var HOME_NET 192.168.1.0/24
var EXTERNAL_NET !$HOME_NET

下記のコメントを解除しルールを有効化する
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/blacklist.rules
include $RULE_PATH/botnet-cnc.rules
include $RULE_PATH/chat.rules
include $RULE_PATH/content-replace.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/icmp-info.rules
include $RULE_PATH/imap.rules
include $RULE_PATH/info.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/multimedia.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/oracle.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/p2p.rules
include $RULE_PATH/phishing-spam.rules
include $RULE_PATH/policy.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/pop3.rules
include $RULE_PATH/rpc.rules
include $RULE_PATH/rservices.rules
include $RULE_PATH/scada.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/shellcode.rules
include $RULE_PATH/smtp.rules
include $RULE_PATH/snmp.rules
include $RULE_PATH/specific-threats.rules
include $RULE_PATH/spyware-put.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/voip.rules
include $RULE_PATH/web-activex.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-coldfusion.rules
include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/x11.rules

# vi /etc/logrotate.d/snort
不要(存在しないログファイル)な部分を削除する
/var/log/snort/alert /var/log/snort/*log {

SWATCHの設定
# vi /etc/swatch/snort.conf

# logfile /var/log/snort/alert

# 不正なアクセスを3回以上検知したら該当ホストからのアクセスを24時間規制
watchfor /Priority/
    pipe "/usr/local/bin/swatch_action.sh 13"
    throttle=00:00:10

P7H55-M BIOS設定

BIOS SETUP UTILITY を起動させる。

とりあえず言語設定ができるようなので設定する。
MainのLanguage [English]を[日本語]へ。

オンボードGPU(iGPU)を使う設定を行う(PCI-E x16にRAIDカードを挿すとグラフィックボードと誤認するため)
詳細設定からInitiate Graphic Adapter を[PCI/iGPU]を選択。(何故か[iGPU]ではうまく動作しなかった。)

起動時にIDE用ディバイスを使わないのにスキャンされるのでスキャンしないようにする。
詳細設定からオンボードディバイス設定構成を選択しVT6415 IDE Controllerを[無効]にする。

停電時、電源復旧で自動起動するように設定する。(自動動時に確認としてF2を押すように促す保護機能を外す。)
電源からAnti Sure Supportを[無効]に設定。
APM Configurationを選択しAC 電源切断後の復旧モードを[Power On]に設定する。

RAIDカードの設定はHP SC40Geホスト バス アダプタ リファレンス ガイドを見る。
普段はこんな事はまとめないですが複数導入する予定なので次設定するとき設定し忘れが無いようにww