gpt4 book ai didi

ubuntu - 一些暴露的 Docker 端口无法从外部访问(dovecot、postfix)

转载 作者:IT老高 更新时间:2023-10-28 12:46:48 30 4
gpt4 key购买 nike

这让我发疯了,但由于某种原因,我无法从外部访问某些端口。我检查了几乎所有可能的设置,但我不知道为什么这不起作用。我不知道在哪里解决这个问题(Ubuntu 防火墙 vs. Docker vs. Dovecot vs. Postfix),我真的希望你们能帮助我。

仅供引用:mycooldomain.com 只是我暂时不想共享的域的占位符。

我会为帮我解决这个问题的人买一瓶啤酒! :)

简介

在我的根服务器上,我正在运行以下 docker 邮件服务器容器 (https://github.com/tomav/docker-mailserver/),它公开了多个端口 (143、25、587、993)。容器运行 dovecot (IMAP) 和 postfix (SMTP)。

tl;dr

我在 docker 容器中运行上述邮件服务器(dovecot,postfix),并且只能连接到一个端口(143 - IMAP)。其他端口 25、587 和 993 无法从外部访问 - 只能从主机直接访问。 Docker 正确地公开了它们,并且它们正确地列在了 iptables 中。容器中的日志(dovecot,postfix)在请求进入时没有显示任何反应(没有被拒绝的请求或类似的东西),所以我想它们永远不会到达容器中的服务。其他 docker 容器端口(例如我的 Web 服务器:80、443)。

详细信息如下:

我可以直接从主机连接到每个端口(让我们测试 IMAP 安全端口):

mastix@localhost:~$ telnet mail.mycooldomain.com 993
Trying xxx.xxx.xxx.xxx…
Connected to mail.mycooldomain.com.
Escape character is '^]'.
220 mail.mycooldomain.com ESMTP Postfix (Ubuntu)

但不是来 self 的本地机器:

mastixmc$ telnet mail.mycooldomain.com 993
Trying xxx.xxx.xxx.xxx…
telnet:connect to address xxx.xxx.xxx.xxx: Operation timed out
telnet: Unable to connect to remote host

docker-compose ps 向我展示了它们正确地暴露绑定(bind):

110/tcp,
0.0.0.0:143-143/tcp,
0.0.0.0:25->25/tcp, 4190/tcp,
0.0.0.0:587->587/tcp,
0.0.0.0:993->993/tcp, 995/tcp

netstat -ntlp 告诉我同样的:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6 0 0 :::587 :::* LISTEN -
tcp6 0 0 :::143 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::25 :::* LISTEN -
tcp6 0 0 :::443 :::* LISTEN -
tcp6 0 0 :::2332 :::* LISTEN -
tcp6 0 0 :::993 :::* LISTEN -

我可以访问我的网络服务器 (80/443) 和不安全的 IMAP (143) - 我以后不会允许这样做。但所有其他端口都无法访问。

我什至设置了 UFW(尽管这不是必需的)以确保 Ubuntu 不会阻止任何东西:

Added user rules (see 'ufw status' for running firewall):
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 25/tcp
ufw allow 587/tcp
ufw allow 143/tcp
ufw allow 993/tcp

查看日志(Dovecot、Postfix)时,我没有看到任何信息,所以看起来请求没有到达服务。

没有触摸以下 Docker/UFW 设置:

/etc/default/ufw

DEFAULT_FORWARD_POLICY="DROP"

并且没有更改 docker 引擎中的 iptables = false

这是 iptables -L 调用,你可以清楚地看到 DOCKER 链正确添加了规则(我的 ufw 规则也在那里):

Chain INPUT (policy ACCEPT)
target prot opt source destination
ufw-before-logging-input all -- anywhere anywhere
ufw-before-input all -- anywhere anywhere
ufw-after-input all -- anywhere anywhere
ufw-after-logging-input all -- anywhere anywhere
ufw-reject-input all -- anywhere anywhere
ufw-track-input all -- anywhere anywhere

Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-ISOLATION all -- anywhere anywhere
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ufw-before-logging-forward all -- anywhere anywhere
ufw-before-forward all -- anywhere anywhere
ufw-after-forward all -- anywhere anywhere
ufw-after-logging-forward all -- anywhere anywhere
ufw-reject-forward all -- anywhere anywhere
ufw-track-forward all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ufw-before-logging-output all -- anywhere anywhere
ufw-before-output all -- anywhere anywhere
ufw-after-output all -- anywhere anywhere
ufw-after-logging-output all -- anywhere anywhere
ufw-reject-output all -- anywhere anywhere
ufw-track-output all -- anywhere anywhere

Chain DOCKER (3 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.19.0.3 tcp dpt:https
ACCEPT tcp -- anywhere 172.19.0.3 tcp dpt:http
ACCEPT tcp -- anywhere 172.19.0.7 tcp dpt:imaps
ACCEPT tcp -- anywhere 172.19.0.7 tcp dpt:submission
ACCEPT tcp -- anywhere 172.19.0.7 tcp dpt:imap2
ACCEPT tcp -- anywhere 172.19.0.7 tcp dpt:smtp

Chain DOCKER-ISOLATION (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
[...]
Chain ufw-user-input (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:imaps
ACCEPT udp -- anywhere anywhere udp dpt:imaps
ACCEPT tcp -- anywhere anywhere tcp dpt:2332
ACCEPT udp -- anywhere anywhere udp dpt:2332
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT udp -- anywhere anywhere udp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT udp -- anywhere anywhere udp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:submission
ACCEPT udp -- anywhere anywhere udp dpt:submission
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:imap2
ACCEPT udp -- anywhere anywhere udp dpt:imap2

所以在我看来一切都是正确的。

更新 #1:

来自 docker 主机的 nmap(针对 mycooldomain.com):

PORT    STATE    SERVICE
25/tcp filtered smtp
80/tcp filtered http
143/tcp filtered imap
443/tcp filtered https
587/tcp filtered submission
993/tcp filtered imaps

来 self 本地机器的nmap(针对mycooldomain.com):

PORT    STATE SERVICE
80/tcp open http
143/tcp open imap
443/tcp open https

如您所见,端口未打开,因此我无法从远程连接到端口 25、587 和 993。

更新 #2:

所以我已经停止了所有容器并打开了一个简单的 python HTTP 服务器:

sudo python -m SimpleHTTPServer 993

也无法访问此端口。所以我用 8080 端口打开了同一个服务器 => 成功。

似乎 Ubuntu 或我的主机阻止了端口 993!我目前正在与提供根服务器的人联系。

我已经在项目本身中提交了一个问题 (https://github.com/tomav/docker-mailserver/issues/602),但他们也帮不了我。

非常感谢您,

问候,

萨沙

最佳答案

我修好了……或者至少我的主人修好了。有另一个硬件防火墙阻止了某些端口。他们必须启用特定的“邮件服务器”防火墙规则集,从而允许运行邮件服务器。

感谢您的帮助和提示!!!

问候,

萨沙

关于ubuntu - 一些暴露的 Docker 端口无法从外部访问(dovecot、postfix),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43993925/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com