質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Podman

Podmanとは、RedHat社が開発したコンテナエンジンです。OSSで公開されており、Red Hat Enterprise Linux8(RHEL8)からはDockerに代わって標準のコンテナとなっています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

Q&A

解決済

localhostのポート25と通信できない

hkcomori
hkcomori

総合スコア30

Podman

Podmanとは、RedHat社が開発したコンテナエンジンです。OSSで公開されており、Red Hat Enterprise Linux8(RHEL8)からはDockerに代わって標準のコンテナとなっています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

1回答

0グッド

1クリップ

421閲覧

投稿2022/11/16 01:59

編集2022/11/17 06:33

Ubuntu 18.04でlocalhostのポート25に通信ができないので、解消方法またはそれに向けた調査のアドバイスをいただけないでしょうか?

実現したいこと

localhostから他のホストに向けてメールを送信するため、Postfixサーバを建てたい。

他のホストで動作確認したPostfixのコンテナを、問題のサーバで実行したところ、localhost-Postfix間の通信が通りませんでした。
Postfixのコンテナを停止し、ポート25が使えるかのみを単体で確認したところ、これがそもそも使えていないことが判明しました。

環境

  • OS: Ubuntu 18.04
  • コンテナエンジン: Podman 0.4.0

試したこと

Postfixコンテナを停止した状態で、以下の確認を実施しました。

ファイアウォールがポート25に対するlocalhostからのパケットをDROPしていないことを確認

INPUTのnum1でループバックは全許可しているので、DROPされることはないはず。

sh

1$ sudo iptables -L -v --line-number 2Chain INPUT (policy DROP 0 packets, 0 bytes) 3num pkts bytes target prot opt in out source destination 41 0 0 ACCEPT all -- lo any anywhere anywhere 52 0 0 ACCEPT all -- any any (MyGlobalIPAddress1) anywhere 63 0 0 ACCEPT all -- any any (MyGlobalIPAddress2) anywhere 74 0 0 ACCEPT all -- any any (MyGlobalIPAddress3) anywhere 85 0 0 ACCEPT all -- any any (MyGlobalIPAddress4) anywhere 96 0 0 ACCEPT all -- any any (MyGlobalIPAddress5) anywhere 107 0 0 ACCEPT all -- any any (MyGlobalIPAddress6) anywhere 118 0 0 ACCEPT all -- any any (MyGlobalIPAddress7) anywhere 129 0 0 DROP_FILTER all -- eth0 any 127.0.0.0/8 anywhere 1310 0 0 DROP_FILTER all -- eth0 any 10.0.0.0/8 anywhere 1411 0 0 DROP_FILTER all -- eth0 any 172.16.0.0/12 anywhere 1512 0 0 DROP_FILTER all -- eth0 any 192.168.0.0/16 anywhere 1613 1256 135K ACCEPT tcp -- any any anywhere anywhere state RELATED,ESTABLISHED 1714 23 2634 ACCEPT udp -- any any anywhere anywhere state RELATED,ESTABLISHED 1815 0 0 DROP_FILTER all -f any any anywhere anywhere 1916 15 540 ACCEPT icmp -- any any anywhere anywhere icmp echo-request limit: up to 1/sec burst 10 mode srcip htable-expire 60000 2017 47 2752 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh state NEW limit: up to 1/sec burst 3 mode srcip htable-expire 60000 2118 2 100 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http state NEW limit: up to 5/sec burst 100 mode srcip htable-expire 60000 2219 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https state NEW limit: up to 5/sec burst 100 mode srcip htable-expire 60000 2320 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:50000 state NEW limit: up to 1/sec burst 3 mode srcip htable-expire 60000 2421 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:50001 state NEW limit: up to 1/sec burst 3 mode srcip htable-expire 60000 2522 42 2041 DROP_FILTER all -- any any anywhere anywhere 26 27Chain FORWARD (policy DROP 0 packets, 0 bytes) 28num pkts bytes target prot opt in out source destination 29 30Chain OUTPUT (policy ACCEPT 1139 packets, 170K bytes) 31num pkts bytes target prot opt in out source destination 32 33Chain DROP_FILTER (6 references) 34num pkts bytes target prot opt in out source destination 351 42 2041 LOG all -- any any anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix "DROP:" 362 42 2041 DROP all -- any any anywhere anywhere

iptablesに現れないnft (nftables) の設定が無いかを確認

nft (nftables) はインストールされていないことを確認。

sh

1$ nft list ruleset 2Command 'nft' not found, but can be installed with: 3sudo apt install nftables

ポート25は接続がタイムアウトする

ポート25を使用しているプロセスが存在しないことを確認。

sh

1$ sudo lsof -i:25 -P 2(何も表示されない)

ncコマンドで待ち受ける。

sh

1$ sudo nc -v -l -p 25 2Listening on [0.0.0.0] (family 0, port 25)

ncコマンドが待ち受け状態であることを確認。

sh

1$ sudo lsof -i:25 -P 2COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 3nc 12979 root 3u IPv4 149326 0t0 TCP *:25 (LISTEN)

待ち受けたポートに接続するが、接続できず。

sh

1$ telnet localhost 25 2Trying 127.0.0.1... 3telnet: Unable to connect to remote host: Connection timed out

待ち受けた側の端末には、何も表示されないまま、待ち受け状態を継続。

sh

1$ sudo nc -v -l -p 25 2Listening on [0.0.0.0] (family 0, port 25)

ポート26は接続・通信ができる

ポート25以外は問題ないことを確認するため、ポート26でも同様の確認を行った。
ポート26を使用しているプロセスが存在しないことを確認。

sh

1$ sudo lsof -i:26 -P 2(何も表示されない)

ncコマンドで待ち受ける。

sh

1$ sudo nc -v -l -p 26 2Listening on [0.0.0.0] (family 0, port 26)

ncコマンドが待ち受け状態であることを確認。

sh

1$ sudo lsof -i:26 -P 2COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 3nc 13020 root 3u IPv4 147320 0t0 TCP *:26 (LISTEN)

待ち受けたポートに接続接続できたので、適当な入力(hello world)を送った後に切断。

sh

1$ telnet localhost 26 2Trying 127.0.0.1... 3Connected to localhost. 4Escape character is '^]'. 5hello world 6^] 7 8telnet> Connection closed.

待ち受けた側の端末には、telnetで送った文字列が表示された後、待ち受け状態が終了した。

sh

1$ sudo nc -v -l -p 26 2Listening on [0.0.0.0] (family 0, port 26) 3Connection from localhost 44270 received! 4hello world

PREROUTING設定の確認

telnet localhost 25の前後でiptables -L -vのpkts増分を確認したところ、ポート25がINPUT ChainのNum1で処理されていないようだったので、PREROUTINGの設定を確認した。

sh

1$ sudo iptables -t nat -nvL 2Chain PREROUTING (policy ACCEPT 283K packets, 27M bytes) 3 pkts bytes target prot opt in out source destination 424439 1222K CNI-HOSTPORT-DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL 524439 1222K DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL 6 7Chain INPUT (policy ACCEPT 10280 packets, 505K bytes) 8 pkts bytes target prot opt in out source destination 9 10Chain OUTPUT (policy ACCEPT 746 packets, 52216 bytes) 11 pkts bytes target prot opt in out source destination 12 64 3840 CNI-HOSTPORT-DNAT all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL 13 0 0 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL 14 15Chain POSTROUTING (policy ACCEPT 746 packets, 52216 bytes) 16 pkts bytes target prot opt in out source destination 17 0 0 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0 18 746 52216 CNI-HOSTPORT-MASQ all -- * * 0.0.0.0/0 0.0.0.0/0 /* CNI portfwd requiring masquerade */ 19 0 0 CNI-56badc2626661f6c6c96897a all -- * * 10.88.0.32 0.0.0.0/0 /* name: "podman" id: "922cb983d42b740ec0b00c16003735844855af5d5c0beabf589008f1944dccc1" */ 20 21Chain CNI-56badc2626661f6c6c96897a (1 references) 22 pkts bytes target prot opt in out source destination 23 0 0 ACCEPT all -- * * 0.0.0.0/0 10.88.0.0/16 /* name: "podman" id: "922cb983d42b740ec0b00c16003735844855af5d5c0beabf589008f1944dccc1" */ 24 0 0 MASQUERADE all -- * * 0.0.0.0/0 !224.0.0.0/4 /* name: "podman" id: "922cb983d42b740ec0b00c16003735844855af5d5c0beabf589008f1944dccc1" */ 25 26Chain CNI-DN-56badc2626661f6c6c968 (1 references) 27 pkts bytes target prot opt in out source destination 28 0 0 CNI-HOSTPORT-SETMARK tcp -- * * 10.88.0.0/16 127.0.0.1 tcp dpt:25 29 48 2880 CNI-HOSTPORT-SETMARK tcp -- * * 127.0.0.1 127.0.0.1 tcp dpt:25 30 48 2880 DNAT tcp -- * * 0.0.0.0/0 127.0.0.1 tcp dpt:25 to:10.88.0.32:25 31 32Chain CNI-HOSTPORT-DNAT (2 references) 33 pkts bytes target prot opt in out source destination 34 76 4120 CNI-DN-56badc2626661f6c6c968 tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* dnat name: "podman" id: "922cb983d42b740ec0b00c16003735844855af5d5c0beabf589008f1944dccc1" */ multiport dports 25 35 36Chain CNI-HOSTPORT-MASQ (1 references) 37 pkts bytes target prot opt in out source destination 38 0 0 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x2000/0x2000 39 40Chain CNI-HOSTPORT-SETMARK (2 references) 41 pkts bytes target prot opt in out source destination 42 48 2880 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 /* CNI portfwd masquerade mark */ MARK or 0x2000 43 44Chain DOCKER (2 references) 45 pkts bytes target prot opt in out source destination 46 0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

dodox86

2022/11/16 02:30

> telnet 0.0.0.0 25 localhost は通常、127.0.0.1 です。待ち受け(サーバー)側で 0.0.0.0 を指定するのはINADDR_ANY指定で「全ての接続先からの接続を許す」為です。
hkcomori

2022/11/16 02:42

最後の確認結果を誤って貼っていました。修正します。 なお、localhost、127.0.0.1、0.0.0.0のいずれでも結果は変わりませんでした。
TaichiYanagiya

2022/11/16 15:34

タイムアウトなので、パケットフィルターで DROP されているように見えます。 nft (nftables) がインストールされていて、iptables には現れないルールが設定されていませんか?
hkcomori

2022/11/17 02:07 編集

ありがとうございます。早速確認しましたが、nft (nftables) はインストールされていないようです。
TaichiYanagiya

2022/11/17 02:38

nft はハズレでしたか。 "telnet localhost 25" で接続する前と後で "iptables -L -v" の pkts が増えるルールはどれでしょうか?
hkcomori

2022/11/17 05:44

"telnet localhost 25"のパケットと関係なさそうな気はしますが、INPUTのnum13,14,17が増えました。 一方、"telnet localhost 26"の場合は、INPUTのnum1が増えました(期待通り)。
TaichiYanagiya

2022/11/17 06:16

localhost 25 番ポートへの通信が num 1 のルールで扱われていないのですね。 "iptables -t nat -nvL" で 25 番ポートへの通信が PREROUTING で処理されていないでしょうか?
hkcomori

2022/11/17 06:30

確かに、ポート25に関する記述が見つかりました。 表示内容の意味や設定解除方法はよくわかってませんが、取り急ぎコマンド結果を追記いたします。
hkcomori

2022/11/17 06:59

ありがとうございます! 以下の設定で、ポート25宛は10.88.0.32に飛ばされているようだったので、これを削除したところポート25にアクセスできるようになりました。 他にも"iptables -t nat"には残骸と思われる設定があるようなので、この機会に全部削除しておいた方が良いかもしれませんね。 48 2880 DNAT tcp -- * * 0.0.0.0/0 127.0.0.1 tcp dpt:25 to:10.88.0.32:25
hkcomori

2022/11/17 07:42

以下の操作でnatの設定を初期化し、動作が問題ないことを確認しました。 sudo iptables -t nat -F sudo iptables -t nat -X sudo iptables -t nat -Z TaichiYanagiya様 的確なアドバイスありがとうございました。 解決方法に投稿いただければベストアンサーとしますが、いかがでしょうか?

回答1

0

ベストアンサー

(コメントで解決した結果を回答とします。)

nat テーブルの PREROUTING チェインに docker コンテナへのポート転送ルールが残っているため、localhost 25 番ポートへの通信が転送され、タイムアウトとなっているようです。
転送ルールを削除するか、その他のルールも不要であれば、PREROUTING チェインを初期化するといいと思います。

投稿2022/11/17 08:19

TaichiYanagiya

総合スコア11948

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Podman

Podmanとは、RedHat社が開発したコンテナエンジンです。OSSで公開されており、Red Hat Enterprise Linux8(RHEL8)からはDockerに代わって標準のコンテナとなっています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。