仅当 VPN 启动时才使用智能主机(Debian、Postfix)

仅当 VPN 启动时才使用智能主机(Debian、Postfix)

我的工作笔记本电脑采用“移动办公”设置。这意味着它经常用于我找到的任何 WLAN 和其他网络,但我有一个可用于办公室的 VPN 连接。

公司的邮件服务器通过 VPN 接受传入的邮件并将其转发给我,但我不能仅仅将其用作笔记本电脑上的智能主机:当我在离线模式下发送电子邮件时,只要有任何网络连接建立,Postfix 就会运行队列,并且(除非公共网络阻止端口 25)智能主机会使用 5xx 代码拒绝它,因为邮件来自外部非 VPN IP。

因此,我正在寻找一种解决方案,除非 VPN 已启动,否则将 Postfix 置于仅队列模式。(tun13例如,可以通过测试是否已启动来轻松检测到这一点。当然,具体使用方法取决于 Postfix 可以执行的任何检查。)

奖励:除非 VPN 已启动或者我已连接到公司 LAN (eth0) 或 WLAN。但这并不紧急。

我使用 ifupdown 周围的 shell 包装器脚本进行连接,因此添加额外的命令并不困难。但是,当未连接到 VPN 时简单地停止 Postfix 并不是解决方案:软件包升级和重新启动往往会启动它,并且[::1]:25当 VPN 未启动时,发送邮件必须有效(仅队列)。

这是 Debian 的重点,并且使用 OpenVPN(从命令行手动启动/停止),以防万一。

答案1

你的情况类似于拨号用户

复制/etc/postfix/main.cf/etc/postfix/main.cf.nodefer

复制/etc/postfix/main.cf/etc/postfix/main.cf.defer并添加defer_transports = smtp

在您的 VPN 连接脚本中链接/复制/etc/postfix/main.cf.nodefer/etc/postfix/main.cf并重新启动 postfix。

在您的VPN断开连接脚本中链接/复制/etc/postfix/main.cf.defer/etc/postfix/main.cf并重新启动postfix。

答案2

Postfix 支持使用各种数据库的动态配置http://www.postfix.org/DATABASE_README.html

这可能对您的设置来说太多了。由于您总是想使用中继主机,因此您可以使用 iptables 拒绝非 VPN 接口上端口 25 上的出站流量,如下所示:

iptables -I OUTPUT ! -o tun13 -p tcp --dport 25 -j REJECT

这将拒绝从非 接口到端口 25 的连接tun13。因此,postfix 将无法中继并失败。您可能必须配置队列重试参数,以便 postfix 不会从队列中删除消息,因为您希望在连接到 VPN 时发送该消息。

请注意,这也会拒绝与本地主机的 25 端口连接,除非您有以下内容:

iptables -I OUTPUT -o lo -j ACCEPT

相关内容