備忘録のため,内容の正当性については責任を持ちません。

これまで BlueOnyx に関する Tips を色々と書いてきたが,サーバをセットアップするたびに毎回適用するのが面倒なので,諸々の設定を一発でやってくれるスクリプトを作ってみた。対応バージョンは 5106R。


※ このスクリプトを実行する場合は自己責任でお願いします。

セットアップスクリプト本体 (setup.sh)

#!/bin/sh

# root 権限で実行
if [ `whoami` != "root" ]; then
  echo "You must be root to do that!"
  exit 1
fi

# 文字コードを UTF-8 に設定
sed -i -e "s/ja_JP.eucJP/ja_JP.UTF-8/" /etc/sysconfig/i18n
sed -i -e "s/ja$/ja_JP.UTF-8/" /etc/sysconfig/i18n

# 不要なサービスを無効化
chkconfig auditd off
chkconfig autofs off
chkconfig gpm off
chkconfig haldaemon off
chkconfig kudzu off
chkconfig lvm2-monitor off
chkconfig mcstrans off
chkconfig mdmonitor off
chkconfig messagebus off
chkconfig rawdevices off
chkconfig restorecond off
chkconfig xfs off

# sshd で公開鍵認証を有効化
sed -i -e "s/^#RSAAuthentication/RSAAuthentication/" /etc/ssh/sshd_config
sed -i -e "s/^#PubkeyAuthentication/PubkeyAuthentication/" /etc/ssh/sshd_config
sed -i -e "s/^#AuthorizedKeysFile/AuthorizedKeysFile/" /etc/ssh/sshd_config
/etc/init.d/sshd restart

# admin で sudo できるように
sed -i -e "s/^# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/" /etc/sudoers

# Apache で DirectoryIndex を表示しないように
sed -i -e "s/Options -FollowSymLinks +SymLinksIfOwnerMatch/Options -Indexes -FollowSymLinks +SymLinksIfOwnerMatch/" /etc/httpd/conf.d/blueonyx.conf

# Apache でバージョン情報を出力しないように
sed -i -e "s/ServerTokens OS/ServerTokens Prod/" /etc/httpd/conf/httpd.conf
sed -i -e "s/ServerSignature On/ServerSignature Off/" /etc/httpd/conf/httpd.conf

# 「ウェブサーバの別名」でリダイレクトさせないように
#cd /usr/sausalito/handlers/base/apache
#sed -i -e "s/\$aliasRewrite \.= \"RewriteCond/\$aliasRewrite .= \"#RewriteCond/" ./virtual_host.pl
#sed -i -e "s/\$aliasRewriteSSL \.= \"RewriteCond/\$aliasRewriteSSL .= \"#RewriteCond/" ./virtual_host.pl
#sed -i -e "s/^RewriteCond/#RewriteCond/" ./virtual_host.pl
#sed -i -e "s/^RewriteRule/#RewriteRule/" ./virtual_host.pl

# 認証が必要なサービスは iptables で国内限定に
chmod 600 /etc/cron.hourly/log_traffic
mkdir -p /usr/local/shell/countryfilter
cd /usr/local/shell/countryfilter
wget -O ./init.sh http://akagi.jp/etc/countryfilter/init.sh.txt
wget -O ./update.sh http://akagi.jp/etc/countryfilter/update.sh.txt
chmod 700 ./{init,update}.sh
./init.sh
./update.sh
ln -s /usr/local/shell/countryfilter/update.sh /etc/cron.daily/countryfilter_update.sh
chkconfig iptables on

# EPEL, Remi レポジトリのインストール
mkdir -p /usr/local/rpm
cd /usr/local/rpm
wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -ivh epel-release-5-4.noarch.rpm remi-release-5.rpm
sed -i -e "s/enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
sed -i -e "s/enabled=1/enabled=0/" /etc/yum.repos.d/remi.repo

# PHP 5.1 系モジュールの退避
if [[ `php -v | head -n 1 | awk "{print \$2}"` =~ "^5\.1\." ]]; then
  cp -a /usr/lib/php/modules /usr/lib/php/modules51
  cp /usr/lib/httpd/modules/libphp5.so /usr/lib/httpd/modules/libphp5adm.so
  sed -i -e "s/libphp5.so/libphp5adm.so/" /etc/admserv/conf.d/php.conf
  sed -i -e "s/\/usr\/lib\/php\/modules/\/usr\/lib\/php\/modules51/" /etc/admserv/php.ini
fi

# PHP のアップデート
yum update -y php* mysql* --enablerepo=epel --enablerepo=remi
sed -i -e "s/safe_mode = On/safe_mode = Off/" /etc/php.ini

# php.ini の設定
sed -i -e "s/^error_reporting.*$/error_reporting = E_ALL \& ~E_NOTICE \& ~E_DEPRECATED/" /etc/php.ini
sed -i -e "s/allow_call_time_pass_reference = Off/allow_call_time_pass_reference = On/" /etc/php.ini
sed -i -e "s/^;date.timezone =/date.timezone = Asia\/Tokyo/" /etc/php.ini

# zend, ioncube_loader の設定
sed -i -e "s/^zend_extension/;zend_extension/" /etc/php.d/zend.ini
cd /usr/local/src
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz
tar -xzf ioncube_loaders_lin_x86.tar.gz
cp ioncube/ioncube_loader_lin_5.3* /home/solarspeed/ioncube
sed -i -e "s/ioncube_loader_lin_5.1.so/ioncube_loader_lin_5.3.so/" /etc/php.d/ioncube.ini

# httpd, mysqld の再起動
/etc/init.d/httpd restart
/etc/init.d/admserv restart
/etc/init.d/mysqld restart

# pear のインストール
yum install php-pear --enablerepo=remi
php -q -d open_basedir="" /usr/share/pear/pearcmd.php upgrade-all
php -q -d open_basedir="" /usr/share/pear/pearcmd.php upgrade --force PEAR

このスクリプトを実行したあと,BlueOnyx のコンパネで Safe Mode を Off にする。

iptables 初期化スクリプト (init.sh)

#!/bin/sh

ADDR=`ifconfig | grep "inet addr" | grep -v 127.0.0.1 | gawk '{print $2}' | gawk -F : '{print $2}'`

/etc/init.d/iptables stop

# 初期化
iptables -F

# デフォルトのルールを設定
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# ローカルループバックを許可
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s $ADDR -j ACCEPT

# 自ホストが要求したリクエストに対する応答を許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ping に応答
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

# SMTP, DNS, HTTP, HTTPS を許可
iptables -A INPUT -p tcp -m multiport --dports 25,53,80,443 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# 認証がいるサービスは国内限定
iptables -N jpfilter
iptables -F jpfilter
iptables -A INPUT -p tcp -m multiport --dports 22,81,444 -j jpfilter
iptables -A INPUT -p tcp -m multiport --dports 20,21,110,143,465,587,993,995 -j jpfilter

# 保存
iptables-save > /etc/sysconfig/iptables
/etc/init.d/iptables start

jpfilter アップデートスクリプト (update.sh)

#!/bin/sh

iptables -F jpfilter > /dev/null 2>&1

cd /usr/local/shell/countryfilter

rm ./*.txt > /dev/null 2>&1
rm ./*.gz > /dev/null 2>&1

wget http://nami.jp/ipv4bycc/cidr.txt.gz > /dev/null 2>&1
gunzip cidr.txt.gz > /dev/null 2>&1

if [ ! -e cidr.txt ] ; then
  echo "cidr.txt doesn't exist!" >&2
  exit
fi

cat cidr.txt | grep "JP" | awk '{print "iptables -A jpfilter -s ",$2," -j ACCEPT"}' > filter.sh

iptables -N jpfilter > /dev/null 2>&1

source ./filter.sh > /dev/null 2>&1
#iptables -A jpfilter -j DROP

# save
iptables-save > /etc/sysconfig/iptables

コメント

コメント(8) “俺的 BlueOnyx のセットアップスクリプトを作った”

  1. おにきす5106R

    ユーザ管理のアカウント設定タブの氏名やよみがなに、
    日本語が入力されている状態で電子メール設定タブに移動し、
    ふたたびアカウント設定タブに戻ってくると、
    入力済みの氏名やよみがなの情報が消えてしまいます。
    セットアップスクリプトを実行したせいとは思えないのですが、
    そちらの環境では特に問題ありませんか?
    なにか情報をお持ちでしたら教えていただきたいです。

  2. 須々木俊太

    > 記事を書いておきました。
    「hosts.allow で sshd への接続を日本国内のみに制限する」
    という記事でしょうか?

  3. 記事を書いておきました。

    仰るように BlueOnyx の日本語情報はあまり多くないですが、基本的には Linux のテクニックがそのまま使えますね。

  4. 須々木俊太

    > 近々記事を書く予定です。
    待ち遠しいです。
    BlueOnyxに関しては日本語の情報も少なく、貴重な情報源としていつも拝見しております。

  5. /etc/cron.hourly/log_traffic の影響じゃないでしょうか。

    hosts.allow バージョンも用意したので、近々記事を書く予定です。

  6. 須々木俊太

    最近のBlueOnyxでは、シェルスクリプトを実行してiptablesの設定を変えた筈なのに

    # save
    iptables-save > /etc/sysconfig/iptables

    した後に、いつの間にか設定がシェルを実行する前の状態に戻ってしまうようです。
    強制的に/etc/sysconfig/iptablesをBlueOnyxが書き換えてしまうのでしょうか?

  7. admserv 用の PHP モジュールの退避に失敗しているみたいですね。手動で実行しみたらいかがでしょう。

  8. 匿名

    ご報告です。

    BlueOnyxのセットアップスクリプトに興味があり、試してみたところ
    コントロールパネルが開かなくなってしまいました。

    さくらVPS512
    カスタムOS CentOS5.5 i386

    OSインストール方法は下記参照通りです
    http://akagi.jp/blog/archives/1492.html

    BlueOnyxインストールの際は
    BlueOnyx-5106R-CentOS5-i386-20110617.tar.gz
    最新バージョンを使用しました。

    BlueOnyxインストール後、コントロールパネルにログインできることは確認済みです。

    その後、setup.shを実行し
    http://xxx.xxx.xxx.xxx:444/login.phpにアクセスすると

    Deprecated: Function eregi() is deprecated in /usr/sausalito/ui/web/login.php on line 7

    Deprecated: Function eregi() is deprecated in /usr/sausalito/ui/web/login.php on line 10

    Fatal error: Call to undefined function ccephp_new() in /usr/sausalito/ui/libPhp/CceClient.php on line 27

    というエラーが表示され、コントロールパネルログインフォームが表示されなくなりました。

コメントする




CAPTCHA