- PR -

postfix + dovecot 構成にて送受信エラー:POPの取り出しおよびSMTP-AUTH

1
投稿者投稿内容
Hyde
ベテラン
会議室デビュー日: 2005/05/18
投稿数: 63
投稿日時: 2008-07-16 10:28
CentOS5で postfix + dovecot によるメールサーバ環境を構築しようとしているのですが、送受信がうまくいかずに困っております。(一見送信はうまくいっているようなのですが…)
何か原因がつかめればと思い投稿させていただきました。

やりたいことは、SMTP-Auth認証を有効にしたLANおよび外部からのメール環境の構築です。
CentOSのネットワークサーバ構築ガイド等を参考にして、必要なパッケージをインストール済みです。
(ちなみにyumにてインストールしました。)

※ 環境は、
【環境構成】
◆サーバ
OS=CentOS5
Linux hoge.com 2.6.18-92.1.6.el5 #1 SMP Wed Jun 25 13:49:24 EDT 2008 i686 i686 i386 GNU/Linux
SMTP=postfix
POP3=dovecot

・インストールしたパッケージ構成
postfix-2.3.3-2
cyrus-sasl-plain-2.1.22-4
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-2.1.22-4
system-switch-mail-gnome-0.5.25-12
dovecot-1.0.7-2.el5
mysql-5.0.45-7.el5
perl-DBI-1.52-1.fc6

・SELinux : OFF
・F/W設定済
tcp 0 0 :::110 :::* LISTEN
tcp 0 0 :::143 :::* LISTEN
tcp 0 0 :::993 :::* LISTEN
tcp 0 0 :::995 :::* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN

◆クライアント1
サーバマシンと同機
メーラ:thunderbird 2.0.0.14

◆クライアント2
bridge接続他機
OS=Windows XP SP2
メーラ:thunderbird 2.0.0.14

※ 現象は、
P001:postfix SMTP-AUTH で送信ができない
P002:thunderbird で受信ができない。


SMTP-AUTHがうまくいっていない(?)にせよ、送信はうまくいっているようで
スプールにはメールが送信されていることが確認できます。(/var/mail/username)
なので、とりあえず、「P002:thunderbird で受信ができない。」を解決しようとしています。

[root@myhost mail]# pwd
/var/mail
[root@myhost mail]# ll | grep cvsum040
-rw-rw---- 1 cvsum040 mail 741 7月 15 10:19 cvsum040
[root@myhost mail]#

中身もちゃんとあり、受信内容も正しいようです。
しかし、thunderbird 2.0.0.14で受信トレイを開く際に

「パスワードを送信できませんでした。メールサーバXXからの応答:Internal login failure. Refer to server log for more information」というエラーダイアログがでます。

【ログ:/var/log/maillog】
/var/log/maillog には、以下のように出力されています。
Jul 15 20:08:45 hidetarou dovecot: Logins with UID 0 not permitted (user root)
Jul 15 20:08:45 hidetarou dovecot: pop3-login: Internal login failure: user=<root>, method=PLAIN, rip=::ffff:221.191.108.88, lip=::ffff:192.168.1.40

どうやらpop3-loginがこけているようなのはわかるんですが、ここから先がわかりませんでした。
一応関連する情報を集め、dovecot.confなどを疑って修正したりしたのですが、現象は変わりません。



※設定は、
【設定内容】
◆/etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = myhost.hoge.com
mydomain = hoge.com
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
local_recipient_maps = unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
# SMTP-Auth設定
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject

◆/usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login cram-md5 digest-md5

◆/etc/dovecot.conf
protocols = imap imaps pop3 pop3s
default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u
protocol imap {
}

protocol pop3 {
}
protocol lda {
postmaster_address = postmaster@example.com
}
auth default {
mechanisms = plain
passdb pam {
}
userdb passwd {
}
user = root
}
dict {
}
plugin {
}


どなたか原因がわかりましたら、ご教授お願い致します。
Hyde
ベテラン
会議室デビュー日: 2005/05/18
投稿数: 63
投稿日時: 2008-07-16 12:27
まず第一段階なんですが、

thunderbird での受信には成功しました。

結果をご報告いたしますと、
なんと、root でpopから取得しようとしてたためでした。
これは、やってはいけないことだったんですね。
(普通はROOT宛は転送設定とかしますっけ)

別ユーザーでならば、パスワードいれれば、ちゃんと取得できました。

基本的なセキュリティの問題だったようです。
お騒がせしました。

次に…SMTPにとりかかっているところです。
これももしかしたらケアレスミスっぽいですが…

何かお気づきの方いらっしゃれば、ご指摘いただけると助かります。

Hyde
ベテラン
会議室デビュー日: 2005/05/18
投稿数: 63
投稿日時: 2008-07-16 16:23
次に第二段階ですが…経過報告いたします。

◆SMTP-AUTH周りの確認を行いました。

うまくいっているのかいないのか、一見判断しずらかったので検証してみました。

メールサーバ外部からSMTPを指定して接続を試み、
外部のアカウントに飛ぶか
内部のアカウントに飛ぶかをチェックしてみました。
なお、クライアントはメーラとJavaMailによるTOOLの両方で確認しました。

メールサーバ(SRV):domain.com
クライアント(CLI):c_host
外部メールアカウント1:out@hoge.com
外部メールアカウント2:out2@hoge.com
内部メールアカウント1:u1@domain.com
内部メールアカウント2:root@domain.com

サーバ側では、前述の投稿のような設定で、SMTP-AUTH を有効設定にしたつもりでおります。


結果は

ID SRV CLI SMTP FROM TO RESULT
test01 domain.com c_host domain.com out@hoge.com u1@domain.com OK
test02 domain.com c_host domain.com out@hoge.com root@domain.com OK
test03 domain.com c_host domain.com out2@hoge.com u1@domain.com OK
test04 domain.com c_host domain.com out2@hoge.com root@domain.com OK
test05 domain.com c_host domain.com u1@domain.com u1@domain.com OK
test06 domain.com c_host domain.com u1@domain.com root@domain.com OK
test07 domain.com c_host domain.com u1@domain.com out@hoge.com NG
test08 domain.com c_host domain.com u1@domain.com out2@hoge.com NG
test09 domain.com c_host domain.com root@domain.com u1@domain.com OK
test10 domain.com c_host domain.com root@domain.com root@domain.com OK
test11 domain.com c_host domain.com root@domain.com out@hoge.com NG
test12 domain.com c_host domain.com root@domain.com out2@hoge.com NG
test13 domain.com c_host null out@hoge.com u1@domain.com NG
test14 domain.com c_host null out@hoge.com root@domain.com NG
test15 domain.com c_host null out2@hoge.com u1@domain.com NG
test16 domain.com c_host null out2@hoge.com root@domain.com NG
test17 domain.com c_host null u1@domain.com u1@domain.com NG
test18 domain.com c_host null u1@domain.com root@domain.com NG
test19 domain.com c_host null u1@domain.com out@hoge.com NG
test20 domain.com c_host null u1@domain.com out2@hoge.com NG
test21 domain.com c_host null root@domain.com u1@domain.com NG
test22 domain.com c_host null root@domain.com root@domain.com NG
test23 domain.com c_host null root@domain.com out@hoge.com NG
test24 domain.com c_host null root@domain.com out2@hoge.com NG

これがうまくいっているのかいないのかの検証ですが、
まずここまでは、メールクライアント側でSMTP-AUTH を設定せずに行いました。
なので、疎通しないもんだと思ってたんですが、自分の内部メールアカウントに
対しては、認証もせずに…飛びます。(test01~test06,test09,test10)


再び、メールクライアント側でSMTP-AUTH を設定して行うと
ID SRV CLI SMTP FROM TO RESULT
test25 domain.com c_host domain.com u1@domain.com out@hoge.com OK
test26 domain.com c_host domain.com u1@domain.com out2@hoge.com OK

となりました。
この時点でようやくすっきりした気分になりました。

test07,test08 では結果はNGでしたが、それはSMTP-AUTH が効いていたためはじかれており
クライアントで設定すると通りました。(test25,test26)

あと、そもそもrootユーザでの確認は論外でした。

ということで、まずは、ここまでは何とかいったようです。
ありがとうございました。

もっと手の込んだ設定をしたらどうなるかわからないのですが、一旦はこれで解決したようです。

結構ややこしかったです。(ふー)
Hyde
ベテラン
会議室デビュー日: 2005/05/18
投稿数: 63
投稿日時: 2008-07-16 19:56
また新たな問題が発生してしまい、まだ設定は不備があることが判明しました。。。
再び詰まっています。

一応LAN内部においてメールサーバとは違うクライアントからの疎通はうまくいったようなんですが、ルータ外部から、SMTP接続送信しようとすると、うまくいかないようです。

メーラからも接続を拒否されますが、
JavaMailのクライアントからやってみても

DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "hoge.mail.com", port 25, isSSL false
javax.mail.MessagingException: Could not connect to SMTP host: hoge.mail.com, port: 25;
nested exception is:
java.net.ConnectException: Connection refused: connect

となり接続拒否されてしまいます。

サーバ側のログには
反応なし・・・

ということはクライアントから接続さえできていない。。。といった感じです。

ちなみに、hosts.allow には
smtp で使用する外部のアクセスを許可しています。

他にも設定するところがあるでしょうか?

もしわかる方がいらっしゃいましたら、お手数ですが、ご教授くださいませ。
よろしくお願いいたします。




F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2008-07-16 20:53
> 一応LAN内部においてメールサーバとは違うクライアントからの疎通は
> うまくいったようなんですが、ルータ外部から、SMTP接続送信しようとすると、
> うまくいかないようです。

それがSMTPに限ってであれば…

・ファイアウォール設定

ですかね?

なにも繋がらないのであれば、

・デフォルトゲートウェイ

という可能性もありますね。

外部ネットワークからpingは通るかどうかとか、
まずはその辺りから確認されてはいかがでしょうか?
Hyde
ベテラン
会議室デビュー日: 2005/05/18
投稿数: 63
投稿日時: 2008-07-17 10:44
F/Aさん
どうもコメントありがとうございます。
確認してみました。

・ファイアウォール設定

cat /etc/sysconfig/iptables | grep 25
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT

あけております。

・ルータ側
こちらも通してあります。

そもそもLAN内部とはいえ他機からアクセスできる時点で、ここらへんは設定済みかと思っているのですが…

・/etc/hosts.allow
指定IP許可ずみです。
smtp:192.168.x. hogeip


・DNS
DynDNSの設定は?
ここが怪しいのかな?と思って確認してみました。
DNSは自分でたてていなくて、借り物ですが、

Mail Routing:
Yes, let me configure Email routing.
MX Hostname:hoge
Primary:
Yes, use it as my primary mail relay.
No, use it as backup MX record.

で、ここは
MX Hostnameに何を入れるべきなのかで悩んだんですが、
最初にドメイン名そのものを入れてみて

結果は:
LAN内部他機からの疎通OK:通るんですね…
LAN外部他機からの疎通NG

適当な名前、ここではhogeをいれてみる
(ここはDNSへの自己申告名ですよね?適当でいいと聞いてますが…)
で結果変わらずでした。
LAN内部他機からの疎通OK:通るんですね…ということはあんまし関係ないのかな。
LAN外部他機からの疎通NG


もう一度頭を整理すると
LAN外部から対象のSMTP経由送信:NG
LAN外部から対象のメールサーバのアカウントへの送信:OK

です。

まあ、考えてみれば、外部からSMTPを踏み台にされていない構成なので、むしろこちらのほうが望ましい気もしますが、そういう指定をまだした記憶はなく、どこでしているのかがはっきりしません。

現在のところ、そのような状態です。

postfixをお使いの方でお気づきの方がございましたら、コメントいただけると助かります。


Hyde
ベテラン
会議室デビュー日: 2005/05/18
投稿数: 63
投稿日時: 2008-07-17 13:22
第三段階のご報告です。

OutLookExpressやthunderbirdなどのメーラにおいて、
ルータ内部、外部どちらも送受信ができるようになったことを確認できました。

なぜか初回はエラーが生じ、
[送信トレイ] フォルダからメッセージを開けませんでした。 アカウント : 'hoge.com', サーバー : 'hoge.com', プロトコル : SMTP, ポート : 25, セキュリティ (SSL): なし, エラー番号 : 0x800420C8
と出るのですが、POP受信には成功し、その後、そのアカウントから送信するとうまくいったようでした。?なぜ初回にこけたのかわかりません。

いままで使用していた確認用の JavaMailのほうは
依然として、前回投稿した内容の現象のままです。

ルータ内部と外部の現象が、同じクライアントアプリを利用して異なることに疑問を抱いているところです。

現在の疑いどころは、DNSの部分なのですが、
メーラでは成功してしまったので、この部分が直接関係しないのかなと感じていたりします。

以上、経過報告でした。
まだしっくりと、きていません。。。

F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2008-07-17 19:36
いまいちネットワーク構成が把握出来ないですが…

ルータと仰られているのはADSLとかFTTHのNATブロードバンドルータですか?
それともCISCOとかの業務用L3スイッチですか?

DynDNSってキーワードが気になっています。

ちなみにJavaMailはSMTP送信ではなく、POP受信であれば
外部からでも可能なのですか?

なおAUTHを使うなら25じゃなく587がいいかもしれませんね。
OP25Bなんかもあるかもしれませんし。

それとDNSが原因かどうかはSMTPサーバをIPアドレスで指定すれば
切り分け可能だと思います。

[ メッセージ編集済み 編集者: F/A 編集日時 2008-07-17 19:43 ]
1

スキルアップ/キャリアアップ(JOB@IT)