• Apache2.2+PHP5.2 完全インストール – part1 – Apacheインストール

    さて今回は、サーバー構築のメジャーどころ。ウェブサーバーを構築します。

    対象OS : CentOS, RH*, Fedora, FreeBSD, NetBSD, OpenBSD

    ※)途中 yum コマンドを使います。*BSD系OSの場合は yumの変わりにPortsツリーを使いインストールしてください。

    ウェブサーバーの構築には、Apache 2.2 系列と、今をときめく PHP 5.2 系列を導入します。

    ■準備

    ・作業ディレクトリ作成

    # mkdir -p /usr/local/src/web
    # cd /usr/local/src/web
    

    ・httpd-2.2.11.tar.gz をダウンロード

    # wget http://ftp.riken.jp/net/apache/httpd/httpd-2.2.11.tar.gz
    

    ・php-5.2.8.tar.gz をダウンロード

    # wget http://jp.php.net/get/php-5.2.8.tar.gz/from/jp2.php.net/mirror
    

    ■Apache2.2.*のインストール

    ・Apacheを展開

    # tar zxvf httpd-2.2.11.tar.gz
    # cd httpd-2.2.11
    

    ・コンフィギュア

    # ./configure --prefix=/usr/local/apache2/ --enable-so --enable-rewrite --enable-ssl
    

    =====configure オプション詳細=====
    –prefix=/usr/local/apache2/ : インストール場所を /usr/local/apache2
    –enable-so : DSOモジュールを有効化
    –enable-rewrite : Rewriteを有効化。(リダイレクトなど)
    –enable-ssl : SSLを有効にする。
    ======================

    ■エラーがでたら・その1

    ...
    ...
    configure: error: in `/usr/local/src/web/httpd-2.2.11/srclib/apr':
    configure: error: no acceptable C compiler found in $PATH
    See `config.log' for more details.
    configure failed for srclib/apr
    #
    

    このエラーが出たら Cコンパイラが見当たらないという事なので、C コンパイラがインストールされていない可能性があります。CentOSを含む RHのクローンOS であれば、次のようにして Cコンパイラをインストールします。

    # yum install -y gcc gcc-c++
    

    インストールが完了したら、再度 configure。

    ■エラーがでたら・その2

    ...
    ...
    checking for openssl/ssl.h... no
    no OpenSSL headers found
    checking for SSL-C version... checking sslc.h usability... no
    checking sslc.h presence... no
    checking for sslc.h... no
    no SSL-C headers found
    configure: error: ...No recognized SSL/TLS toolkit detected
    #
    

    このエラーは、OpenSSLのヘッダファイルが見つからない事を意味します。OpenSSLのヘッダファイルをインストールします。

    # yum install -y openssl-devel
    

    インストールが完了したら、再度 configure。

    では、コンパイルします。

    ・コンパイル

    # make
    

    ・インストール

    # make install
    

    ■設定

    ・iptablesで80番ポートを開放 (RHのクローンの場合のみ)

    # vi /etc/sysconfig/iptables
    

    ・/etc/sysconfig/iptables

    # vi /etc/sysconfig/iptables
    
    ...
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    ...
    

    ↓追加

    ...
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    ...
    

    ・iptables を再起動

    # service iptables restart
    

    ここまで進んだら、一度動作確認を行っておきます。
    ・Apacheの動作確認。

    # /usr/local/apache2/bin/apachectl start
    

    ブラウザを使い、http://IPアドレス/ にアクセスしてください。
    Apacheが正常に動作している事を示す「It works!」と表示されるハズです。

    確認できたらプロセスを一度終了させておきます。

    # /usr/local/apache2/bin/apachectl stop
    

    ・自動起動設定 – RHクローンの場合

    # cp build/rpm/httpd.init /etc/rc.d/init.d/httpd
    # chkconfig --add httpd
    # chkconfig httpd on
    

    そして、この httpd というファイルですが、$PREFIXを指定した構成でインストールした場合、httpd.conf のパスがデフォルトではなくなっているので、httpd内に記述された httpd.conf のパスがずれてしまいます。
    そのせいで、「設定ファイルがありません」などとエラーを吐きますので、正確なパスへと修正してください。

    このサイトページ通りにインストールした場合、httpd.conf のパスは /usr/local/apache2/conf/httpd.conf となります。

    同じように httpd コマンドへのパスも修正します。
    /usr/local/apache2/bin/httpd

    ・自動起動設定 – FreeBSD、NetBSD、OpenBSDの場合
    /etc/rc.local に次の行を追加します。

    # vi /etc/rc.local
    

    ========== /etc/rc.local (SSLなし) ==========

    # Apache
    if [ -x /usr/local/apache2/bin/apachectl ]; then
    echo -n ' Apache start\n';
    /usr/local/apache2/bin/apachectl start
    fi
    

    ========== /etc/rc.local (SSLあり) ==========

    # Apache
    if [ -x /usr/local/apache2/bin/apachectl ]; then
    echo -n ' Apache start\n';
    /usr/local/apache2/bin/apachectl startssl
    fi
    

    ■Apacheサーバー設定

    Apache2.2から設定ファイルの配置が変わりました。
    ベースの設定ファイルが $PREFIX/conf/httpd.conf というファイルで、種別ごとの詳細設定は $PREFIX/conf/extra/httpd-*.conf といったように、分割されました。

    ■Apacheサーバー設定 – CGIの利用
    CGIを利用する場合は、httpd.conf にあります。
    ・httpd.conf

    #AddHandler cgi-script .cgi
    

    という行の先頭のコメントアウトを外し、有効にします。

    ※)この場合、Perl以外にも /bin/sh や C言語で作成したCGIも実行されます。
    Perlのみに抑制したい場合は、mod_perl や File ディレクティブなどで制御してください。

    ■Apacheサーバー設定 – 最低限のセキュア設定。

    ・conf/extra/httpd-default.conf

    ServerSignature Off
    

    conf/extra/httpd-default.conf にあります、ServerSignature ディレクティブを On から Off に設定します。この ServerSignature では、404やディレクトリのインデックスを表示するページで、ApacheやOSのバージョンを出力するかを設定できます。Off とすることで出力を抑制できます。

    ServerTokens ProductOnly
    

    conf/extra/httpd-default.conf にあります、ServerTokens ディレクティブを Full から ProductOnly に設定します。 ServerTokens では、HTTPヘッダにApacheのバージョン番号を含めるかを指定します。Apacheのバージョンはセキュリティの為に、公開しない方が望ましいでしょう。

    次回は、PHPをインストールします。

    | 1 | 2 | >>


  • Xen – ゲストOSに複数のNICを認識させる

    今回は、XenのゲストOSに eth0、eth1 などの複数のネットワークインターフェイスを割り当てます。

    (まだ Xen のインストールもご紹介いていませんが・・・)

    次のような要件の時に必要になります。

    ・ゲストOSを 複数のネットワークセグメントに参加させたい場合。
    ・限りあるグローバルIPアドレスを、サービスを提供するゲストOSだけに割り当てたい場合。

    では、どのようにして追加するのでしょうか。
    まずは、大まかな流れから。

    1. ホストOSに2枚目以降のブリッジデバイスを追加。
    2. xend 再起動。
    3. ゲストOSのインストール、または再設定。

    このような流れになります。
    次は、実際にやってみます。

    ■ 1.ホストOSに2枚目以降のブリッジデバイスを追加

    通常、Xenを起動する時は、/etc/xen/scripts/network-bridge というスクリプトが走ります。network-bridgeは、xenbr0 というブリッジデバイをOSにエントリします。デフォルトでは network-bridge は、xenbr0 というブリッジデバイスを1つだけ登録します。このブリッジデバイスは、ホストOSが接続されている物理ネットワークセグメントに ゲストOSを参加させ るのに必要です。ホストOSとゲストOSのブリッジのような働きをします。

    そして、ゲストOSで複数のNICを利用したい場合は、ネットワークインターフェイス分だけ ブリッジデバイスを用意します。

    まずは、ブリッジデバイスの用意。
    ブリッジデバイス制御スクリプトを /etc/xen/scripts/network-bridge から /etc/xen/scripts/network-bridge.multi に変更します。

    
    # vi /etc/xen/xend-config.sxp
    
    
    
    ...
    (network-script network-bridge)
    ...
    

    ↓修正

    
    ...
    (network-script network-bridge.multi)
    ...
    
    

    そして、 /etc/xen/scripts/network-bridge.multi を用意します。

    # vi /etc/xen/scripts/network-bridge.multi
    
    
     #!/bin/sh
     set -e
    
    OP=$1
     shift
    
    script=/etc/xen/scripts/network-bridge
    
    case ${OP} in
     start)
     $script start vifnum=0 bridge=xenbr0 netdev=eth0
     $script start vifnum=1 bridge=xenbr1 netdev=eth1
     $script start vifnum=2 bridge=xenbr2 netdev=eth2
     ;;
    
    stop)
     $script stop vifnum=0 bridge=xenbr0 netdev=eth0
     $script stop vifnum=1 bridge=xenbr1 netdev=eth1
     $script stop vifnum=2 bridge=xenbr2 netdev=eth2
     ;;
    
    status)
     $script status vifnum=0 bridge=xenbr0 netdev=eth0
     $script status vifnum=1 bridge=xenbr1 netdev=eth1
     $script status vifnum=2 bridge=xenbr2 netdev=eth2
     ;;
    
    *)
     echo 'Unknown command: ' ${OP}
     echo 'Valid commands are: start, stop, status'
     exit 1
     esac
    

    実行権限を付与。

    
    # chmod +x /etc/xen/scripts/network-bridge.multi
    
    

    ■ 2. xend 再起動

    そして、xend を再起動します。

    
    # service xend restart
    
    

    これで、xenbr0、xenbr1、xenbr2 という3つのブリッジデバイスが用意できました。
    ifconfig で確認できます。

    
    # ifconfig
    
    

    ■ 3. ゲストOSのインストール、または再設定

    次は、ゲストOSのインストールです。

    
    # virt-install -n guestos01 -r 500 --vcpus=1 \
      -f /dev/VolGroup00/guestos01 --nographics \
      -l http://ftp.riken.jp/Linux/centos/5.2/os/i386/ \
      -m 00:16:3e:51:59:f2 -b xenbr0 \
      -m 00:16:3e:51:59:f3 -b xenbr1
    

    この様に「-m」オプションと「-b」オプションで、MACアドレスとブリッジデバイスを2つずつ指定します。

    これで、ゲストOSがNIC2毎を認識してくれるので、あとは、通常のNIC2枚刺しの時のようにインストール作業を進めることができます。

    既存のゲストOSにNICを追加する場合は、xm console <name> などとして、コンソールから作業をした方が、ネットワークの設定を安全に行えます。

    ちなみに、「-m」 で指定する仮想NICのMACアドレスは、割り当てるIPv4アドレスの 下8ビットを16進数に変換して割り当ててます。そうする事でMACアドレスのバッディングを防げます。


  • 続・自前でRBLのDBを作ってみました。

    「<a href=”http://dage.jp/diary/2009/07/16/16/”>自前でRBLのDBを作ってみました。</a>」 という前回の記事で独自RBLを作っているとお伝えしました。

    その後、IPAddressのマッチングパターンによるバグを修正し、正しいIPAddressを抜けるようになりました。
    1日で 54件 でした。

    ---------- 昨日1日の収穫 ----------
    41.117.184.xxx
    41.178.237.xxx
    58.42.167.xxx
    59.96.209.xxx
    60.166.179.xxx
    69.51.103.xxx
    72.24.65.xxx
    75.208.188.xxx
    76.73.235.xxx
    78.160.99.xxx
    78.183.69.xxx
    79.103.201.xxx
    79.20.137.xxx
    83.31.46.xxx
    84.30.132.xxx
    85.107.132.xxx
    85.110.142.xxx
    85.160.29.xxx
    85.247.32.xxx
    88.233.171.xxx
    88.241.237.xxx
    88.78.30.xxx
    92.49.160.xxx
    94.99.225.xxx
    95.135.205.xxx
    95.52.69.xxx
    110.37.12.xxx
    113.53.170.xxx
    115.171.185.xxx
    116.121.203.xxx
    123.18.156.xxx
    123.20.0.xxx
    123.24.92.xxx
    123.245.196.xxx
    186.12.61.xxx
    187.13.199.xxx
    189.105.132.xxx
    189.11.98.xxx
    189.143.79.xxx
    189.78.37.xxx
    189.97.12.xxx
    189.99.59.xxx
    190.134.153.xxx
    190.253.242.xxx
    190.51.80.xxx
    190.66.187.xxx
    190.67.212.xxx
    200.163.62.xxx
    201.137.190.xxx
    201.240.235.xxx
    201.78.222.xxx
    201.8.253.xxx
    201.86.243.xxx
    218.64.142.xxx
    --------------------
    

    以上、規模を大きくすればもっと多くのブラックリストが作成出来そうです。


  • 自前でRBLのDBを作ってみました。

    自前でRBLのDBを作ってみました。

    自分が管理している複数のドメインに<strong>仕掛け</strong>となるメールアドレスを作成し、HTMLでも表示されない箇所にメールアドレスを記載して、ネット上にアップロードしておきます。このメールアドレス宛にメッセージが送信された場合、それは自動巡回プログラムがメールアドレスを自動的に拾い送信された未承諾広告である事を意味します。いわゆるスパムです。

    一方メールサーバーの方では、仕掛けアドレスに送信された場合、ブラックリストDBに送信元のメールサーバーのIPアドレスを保存しておくという仕組み。新しいIPアドレスがブラックリストに追加されたタイミングでDNSサーバー(Bind)のゾーンファイルを書き換えてリロードする。

    これでRBLのデータベースが完成~!
    同時にホワイトリストを管理するためのインターフェイスも用意して運用開始!

    2日間で収集したIPアドレス、107件。

    --------------------
    41.214.69.xxx
    41.251.4.xxx
    58.11.86.xxx
    58.243.90.xxx
    58.247.28.xxx
    58.46.6.xxx
    70.216.147.xxx
    77.35.179.xxx
    78.132.173.xxx
    78.134.84.xxx
    78.145.49.xxx
    78.160.151.xxx
    78.168.121.xxx
    79.119.19.xxx
    79.186.38.xxx
    79.46.231.xxx
    82.101.147.xxx
    82.56.79.xxx
    83.10.108.xxx
    83.11.107.xxx
    83.26.235.xxx
    83.52.171.xxx
    84.126.22.xxx
    85.108.77.xxx
    85.108.78.xxx
    85.84.208.xxx
    85.98.80.xxx
    86.70.45.xxx
    87.70.186.xxx
    87.8.50.xxx
    89.123.152.xxx
    89.132.53.xxx
    90.151.135.xxx
    91.164.100.xxx
    93.94.179.xxx
    94.122.245.xxx
    94.179.7.xxx
    94.181.56.xxx
    94.250.79.xxx
    95.132.131.xxx
    95.132.155.xxx
    98.150.154.xxx
    113.112.57.xxx
    113.88.170.xxx
    114.236.80.xxx
    115.184.137.xxx
    115.240.179.xxx
    115.60.174.xxx
    115.75.16.xxx
    115.75.29.xxx
    118.68.45.xxx
    119.176.3.xxx
    119.7.140.xxx
    120.10.154.xxx
    121.121.62.xxx
    121.230.202.xxx
    121.247.230.xxx
    121.247.48.xxx
    122.139.132.xxx
    122.167.97.xxx
    123.168.176.xxx
    123.18.124.xxx
    123.18.96.xxx
    123.19.122.xxx
    123.19.183.xxx
    123.20.239.xxx
    123.22.21.xxx
    123.24.159.xxx
    123.7.117.xxx
    124.161.168.xxx
    124.72.42.xxx
    125.126.202.xxx
    125.161.8.xxx
    125.167.97.xxx
    151.53.184.xxx
    187.10.170.xxx
    187.35.250.xxx
    188.48.72.xxx
    189.104.180.xxx
    189.135.219.xxx
    189.15.119.xxx
    189.15.141.xxx
    189.15.148.xxx
    189.15.243.xxx
    189.47.43.xxx
    189.7.45.xxx
    189.71.199.xxx
    189.81.186.xxx
    189.83.55.xxx
    190.149.9.xxx
    190.208.92.xxx
    190.42.38.xxx
    190.49.102.xxx
    190.71.179.xxx
    196.207.248.xxx
    200.243.7.xxx
    201.11.100.xxx
    201.236.117.xxx
    201.236.127.xxx
    201.68.30.xxx
    201.68.32.xxx
    213.55.71.xxx
    218.58.17.xxx
    220.184.193.xxx
    222.124.190.xxx
    222.131.236.xxx
    222.208.79.xxx
    --------------------
    

    ■今後の改善、修正案。
    現時点ではメールヘッダからIPアドレスを取得していますが、IPアドレスを抽出するパターンのマッチングがおかしくてIPアドレスの末尾に改行が入ったり、数字が入ったりしてます。
    これを改善したら運用後、RBLを一般公開もするかも知れません。

    規模を拡大すればある程度信頼のありそうなRDBサーバーが作れそうです。