パスワードを忘れた? アカウント作成
391687 journal

Maxの日記: [外鯖] Apache+Zope with Pound

日記 by Max
APSISのPound 1.3をRPM化してみる。
RPMとしては今のところ、PLDでしかパッケージされていない。

とりあえずrpmfind.netからPLD用のソースRPMを取ってくる。
specファイル最新の1.3に書き換え、や起動スクリプトを
Mandrake 9.0にあうように書き換え。ビルドしてみる。
pound-1.3-1mdk.i586.rpmができあがる。

# rpm -ql pound
/etc/pound
/etc/pound/pound.cfg
/etc/rc.d/init.d/pound
/usr/bin/pound
/usr/share/doc/pound-1.3
/usr/share/doc/pound-1.3/README
/usr/share/man/man8/pound.8.bz2

のような内容。

起動スクリプトはこんな感じで。
#!/bin/sh
#
# pound
#
# chkconfig: 345 85 15
# description: reverse-proxy and load-balancer
#

# Source function library
. /etc/rc.d/init.d/functions

# Get network config
. /etc/sysconfig/network

# Get service config
[ -f /etc/sysconfig/pound ] && . /etc/sysconfig/pound

# See how we were called.
case "$1" in
    start)
                # Check if the service is already running?
                if [ ! -f /var/lock/subsys/pound ]; then
                                echo -n "Starting pound."
                                daemon pound -f /etc/pound/pound.cfg
                                RETVAL=$?
                                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/pound
                                echo
                else
                                echo "pound already started."
                                exit 1
                fi
                ;;
    stop)
                # Stop daemons.
                if [ -f /var/lock/subsys/pound ]; then
                                echo -n "Stopping pound."
                                killproc pound
                                rm -f /var/lock/subsys/pound > /dev/null 2>&1
                                echo
                else
                                echo "pound is not running."
                                exit 1
                fi
                ;

    status)
                status pound
                RETVAL=$?
                exit $RETVAL
                ;;
    restart|reload)
                $0 stop
                $0 start
                ;;
    *)
                echo "usage: $0 {start|stop|restart|status}"
                exit 1
                ;;
esac

/etc/pound/pound.cfgに、それぞれPoundで取り扱いたいアクセス
を記述する。

*user nobody と group nobody
それぞれ、Poundを実行するユーザとグループを指定。

*ListenHTTP host,port
Pound自身がhttpでListenするIPアドレスとポート番号を記載する。

ex) ListenHTTP 1.2.3.4,80

*ListenHTTPS host,port cert_file [ciphers]

Pound自身がhttpsでListenするIPアドレスとポート番号、さらに
cert_fileで証明書ファイルを指定する。

ex) ListenHTTPS 1.2.3.4,443 /path/to/my/server.pem

後はそれぞれアクセスされる名前とバックエンドの対応を次のように
書く。

  UrlGroup ".*"
  HeadRequire Host ".*www.server0.com.*"
  HeadDeny Host ".*www.server1.com.*"
  BackEnd 192.168.0.10
  EndGroup

  UrlGroup ".*"
  HeadRequire Host ".*www.server1.com.*"
  HeadDeny Host ".*www.server0.com.*"
  BackEnd 192.168.0.11
  EndGroup

上記の例だと、バックエンドに192.168.0.10と192.168.0.11の二つ
があって、それぞれwww.server0.comとwww.server1.comという
名前で呼ばれる。

一つの鯖で、Poundをフロントエンドとしてapacheに回送するなら、
httpd.confに "Listen 127.0.0.1:80" などとして、BackEndに
ApacheがListenしているアドレスを書けばいいということかな。
それから、NameVirtualHostは使わないので全て消し。
ポート8080で動いているSiteAccessEnhanced(VirtualHostMonster)
も要らないので消す。

まずはデフォルトのhttpアクセスを転送する設定。

UrlGroup ".*"
HeadRequire Host "www.hogehoge.*"
BackEnd 127.0.0.1,80,1
EndGroup

zope.hogehoge -> hogehoge:8080

にするなら、単純に

  UrlGroup ".*"
  HeadRequire Host "zope.hogehoge.*"
  BackEnd 127.0.0.1,8080,1
  EndGroup

とでも書けばいいのかな。これでやってみる・・・おお、うまくいった。
なんて素晴らしいんだ<単純

httpsの設定などする必要があるが、続きは後ほど。

****
でっち上げの証明書をpem形式で作成:

# cd /etc/pound
# openssl req -x509 -newkey rs:1024 -keyout hogehoge.pem -out hogehoge.pem -days 730 -nodes

/etc/pound.cfgには次のように記述。
ListenHTTPS xxx.xxx.xxx.xxx,443 /etc/pound/hogehoge.pem

これでPoundを再起動。いまのこの状態だと、任意のURLをhttpsで
開けてしまうが、とりあえず動いた。

のこり、

・httpsで開くURLを限定する
(Zopeの管理画面はすべてhttps経由にするなど)
・WebDAVアクセスできるURLを限定する
・mod_frontpageでオーサリングするURLの設定(WebDAV設定兼)
・rpmパッケージとしての体裁調整(一部ミスがあった)

といったあたりかな。あとできれば、

・フィルタリング機能で特定パターンのアクセスに対して接続を拒否

を仕込みたい。Apacheのmod_antihakやZopeのRequestChecker
より全段で軽いプログラムにて除外できれば幸せかも。
さらにPoundならフィルタルールは pound.cfg に記述追加するだけ
なのでメンテナンス(新種ワーム追加など)も簡単だと思われるし。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...