libvirt vm 无法连接到 smtp

libvirt vm 无法连接到 smtp

我的一台虚拟机出现了问题。在我的设置中,kvm/libvirt 虚拟机管理程序充当防火墙并执行所有 NAT。所有虚拟机都有一个虚拟网络 (virbr2)。

操作系统:Ubuntu Server 12.04LTS

有一个出站接口:eth0

我的问题是,我的一台虚拟机无法连接到外部 smtp 服务器。我试过 gmail、yahoo 和我大学的 smtp 服务器。奇怪的是,虽然它无法连接到任何 smtp 服务器,但它可以通过任何端口连接到其他主机(局域网外)。

虚拟机中运行着 apache、zarafa 和 postfix,可以正常接收邮件。只是发送时会超时。

May 24 15:50:48 mail postfix/smtp[7848]: connect to mailserver.example.com[1.2.3.4]:25: Connection timed out
May 24 15:50:48 mail postfix/smtp[7848]: 2196B320A81: to=<[email protected]>, relay=none, delay=51881, delays=51790/0.06/91/0, dsn=4.4.1, status=deferred (connect to mailserver.example.com[1.2.3.4]:25: Connection timed out)

我感觉我在这里忽略了一些明显的东西。

这些是我的 iptables 规则。相关 IP 是 10.2.3.253

iptables -S; iptables -t nat -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i virbr2 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr2 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr2 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr2 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 16509 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 16509 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5902 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5903 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5900 -j ACCEPT
-A FORWARD -i virbr2 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.2.3.0/24 -o virbr2 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.2.3.0/24 -i eth0 -o virbr2 -m state --state RELATED,ESTABLISHED -j    ACCEPT
-A FORWARD -d 10.2.3.0/24 -o virbr2 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.2.3.0/24 -i virbr2 -o eth0 -m state --state NEW,RELATED,ESTABLISHED   -j ACCEPT
-A FORWARD -i virbr2 -o virbr2 -j ACCEPT
-A FORWARD -o virbr2 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr2 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -p tcp -m tcp --dport 25 -j DNAT --to-destination 10.2.3.253:25
-A PREROUTING -p tcp -m tcp --dport 143 -j DNAT --to-destination 10.2.3.253:143
-A PREROUTING -p tcp -m tcp --dport 465 -j DNAT --to-destination 10.2.3.253:465
-A PREROUTING -p tcp -m tcp --dport 587 -j DNAT --to-destination 10.2.3.253:587
-A PREROUTING -p tcp -m tcp --dport 993 -j DNAT --to-destination 10.2.3.253:993
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE

答案1

我发现了问题所在!

这些规则

-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE

拦截这些:

-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p tcp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -p udp -j MASQUERADE
-A POSTROUTING -s 10.2.3.0/24 ! -d 10.2.3.0/24 -o eth0 -j MASQUERADE

所以我不得不去掉最后三条规则。

我不知道怎么、什么时候、为什么把它们放在那里,但这解决了问题!

相关内容