続々、メールが送れない

FreeBSD-beginners-jp にてアドバイスを頂いて、いろいろと試している。
 
サーバー上で 25 番ポートへのアクセスは問題ない。
mail コマンドで、Yahoo!メールへメールを送信することも出来る。
ローカルネットワーク上のクライアントパソコンでも問題なく接続でき、メールも送信できるが、ssh でポートフォワードした時だけ 25番ポートを拒否され、下記のメッセージを吐いてメールが送れなくなる。
 
debug1: Connection to port 5025 forwarding to localhost port 25 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 5025 for localhost port
25, connect from 127.0.0.1 port 1366, nchannels 3
 
110,143等は問題なくポートフォワードで接続できているから、クライアントからのポートフォワードの仕方が悪いわけではない。
 
sshd に-d をつけてデバッグ用のログを採ってログを画面上で見てみたが、良く分からないので、sshd_config に LogLevel DEBUG3 として /var/log/debug.log に落としてみた。
しかし、上記の debug のログ部分くらいしかおかしいところは見当たらず、なぜ拒否されているのかが良く分からない。
ちなみに、/etc/sshd_config は下記の設定。
 
 Port 22
 Protocol 2
 PermitRootLogin no
 PubkeyAuthentication yes
 AuthorizedKeysFile .ssh/authorized_keys
 PasswordAuthentication no
 PermitEmptyPasswords no
 ChallengeResponseAuthentication no
 Subsystem sftp  /usr/libexec/sftp-server
 
/var/log/maillog には、imap と spamd、システムセキュリティリポートと ssh 接続ではないメール送信の Postfix のログしか無い。
debug_peer_list を指定しても、debug_peer_level を 2 から 3 にしても、失敗しているというログすらない。
 
FreeBSD-4.11-STABLE で同じバージョンの postfix で同じ設定をしているときは問題なかったけれども、5.3-STABLE にしてからこういう状況になったということで、もう一度じっくり考えてみた。
もしかしたら IPv6 対応の問題ではないかと考え、postfix を 一度deinstall し、再度インストールしてみた。
その結果、ssh のポートフォワードでメールを送信が可能になった!万歳!
私が最初にインストールしたときは、IPv6 対応のオプションを指定していなかったようだ。
 
....と、一応解決したようになったが、
 
「うまく行かない本当の原因がフォワード先がIPv6対応していないことにあるならば、あちこちで問題になっているはずだと思うからです。」
・・・・・<略>・・・・・
IPv6Postfixへ切り替えて問題が見えなくなっただけで、本当の原因は残ったままのように思います。」
 
とのご指摘を受け、「確かになぁ。原因をもうちょっと調べて見た方が良いな。」と思い直して調査を始める。
 
まず localhost の名前解決を調べてみた。
/etc/nsswitch.conf ファイルは下記のようにデフォルトのまま。
 
  group: compat
  group_compat: nis
  hosts: files dns
  networks: files
  passwd: compat
  passwd_compat: nis
  shells: files
 
/etc/hosts ファイルは下記の通り。
 
  ::1     localhost localhost.choro_master.com
  127.0.0.1  localhost localhost.choro_master.com
 
という状況で、host コマンドで引いて見ると、
 
  # host localhost
  Host localhost not found: 3(NXDOMAIN)
  # host 127.0.0.1
  Host 1.0.0.127.in-addr.arpa not found: 3(NXDOMAIN)
 
引けない。これが問題になっているように思えてきた。
pinglocalhost127.0.0.1 に接続。
named のゾーンファイルで設定しているローカルネットワーク上のパソコン達の IP アドレスは、正引きも逆引きも、host コマンドでも nslookupコマンドでも問題なく引けるのだが、localhost 関係だけが引けない状況。
ということは、/etc/hosts ファイルではなく、named で解決していないと考えた。
いろいろやっているうちに、特に設定ファイルを変更したわけではないのに、なぜか 127.0.0.1 は引けるようになっていた。(これもおかしい話だが)
 
気を取り直し、「localhost を named で引けるようにすればいいじゃんか」と無謀にも localhost.zone というファイルを /etc/master/ に無理やり作成する。
 
 $TTL 3600
 @ IN SOA server.choro_master.com. root.server.choro_master.com.(
 20050319 ; Serial
 3600 ; Refresh
 900 ; Retry
 3600000 ; Expire
 3600 ) ; Minimum
  IN NS server.choro_master.com.
  IN A 127.0.0.1
  IN AAAA ::1
 
で、/etc/named/named.conf に下記を追加。
 
 zone "localhost" {
  type master;
  file "master/localhost.zone";
 };
 
named を再起動し、host コマンドで確認。
 
 # rndc reload
 # host localhost
 localhost.choro_master.com has address 127.0.0.1
 # host localhost.choro_master.com
 localhost.choro_master.com has address 127.0.0.1
 
うむ、引けてる。
しかし、メールはまだ、ssh でポートフォワードすると送れないのは変わらない。
 
次に、あまりやりたくなかったが、tcpdumpsshdpostfix の間の通信を追ってみる。
なぜやりたくなかったかというと、見ても良く分からないと思っていたから...。
 
 # tcpdump -nX
 
01:19:51.721345 IP 192.168.0.2.1060 > 192.168.0.1.22: S 3710761808:3710761808(0) win 65535
01:19:51.721463 IP 192.168.0.1.22 > 192.168.0.2.1060: S 3459793728:3459793728(0) ack 3710761809 win 65535
01:19:51.721564 IP 192.168.0.2.1060 > 192.168.0.1.22: . ack 1 win 65535
01:19:51.725699 IP 192.168.0.1.22 > 192.168.0.2.1060: P 1:42(41) ack 1 win 65535
01:19:51.750996 IP 192.168.0.2.1060 > 192.168.0.1.22: P 1:23(22) ack 42 win 65494
01:19:51.755991 IP 192.168.0.1.22 > 192.168.0.2.1060: P 42:642(600) ack 23 win 65535
01:19:51.756244 IP 192.168.0.2.1060 > 192.168.0.1.22: P 23:663(640) ack 642 win 64894
01:19:51.848887 IP 192.168.0.1.22 > 192.168.0.2.1060: . ack 663 win 65535
01:19:51.848997 IP 192.168.0.2.1060 > 192.168.0.1.22: P 663:687(24) ack 642 win 64894
01:19:51.862403 IP 192.168.0.1.22 > 192.168.0.2.1060: P 642:794(152) ack 687 win 65535
01:19:51.865552 IP 192.168.0.2.1060 > 192.168.0.1.22: P 687:831(144) ack 794 win 64742
01:19:51.884795 IP 192.168.0.1.22 > 192.168.0.2.1060: P 794:1450(656) ack 831 win 65535
01:19:51.892740 IP 192.168.0.2.1060 > 192.168.0.1.22: P 831:847(16) ack 1450 win 64086
01:19:51.988876 IP 192.168.0.1.22 > 192.168.0.2.1060: . ack 847 win 65535
01:19:51.988986 IP 192.168.0.2.1060 > 192.168.0.1.22: P 847:895(48) ack 1450 win 64086
01:19:51.989422 IP 192.168.0.1.22 > 192.168.0.2.1060: P 1450:1498(48) ack 895 win 65535
01:19:51.989624 IP 192.168.0.2.1060 > 192.168.0.1.22: P 895:959(64) ack 1498 win 65535
01:19:51.999670 IP 192.168.0.1.22 > 192.168.0.2.1060: P 1498:1546(48) ack 959 win 65535
01:19:52.000406 IP 192.168.0.2.1060 > 192.168.0.1.22: P 959:1487(528) ack 1546 win 65487
01:19:52.008273 IP 192.168.0.1.22 > 192.168.0.2.1060: P 1546:2026(480) ack 1487 win 65535
01:19:52.170254 IP 192.168.0.2.1060 > 192.168.0.1.22: . ack 2026 win 65007
01:19:54.959087 IP 192.168.0.2.1060 > 192.168.0.1.22: P 1487:2063(576) ack 2026 win 65007
01:19:54.989017 IP 192.168.0.1.22 > 192.168.0.2.1060: P 2026:2058(32) ack 2063 win 65535
01:19:54.995937 IP 192.168.0.2.1060 > 192.168.0.1.22: P 2063:2127(64) ack 2058 win 64975
01:19:54.997069 IP 192.168.0.1.22 > 192.168.0.2.1060: P 2058:2106(48) ack 2127 win 65535
01:19:54.997430 IP 192.168.0.2.1060 > 192.168.0.1.22: P 2127:2495(368) ack 2106 win 64927
01:19:55.002504 IP 192.168.0.1.22 > 192.168.0.2.1060: P 2106:2154(48) ack 2495 win 65535
01:19:55.010838 IP 192.168.0.1.22 > 192.168.0.2.1060: P 2154:3530(1376) ack 2495 win 65535
01:19:55.011070 IP 192.168.0.2.1060 > 192.168.0.1.22: . ack 3530 win 65535
01:19:55.051510 IP 192.168.0.1.22 > 192.168.0.2.1060: P 3530:4218(688) ack 2495 win 65535
01:19:55.051650 IP 192.168.0.1.22 > 192.168.0.2.1060: P 4218:4266(48) ack 2495 win 65535
01:19:55.051756 IP 192.168.0.2.1060 > 192.168.0.1.22: . ack 4266 win 64799
01:20:03.273088 IP 192.168.0.2.1060 > 192.168.0.1.22: P 2495:2591(96) ack 4266 win 64799
01:20:03.274771 IP 192.168.0.1.22 > 192.168.0.2.1060: P 4266:4330(64) ack 2591 win 65535
01:20:03.392187 IP 192.168.0.2.1060 > 192.168.0.1.22: . ack 4330 win 64735
 
(X オプションでパケットを ASCII 形式で表示としているが、暗号のようなものなのでここでは省略)
案の定、クライアントとサーバー間で通信をしているのは分かるが、訳が分からない。
分かるのは、25 番(smtp) のでの通信ログは一切無いと言うこと。
PostfixIPv6 対応にしてインストールした時や、ssh のポートフォワードをしない時などのログには、ちゃんと 25 番で通信しているログが残っている。
 
ここで、更におかしい症状に気付いた。
ポートフォワードするときに、localhost では無く 127.0.0.1 を指定するとメールが送れるということ。
 
 # ssh -2 -L 5025:127.0.0.1:25 choro_master@choro_master.com
 
なぜ..なぜ..。