2006年4月アーカイブ

前回のDomainKeysの話で、ヘッダが変わっても署名が有効かどうかで、寝ぼけたことを言ってましたね。
そもそも、メールが伝わる過程で、ヘッダなんてころころ変わるんだから、pgpだって全てのヘッダなんか見てるはずがないのでした。

それはさておき、今度はSASLを入れてみます。
参考にしたのは、ここです。
まずは、portsからsecurity/cyrus-sasl2をインストール。オプションは、WITH_AUTHDAEMON=yes。
続いて、portupgradeでpostfixをアップグレード。このとき、コンフィグ画面(?)でSASL2を有効にします。
そして、postfixのmain.cfに以下を追加。
smtpd_sasl_application_name = smtpd
smtpd_sasl_local_domain = $myhostname
後は、master.cfのsubmissionポートの設定のところで、SASLを有効にします。
submission inet n       -       n       -       -       smtpd
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_sasl_security_options=noanonymous
        -o broken_sasl_auth_clients=yes
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
        -o smtpd_data_restrictions=
        -o smtpd_etrn_restrictions=reject
        -o content_filter=dksign:[127.0.0.1]:10028
そして、/usr/local/lib/sasl2/smtpd.confファイルを作成します。今回は、courier-authdaemondを認証に使って、imapのパスワードで認証することにしてみようと思います。
pwcheck_method: authdaemond
authdaemond_path: /var/run/authdaemond/socket
mech_list: CRAM-MD5 PLAIN LOGIN
postfixが、authdaemondのソケット(/var/run/authdaemond/socket)を読めるように、/etc/groupでpostfixをcourierグループに追加します。
これで、postfixを再起動すればおっけ~、のはず?
が、ぜんぜんうまく行きません。まったくうまくいきません。激しくうまくいきません。
エラーログをずらずら並べても良いのですが、今回は最終的にわかったことだけ書きます。
postfix sasl howtoには、sasl2のsampleの下のserverとclientでデバッグしろなんて書いてあるので、それを試してみました。
その前に、saslpasswd2コマンドで、/usr/local/etc/sasldb2.dbにユーザを追加してあります。
# saslpasswd2 -c -u `postconf -h myhostname` false
  • serverとclientのオプション -s のサービスとは、コンフィグファイルの名前とは関係ない。コンフィグファイルの名前は、sample.confで決めうち。(なので、/usr/local/lib/sasl2/smtpd.confから/usr/local/lib/sasl2/sample.confにリンクをはった)
  • なので、試すときには、サーバ側はオプションなしで起動。クライアント側は -m オプションだけ使えばよい。
  • mechがPLAIN又はLOGINのときは、ユーザ名にはそのまま false を使って、パスワードは UNIXのパスワードを使うと、認証に成功する。それ以外の組み合わせは×。
  • mechがCRAM-MD5のときは、ユーザ名はfalse@wizard-limit.net、パスワードはsaslpasswd2で設定したものを使うと、認証に成功する。それ以外の組み合わせは×。
    ※ これについては、ホスト名とメールのバーチャルドメインが違うためだとわかった。メーラからは、@以降はなくても大丈夫だった。
と、言うわけで、authdaemon君には問い合わせが行っていないらしい&認証方法によってユーザ名とパスワードに使えるものが変わってしまうらしい・・・・。
私が何か根本的に間違っているのか、はたまたsasl2の実装が悪いのか・・・。暇があったらソースでも読んで見ますかね~。
どうも、SASLを使うときには TLS対応が必須らしい。(なぜならば、Outlook Expressは LOGIN 認証しか対応していないので、TLSを使わないと平文のパスワードがネットワークを流れてしまうから。もっとも、OEなんて私は使わないんだけど)
と、言うわけで今回の参考はここ
portsからmakeするときの最初の設定画面で、SASL2に加えてTLSにもチェックを入れる。

続いて、サーバの証明書を作ります。
うちの場合は、https用にCAの証明書とhttpサーバの証明書が既にあるので、これにsmtpサーバの証明書の追加になります。
# cd /usr/local/etc/postfix
# openssl req -new -nodes -keyout smtpd.key -out smtpd.csr -days 3650
Generating a 1024 bit RSA private key
....++++++
............................++++++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Wizard limit
Organizational Unit Name (eg, section) []:smtp
Common Name (eg, YOUR name) []:wizard-limit.net
Email Address []:root@wizard-limit.net

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
これで、smtpd.keyがサーバの鍵、smtpd.csrが証明書の発行要求になる。
CAのディレクトリにsmtpd.csrをコピーして、sign.shでサインする。
# ./sign.sh smtpd.csr
CA signing: smtpd.csr -> smtpd.crt:
Using configuration from ca.config
Enter pass phrase for ./ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Kanagawa'
localityName          :PRINTABLE:'Yokohama'
organizationName      :PRINTABLE:'Wizard limit'
organizationalUnitName:PRINTABLE:'smtp'
commonName            :PRINTABLE:'wizard-limit.net'
emailAddress          :IA5STRING:'root@wizard-limit.net'
Certificate is to be certified until Mar 31 09:35:11 2016 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
CA verifying: smtpd.crt <-> CA cert
smtpd.crt: OK
出来上がったsmtpd.crtを/usr/local/etc/postfixにコピー。keyファイルは、chmod 400とかしておく。
続いて、main.cf
smtpd_tls_cert_file = /usr/local/etc/postfix/smtpd.crt
smtpd_tls_key_file = /usr/local/etc/postfix/smtpd.key
smtpd_tls_CAfile = /usr/local/etc/apache2/ssl.ca/ca.crt
smtpd_tls_received_header = yes
最後に、master.cfのsubmissionポートのところ
submission inet n       -       n       -       -       smtpd
        -o smtpd_use_tls=yes
        -o smtpd_enforce_tls=yes
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_sasl_security_options=noanonymous
        -o broken_sasl_auth_clients=yes
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
        -o smtpd_data_restrictions=
        -o smtpd_etrn_restrictions=reject
        -o content_filter=dksign:[127.0.0.1]:10028
後は、postfix reloadで有効になるはず。
ためしに、Beckyから送ってみたら、無事に送れて、ReceivedヘッダにTLS使ってまっせ~みたいなのが追加される。
暇があったら、証明書の検証とか、クライアント認証とかもやってみるかな~。

pop3s

| | コメント(0) | トラックバック(0)| Edit
TLS + SASLのテストは、Becky! で「証明書を検証しない」の設定でうまく行った。
しかし、Becky! に CAの証明書をインストールする方法がわからないので、検証させた場合の動作は確認できていない。
続いて、悪名高きOutlookExpressでも動作確認・・・。しようと思ったら、OEはAPOPも、CRAM-MD5も未対応と言うすばらしいMUAであることがわかった。
さらにさらに、STARTTLSにも未対応っぽいので、submissionポート(587)へのsmtpはできなかった。
そこで、smtpsポート(465)もあけることにして、master.cfに以下の記述を追加。
smtps inet n       -       n       -       -       smtpd
        -o smtpd_tls_wrappermode=yes
        -o smtpd_use_tls=yes
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_sasl_security_options=noanonymous
        -o broken_sasl_auth_clients=yes
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
        -o smtpd_data_restrictions=
        -o smtpd_etrn_restrictions=reject
        -o content_filter=dksign:[127.0.0.1]:10028
これで、OEからアクセスしてみると、証明書を信用しても良いか?みたいなダイアログが出るようになった。
しかし、Yesを押しても、サーバ側で SASL LOGIN authentication failedなどとエラーが出て、うまくいかない。
どうせOEは使わないからいっか~と早々に投げる。

次は、pop側である。現在、imap/imapsは、courier-imapdを使っているが、popはqpopperを使っている。
なぜにcourier-pop3dを使わないのかは、記憶が定かではない。しかし、今動いていて、私以外の利用者もいるので、変更するのは気が引ける。
そこで、qpopperのままでpop3sを使えるようにする。
やることは、/usr/local/etc/qpopper.config ファイルを以下の内容で作成。
set tls-support = alternate-port
set tls-server-cert-file = /usr/local/etc/qpopper/qpopper.pem
そして、/etc/inetd.confを修正
pop3s   stream  tcp     nowait  root    /usr/local/libexec/qpopper      qpopper -s -f /usr/local/etc/qpopper.config
そして、前回のPostfixのTLS対応のときと同じ要領で、qpopper.keyとqpopper.crtを作成し、結合する。
# cat qpopper.key qpopper.crt > qpopper.pem
key ファイルと、pemファイルは、オーナをpopに変更してchmod 400 しておく。 inetdにHUPシグナルを送れば、pop3sのできあがり。
coLinux用インストーラなんてページを見つけたので、coLinuxを0.6.3にバージョンアップがてらFedora Core 1からFedora Core 5にしてみた。
アップグレードとかではなく、完全な再インストール。
まずは、coLinux-0.6.3.exe, coLinux-installer-qemu-20060404.zip, qemu-0.8.0-windows-2.zipをダウンロードしてくる。場所は、上記URLから全てたどれる。
続いて、coLinux-0.6.3.exeを実行してcoLinuxをインストール。イメージはなしで、ネットワークドライバはTAPを選択した。インストール先はc:\coLinux
続いて、c:\coLinuxにcoLinux-installer-qemu-20060404.zipを展開し、coLinux FC5 インストール (QEMU版).htaを起動して後は指示に従う。
っと、Fedora Core 5のCDイメージも必要なのだった。ちなみに、KDDIにはDVDイメージがなかったが、慶應大学にはDVDイメージがあった。
  1. フォルダ設定
    聞かれたままに答える
  2. ディスクイメージファイル作成
    とりあえず4Gにしてみた。作成ボタンを押すと3つのファイルが作られる。
  3. インストール
    QEMUを起動し、指示に従い linux ks=floppy と打ちます。キーボードがUS配列で認識されるようで、=の入力に注意が必要です。
    しばらく起動ログが流れた後、青一色の画面になります。CPUもたいして働いてないし、diskも動かないので不安になります。
    果てしなく待った後、Running anacondaの文字が!なんのリソースのせいかわかりませんが、はげしく遅いようです。
    いつになったら終わるのか~
    結局、夜中に初めて昼過ぎに終わったので、12時間以上かかったかな。ちなみに、CoreDuoのノートだとQEMUが死んでしまってうまく行かなかった。
    後は、xml作って、ショートカットを作って・・・。
  4. ショートカットから起動してみたら、Windowsごとハングアップします。
    イメージの作成に使ったPentiumMでも、CoreDuoでも同じでした。RAMDISKを展開するところで死んでしまいます。
    いろいろ調べて、fc5.colinux.xmlから、以下の行を削除したら無事に起動するようになりました。
    <initrd path="initrd.gz" />
    
後は、ネットワークまわりとかいろいろ設定しなくちゃだけど、それは別のエントリーといたします。
インストールが終わったら設定なのです。
まずは、ネットワークの設定。
  1. Windowsの、ネットに繋がっているインターフェイス(「ローカル エリア接続」とか)のプロパティを開き、詳細設定のタブから、インターネット接続の共有のチェックをする。「ホーム ネットワーク接続」からTAPのインターフェイスを選択する。
    この手順は、プロパティを見るインターフェイスが生きていると駄目なので、ケーブルを抜いたり、無線なら電源を切ったりして行う。(これがわからなくてはまった)
  2. 前の手順を実施すると、TAPのIPアドレスが固定で192.168.0.1になるので、問題がある場合は別のものに変える。(私は、192.168.1.1にした)
  3. TAPが一つしかない場合は問題ないが、複数ある場合は接続の名前を変更する。(私の場合はTAP)。
    複数ある場合は、fc5.colinux.xmlのnetworkタグで、name="TAP"とか書いて、名前を教えてやる必要がある。
後は、ネットワークを有効にして、coLinuxを起動してやる。
coLinux側はネットワークの設定がされていないので、/etc/sysconfig/network-scripts-ifcfg-eth0 ファイルを以下の内容で作成する。
DEVICE=eth0
IPADDR=192.168.1.40
NETMASK=255.255.255.0
NETWORK=192.168.1.0
GATEWAY=192.168.1.1
BROADCAST=192.168.1.255
ONBOOT=yes
ifup eth0 とかやると、ネットワークが有効になる。あとは、/etc/resolv.conf に以下のように書いてやれば、Windows側で名前解決ができているなら、同じようにできるはず。
nameserver 192.168.1.1
※ nameserverには、WindowsのTAPのIPアドレスを書く。

さて、今回のインストーラを使っていると、fc5.colinux.xmlの中にcofs_deviceなんて言うタグがあるはずだ。cofsってのを使うと、coLinux側からWindowsのディレクトリがマウントできてしまうので、以前のようにsambaで無理やりマウントするなんてことをしなくてよくなり、パフォーマンスが上がるらしい。
/winなんて言うディレクトリをcoLinuxで作成し、/etc/fstabに以下のような行を追加する。
00                      /win                    cofs    defaults        0 0
これで、mount /winなんてやってやれば、/winでWindowsのdiskが見えるはずだ。
そこにある vmlinux-modules.tar.gz を / て展開してやれば、カーネルに対応するモジュールがインストールされる。
後は、chkconfigでいらないサービスを止めてあげれば、そこそこ使える環境のできあがりであるのである。
※ 日本語のファイル名は文字化けしているので、これについては後で調べよう。
→文字化けは勘違いでした。LANGをja_JP.utf8にして、ターミナルをutf8にしたら、日本語のファイル名も見れました。
できあがりであるのであるとか言っても、このままでは最低限のものしか入っていない(ここまでで678M使っている)ので、パッケージなどを入れられるようにする。
Fedora Core 1のときは、apt-get を使っていたが、今回は Core 5 なので(なんで?) yum を使うことにする。
proxy環境のときは、環境変数 http_proxy を適切に設定して、 yum update・・・
[root@localhost ~]# yum update
Loading "installonlyn" plugin
Setting up Update Process
Setting up repositories
core                                                                 [1/3]
Cannot find a valid baseurl for repo: core
Error: Cannot find a valid baseurl for repo: core
だ、そうである。Linuxのことはさっぱりわからないので、わからないときはgoogle, google。 パッケージ管理、アップデートソフトウェアyumの設定ってのを発見。これをそのまま真似してみる。
これで、無事 yum update とか yum installとか使えるようになったのでした。
会社の引越しがあり、何台かのサーバを移動した。
今までは、建物全体が一つのサブネットだったのだが、新しいところではフロア毎にサブネットが違う。
このため、NISのサーバとクライアントが別々のサブネットにいることになってしまった。
正しいアプローチとしては、サブネット毎にNISのスレーブサーバを立てるのだろうが、今回はそれも面倒だったのでサブネット越えをすることにした。
一番簡単だったのはLinux(RedHat 7.3 ふるっ!)で、/etc/yp.conf を書き換えるだけだった。
domain ドメイン名 broadcast
と書いてあったところを、
domain ドメイン名 server ypサーバホスト名
に変えて、service ypbind restart って感じ。

次は、FreeBSD。こいつは悩みました。ypset コマンドで設定すれば良さそうなんだけど、エラーになるばかり。
結局、ypset でサーバを設定するためには、ypbindの起動時に -ypset 又は -ypsetme オプションが必要だと言うことがわかった。で、/etc/rc.confを以下のように変更。
nis_client_enable="YES" ←もともと
nis_client_flags="-ypsetme"
nis_ypset_enable="YES"
nis_ypset_flags="ypサーバホスト名"
/etc/host.confでnisを見ないようにするか、bind を nis より優先にしておくこと。

一番悩んだのが Solaris8 で、/etc/の設定ファイルに該当しそうなものが見当たらない。
結局、/etc/rcから順に読んで行って、/usr/lib/netsvc/yp/ypstart と言うスクリプトでypbindが起動されていることを発見。
しかし、どう読んでもオプションなしで起動されるか、-broadcast オプションで起動されるかの2通りしかない。
悩んでもわからなかったので、設定ファイルでやるのはあきらめて、ypstartスクリプトを直接書き換えると言う暴挙に出た。
ypbind を起動しているところに、-ypsetmeオプションを追加し、次の行で ypset ypサーバホスト名を実行するようにした。
さらに、/etc/nsswitch.conf で、hostsの解決をnisよりもdnsを優先するように変更したら、なんとかなったっぽい。
めちゃくちゃ悩んでしまいましたわい。

こんなことするくらいなら、会社の管理者と相談して、スレーブサーバを立てた方が良かったかしらん。
2006年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

このアーカイブについて

このページには、2006年4月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年3月です。

次のアーカイブは2006年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1