さくらVPSのサーバーAからサーバーBに引っ越しを行なった際にサーバーAでできていたメール送信処理ができなくなったので、対応したことをメモしておきます。
メールモジュールはpostfix
はじめは「postfix」のモジュールが入っていないという程度の事で、インストールしたらメール送信できるだろうと浅く考えていましたが、実はサーバー移行時にモジュールチェックをしていたので、インストールはされている状態でした。
次に疑う事は、postfixの設定ですが、通常SMTPのみで使用する場合は、デフォルト設定で問題なく送れるはずなので、プログラム側で特殊な事をやっているか、サーバーAの方での環境を疑ってみました。
mailの設定を確認
$postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = localhost
inet_protocols = ipv4
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = ***.com
myhostname = ***.vs.sakura.ne.jp
mynetworks = 192.168.2.0/24, 127.0.0.0/8
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
relay_domains = $mydestination
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
サーバーA、サーバーBでこのコマンドをたたいて比べてみました。
細かい設定はあまり必要なく、重要なのは
mydomain = ***.com
myhostname = ***.vs.sakura.ne.jp
この2点ぐらいでしょう。
セットしてみましたが、やはりメールは送られません・・・
いろんなサイトのやり方で検証
外部からの25番ポート経由で行う場合は、「inet_interfaces」を"localhost"ではなく"all"にするという事なのですが、
今回はWEBサービス側からのみなのでlocalhostからのSMTPアクセスになるので"localhost"で問題なし。
/var/log/maillogのエラーメッセージ
postfix/local[17467]: warning: inet_protocols: configuring for IPv4 support only
上記のようなログがたくさん溜まっていたので、調べたトコロ、ネットワーク高速化対応の時に対応したIPv6を無効化した事で、postfixのエラーが発生していたようですね。
これの対策は
/etc/postfix/main.cf
の編集で
#inet_protocols = all #ここをコメントアウト
inet_protocols = ipv4 #この行を追加
これでエラーは無くなりました。
でも、まだメールは送信できないようです・・・
各種コマンドで確認
サーバー管理者たるもの、コマンドラインでパケットの流れを把握できる必要があるので、
いくつかのコマンドで原因の追求を行なってみることにしました。
メールキューの確認
たまっているキューを見ることができますが、何件たまっているかぐらいの確認
$ mailq
$ postqueue -p
iptablesの確認
そもそもポートを塞がれているかどうかを疑うべきで、下記で確認してみよう。
$ iptables -L
ただし、今回はiptablesを登録していなかったので、これも対象外
動作しているポートのかくにん
localhost(127.0.0.1)で25番ポートが動作している事が確認できます。
この時点で、モジュールは正常に動いていると考えられます。
$ netstat -ant|grep :25
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
telnet通話してみる
まずはlocalhostで試してみるが正常動作している。
※ちなみに、telnetコマンドを抜けるには「quit」と入力しよう
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
***.vs.sakura.ne.jp ESMTP Postfix
次に外部サーバーにアクセスしてみる
$ telnet google.com 25
Trying 127.0.0.1...
なんとアクセスができていない・・・
もちろん、サーバーAで同じようにやってみると、正常にアクセスできている・・・
どうも、上位ネットワークではないか???という疑問が生まれる。
コマンドで直接メール送信してみる
$ mail ***@***.com # 自分のメールアドレス
subject:**** # 件名
**** # 本文(改行しても書けます)
. # 終了の時は「.」ピリオドを入力
これで自分のメールソフトで受け取ることができれば、疎通完了という事です。
もちろん、これも通らないのですね。
さくらインターネットの試用版の制限
ネットを見まわっている時に、気になる文句を見つけました。
https://teratail.com/questions/8722
さくらのVPSはお試し期間中はメール送受信できないようになってますがそんなオチ?
確かに、現在サーバーBは「お試し期間中」少し費用をケチって作業をしていたのだけれど、これが本当であれば、
サーバーの設定は問題ないが、25番ポートで外部にアクセスできないという症状は納得がいく。
さらに調べたトコロ、見事にさくらのサイトに書かれていました。
http://vps.sakura.ad.jp/flow/#target_caution
その後、「本登録」を行ったトコロ、telnetで正常アクセスでき、メール送信も行われ、今までキューに溜まっていたデータも一気に送り出されました。
気持よく便秘解消できた気分です。
そもそも「OP25B」設定にひっかからないように、SSLを使えばこういった問題に当たらないわけですが、標準仕様も重要なので、こちらは覚えておくことにしましょう。
0 件のコメント:
コメントを投稿