Server/Daemon

/ 3 ページを表示中 | [次のページ]

2009年03月10日

●squidですべての要求を上位プロキシ経由で転送するconf

インターネットにダイレクトアクセスできない場所から、どうしてもインターネットに出る必要があったので、別の場所にsquidでプロキシサーバーを作って、そこを経由させてインターネットに出るようにしたのだが、初めてsquidを使ったので、イマイチ動作がよく分らずconfの書き方にちょっと苦労した。

画像やhtml単体は落ちてくるのに、その他のところはタイムアウトしてしまう。
ログを見ていると、hogehoge.txtやhogehoge.jpgはsquidが取りに行って渡しているのに、「?」や「/」で終わったりするURLはダイレクトアクセスさせている。
最初はMIMEタイプの問題かと思ったのだが、どうもそうではないらしい。
基本的にsquidってのは、今回のように代理サーバーや中継サーバー用途というよりは、キャッシュサーバーを想定して作られているので、特に明示的に指定せずにconfを書くと、静的コンテンツだけがsquid経由でクライアントに渡される仕様になっているようだ。

ということで、すべてのクライアント要求をsquid自身が取りに行き、かつ上位プロキシを経由する設定を書いてみる。

squidではない上位プロキシを指定し、クライアント192.168.1.0/24と192.168.2.1にのみ転送し、これらへの転送をすべてsquidが行う。(ダイレクトアクセスさせない)

acl 1net src 192.168.1.0/24 
acl host1 src 192.168.2.1 

http_access allow 1net
http_access allow host1

never_direct allow 1net
never_direct allow host1

http_access deny all
htcp_access deny all

#待ち受けポートは8080
http_port 8080

#上位プロキシ(proxyserver:8080)を指定する
cache_peer proxyserver parent 8080 0 proxy-only

2008年11月28日

●色々なデーモンのデバッグモード

色々なサーバーを作っていて一回コンパイルしてconf設定してすぐにちゃんと動けば申し分ないけど、ほとんどの場合は一度では動かない。
confを書き換えたり、オプション変えてコンパイルしなおしたりと試行錯誤が必要になってくる。

で、サーバーが思ったように動かない時に詳細なログ吐かせて何が問題になっているのかを特定するために、各デーモンのデバッグモードでの起動、あるいはデバッグログを出力させての起動が必須になる。

といういことで、各デーモンのデバッグオプションを書いてみた。
バックグラウンドで動かさずにフォアグラウンドで起動して標準出力に大量のログを吐くタイプと、
フォアグラウンドには出ないけど、ログには詳細なデバッグ情報を各タイプと2タイプある。

フォアグラウンドに出ずにログが詳しくなるタイプ
tail -f ログ みたいな感じでリアルタイムにデバッグするのがよい。

postfix
/etc/postfix/master.cf
の該当デーモンに -v をつけるとsysologに大量のログが出力される

smtp inet n - n - - smtpd -v
smtps inet n - n - - smtpd -v

などとしておいて、メールを送信してみる。


dovecot
指定したログに大量のデバッグ情報が出力される。指定していない場合はsyslog。
dovecot.conf

#メールプロセスのデバッグを有効
mail_debug = yes
より詳細なログ出力
auth_verbose = yes
# 認証がらみの詳細なログ出力。
auth_debug = yes
#パスワードと使われたやり取りが記録
#auth_debug_passwords = yes

てな感じでpop3やimapを使ってみる。


以下はフォアグラウンドで動作させて標準出力にログを吐かせるタイプ。

proftpd
/usr/local/proftpd/sbin/proftpd -n -d 10
-nでデーモンでなくフォアグランドで動作させ、-dでデバッグレベルを指定する。
標準出力に詳細なログが垂れ流し…

おまけのbind9
/usr/local/bind/sbin/named -c /etc/named.conf -u named -t /usr/local/bind -d 10 -g
-gでデバッグモードでフォアグラウンドで動く -dでデバッグレベルの指定

しかし、デバッグログを見るたびに、デーモンソフトウェアたちは見えないところで頑張ってるねんなーと思うのであった。

2008年11月27日

●apache1.3にmysql認証を追加

apacheでのユーザー認証と言えばBasic認証かDigest認証やけど、仮想ユーザー統一の一環として、
ベーシック認証の問合せ先をパスワードファイルだけではなく、mysqlも参照出来るようにしてみた。

作業としてはapache1系mod_auth_mysqlを追加するという事になる。

CFLAGS="-native -mt -fast" ./configure --enable-rule=SHARED_CORE --enable-module=so --prefix=/usr/local/apache --enable-module=auth_digest --enable-module=digest

ってな感じコンパイルされているapacheに、モジュールとしてmod_auth_mysqlを組み込む
mod_auth_mysqlのソースディレクトリで、
/uasr/local/apache/bin/apxs -c -L/usr/local/mysql/lib/mysql -R/usr/local/mysql/lib/mysql -I/usr/local/mysql/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c

と直接mod_auth_mysql.cをコンパイルするとmod_auth_mysql.soが生成されるので、
sudo /uasr/local/apache/bin/apxs -i mod_auth_mysql.so
でファイルがコピーされる。

confには


LoadModule mysql_auth_module libexec/mod_auth_mysql.so
AddModule mod_auth_mysql.c
#モジュールを読み込む


<Directory /export/web/hogehoge >
AuthMySQLEnable On
 AuthName "enter username and password"
 AuthType Basic
 AuthMySQLHost ホスト名
 AuthMySQLDB DB名
 AuthMySQLUser 接続ユーザー
 AuthMySQLPassword パスワード
 AuthMySQLUserTable テーブル
 AuthMySQLNameField username
 AuthMySQLPasswordField password
 AuthMySQLPwEncryption crypt
 AuthMySQLUserCondition mailuse='1'
 require valid-user
#SELECT username,password FROM DB名.テーブル WHERE mailuse='1';
#と展開され、
#入力されたユーザー名とパスワードと照合される。

</directory>


と書けば/export/web/hogehogeはmysqlによるbaseic認証となる。
当然、AllowOverrideでAuthConfigが許可されているディレクトリでは、.htaccessとかにも書いてもよい。

2008年11月26日

●proftpdでlocalhost意外のmysqlに接続する場合の注意点

mail,ftp,webをmysql内のユーザーDBに統合出来たと言う事で、土偶家の外向きサーバーを家向きサーバーから完全に隔離して、Solarisコンテナ内の別ゾーン内に閉じ込めるべく別環境に移行させた。

それに伴って、各デーモンの問い合わせ先となるMYSQLのデーモンも別のまた別の隔離されたゾーン内に閉じ込めたのだが、postfixでもdovecotでローカルホストではない別のホストへのmysql接続が正常動作しても、proftpdだけ全く動かなくなった。
proftpdでmysqlの問合せ先をlocalhost意外にした場合デーモン自体が起動しないのだ。

これは困ったと言う事で色々調べていると、どうやらinetd経由では起動しなかったものがStandAloneではちゃんと動く。
これは仕様なのかバグなのだろうか?
もしかしたら完全にリードオンリーでマウントされているsolarisコンテナ内のゾーン内でのファイルシステムでの運用に問題があったり、confでのsqlのソケットの指定にパーミッションやら何やらの関係で問題があったのかもしれないけど、まぁ動いたのでこれでよしとする。
又気が向いたらデバッグするかもしれない。

2008年11月25日

●postfix 2.5.5 dovecotでsmtp-auth + mysqlによる仮想ユーザー運用

先日cyrus-SASLによるSMTP-AUTHとSMTP/TLS対応のpostfixを作ったが、これをsmtp-authにdovecoのSASLを利用し、仮想ユーザーの参照元をmsqlにするためにコンパイルしなおした。

ネット上に色々情報があるけど、一番参考になったのは、やっぱり本家のドキュメント
Cyrus-SASL対応と比べてDovecotのSASLの良い点は、Cyrusの場合はpostfixのバイナリにCyrusのライブラリをリンクさせる必要があるけど、Dovecotは認証に専用のデーモンプロセスを使うのでコンパイル時にフラグを一つ追加するだけで済む事である。
たしかにヘッダとライブラリ検索パスを指定しつつフラグも追加するよりはエレガントで、かつライブラリをリンクしないと言う事はリンク先のライブラリのバグを取りこむ可能性が一つ減ったという事も言えるのであろう。

以下で、Dovecot-SASLとMysql、SMTP/TLS対応のバイナリのコンパイル、設定の手順、いくつかの注意点を書いてみる。
例の如く、Solaris10 U6 spac版にgccを使わずSun Studio 12のコンパイラでの実装である。

C++のコンパイルオプションで、最適化オプションに-fast -native -mt 、ヘッダ検索パス、SASL対応と、TLS対応、Mysql対応を指定、
外部ライブラリの検索パスとランパス、TLSとmysqlのリンカオプションを指定、


export CCARGS="-fast -native -mt -DUSE_SASL_AUTH -I/usr/sfw/include -DUSE_TLS -DHAS_MYSQL -I/usr/local/mysql/include/mysql"
export AUXLIBS="-L/usr/sfw/lib -R/usr/sfw/lib -L/usr/lib -R/usr/lib -L/opt/sfw/lib -R/opt/sfw/lib-lssl -lcrypto -L/usr/local/mysql/lib/mysql -R/usr/local/mysql/lib/mysql -lz -lm -lmysqlclient"
dmake makefiles
dmake

ドキュメントでは、「-DDEF_SERVER_SASL_TYPE=\"dovecot\"」を指定するとデフォルトでDovecotが使われると書いてあったけど、土偶の環境ではmake時にエラーで止まったので、コンパイラオプションで指定せず、後からconfで指定した。

以下でconfの重要な部分を書く。
ローカルへのメール配信は、実ユーザーが存在しなければmysqlに問い合わせる。
外部へのリレー要請ではSMTP認証でdovectに問い合わせを行い、認証されればリレー許可する。
SMTP認証とローカル配信対象リストは全く別物であるところに注意である。まぁ当たり前か。

main.cf


smtpd_sasl_type = dovecot
#SASLにDovecotを

smtpd_sasl_path = private/auth
# dovecotと通信するソケットの指定、dovect.confのsocket listenの位置を書く。
# ドキュメントに則ってスプールからの相対パスで書いた。

smtpd_sasl_security_options = noanonymous
#anonymouse接続を拒否

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,check_relay_domains
#外部へリレー許可するリスト、permit_sasl_authenticatedがSMTP-AUTHで許可されたものとなる

local_recipient_maps = $virtual_mailbox_maps unix:passwd.byname
#ローカル受信者の検索テーブルの指定
#仮想メールボックス、実ユーザーの順で書いた。

fallback_transport = virtual
#存在しないローカルアドレスへのリレー要請をvirtualに
#local_recipient_mapsで指定してるからいらんかも

#以下で仮想ユーザ(メールボックス)の指定
#それぞれファイルを指定して、ファイル内でDBとクエリを指定する。
virtual_mailbox_base = /
virtual_mailbox_maps = mysql:/etc/postfix/virtual-account.cf
virtual_uid_maps = mysql:/etc/postfix/virtual-uid.cf
virtual_gid_maps = mysql:/etc/postfix/virtual-gid.cf

以下からmysqlへの問い合わせの設定、詳しい書式はこの本家のドキュメントを参照されたし。
virtual-account.cf


hosts = ホスト名
user = 接続ユーザー
password = パスワード
dbname = DB名
table = テーブル

#以下の三つの項目は、
#user@domain.comへと配信要求が来た場合、
#SELECT CONCAT(mailrootdir,"/Maildir/") FROM DB名.テーブル WHERE username="user" and mailuse='1' ;
#と展開される

select_field = CONCAT(mailrootdir,"/Maildir/")
#メール配信先を指定する、SQL文concatで文字列を結合し、/home/user/Maildir/などと展開される。
#最後に/をつけるとMaildir形式、スラッシュ無しだとmailbox形式になる、微妙にはまった。

where_field = username
additional_conditions = and mailuse='1'


virtual-uid.cf


hosts = ホスト名
user = 接続ユーザー
password = パスワード
dbname = DB名
table = テーブル

#以下の三つの項目は、
#user@domain.comへと配信要求が来た場合該当メールボックスにUIDを設定するために使われるようである、
#SELECT uid FROM DB名.テーブル WHERE username="user" and mailuse='1' ;
#と展開される
select_field = uid
where_field = username
additional_conditions = and mailuse='1'

virtual-gid.cfは略。
とこんな感じで、dovectと同じテーブルを読み、メール環境が統合できる。

2008年11月24日

●mysql対応、openssl対応のDovecotのコンパイル@Sun Studio 12@Solaris10 U6 spac

MTAであるpostfixがsmtp認証を実現するための外部機能として、以前まではCyrus SASLを選択するしかなかったのだが、バージョン2.3からDovecot SASLなるものに対応していることを最近知った。

ということで、その時初めて知ったDovecotについて調べてみると、どうやら単なる認証機能を提供するSASLではなく、pop3とimapを提供するMDAであるらしい。
ユーザーデーターベースとして、UNIXシステムの実ユーザーに対する認証からpam、LDAP、Mysqlなどに対応し、それらの複数を同時に実装できるのが何よりも良い感じである。
メジャーで事実上標準的なMDAであるQpopperとかCourier-IMAPより歴史的には浅いけど、Postfixと連携させて使うことを前提に、しかも実ユーザーでなく、仮想ユーザーでの運用も追加して考えれば良い選択であろう。

これでメールサーバーのMTAの部分とMDAの部分が実ユーザーだけでなくMysql上のDBにある仮想ユーザーも加えて運用させることができた。

以下でSolaris10 U6 spac版にgccを使わずSun Studio 12のコンパイラで実装した手順を書いてみる。

コンパイラオプションで最適化コードとヘッダ、ライブラリ検索パスとランパスを指定、
コンフィグオプションは以下の通り、
mysqlサポート、opensslサポートを追加、それぞれ/usr/local/mysql/ /usr/sfw/にインストールされているものとする。


export CFLAGS="-native -mt"
export CPPFLAGS="-I/usr/sfw/include/openssl -I/usr/local/mysql/include/mysql"
export LDFLAGS="-L/usr/local/mysql/lib/mysql -L/usr/sfw/lib -R/usr/local/mysql/lib/mysql -R/usr/sfw/lib"

./configure --prefix=/usr/local/dovecot --with-mysql --with-ssl=openssl --disable-ipv6 && dmake


普段、土偶はSUNのC++の最適化オプションは「-native -mt -fast」を利用しているが、コンパイラオプションに「-fast」をつけると、コンパイルは通るものの、出来たバイナリはpop接続すると

Nov xx xx:32:55 host dovecot: [ID 762087 mail.info] Dovecot v1.1.6 starting up
Nov x xx:32:55 host dovecot: [ID 107833 mail.crit] Panic: file istream.c: line 84: assertion failed: (stream->eof)
Nov xx xx:32:55 host dovecot: [ID 398108 mail.error] Raw backtrace: 0x26894 -> 0x29a94 -> 0x3111c -> 0x2f2f0 -> 0x27a24 -> 0x27b24
-> 0x22c64 -> 0x22ebc -> 0x1f02c -> 0x15a88

って感じのエラーを吐いて落ちてしまう。
SUNのドキュメントには「IEEE 標準の浮動小数点演算を使用しているプログラムには、-fast を指定しないでください。計算結果が違ったり、プログラムが途中で終了する、あるいは予期しない SIGFPE シグナルが発生する可能性があります。」って書いてあるのでそれだろうか?
RSA暗号の強度は因数分解の難しさがである上に、複合化するにはガウスの時計計算機とフェルマーの小定理を使うので計算結果が狂うということだろうか?とにかく-fastオプションでなく、-native -mtオプションだけだとちゃんと動作した。

で、confファイルはこんな感じのものが認証に関わる部分、
dovecot.conf


mail_location = maildir:~/Maildir
#ユーザーデータベースとパスワードデータベースに外部DBを、指定した外部ファイルで指定、
#postfixのスプールディレクトリにユーザーとグループを指定してSASLソケットを提供
auth default {
  mechanisms = plain login
  userdb sql {
   args = /usr/local/dovecot/etc/dovecot-mysql.conf
  }
  passdb sql {
   args = /usr/local/dovecot/etc/dovecot-mysql.conf
  }
  passdb pam {
  }
  passdb passwd {
  }
  userdb passwd {
  }
  socket listen {
   client {
    path = /var/spool/postfix/private/auth
    mode = 0660
    user = postfix
    group = postfix
   }
  }
}

dovecot-mysql.conf
でDBのやらそのクエリを指定する。


driver = mysql
connect = host=ホスト名 dbname=DB名 user=ユーザーt password=パスワード
#パスワードのハッシュ方式を指定 MD5-CRYPTとかPLAINとかが使える。
default_pass_scheme =CRYPT

#ユーザーDBの参照クエリ
# %uでユーザー名を指定され、
# カラム名homeにMaildirのあるディレクトリ、(一般的にはホームディレクトリやね)
# uidにuid gidにgidが得られるようなクエリを指定する。
user_query = SELECT mailrootdir AS home ,uid ,gid FROM table WHERE username="%u" and mailuse='1'

#パスワードDBの参照クエリ
# %uでユーザー名を指定され、
#カラム名usetとしてユーザー名が、
#カラム名passwordとして指定した方式でハッシュ化済のパスワードが得られるようなクエリを指定する。
password_query = SELECT username AS user ,password FROM table WHERE username='%u' and mailuse='1'

2008年11月13日

●postfix 2.5.5 でのSMTP/TLS @OpenSolaris

以前のエントリー「postfix 2.5.5 でのCryus-SASLでのSMTP-AUTH @OpenSolaris」でCyrus-SMTPを使ったSMTP-AUTHを実装したPostfixのビルド方法を書いたけど、更にそれにSMTP/TLSを実装する方法を書いてみる。

このSMTP/TLSなる技術は、本来ならSMTPの他ホストへのリレーにユーザー認証を取りいれ、更にその認証からメール送信までの経路をSSLで暗号化するということでセキュリティーを向上させようという趣旨である。とはいっても、実際通常の使い方をする分には通信経路の暗号化は必須ではない。

自宅サーバーでメールサーバーを運用していると、自宅サーバーから送信したメールが問答無用でスパムメール扱いされる事が多いのは本当に腹立たしい。
これを自宅のISPのSMTPにリレーしてもらうには「Outbound Port25 Blocking」なる技術もあるにはあるけど、私のように自宅ISPにSMTPリレーしてもらえない状況の人もいる。(WilcomADSLでオプション扱いのメール契約していないなど。)

という場合、外部のSMTPを使う事になるわけやけど、一番てっとりばやくスパム扱いされにくく安心出来そうなSMTPと言えばGmailが妥当なところであろう。
しかし、GmailはタダのSMTP-AUTHではなくTLSでのAUTHを要求してくるので、これに対応する事で、GmailのSMTPを経由してメール送信が出来る。

こんなメール乱世な御時勢を生きる、真っ当な自宅メールーサーバーなハッカー諸氏にとっても必須の技術といってもいいであろう。

ここでは、のCryus-SASLでのSMTP-AUTHを動作させた状態を前提として、それにTLSでの暗号化技術を乗せて、送信時にgmailへリレーするようにするまでを書いてみる。

postfixのインストール(太字がSMTP/TLSの部分)
opensslのヘッダファイルssl.hが/usr/sfw/include/opensslにあり、libssl.soとlibcrypto.soが/usr/sfw/libにある場合


export CCARGS="-DUSE_CYRUS_SASL -DUSE_SASL_AUTH -I/usr/local/include/sasl2 -I/usr/include/pcre -DUSE_TLS -I/usr/sfw/include"
export AUXLIBS="-R/usr/local/lib -L/usr/local/lib -L/usr/sfw/lib -R/usr/sfw/lib -lssl -lcrypto"
make tidy
make makefiles
make
#make install

次にサーバー秘密鍵と証明書+公開鍵の作成
#cd /etc/postfix
秘密鍵の作成
#openssl genrsa -out server.key 1024

証明書+公開鍵の作成
#openssl req -new -x509 -key server.key -out server.crt

#chmod 400 server.key server.crt


続いてpostfixの設定
/etc/postfix/main.cf


#daemn設定
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/server.key
smtpd_tls_cert_file = /etc/postfix/server.crt

#smtp送信設定

smtp_sasl_auth_enable = yes
smtp_sasl_tls_security_options = noanonymous
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_password_maps = dbm:/etc/postfix/sasl_passwd 
#(hashやbtree、cdbが良い人はお好みで)


gmail認証情報ファイルの作成
/etc/postfix/sasl_passwd

[smtp.gmail.com]:587 Gmailアカウント@gmail.com:パスワード
と記述。

gmail認証情報ファイル検索テーブル作成
#cd /etc/postfix
#postmap dbm:sasl_passwd (hashやbtree、cdbが良い人はお好みで)
sasl_passwd.pagとsasl_passwd.dirが出力されたのを確認
#chmod600 /etc/postfix/sasl_passwd*

動作確認

telnet llocalhost 25

220 サーバー名 ESMTP Postfix
ehlo localhost ←入力
250-サーバー名
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN


STARTTLSの行があるのを確認したのち、
sendmailコマンドでどこぞにメールを送信してテストしてみる。

2008年11月11日

●postfix 2.5.5 でのCryus-SASLでのSMTP-AUTH @OpenSolaris

最近新しくOpenSolaris 2008.05で家のサーバーを作っており、cyrus-saslでpam認証するSMTP-AUTHつきのpostfixをコンパイルしたのだが、なぜかちゃんとSMTPが動作しない。
手順はほぼ前にあげたエントリの通り。前は上手くいったのに…
コンパイルしたバージョンは2.5.5なのだが、ポート25に接続しても、ログに「warning: unsupported SASL server implementation: cyrus」と出るだけでうんともすんとも言わない。
うーんなんてこったい。
ちなみにコンパイル時のオプションはCCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl2 -I/usr/include/pcre" AUXLIBS="-L/usr/local/lib -lsasl2 -R/usr/local/lib"とこんな感じで特に問題はなさそう。
CCARGSの最後のインクルードパスの指定は、ccがdict_pcre.cのコンパイル中にprce.hが無いとかぬかしたので追加してある。根性で捜して来いよと。プンプン。

んーまいったなーとソースコードについてきたドキュメントを読んでいると、「Building Postfix with Cyrus SASL support」の項目に



(for Cyrus SASL version 2.1.x):

% make tidy # if you have left-over files from a previous build
% make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
-I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2"



とか書いてある。
-DUSE_CYRUS_SASL ってオプションが増えてるやんけー

なんやねんそれーということで、同じ文書をよく読むと"Support for the Dovecot version 1 SASL protocol is available in Postfix 2.3 and later. "ってことらしく、2.3からはSASL AUTHに「Cryus-SASL」
と「Dovecot SASL」を使えるようになったようだ。
SMTPでSASL-AUTHをするようビルドするには「USE_SASL_AUTH」としたうえで、「DEF_SERVER_SASL_TYPE=\"dovecot\"」と「USE_CYRUS_SASL」のどちらか、あるいは両方を指定するようだ。
そういえば、前にコンパイルしたのは2.2やったしね。

ということで、


gmake tidy
CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl -I/usr/include/pcre"
AUXLIBS="-L/usr/local/lib -lsasl2 -R/usr/local/lib"

gmake makefiles
gmake


てな感じでコンパイルして上手くいった。

しかし、初めて見た「Dovecot SASL」なるものを調べていると、Cryus-SASLが認証方法を一つしか選べないのに対して、Dovecot SASLは複数のものを同時に使えるようだ。
例えば、最初にpamでローカルユーザーを調べ、いなければLDAPに聞きに行き、そこにもいなければmysqlに聞きに行けるということも可能ということらしい。
土偶家ではメールのユーザーは全員実ユーザーに関連付けられていて、メールしか使わないユーザーはシェルを使えなくしてあるのやけど、この「Dovecot SASL」を使うとローカルユーザーすら作らなくてもよいではないか。
ということで、「Dovecot SAS」対応しておけば、confだけで切り替えることが出来るらしいので、とりあえずもう一度コンパイルしなおしておくのも良い感じである。

更に、Postfix TLS Supportなるドキュメントを見れば、以前は実装する為にはソースにパッチ充てたりとややこしかった、認証時のSSL暗号化のTLSサポートも結構簡単になったようである。
「Dovecot SAS」とあわせて、これは一丁チャレンジしてみるかな。これでgmailにリレーしてもらえるやん。
久しぶりにsolaris熱メラメラである。

2008年09月24日

●apache-tomca+apacheで web+Java Servletを作る

先日仕事でJava Servletが動くサーバーを作ったのだが、実行環境であるapache-tomcat自体はバイナリパッケージを落としてきて展開するだけ、と激しく簡単である。
しかしこれではapacheと同じポートで同時に使えない。
どうせなら同時にapacheも使いたいので、apacheとTomcatを連携させるために、ネット上の情報を探したのだが、apache-tomcatを使うだのjakarta-tomcatを使うだのと二通りの情報が錯綜していて良くわからんかった。
そもそもapache-tomcatとjakarta-tomcatの違いがはっきりしなかったのやけど、色々調べた結果、結局この二つは同じ物を指していて、apache-tomcatの古い呼び方がjakarta-tomcatであると便宜的に理解しておいても大丈夫そうだ。

ややこしい話やけど、apache内のjakartaプロジェクト内のtomcat製作プロジェクトで作られたものがjakarta-tomcatで、後にtomcatプロジェクトが格上げされてapache直下のjakartaプロジェクトと同じ位置に来たのでapache-tomcatとなったと言う事らしい。どちらも作っているものは同じである。
apache-tomcatもjakarta-tomcatもどちらもJava Servletである。

で、apacheとTomcatを連携させて同じポートで動かす、つまり、apacheの特定のディレクティブだけtomcatで動作させるためには、apache + Tomcat Connectors + Tomcat(apache-tomcat)という構成すれば良い。
イメージとしては、apacheとtomcatが個別に動いていて、apacheへの特定のディレクティブへのアクセスを、apacheのモジュールであるTomcat Connectorsがリバースプロキシの様な働きをしてTomcatの特定のポートから転送するといった動作のようだ。(想像)

環境は OpenSolaris 200805
コンパイラはsunstudioexpress(SunStudio11ベース?)
apache_1.3.41 apache-tomcat-6.0.18 tomcat-connectors-1.2.26
apacheとtomcat-connectorsのみソースからインストール

とりあえずapacheを

./configure --enable-rule=SHARED_CORE --enable-module=so --prefix=/usr/local/apache
って感じの --enable-module=so つきでコンパイル、ポート80で動かす。

Tomcatをどこぞに展開して、bin/startup.sh で起動、
server.xmlのAJPプロトコルのバージョンと動作ポートを確認、
<!-- Define an AJP 1.3 Connector on port 8009 -->
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 
なのでajp13 ポート8009となる。


どちらもちゃんと動いていればtomcat-connectorsのインストール

tomcat-connectors-1.2.26-srcのコンパイル

$ cd tomcat-connectors-1.2.26-src/native/
$./configure --with-apxs=/usr/local/apache/bin/apxs
$make
#make install
とすれば
apacheのlibexecディレクトリにモジュールmod_jk.*がインストールされる

ただし、solarisの場合、
/usr/ccs/bin/make
/opt/SUNWspro/bin/dmake
/opt/SunStudioExpress/bin/dmake
では如くコンパイルエラーが出るようだ。
gnuのmakeを使えばちゃんと通るので入ってなければ入れる。


apacheのconfディレクトリに移動
httpd.conf に以下を追加


LoadModule jk_module libexec/mod_jk.so

<IfModule mod_jk.c>
  JkWorkersFile conf/tomcat.conf
  JkLogFile logs/mod_jk.log

#Tomcatの/examples以下を転送
  JkMount /examples/* tomcat

</IfModule>

tomcat.conf を新規作成して以下を追加


worker.list=tomcat
worker.tomcat.port=8009
worker.tomcat.host=localhost
worker.tomcat.type=ajp13

apche再起動
tomcat再起動

2008年08月27日

●Javaな密林に植林 / 時は既に新世紀

仕事でJava Servletで動作するWEBアプリケーションなサーバーを作る事になって、Apache Tomcatを触る必要が出てきた。
おまけにそのWEBアプリはPostgreSQLも必要とするらしい。

今まで私はApacheとPHPの人やったけど、仕事で今まであえて避けてきたMysqlやらtexやらを使う必要が出てきて、結果としてこれもまあまあ使えるようになった。
で、「mysqlとTexはまぁまぁ得意」と言えるようになったら、今度はまた避けていたJavaとPostgreSQLまで触ることになって、また密林の未体験ゾーンに足を踏み入れることになった。

いくらSolarisやらNetBSDやらが好きで、家で趣味の一環として色々なシステムを作ってみても、MysqlやTexには仕事の必要に駆られてしか手を出さなかった。
PostgreSQLはまだMysqlと同じ括りになるとしても、今回のJavaなどは一人では絶対手を出そうとしなかったもののひとつだろう。
Sun Microsystems は大好きやけど、その開発物であるJavaはあまり好きになれなかったのだ。

とりあえずよくわからんながらも、Webにあるマニュアルを見ながらApache TomcatとPostgreSQLなサーバーを作ったけど、動作原理がまったくわからんのでとてつもなく不安である。
こればっかりは勉強するしかない。
confがxmlで記述されているのはちょっとしたカルチャーショックであった。ってJavaの話と言うよりはTomcatの話やね…

「時は正に世紀末」と歌っていた人がいたけど、その世紀末は過ぎて新世紀である。
もう今時、Java周辺をちょっとでも齧っとかんとあかんやろうかなぁ、と思っていたところなので「渡りに船」ならぬ「WebサーバーにJava Servlet」、「SolarisにTomcat」と言ったところだろう。(意味不明)

最近、仕事で今まで手を出さなかった分野に投入されることが多く、大変ながらも中々刺激的で楽しい。
そのうちに組み込みアプリとかデバイスドライバの開発を頼まれるのではないかとビクビクしている。

/ 3 ページを表示中 | [次のページ]