Category Archives: Linux (Server) - Page 9

Shuttle XS35 無音サーバ構築

Atomの省エネサーバを構築しバックアップサーバとして動かす為に色々調べていましたがXS35が今販売されている中で最も安くバランスがいいのではないかと考えたので購入してみました。

XS35は1万5千円ほど
HDD 500G 5400rpmが5千円ほど
DDR2 2G 800が3千円ほど
スリムマルチDVDドライブが3千円ほどで計2万6千円くらいでした

本当に音がしないのでいいのですが
これそのままCentOSをインストールしてもNICが認識されないのでドライバを自分で入れないと行けないようです。

Ruby製の出来そこないメールフォーム

とりあえずRubyの参考書を読みながらメールフォームを作成してみました。普段はPerlでオブジェクト指向なモジュールを使って色々書いてますが自分でクラスやメソッドを定義することなんてなかったので今回かなり手こずりました。
メールフォームを表示して受け取ったデータをSendmailに渡して送信するだけのメールフォームです。確認画面はおろかメールアドレスのチェックなんて一切しません。。。
実用的には全く役に立たないが、Rubyを勉強しようかな?って人には役に立たないかもしれない。。。。
うん。役に立たない。。。

mailform.yml (設定ファイル)

# サイトのタイトル
Title: Ruby製のメールフォーム
# 管理者のメールアドレス(お問い合わせ送信先)
To: mogumogu@gokugoku.oe
# メールの件名
Subject: Ruby製のメールフォーム

mailform.rb (メールフォームのindex)

#!/usr/bin/ruby -w

require 'contform.rb'
require 'viewform.rb'
require 'sendform.rb'
cont = Cont.new

puts cont.Output
exit

contform.rb (メールフォームの大元のクラス)

class Cont
	require 'cgi'
	require 'yaml'
	require 'kconv'

	# 変数Yamlに設定ファイルのパスを格納
	Yaml = 'mailform.yml'

	#インスタンス変数生成
	def initialize
		begin
			# YAML.load_fileメソッド呼び出し 設定内容をインスタンス変数に格納
			@yaml = YAML.load_file(Yaml)
		rescue
			# 例外発生時の処理(errorメソッドの呼び出し)
			error('YAMLファイルが読み込めませんでした。')
		end
		# 各種オブジェクトを設定を渡しながら生成する
		@cgi = CGI.new
		@view = View.new(@yaml)
		@send = Send.new(@yaml)
	end

	# フォーム画面表示
	def Output
		# 送信する
		if(@cgi['page'] == 'sendmail')
			puts "content-type:text/htmlnn"
			# メール送信
			@send.sendmail(@cgi['from'], @yaml['To'], nil, nil, @yaml['Subject'], @cgi['textdata'])
			# メール送信完了のメッセージを引数として返す
			return @view.Success
		else
		# フォームを表示する
			puts "content-type:text/htmlnn"
			return @view.TopPage
		end
	end

	# エラー出力
	def error(errstr)
		puts "content-type:text/htmlnn"
		puts <<-__END
		エラーが発生しました!
		#{errstr}
		__END
		exit
	end
end

viewform.rb (メールフォームのHTML関連表示クラス)

class View
	def initialize(yaml)
		@yaml = yaml
	end
	def TopPage
		# メールフォームの表示
		html = <<-__EOT
		<HTML>
				<HEAD>
				<TITLE>#{@yaml['Title']}</TITLE>
				<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

				<script type="text/javascript"> 
				<!-- 
				function check(){
					if(window.confirm('送信してよろしいですか?')){
						return true;
					}else{
						window.alert('キャンセルされました');
						return false;
					}
				}
				// -->
			</script>
			</HEAD>
			</BODY>
				<p>#{@yaml['Title']}</p>

				<form action="mailform.rb" method="post" onSubmit="return check()">
				<INPUT TYPE="hidden" NAME="page" VALUE="sendmail">
				<p>メールアドレス</p>
				<input type="text" name="from" size="35">
				<p>お問い合わせ用メッセージ</p>
				<textarea name="textdata" rows="6" cols="50"></textarea><br>
				<input type="submit" value="送信する" onClick="disp()"><input type="reset" value="リセット">
			</BODY>
		</HTML>
		__EOT
	end
	def Success
		# 送信成功画面
		html = <<-__EOT
		<HTML>
				<HEAD>
				<TITLE>#{@yaml['Title']}</TITLE>
				<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

			</script>
			</HEAD>
			</BODY>
				<p>#{@yaml['Title']}</p>
				<p>送信しました</p>
			</BODY>
		</HTML>
		__EOT
	end
end

sendform.rb (メールフォームのメール送信クラス)

class Send
	def initialize(yaml)
		@yaml = yaml
	end
	# メール送信メソッド
	def sendmail(from, to, cc, bcc, subject, body)

		path = "/usr/sbin/sendmail" # sendmailのパス
		subject = subject.tojis
		subject = [subject].pack('m') # Base64
		subject.gsub!(/n/, "")
		subject = "=?ISO-2022-JP?B?#{subject}?="
		body = body.tojis

		IO.popen("#{path} -t", "r+") { |io|
			io.print "From: #{from}n"
			io.print "To: #{to}n"
			io.print "Cc: #{cc}n" if cc != nil
			io.print "Bcc: #{bcc}n" if bcc != nil
			io.print "Subject: #{subject}n"
			io.print "MIME-Version: 1.0n"
			io.print "Content-Type: text/plain; charset=iso-2022-jpn"
			io.print "Content-Transfer-Encoding: 7bitn"
			io.print "n"
			io.print "#{body}n"
		}

	end
end

そういえば、Javaとは違ってクラス名とファイル名が違っても怒られないんですね~

CentOS 5 PHPの最新のバージョンをインストールする

バージョン管理が大変なPHPを簡単にアップデートできます
※下記を実行するとPHP以外のパッケージも全てアップグレードされてしまいます。気になる人はリポリトジの設定で普段は無効にしておいてください。
# wget -q -O – http://www.atomicorp.com/installers/atomic.sh | sh yum update
# yum install php php-mbstring

Twitter フォロワー同期(リム専用)Bot Perl 解析編

自動でフォローされたらフォローし返すプログラムを書きたいけどNet::Twitterの使い方がわからなかったのでとりあえずフォロワー同期(リム専用)Botのソースをマニュアルを読みながら適当に解析してコメント打ちました。

マニュアル:Net::Twitter(英語)
参考にさせて頂いたソース:■[メモ]Twitterで自動フォロー削除

#!/usr/bin/perl
use utf8;
use strict;
use warnings;

# モジュール使用宣言
use Array::Diff;
use Data::Dumper;
use Net::Twitter;
use YAML::Tiny;
use Encode;
use FindBin;

# 現在のパスから見て設定ファイルを読み込み
my $config = (YAML::Tiny->read($FindBin::Bin . '/config.yml'))->[0];
# OAuth認証
my $twitter = Net::Twitter->new(
     traits => ['API::REST', 'OAuth'],
     consumer_key => $config->{'consumer_key'},
     consumer_secret => $config->{'consumer_secret'}
);
$twitter->access_token($config->{'access_token'});
$twitter->access_token_secret($config->{'access_token_secret'});
# 認証失敗時の処理
die('Auth failed:'.$config->{'username'}) unless ( $twitter->authorized ) ;

# ユーザー名を含むユーザー情報を取得
my $cr = $twitter->verify_credentials;
my $own_id = $cr->{id};

my $nextc = -1; # paging default.
my @following_id_list; # outgo

# APIの仕様?から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
	# cursorは前回取得したフォローイングまでの番号が入っている
	my $following_list = $twitter->friends_ids({ id=>$own_id, cursor => $nextc });
	$nextc = $following_list->{next_cursor};
	# 配列からフォローイングのidを取得
	foreach my $id (@{ $following_list->{ids} }){
		push(@following_id_list, $id); # 後で比較するためにフォローイングを配列に保管
	}
}while($nextc!=0);
# 文字昇順でソート
@following_id_list = sort @following_id_list; 

$nextc = -1;
my @followers_id_list; # income
do{
	# cursorは前回取得したフォロワーまでの番号が入っている
	my $followers_list = $twitter->followers_ids({ id=>$own_id, cursor => $nextc });	
	$nextc = $followers_list->{next_cursor};
	# 配列からフォロワーのidを取得
	foreach my $id (@{ $followers_list->{ids} }){
		push(@followers_id_list, $id); # 後で比較するためにフォロワーを配列に保管
	}
}while($nextc!=0);
# 文字昇順でソート
@followers_id_list = sort @followers_id_list; 

# 差分を取得
my $diff = Array::Diff->diff(@following_id_list, @followers_id_list);

# リムった人をリム返し
foreach my $delid (@{ $diff->{deleted} }){
	$twitter->destroy_friend($delid);
}

だいたい構造がわかったのでちゃちゃっと書き足しましょうか^^

Pound 2.5 CentOS 5.5 rpm インストール

# wget http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -Uvh epel-release-5-4.noarch.rpm

# wget http://rpms.famillecollet.com/enterprise/5/remi/i386/remi-release-5-8.el5.remi.noarch.rpm
# rpm -Uvh remi-release-5-8.el5.remi.noarch.rpm

# vi /etc/yum.repos.d/remi.repo
[remi]の中のenable=0をenable=1に変更

# yum update
# yum install pcre-devel
# yum install google-perftools-devel

# wget http://www.invoca.ch/pub/packages/pound/pound-2.5-1.src.rpm
# rpm -ivh pound-2.5-1.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/pound.spec

32Bit版の場合
# rpm -ivh /usr/src/redhat/RPMS/i386/pound-2.5-1.i386.rpm
64Bit版の場合
# rpm -ivh /usr/src/redhat/RPMS/x86_64/pound-2.5-1.x86_64.rpm

設定ファイルの場所
# vi /etc/pound/pound.cfg

参考
CentOS5.5にPound最新版をRPMでインストール

Delegate 9.9.7 インストール CentOS 5.5

ダウンロードして展開する
# wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.9.7.tar.gz
# tar zxvf delegate9.9.7.tar.gz
# cd delegate9.9.7
# make ← 途中で管理者宛のメールアドレスを聞かれるので入力してEnterを押す
作成された実行ファイルをコピーする
# cp src/delegated /usr/local/sbin/
コピーした実行ファイルにハードリンクを貼る
# ln /usr/local/sbin/delegated /usr/sbin/delegated
設定ファイル格納用のディレクトリを作成する
# mkdir /etc/delegate
キャッシュ格納用ディレクトリを作成してその他フォルダのパーミッションを設定する
# mkdir /var/spool/delegate-nobody/cache
# chown nobody:nobody /var/spool/delegate-nobody
# chown nobody:nobody /var/spool/delegate-nobody/*
# chmod 755 /var/spool/delegate-nobody
# chmod 755 /var/spool/delegate-nobody/*
serviceコマンドで管理できるように起動ファイルを作成する
# vi /etc/init.d/delegated

#!/bin/sh
#
# chkconfig: 35 90 10
# description: delegated ftp proxy
# processname: delegated
# config: /etc/delegate/*.conf

DELEGATE=/usr/sbin/delegated
CONFDIR=/etc/delegate
DGROOT=/var/spool/delegate-nobody

if [ ! -x $DELEGATE ]; then
    echo -n $"$DELEGATE does not exist."; warning; echo
    exit 0
fi

if [ ! -r $CONFDIR ]; then
    echo -n $"$CONFDIR does not exist."; warning; echo
    exit 0
fi

RETVAL=0
start() {
        echo -n $"Starting up Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          $DELEGATE DGROOT=$DGROOT +=$CONFIG
          echo
        done
        return 0
}

stop() {
        echo -n $"Shutting down Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          $DELEGATE DGROOT=$DGROOT +=$CONFIG -Fkill
          echo
        done
        return 0
}

restart() {
        stop
        start
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit 0

Proxyの設定例
※ あまり紹介しているところもなくマニュアルを読みながらの設定なので色々他のサイトの設定例とは違うかも・・・・
あと設定に実用的な意図はありません。リバースプロキシ(キャッシュサーバ)の動作確認だけです。

# ポート番号
-P8080
SERVER=http
# オリジナルサーバとの関連性についての設定
MOUNT="/* https://www.orsx.net/* vhost=-www1.orsx.net"
REACHABLE=27.96.63.202
MOUNT="/* http://www.xrsp.net/* vhost=-www2.orsx.net"
REACHABLE=27.96.63.203
RELIABLE="*" # 接続元の制限をしない
CACHE=do # キャッシュサーバとしての機能を持たすためキャッシュを取る
EXPIRE=3d # キャッシュの期限を3日と指定
CRON="0 2 * * * -expire 30d" # ログテーションを30日と指定
# ログフォーマット
CACHEFILE='$[server:%P]/$[hash:%H]/$[server:%L/%p]'
# ログファイルの形式
LOGFILE='${LOGDIR}/${PORT}[date+%d]'
PROTOLOG='${LOGDIR}/${PORT}/[date+%d].${PROTO}'
CONNECT=c,d:*:*:* # キャッシュを調べてからサーバに取りに行く
MOUNT="/favicon.ico =" #ファビコンを勝手に返さない
# エラーページにオリジナルのメッセージを表示する
MOUNT="/-/* /var/spool/delegate-nobody/tmp/forbidden.dhtml"
# Delegateのバージョンを非表示にする
DGSIGN="V.x.x/Y.x.x"
# 管理者の連絡先
ADMIN=orbit@mail.ほげほげ.net

MySQLのCPU使用率が異常になるので対策してみた

最近やたらMySQLが重いと思ったらCPU使用率が60%~90%を使っていてなんだコレ?とか思いながら対策しました。以前のサーバでも深刻な悩みでしたので困っていたのですが、対策はとったことがあるので今回も実行しました。

一応キャッシュを使えば負荷軽減になります。

# vi /etc/my.cnf
[mysqld]
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1
key_buffer = 16M
sort_buffer_size = 1M
read_buffer_size = 256K

# service mysqld restart

ただやはり将来的にはスペックを見直すべき状態がくると思います。。。。

Cron muninエラー Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set

/etc/munin/plugins/hddtemp_smartctlに全角の「゜」が含まれてるらしくこれをDegCへ変更することでエラーを消すことが可能です。

Apache2 mod_geoip CentOS うざい国を弾くモジュール

GEOIPをyumのリポリトジを利用しインストール
# yum install geoip –enablerepo=rpmforge

yumで見当たらないのでmod_geoipをrpmでダウンロードしてインストールする
# wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/5/i386/mod_geoip-1.2.5-2.el5.i386.rpm
# rpm -ivh mod_geoip-1.2.5-2.el5.i386.rpm

インストールされたか確認する
# ls /usr/lib/httpd/modules/mod_geoip.so

IPのデータベースを更新する
(デフォルトのdatファイルを使ったところ誤認があったので更新することを推薦します)
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# gunzip GeoIP.dat.gz
# mv -f GeoIP.dat /usr/share/GeoIP/GeoIP.dat

1ヶ月ごとに更新されるようなので1ヶ月ごとにデータベースを更新させる
# vi /etc/cron.monthly/geoip

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
mv -f GeoIP.dat /usr/share/GeoIP/GeoIP.dat

実行権を追加する
# chmod 755 /etc/cron.monthly/geoip

Apacheの設定ファイルに下記を追記(下のサンプルは日本とアメリカ以外の殆どの国を指定してます)
# vi /etc/httpd/conf.d/mod_geoip.conf

<Location />
Order allow,deny
SetEnvIf GEOIP_COUNTRY_CODE O1 BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AP BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AQ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AX BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE AZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BB BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BJ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BV BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE BZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CV BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CX BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE DE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE DJ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE DK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE DM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE DO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE DZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE EC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE EE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE EG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE EH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ER BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ES BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ET BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE EU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE FI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE FJ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE FK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE FM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE FO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE FR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GB BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GP BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GQ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE GY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE HK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE HM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE HN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE HR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE HT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE HU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ID BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IQ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE IT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE JE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE JM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE JO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LB BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LV BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE LY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ME BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ML BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MP BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MQ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MV BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MX BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE MZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NP BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE NZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE OM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE PY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE QA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SB BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SJ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ST BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SV BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TD BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TH BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TJ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TK BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TL BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TV BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TW BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE TZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE UA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE UG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE UM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE UY BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE UZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE VA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE VC BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE VE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE VG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE VI BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE VN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE VU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE WF BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE WS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE YE BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE YT BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ZA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ZM BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE ZW BlockCountry 
Deny from env=BlockCountry
Allow from all
</Location>

規制してる海外のプロキシサーバ経由でアクセスしてページがエラー403になってたら成功です

mod_ruid suExec suPHP CentOS Apache2

ApacheのCGIやPHPをユーザ権限で動かすにはmod_ruid suExec suPHP等色々ありますが今回mod_ruidを使って行ないたいと思います。
※ディフォルトのsuExecは停止させておく必要があります。

下記のパッケージをインストールする
# yum install httpd-devel
# yum install libcap-devel
ソースをダウンロードしてきてコンパイルする
# wget http://www.sourcefiles.org/Internet/WebServers/Modules/Access_Control/mod_ruid-0.6.tar.gz
# tar xvzf mod_ruid-0.6.tar.gz
# cd mod_ruid-0.6
# apxs -a -i -l cap -c mod_ruid.c

再起動するとmod_ruidが有効になる
# service httpd restart

WordPressでのエラーやphpMyAdminでのエラーの対処
※現在他の方法を模索中…
# chmod 777 /tmp/fs_sessions/ (デフォルトは700)
# chmod 777 /var/lib/php/session (デフォルトは770)

このままではapacheユーザによって作られたcgiやphpが削除できなくなったり色々と問題が発生するため現在のユーザディレクトリ内のファイル所有者を変更しpublic_htmlのパーミッションを700にするスクリプトを書いて自動で書き換える。
(色々面倒で適当に書いてるところはありますが当方が急いで書いた為なのでお気になさらずに…)

#!/usr/bin/perl
$homedir = '/home/';

opendir(DIR,$homedir);
  @list = readdir(DIR);
closedir(DIR);

foreach $udir (@list) {
$userdir = "$homedir$udir";
if(-d $userdir && $udir !~ /.|+/){
print "$userdir : $udirn";
$chown = `chown -R $udir:$udir $userdir/public_html`;
$chmod = `chmod 700 $userdir/public_html`;
  }
}

今後作成されるユーザディレクトリのパーミッションを変える
# chmod 700 /etc/skel/public_html

最後に不正に他のユーザのディレクトリやファイルが閲覧出来ない事を確認する。