Discussion:
exim4にて、ポート番号を25番以外でSMTP-Authするには?
(too old to reply)
SHIMIZU
2008-12-02 06:39:17 UTC
Permalink
Raw Message
jたいへん申し訳ありません。
初投稿を、お恥ずかしいことに、リッチテキスト形式で送ってしまいました。

「リッチテキスト形式はダメ」とは書かれていないようではありますが、ご迷惑をかけ
そうなので、再送信いたします。

本当にすみませんでした。(再送信が、ますますご迷惑にならないといいのですが)

清水

-------- 8< ---------------------------- >8 -----------

初めまして、清水と申します。

今夏、オフィスのメールサーバーとWebサーバーを更新し、その際、両サーバーのOSを
Debian etch 4.0r4に変更しました。

インターネット上の情報と、武藤さんのDebian辞典を参照して、実に快適に運用できるよ
うになりました。

ただ、ひとつだけ困っている点があり、お知恵を拝借したいと存じます。

<< やりたいこと >>

メールサーバー(以下、server.jpとする)をSMTP-AUTH server (TLS使用)としても
運用したいのだが、その際に、25番以外のポート(587番や465番)で接続するよう
にしたい。

その理由は、Outbound Port 25 Blocking (OP25B)を実施しているプロバイダー
経由でインターネット接続しているPCから、server.jpをSMTP-AUTH serverとして、
メール送信したいから。


<< 症状(概略)>>

問題点を明確にするために、OP25Bをしていないネットワーク下のPCから、server.jpを
SMTP-AUTH server (TLS使用)として利用することを試みた。

その結果、25番ポートを利用すれば成功するが、465番や587番では失敗する。
(従って、OP25Bをしているネットワーク下のPCからは、いずれのポート番号でも
失敗する)


<< PCで使用したMUA >>

Thunderbird 2.0.0.18を使用

「送信サーバーの設定」にて、server.jpを指定し、ユーザー名もSMTP-Authのも
の(smtpuserとする)を指定し、TLSを選択。

送信時にSMTP-Authのパスワードを訊かれるので、そのときにパスワードを入力。


<< メールサーバーの基本構成 >>

OS: Debian etch 4.0r4

MTA: Exim 4.63
以下に従い、TLSを有効にしてある:
http://exim-jp.sourceforge.jp/docs/debian/etch/README.Debian.etch.html#TLS

また、
# apt-get install gnutls-bin
# cp -a /usr/share/exim4/exim4_refresh_gnutls-params /etc/cron.daily/
により、/var/spool/exim4/gnutls-paramsを毎日書き換えている。


<< メールサーバーをSMTP-AUTH serverにするための基本設定 >>

/etc/exim4/passwdというファイルを作成し、
送信専用ユーザー名:暗号化されたパスワード
を記入。

/etc/exim4/exim4.conf.templateの、以下の行をアンコメント:
login_server:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = "${if
crypteq{$auth2}{${extract{1}{:}{${lookup{$auth1}lsearch{CONFDIR/passwd}{$value}{*:*}}}}}{1}{0}}"
server_set_id = $auth1
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif

以下を実行して、設定を反映:
# update-exim4.conf
# /etc/init.d/exim4 restart

<< 試した設定1 >>

サーバー側(111.111.111.111, server.jpとします):上記の基本設定のまま。

クライアント側(222.222.222.222, pc.jpとします):「送信サーバーの設定」にて、
ポート番号を25に。

結果:
OP25Bをしていないネットワーク下のPCからは、送信成功。
サーバーに残ったログは、
008-12-02 10:58:42 1L7KXC-0000Yp-IY <= ***@server.jp H=pc.jp ([
192.168.7.101]) [222.222.222.222]:1372
I=[111.111.111.111]:25 P=esmtpsa X=TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32 CV=no
DN="" A=plain_server:smtpuser S=659 id=***@server.jp from <
***@server.jp> for ***@gmail.com
2008-12-02 10:58:42 SMTP connection from pc.jp ([192.168.7.101]) [
222.222.222.222]:1372 I=[111.111.111.111]:25 closed by QUIT

<< 試した設定2 >>

サーバー側:ポート番号を465に。その仕方は、
http://exim-jp.sourceforge.jp/docs/debian/etch/README.Debian.etch.html#TLS
に従い、/etc/default/exim4の中で
SMTPLISTENEROPTIONS='-oX 465:25 -oP /var/run/exim4/exim.pid'
を指定し、/etc/exim4/exim4.conf.localmacrosの中で
tls_on_connect_ports=465
を指定し、以下を実行して設定を反映:
# update-exim4.conf
# /etc/init.d/exim4 restart

クライアント側:「送信サーバーの設定」にて、ポート番号を465に。

結果:
OP25Bをしていないネットワーク下のPCからも、送信失敗。
サーバーに残ったログは、
2008-12-02 10:22:37 SMTP connection from [222.222.222.222]:1150 I=[
111.111.111.111]:465 (TCP/IP connection count = 1)
2008-12-02 10:23:38 TLS error on connection from pc.jp [222.222.222.222]:1150
(gnutls_handshake): A TLS packet with unexpected length was received.


<< 試した設定3 >>

サーバー側:ポート番号を587に。その仕方は、よくわからないので
http://exim-jp.sourceforge.jp/docs/debian/etch/README.Debian.etch.html#TLS
の記述を真似て、/etc/default/exim4の中で
SMTPLISTENEROPTIONS='-oX 587:25 -oP /var/run/exim4/exim.pid'
を指定し、/etc/exim4/exim4.conf.localmacrosの中で
tls_on_connect_ports=587
を指定し、以下を実行して設定を反映:
# update-exim4.conf
# /etc/init.d/exim4 restart

クライアント側:「送信サーバーの設定」にて、ポート番号を587に。

結果:
OP25Bをしていないネットワーク下のPCからも、送信失敗。
サーバーに残ったログは、
2008-12-02 10:37:10 SMTP connection from [222.222.222.222]:1203 I=[
111.111.111.111]:587 (TCP/IP connection count = 1)
2008-12-02 10:38:11 TLS error on connection from pc.jp [222.222.222.222]:1203
(gnutls_handshake): A TLS packet with unexpected length was received.


<< 補足:メールサーバーの/etc/exim4/update-exim4.conf.confの内容 >>

dc_eximconfig_configtype='internet'
dc_other_hostnames=''
dc_local_interfaces=''
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=オフィス内だけを指定していますがこれは今回の問題とは無関係の
ようです(ポート25でSMTP-Authしたら、この範囲外からもrelayできましたので)
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'


以上のような状況です。お知恵を拝借できれば幸いです。
よろしくお願いいたします。
Osamu Aoki
2008-12-06 15:47:50 UTC
Permalink
Raw Message
Post by SHIMIZU
-------- 8< ---------------------------- >8 -----------
初めまして、清水と申します。
今夏、オフィスのメールサーバーとWebサーバーを更新し、その際、両サーバーのOSを
Debian etch 4.0r4に変更しました。
インターネット上の情報と、武藤さんのDebian辞典を参照して、実に快適に運用できるよ
うになりました。
ただ、ひとつだけ困っている点があり、お知恵を拝借したいと存じます。
<< やりたいこと >>
メールサーバー(以下、server.jpとする)をSMTP-AUTH server (TLS使用)としても
運用したいのだが、その際に、25番以外のポート(587番や465番)で接続するよう
にしたい。
とうぜんですね。
Post by SHIMIZU
その理由は、Outbound Port 25 Blocking (OP25B)を実施しているプロバイダー
経由でインターネット接続しているPCから、server.jpをSMTP-AUTH serverとして、
メール送信したいから。
"IP address or host name of the outgoing smarthost:" を
"smtp.hostname.dom:587" と設定します。

# dpkg-reconfigure exim4-config

で質問に答えればよかったはずです。
Post by SHIMIZU
<< 補足:メールサーバーの/etc/exim4/update-exim4.conf.confの内容 >>
dc_smarthost=''
こいつがsmtp.hostname.dom:587 といった感じのプロバイダーアドレスとなります。

くわしくは私のページにもう少しあります。

http://people.debian.org/~osamu/pub/getwiki/html/ch07.en.html#theconfigurationofexime

青木
SHIMIZU
2008-12-07 03:12:08 UTC
Permalink
Raw Message
青木様

お返事、ありがとうございます。

ただ、教えていただいたのはsmarthost を使う方法ですが、私がやりたい
のは、smarthost を使わないやり方です。私の説明が不足していたために、
質問の意図が伝わらず、申し訳ありませんでした。

やりたいことをもっと詳しく説明いたします:

1.メールサーバー(server.jpとします)の置いてあるネットワークでは、
OP25Bを実施していません。

2.server.jpは、固定global IP addressを持ち、内外のメールサーバー
と(25番ポートを用いて)正常にメールをやりとりしています。

3.クライアントは、Windows PC等であり、Thunderbirdなどを用いて、
メールを読み書きしています。

4.クライアントは様々な場所に複数あり、モバイルPCも含むので、様々
なネットワークを介して、server.jpにアクセスしてきます。

5.クライアントPCが、たまたまOP25Bを実施しているネットワーク内に
あったとき
PC --(port 587, SMTP-Auth) --> server.jp --(port 25)--> 宛先のサーバー
のようにメールを送信したい。

6.その際に、
PC --(port 587, SMTP-Auth)--> server.jp
の通信経路をTLS化したい。

これがやりたいことです。

そこでまず、クライアントPCを、OP25Bを実施していないネットワークに置
いて試しました。その結果、

7.25番ポートを使えば、
PC --(port 25, SMTP-Auth)--> server.jp
がTLSで正常に通信できる。

8.しかし、587番ポートを使うと、
PC --(port 587, SMTP-Auth)--> server.jp
が、TLSでは失敗する。
そのときのeximのmain logは、
TLS error on connection from pc.jp [222.222.222.222]:1203
(gnutls_handshake): A TLS packet with unexpected length was received.

ここまでが、前回説明したかったことです。補足しますと、

9.現状では、仕方がないので、
PC --(port 587, SMTP-Auth)--> server.jp
を、TLSを使わずに使用しています。その際に、CRAM-MD5を用いて、
SMTP-Authのパスワードだけはネットワークに流れないようしています。

10.TLSではport 587でうまくいかないのは、どうやら、
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=348046
で議論されている問題と共通点がありそうですが、そこでも十分な解決
には至っていないように見えます。

11.なお、エントロピー不足ではないと判断しております。
25番ポートを使えば、正常にTLSでSMTP-Auth出来ていますし、
cat /proc/sys/kernel/random/entropy_avail
の結果も3421のようになりますので。

お知恵を拝借できれば幸いです。よろしくお願いいたします。

清水
Hideki Yamane
2008-12-07 14:18:47 UTC
Permalink
Raw Message
On Sun, 7 Dec 2008 12:12:08 +0900
SHIMIZU <***@gmail.com> wrote:

 斜め読みで適当に。
 iptables で 587 に来たパケットを 25 にフォワードしちゃダメですか?
--
Regards,

Hideki Yamane henrich @ debian.or.jp/iijmio-mail.jp
http://wiki.debian.org/HidekiYamane
SHIMIZU
2008-12-08 12:25:26 UTC
Permalink
Raw Message
山根様、お返事ありがとうございます。

恥ずかしながら、iptablesの使い方がよくわからないので、現状では、
arno-iptables-firewallを利用してfirewallを構成しています。

ですので、
Post by Hideki Yamane
iptables で 587 に来たパケットを 25 にフォワードしちゃダメですか?
のための具体的な設定方法がよくわかりません。。。

/etc/arno-iptables-firewall/custom-rules
に、iptablesのしかりべきコマンドを書けばよいのだろう、ということまではわかるのですが、
そこに具体的になんと書けばよいのか、よくわかりません。。。

http://lists.debian.or.jp/debian-users/200501/msg00110.html
あたりを修正すればいいのかな、と思うのですが、正しく変更する仕方がよく
わかりません。

また、違うポート番号にフォワードしても、SSLの証明書は大丈夫なのかも、
よくわかりません。

これらについて、何か教えていただけると幸いです。
Hideki Yamane
2008-12-08 12:33:40 UTC
Permalink
Raw Message
On Mon, 8 Dec 2008 21:25:26 +0900
Post by SHIMIZU
Post by Hideki Yamane
iptables で 587 に来たパケットを 25 にフォワードしちゃダメですか?
のための具体的な設定方法がよくわかりません。。。
 ここ数年使ってないので私も具体的には、といわれると詰まりますが ;-)
Post by SHIMIZU
また、違うポート番号にフォワードしても、SSLの証明書は大丈夫なのかも、
よくわかりません。
 SSL の証明書はドメイン名(FQDN)に対して発行されてますよね?
 同じホストが応答するのであれば、ポート番号は関係ないです。
--
Regards,

Hideki Yamane henrich @ debian.or.jp/iijmio-mail.jp
http://wiki.debian.org/HidekiYamane
i***@ecoin.jp
2008-12-08 12:36:36 UTC
Permalink
Raw Message
横から失礼
碇です

ポートとSSLは関係ないと思います
iptablesでポートのリダイレクトって結構大変なので簡単なredirというのを
紹介します

使い方
redir --lport=587 --cport=25



On Mon, 8 Dec 2008 21:25:26 +0900
Post by SHIMIZU
山根様、お返事ありがとうございます。
恥ずかしながら、iptablesの使い方がよくわからないので、現状では、
arno-iptables-firewallを利用してfirewallを構成しています。
ですので、
Post by Hideki Yamane
iptables で 587 に来たパケットを 25 にフォワードしちゃダメですか?
のための具体的な設定方法がよくわかりません。。。
/etc/arno-iptables-firewall/custom-rules
に、iptablesのしかりべきコマンドを書けばよいのだろう、ということまではわかるのですが、
そこに具体的になんと書けばよいのか、よくわかりません。。。
http://lists.debian.or.jp/debian-users/200501/msg00110.html
あたりを修正すればいいのかな、と思うのですが、正しく変更する仕方がよく
わかりません。
また、違うポート番号にフォワードしても、SSLの証明書は大丈夫なのかも、
よくわかりません。
これらについて、何か教えていただけると幸いです。
--
碇 永志
<ikari-***@ecoin.jp>
SHIMIZU
2008-12-08 13:36:30 UTC
Permalink
Raw Message
山根様、碇様、証明書の件、ありがとうございます。

碇様、
Post by i***@ecoin.jp
iptablesでポートのリダイレクトって結構大変なので簡単なredirというのを
紹介します
使い方
redir --lport=587 --cport=25
なるほど!ありがとうございます。redirパッケージをインストールすればいいのですね?

これで、eximがクライアントに送出するパケットも、25宛が587宛になるのでしょうか?

実験機を立ち上げて、それで試してみようと思いますので、ちょっと時間がかかりますが、
結果は必ずご報告いたします。

清水
SHIMIZU
2008-12-08 23:11:31 UTC
Permalink
Raw Message
Post by SHIMIZU
実験機を立ち上げて、それで試してみようと思いますので、ちょっと時間がかかりますが、
結果は必ずご報告いたします。
ただ、この方法は、解決策というよりは回避策なので、もっと根本的な原因とその解決策に
ついて、何かご教示いただければ、もっと嬉しいです。

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=348046
で議論されている内容を見ると、GnuTLSやEximに何か問題があるようにも推測
されるからです。(先に書きましたように、ここでうたがわれているエントロピー不足
は、私のケースでは当てはまらないと思われます)

当方のメールサーバーは、これで何代目かになりますが、Debianを使うのは
初めてで、Eximを使うのも初めてでした。

Debianはともかく、Eximは、情報が少ないこともあって慣れるのにかなり苦労しまし
たが、Debianの標準MTAになっているからにはメリットがあるのだろうと思って
努力して、何とかSMTP-Auth with TLS via port 587以外はとても快調に動かせ
るようになりました。

それだけに、できれば回避策ではなく解決策を見つけたいです。

繰り返しになりますが、DebianもEximも(上記の点以外は)、素晴らしく快調で、
大満足です。

清水
Hideki Yamane
2008-12-08 23:41:21 UTC
Permalink
Raw Message
On Tue, 9 Dec 2008 08:11:31 +0900
Post by SHIMIZU
Debianはともかく、Eximは、情報が少ないこともあって慣れるのにかなり苦労しまし
たが、Debianの標準MTAになっているからにはメリットがあるのだろうと思って
努力して、何とかSMTP-Auth with TLS via port 587以外はとても快調に動かせ
るようになりました。
 Exim 自体は高機能な MTA です。

 が、あまり「標準」ということに囚われないほうがよいと思います。
 Postfix が使いたければそちらを使うなどしてもまったく構いません。

 #標準になった経緯としては
  ・sendmail はちょっと使いづらい
  ・でも qmail はライセンスが…(今は public domain ですが)
  ・IBM secure mailer(のちの postfix)のライセンスも(この時は微妙なもの)
  という「ライセンス問題」が大きかったと思います。
--
Regards,

Hideki Yamane henrich @ debian.or.jp/iijmio-mail.jp
http://wiki.debian.org/HidekiYamane
SHIMIZU
2008-12-09 08:47:16 UTC
Permalink
Raw Message
山根様
Post by Hideki Yamane
が、あまり「標準」ということに囚われないほうがよいと思います。
Postfix が使いたければそちらを使うなどしてもまったく構いません。
#標準になった経緯としては
・sendmail はちょっと使いづらい
・でも qmail はライセンスが…(今は public domain ですが)
・IBM secure mailer(のちの postfix)のライセンスも(この時は微妙なもの)
という「ライセンス問題」が大きかったと思います。
本職の合間にサーバー管理をしているような素人管理者なので、つい安直に、
パッケージの標準を使ってしまいます。。。
Derbianの前はTurbolinux Serverを使っていたので、sendmailを使っていました。

Eximは、国内でこそユーザーが少ないそうですが、海外ではそうでもないということなので、
挑戦しました。。。

実は、Debianのカスタマイズの意味を理解するのに時間がかかったりしました。
/usr/share/doc/exim4-base/README.Debian.gz が、「理解してない奴はいじるな」
という調子で書かれていて、分かりにくかったのです。
しかし、分かってみれば、Exim自体は分かりやすいものだと思いました。

かなりカスタマイズしたので、どこかに「超簡単Debian exim設定」とか書こうかとも思
いましたが、それは色々問題がありそうなので(例えば、私の知識では間違ったことも
書くに違いない)、止めました。

ただ、SMTP-Auth with TLS via port 587の情報が少ないのは想定外でした。。。
(なんでこれでエラーが出るのか、未だに不思議で仕方がありません)

清水
tao
2008-12-11 12:40:52 UTC
Permalink
Raw Message
tao です。

そもそも、ローカルなネットワーク内で 587 の TLS では送信できるのでしょうか?
OP25B なネットワークからの送信はした事はありませんが、うちのExim サーバ
は少なくとも
ローカルでは SMTP Auth+TLS が 587 で動いています。(外部から送信したこと
もありますが、
そこが OP25B なのかどうかはわからないので...)
SHIMIZU
2008-12-11 14:33:22 UTC
Permalink
Raw Message
tao様
Post by tao
そもそも、ローカルなネットワーク内で 587 の TLS では送信できるのでしょうか?
いえ、ローカルなネットワーク内では、25のTLS では送信できますが、587のTLSでは
失敗します。
Post by tao
うちのExim サーバは少なくとも ローカルでは SMTP Auth+TLS が
587 で動いています。
それは、大変に心強い情報です!
ということは、私の設定のどこかがまずいことになります。
差し支えなければ、tao様の設定を教えていただけないでしょうか?

私の設定は、[debian-users:51363] に書きましたが、その主要部分を再掲し
ますと、以下のようになります。

-------- 8< ---------------------------- >8 -----------

OS: Debian etch 4.0r4
MTA: Exim 4.63

以下に従い、TLSを有効にしてある:
http://exim-jp.sourceforge.jp/docs/debian/etch/README.Debian.etch.html#TLS

また、
# apt-get install gnutls-bin
# cp -a /usr/share/exim4/exim4_refresh_gnutls-params /etc/cron.daily/
により、/var/spool/exim4/gnutls-paramsを毎日書き換えている。

/etc/exim4/passwdというファイルを作成し、
送信専用ユーザー名:暗号化されたパスワード
を記入。

/etc/exim4/exim4.conf.templateの、
login_server:
の行をアンコメント。

/etc/default/exim4の中で
SMTPLISTENEROPTIONS='-oX 587:25 -oP /var/run/exim4/exim.pid'
を指定し、/etc/exim4/exim4.conf.localmacrosの中で
tls_on_connect_ports=587
を指定。

なお、/etc/exim4/update-exim4.conf.confの内容は、
dc_eximconfig_configtype='internet'
dc_other_hostnames=''
dc_local_interfaces=''
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=オフィス内だけを指定していますがこれは今回の問題とは無関係の
ようです(ポート25でSMTP-Authしたら、この範囲外からもrelayできましたので)
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

-------- 8< ---------------------------- >8 -----------

以上の設定で、クライアントPCからThunderbird 2.0.0.18を使用して送信しようと
すると、送信失敗。サーバーに残ったログは、
2008-12-02 10:37:10 SMTP connection from [222.222.222.222]:1203 I=[
111.111.111.111]:587 (TCP/IP connection count = 1)
2008-12-02 10:38:11 TLS error on connection from pc.jp [222.222.222.222]:1203
(gnutls_handshake): A TLS packet with unexpected length was received.

以上のような状況です。お知恵を拝借できれば幸いです。
よろしくお願いいたします。

清水
tao
2008-12-11 19:29:39 UTC
Permalink
Raw Message
tao です。

exim はホント、日本語の情報がなくて苦労しますね。心中お察しします。
Post by SHIMIZU
/etc/default/exim4の中で
SMTPLISTENEROPTIONS='-oX 587:25 -oP /var/run/exim4/exim.pid'
を指定し、/etc/exim4/exim4.conf.localmacrosの中で
tls_on_connect_ports=587
を指定。
tls_on_connect_ports は、接続時にいきなり暗号通信を期待しちゃうようなレ
ガシなクライアントをサポートするためのオプションのはずです。
http://www.exim.org/exim-html-4.67/doc/html/spec_html/ch39.html#SECID284
なので、それ専用の 465 番を使うとき以外は必要ないのではないでしょうか。

あと、telnet でメールサーバの 587 番から EHLO を叩いてみて、STARTTLS が
あるか確認してみてください。
ちなみにうちでは
Post by SHIMIZU
telnet mailserver.example.com 587
220 mailserver.example.com ESMTP Exim 4.63 Fri, 12 Dec 2008 04:24:27 +0900
EHLO client.example.com
250-mailserver.example.com Hello client.example.com [192.168.0.2]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH PLAIN LOGIN
250-*STARTTLS*
250 HELP

と出ます。
SHIMIZU
2008-12-12 12:33:38 UTC
Permalink
Raw Message
tao様
Post by tao
tls_on_connect_ports は、接続時にいきなり暗号通信を期待しちゃうようなレ
ガシなクライアントをサポートするためのオプションのはずです。
http://www.exim.org/exim-html-4.67/doc/html/spec_html/ch39.html#SECID284
なので、それ専用の 465 番を使うとき以外は必要ないのではないでしょうか。
まさしく、これを無効化したら、正常に動作するようになりました!
本当にありがとうございました。

寺崎様にも、同様のご指摘をうけ、ありがとうございました。

最終的には、[debian-users:51422]の設定から、tls_on_connect_ports
の設定を無くし、 login_server:の代わりにcram_md5:で運用することに
しました。これで、TLSでもnon TLSでも、cram_md5で587でSMTP-Authで
きるようになりました。

また、碇様、山根様、青木様にもアドバイスをいただき、ありがとうございました。
Post by tao
exim はホント、日本語の情報がなくて苦労しますね。
英語を読むのは苦手ではないのですが、最初にhttp://www.exim.org
の情報を頼りに設定を始めたところ、Debian独特のカスタマイズのために
期待通りの動作をせず、そのために、その後はDebian向けの情報しか読ま
なくなってしまったのが敗因でした。大反省です。

どうもありがとうございました。

清水
SHIMIZU
2008-12-13 03:09:22 UTC
Permalink
Raw Message
Post by tao
/etc/exim4/exim4.conf を作れば exim はそっちを読み込んでくれます。
exim の設定ディレクティブがわかっているのであれば、自分で作っちゃった
ほうが変なところに躓かないですむので楽ですよ。
素人の哀しさというか、eximが初めてだったものですから、Debianのデフォルトから
出発して、ちょっとずつ(結果を見ながら)カスタマイズしていき、その過程で、少し
ずつeximに慣れていこうとしました。。。。

分かってみれば、Debianの仕様はなかなか合理的なのですが、それを説明する
/usr/share/doc/exim4-base/README.Debian.gz
などが、どうも分かりにくかったです。

まず最初に要点を書いて欲しかった。たとえば以下のように:
(同じような苦労をする人が出ないように、以下に記しておきます
。。。って、間違いはないかな?)

-------- 8< ---------------------------- >8 -----------

設定ファイル
/etc/exim4/update-exim4.conf.conf
/etc/exim4/exim4.conf.template
と、いくつかのデフォルト値を定めた
/etc/default/exim4
を使って、
/usr/sbin/update-exim4.conf
というスクリプトにより、
/var/lib/exim4/config.autogenerated
という真の設定ファイルが、起動時に自動的に作られる。
このとき、設定ファイルにミスがあると、エラーメッセージが出る。

/etc/exim4/exim4.conf.templateの中の、大文字の変数は、/etc/default/exim4や、
インストール時に、値が定義されているらしいが、
/etc/exim4/exim4.conf.localmacros ← 新しく作成
でも(再)定義できる:

また、/etc/exim4/exim4.conf.templateには定義されてない(がeximが
持ちうる)変数も、/etc/exim4/exim4.conf.localmacrosで、小文字で定
義できる。

ただし、exim4.conf.localmacrosで(再)定義できるのは、「main」のセク
ションの変数だけらしい。(だったら、そう書いて欲しかった。。。)

設定ファイルの変更を直ちに反映するには、
# update-exim4.conf
を実行してから、
# /etc/init.d/exim4 restart
を行うこと。

そうして設定できたパラメーターの値を見るには、
# /usr/lib/exim4/exim4 -bP | less

※ /etc/exim4/update-exim4.conf.confの
dc_use_split_config='false'
のために、/etc/exim4/conf.d/の中の設定ファイルは使われない。

※ /etc/exim4/exim4.conf.templateの中の変数で、DEBCONFで囲われている変数は、
「are replaced by installation dependent values by update-exim4.conf」

※ 変数の値は、 ' ' で囲わなくてもよいらしい。

-------- 8< ---------------------------- >8 -----------

清水
tao
2008-12-13 01:12:03 UTC
Permalink
Raw Message
清水さん、こんにちは。
Post by SHIMIZU
英語を読むのは苦手ではないのですが、最初にhttp://www.exim.org
の情報を頼りに設定を始めたところ、Debian独特のカスタマイズのために
期待通りの動作をせず、そのために、その後はDebian向けの情報しか読ま
なくなってしまったのが敗因でした。大反省です。
/etc/exim4/exim4.conf を作れば exim はそっちを読み込んでくれます。
exim の設定ディレクティブがわかっているのであれば、自分で作っちゃった
ほうが変なところに躓かないですむので楽ですよ。
Hideki Yamane
2008-12-13 07:53:43 UTC
Permalink
Raw Message
On Sat, 13 Dec 2008 12:09:22 +0900
Post by SHIMIZU
分かってみれば、Debianの仕様はなかなか合理的なのですが、それを説明する
/usr/share/doc/exim4-base/README.Debian.gz
などが、どうも分かりにくかったです。
 というのを bugreport してみてはどうですか?
 大体ドキュメントを書いた人は「こんなもんで良いだろう」という視点で
 しかみませんから、利用者からのフィードバックが必要です。
--
Regards,

Hideki Yamane henrich @ debian.or.jp/iijmio-mail.jp
http://wiki.debian.org/HidekiYamane
SHIMIZU
2008-12-13 08:38:26 UTC
Permalink
Raw Message
Post by Hideki Yamane
 というのを bugreport してみてはどうですか?
大体ドキュメントを書いた人は「こんなもんで良いだろう」という視点で
しかみませんから、利用者からのフィードバックが必要です。
仰るとおりですので、早速、bug reportしてみました。

まずは、同じように困っている人のために、
Followup-For: Bug #348046
を投稿してみました:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=348046

初めての報告なのですが、これでいいのでしょうか?

続いて、「ドキュメントが判りにくい」という報告をしようと思うのですが、
新しいスレッド(?)として報告すればよろしいのですよね?

清水
a***@thanku.jp
2008-12-13 11:31:43 UTC
Permalink
Raw Message
こんばんは。寺崎です。

At Sat, 13 Dec 2008 12:09:22 +0900,
Post by SHIMIZU
まず最初に要点を書いて欲しかった。たとえば以下のように:
README.Debian.gz は最初に目次が書いてありますね。

1. がイントロでドキュメントがどこにあるかとか、サポートが
どこで得られるかとか、そんなことが書いてあるようです。で、
2. が設定についてですよね。十分に早い段階で書いてあると私は
思いました。

2.1. が要点でしょうか。基本的な設定について書いてあるようです。

2.1.1. が debconf (dpkg-reconfigure exim4-config など)で
される質問についての説明ですね。
2.1.2. が Access Control についてのようですね。 /etc/exim4/ の
ファイルや exim macros で設定すると書いてあるようです。
2.1.3. が macro についてですね。
2.1.4. に /etc/exim4/conf.d/ 以下のファイル、あるいは
exim4.conf.template のどちらかと debconf の情報
(update-exim4.conf.conf)などや update-exim4.conf という
スクリプトが働いて /var/lib/exim4/config.autogenerated が
作られるとありますね。
2.1.5. では、こういったパッケージで用意されている設定方法が
複雑に感じられるとかの理由で使いたくない場合、どうやれば
使わずにすませられるかが書かれているようですね。

これに 2.2. Using TLS, 2.3. SMTP-AUTH と続いています。

よく作られているような印象を受けます。なかなか
どこをどうすれば、はっきりと良くなる、という指摘や
ここが問題なのでわかりづらいのだ、という指摘は
できないのではないかと思いました。
Post by SHIMIZU
/etc/exim4/exim4.conf.templateの中の、大文字の変数は、/etc/default/exim4や、
インストール時に、値が定義されているらしいが、
/etc/exim4/exim4.conf.localmacros ← 新しく作成
でも(再)定義できる:
「設定ファイルの中の .ifdef か .ifndef のあとに書かれている
macro は設定ファイルを分割していない場合には
/etc/exim4/exim4.conf.localmacros で設定する。」とかですかね?
Post by SHIMIZU
また、/etc/exim4/exim4.conf.templateには定義されてない(がeximが
持ちうる)変数も、/etc/exim4/exim4.conf.localmacrosで、小文字で定
義できる。
ただし、exim4.conf.localmacrosで(再)定義できるのは、「main」のセク
ションの変数だけらしい。(だったら、そう書いて欲しかった。。。)
exim4.conf.localmacros は exim4.conf.template の前にくっつけられて
処理されているだけのようです。だから macro の設定以外のことも
できます。ですが exim4.conf.localmacros は macro を設定する以外の
ことに使われることは想定されていないように思えます。なので、
そのような想定外の使い方をした場合の注意は書かれていなかったのでは
ないでしょうか。
--
Akihiro Terasaki
SHIMIZU
2008-12-13 14:23:42 UTC
Permalink
Raw Message
Post by a***@thanku.jp
よく作られているような印象を受けます。なかなか
どこをどうすれば、はっきりと良くなる、という指摘や
ここが問題なのでわかりづらいのだ、という指摘は
できないのではないかと思いました。
私がREADME.Debian.gzに受けた印象は、
「Eximは使ったことがあるけどDebianのEximは初めて」
という人向けには良い説明だけど、
「EximもDebianも初めて」
で、僕のように「DebianのEximを少しずつカスタマイズしていこう」
という人には、分かりにくい(理解に時間がかかる)と思いました。

もちろん、とりあえず動く、というレベルならばDebconf questionsに答える
だけで動いたのですが、カスタマイズに苦労しました。

だから、先のメールに書いたようなOverviewがあればいいな、と思ったのです。

たしかに、作文を考えていて、英語力の問題(自分の専門外のことを英語にする
のは難しい。。。)もあり、もともと理解が不完全なためもあり、なかなかうまくい
きません。(やっぱり、bugreportは止めようかな。。。)
Post by a***@thanku.jp
Post by SHIMIZU
また、/etc/exim4/exim4.conf.templateには定義されてない(がeximが
持ちうる)変数も、/etc/exim4/exim4.conf.localmacrosで、小文字で定
義できる。
ただし、exim4.conf.localmacrosで(再)定義できるのは、「main」のセク
ションの変数だけらしい。(だったら、そう書いて欲しかった。。。)
exim4.conf.localmacros は exim4.conf.template の前にくっつけられて
処理されているだけのようです。だから macro の設定以外のことも
できます。ですが exim4.conf.localmacros は macro を設定する以外の
ことに使われることは想定されていないように思えます。なので、
そのような想定外の使い方をした場合の注意は書かれていなかったのでは
ないでしょうか。
To actually set the macro EXIM4_EXAMPLE to the value "this is a sample",
write the following line
EXIM4_EXAMPLE = this is a sample
とあるので、変数(を定義してそれ)に値を代入することもできると解釈しました。。。

で、その理由(らしきもの)として、
Our configuration can be controlled in a limited way by setting
macros. That way, you can switch on and off certain parts of the
default configuration without having to touch the dpkg-conffiles.
While touching dpkg-conffiles itself is explitly allowed and wanted,
it can be quite a nuisance to be asked on package upgrade whether one
wants to use the locally changed file or the file changed by the
package maintainer.
とあるので、なるほど、と。

そこで、たとえば、exim4.conf.localmacrosにて
retry_data_expire = 21m
を設定すると、有効でした。
これは、exim4.conf.template では、main configurationに
おくべきものです。
一方、exim4.conf.template では transport configurationにおくべき
delay_after_cutoff = false
はexim4.conf.localmacrosに書いても無効でした。
(exim4.conf.template では有効でした)

なんか、根本的に誤解してますでしょうか???

清水
a***@thanku.jp
2008-12-14 01:08:27 UTC
Permalink
Raw Message
おはようございます。寺崎です。

At Sat, 13 Dec 2008 23:23:42 +0900,
Post by SHIMIZU
私がREADME.Debian.gzに受けた印象は、
「Eximは使ったことがあるけどDebianのEximは初めて」
という人向けには良い説明だけど、
README.Debian.gz はそういう人向けのものなのではないでしょうか?
http://www.debian.org/doc/maint-guide/ch-dother.ja.html#s-readme
ここを見てそういう気がしました。
Post by SHIMIZU
To actually set the macro EXIM4_EXAMPLE to the value "this is a sample",
write the following line
EXIM4_EXAMPLE = this is a sample
とあるので、変数(を定義してそれ)に値を代入することもできると解釈しました。。。
実際に EXIM4_EXAMPLE という macro に "this is a sample" という
値をセットするには「EXIM4_EXAMPLE = this is a sample」と書きなさい。
と書いてあるのですよね。 macro 以外のことは書いていないので
「・・・することもできると解釈した」と言われると「なぜ本題の
macro の説明をしている文を読んで、それ以外のこともできると
考えたのだろう?」と思います。

「exim で言う macro って変数みたいなものなのね。」と解釈した
というのなら、いいのではないかと思いますが。
Post by SHIMIZU
で、その理由(らしきもの)として、
Our configuration can be controlled in a limited way by setting
macros. That way, you can switch on and off certain parts of the
default configuration without having to touch the dpkg-conffiles.
While touching dpkg-conffiles itself is explitly allowed and wanted,
it can be quite a nuisance to be asked on package upgrade whether one
wants to use the locally changed file or the file changed by the
package maintainer.
とあるので、なるほど、と。
この英文はだいたい私は理解できているような気がするのですが
清水さんがなぜこれが理由となると考えられたのかということは
わかりませんでした。
Post by SHIMIZU
そこで、たとえば、exim4.conf.localmacrosにて
retry_data_expire = 21m
を設定すると、有効でした。
これは、exim4.conf.template では、main configurationに
おくべきものです。
一方、exim4.conf.template では transport configurationにおくべき
delay_after_cutoff = false
はexim4.conf.localmacrosに書いても無効でした。
(exim4.conf.template では有効でした)
exim4.conf.localmacros は exim4.conf.template の前にくっつけられて
処理されているだけのようです。つまり、 exim4.conf.localmacros に
書くということは exim4.conf.template の最初に書くことと同じ
なのです。最初なので main 部分に書いてることになります。

/etc/exim4/ で
# cat exim4.conf.template >> exim4.conf.localmacros
# cp /dev/null exim4.conf.template
# update-exim4.conf
こんなことをやってもできあがる
/var/lib/exim4/config.autogenerated に変化はない、と思います。
--
Akihiro Terasaki
SHIMIZU
2008-12-14 02:15:12 UTC
Permalink
Raw Message
寺崎さん

お返事を読んで、やはり自分がEximをわかっていないことが明らかに
なりましたので、bug reportは止めます。

ただ単に「気に入らない」では無意味なので、素案を作ってポストする
つもりでしたが、理解していない人間が書いた文章は害が大きいことは、
自分の専門分野で心底わかっていますので。
Post by a***@thanku.jp
Post by SHIMIZU
「Eximは使ったことがあるけどDebianのEximは初めて」
という人向けには良い説明だけど、
README.Debian.gz はそういう人向けのものなのではないでしょうか?
http://www.debian.org/doc/maint-guide/ch-dother.ja.html#s-readme
ここを見てそういう気がしました。
そうだとは思うのですが、EximもDebianも初めての人のためのちょっとした
Overviewを付けておけば、とても役立つと思いました。
Post by a***@thanku.jp
「exim で言う macro って変数みたいなものなのね。」と解釈した
というのなら、いいのではないかと思いますが。
高度な内容を持つマクロもありえるし、1個の変数に値を代入するだけの事
も(一番短い)マクロと解釈できる、と考えました。そして、自分は後者だけ
やろうと思いました。
Post by a***@thanku.jp
Post by SHIMIZU
で、その理由(らしきもの)として、
Our configuration can be controlled in a limited way by setting
macros. That way, you can switch on and off certain parts of the
default configuration without having to touch the dpkg-conffiles.
While touching dpkg-conffiles itself is explitly allowed and wanted,
it can be quite a nuisance to be asked on package upgrade whether one
wants to use the locally changed file or the file changed by the
package maintainer.
とあるので、なるほど、と。
この英文はだいたい私は理解できているような気がするのですが
清水さんがなぜこれが理由となると考えられたのかということは
わかりませんでした。
次のような意味に解釈しました:
Eximのパッケージがupgradeされるときに、exim4.conf.templateもupgradeさ
れるかもしれない。そのときに、exim4.conf.templateを(たとえ、1個の変数に
値を与えるだけでも)ローカルにカスタマイズしていると、面倒になる。そこで、
exim4.conf.localmacrosを使うと便利だ。
Post by a***@thanku.jp
exim4.conf.localmacros は exim4.conf.template の前にくっつけられて
処理されているだけのようです。つまり、 exim4.conf.localmacros に
書くということは exim4.conf.template の最初に書くことと同じ
なのです。最初なので main 部分に書いてることになります。
なるほど、です。

ローカルに変数の値を(再)定義する際にexim4.conf.localmacrosを使うという、
私の設定の仕方は、想定外の使い方なのかもしれませんね。となると、寺崎さ
んは、以下のような設定をしたい場合に、どのようにしておられますか?(私は、
すべてexim4.conf.localmacrosで行いましたが…)

CHECK_RCPT_REVERSE_DNS = yes
CHECK_RCPT_VERIFY_SENDER = yes
MESSAGE_SIZE_LIMIT = 100M
MAIN_IGNORE_BOUNCE_ERRORS_AFTER = 6h
MAIN_TIMEOUT_FROZEN_AFTER = 1d
delay_warning = 20m:3h:14h
smtp_accept_queue_per_connection = 25
smtp_return_error_details = yes
retry_data_expire = 21m
warn_message_file = /etc/exim4/warn_message.shmz
bounce_message_file = /etc/exim4/bounce_message.shmz
headers_charset = ISO-2022JP

清水
a***@thanku.jp
2008-12-14 13:01:18 UTC
Permalink
Raw Message
こんばんは。寺崎です。

At Sun, 14 Dec 2008 11:15:12 +0900,
Post by SHIMIZU
次のような意味に解釈しました:
Eximのパッケージがupgradeされるときに、exim4.conf.templateもupgradeさ
れるかもしれない。そのときに、exim4.conf.templateを(たとえ、1個の変数に
値を与えるだけでも)ローカルにカスタマイズしていると、面倒になる。そこで、
exim4.conf.localmacrosを使うと便利だ。
そうですね。私もそう解釈します。つまりは exim4.conf.localmacros を
option の設定に使用しようと思った理由だった、ということですね。
Post by SHIMIZU
ローカルに変数の値を(再)定義する際にexim4.conf.localmacrosを使うという、
私の設定の仕方は、想定外の使い方なのかもしれませんね。となると、寺崎さ
んは、以下のような設定をしたい場合に、どのようにしておられますか?(私は、
パッケージで用意されている方法は使っていません。
/etc/exim4/exim4.conf を用意して、そっちを直接いじってます。

パッケージの方法でやる場合なら /etc/exim4/conf.d/ 以下のファイルを
使う分割設定にしている場合と exim4.conf.template を使う単一設定に
している場合と2種類ありますね。

単一設定なら CHECK_RCPT_REVERSE_DNS などの exim4.conf.template の
中で .ifdef や .ifndef のあとに書かれていて exim4.conf.localmacros
で設定することが想定されているものは当然、 exim4.conf.localmacros に
書けば良いと思います。

その他の delay_warning などの option は exim4.conf.template に
書くことが想定されているように思います。もちろん upgrade のときに
面倒になりますけれど、それは単一設定がそうなのだから仕方がない、
ということなのでしょう。 README.Debian.gz の 2.1.1.1. に分割設定と
単一設定の長所と短所が書いてありますね。そこでも単一設定の短所と
して書かれていますし。

main の option を設定する以外には exim4.conf.template をいじる
ことはない、という場合に限定すると exim4.conf.localmacros に
書いてしまう、というのはもしかすると悪くないやり方なのかも
しれません。

そのようなイレギュラーなことはしたくない、だけど upgrade 時の
面倒もなるべく避けたいという場合には分割設定を使いましょう
ということになるのではないでしょうか。

分割設定ならば CHECK_RCPT_REVERSE_DNS などは
/etc/exim4/conf.d/main/000_localmacros などに書く。
option は /etc/exim4/conf.d/main/02_exim4-config_options に
書く、ということになるのではないでしょうか。
--
Akihiro Terasaki
SHIMIZU
2008-12-15 12:31:01 UTC
Permalink
Raw Message
寺崎さん、お返事ありがとうございます。
Post by a***@thanku.jp
そうですね。私もそう解釈します。つまりは exim4.conf.localmacros を
option の設定に使用しようと思った理由だった、ということですね。
はい、そうです。
Post by a***@thanku.jp
パッケージで用意されている方法は使っていません。
/etc/exim4/exim4.conf を用意して、そっちを直接いじってます。
やはり、そうでしたか…。
Post by a***@thanku.jp
そのようなイレギュラーなことはしたくない、だけど upgrade 時の
面倒もなるべく避けたいという場合には分割設定を使いましょう
ということになるのではないでしょうか。
たしかに、おっしゃる通りです。

「Debianの設定を出発点に少しずつカスタマイズ」という
方針を採ったために、Debianのデフォルトである単一設定
から出発してしまい、その後、そのまま突っ走ってしまいました。

分割設定への移行を考えてみます。

ありがとうございました。

清水

SHIMIZU
2008-12-10 12:56:18 UTC
Permalink
Raw Message
あれ?

ポート587番を25番にリダイレクトするのって、まずくないですか?

もしもこれで、

クライアントPC:587 <--(インターネット)--> サーバー:587 <--(内部)--> サーバー:25

という通信がうまく行ったとしたら、今度は、

サーバー:25 <--(インターネット)--> 別のサーバー:25

がダメになりませんか?

つまり、サーバー --> 別のサーバーという方向の通信が、

サーバー:25 --(内部)--> サーバー:587 --(インターネット)--> 別のサーバー:587

となってしまって、相手の25番と通信できなくなってしまいませんか?

清水
i***@ecoin.jp
2008-12-11 09:33:58 UTC
Permalink
Raw Message
碇です

とりあえず試してみてください。問題は出ないと思います

勘違いをひとつだけ訂正
宛先ポートが587/tcpだとした場合に、送信ポートも587である必要性はないです
eximがどうだか知れませんが
一般的には1024:65535/tcpの任意のポートから宛先ポート587に接続しに行きま


#どちらかというとTLSが必要かどうかを考えたほうがいいと思います
#一般的には役に立たないので必要ないと思います

On Wed, 10 Dec 2008 21:56:18 +0900
Post by SHIMIZU
あれ?
ポート587番を25番にリダイレクトするのって、まずくないですか?
もしもこれで、
クライアントPC:587 <--(インターネット)--> サーバー:587 <--(内部)--> サーバー:25
という通信がうまく行ったとしたら、今度は、
サーバー:25 <--(インターネット)--> 別のサーバー:25
がダメになりませんか?
つまり、サーバー --> 別のサーバーという方向の通信が、
サーバー:25 --(内部)--> サーバー:587 --(インターネット)--> 別のサーバー:587
となってしまって、相手の25番と通信できなくなってしまいませんか?
清水
--
碇 永志
<ikari-***@ecoin.jp>
SHIMIZU
2008-12-11 14:44:33 UTC
Permalink
Raw Message
碇様
Post by i***@ecoin.jp
宛先ポートが587/tcpだとした場合に、送信ポートも587である必要性はないです
eximがどうだか知れませんが
一般的には1024:65535/tcpの任意のポートから宛先ポート587に接続しに行きま

ご教示ありがとうございます。私が素人管理者であることが、ますます
露呈しています。。。
Post by i***@ecoin.jp
#どちらかというとTLSが必要かどうかを考えたほうがいいと思います
#一般的には役に立たないので必要ないと思います
うーん…。たしかに、メールそのものを暗号化するのに比べて、
効果は少ないですね。どうせ、サーバーから別のサーバーに送信される
ときに、相手がTLSに対応してないことが多いので、そこで生のまま
送信されますから。

なので、今動いているnon-TLSのCRAM-MD5によって、パスワード
だけ暗号化されていれば十分ではないか、というのもごもっともです。

ですが、メールの暗号化も、相手が読めないとどうしようも
ないなどの問題があり、悩んでいます。
Post by i***@ecoin.jp
とりあえず試してみてください。問題は出ないと思います
これは、実験機を立ち上げたら試してみますが、
tao様が[debian-users:51419]にて、587をリダイレクトしないで成功
しておられるようなので、そちらを先に試そうと考えています。

よろしくお願いいたします。

清水
a***@thanku.jp
2008-12-12 11:35:23 UTC
Permalink
Raw Message
こんばんは。寺崎です。

# [debian-users:51363] をウェブで読んだだけで受けとって
# いませんのでスレッドつなげられません。

うまくいかないのは tls_on_connect_ports を指定している
ためではないでしょうか?
--
Akihiro Terasaki
Loading...