打开或关闭 Postfix

打开或关闭 Postfix

这个问题可能已经有答案了,但我就是不知道如何正确地搜索它。

情况:

我们有两个节点的故障转移情况,使用keepalived,在它们之间传递一个浮动 IP。节点的主要目的是运行haproxy。每个节点还运行一个本地postfix,仅用于将来自keepalived或 来自 的电子邮件传送haproxy到实际操作员帐户,并通过 SendGrid 中继到外部邮件域。不接受来自任何其他机器的邮件。

这一切都运行良好。太好了;我的邮箱被淹没了。我想抑制来自非活动节点的邮件,当发生故障转移时,让 postfix 突然开始投递邮件。

这就是想法。

  • 正常模式:postfix 在端口 25 上接受邮件并通过 Sendgrid 中继。
  • 静默模式:postfix 仍在端口 25 上接受邮件,但会将其丢弃,不会将其转发到任何地方,不会向客户端返回失败,也不会发送退回邮件。(是的,这通常对 MTA 来说是糟糕的行为。MTA 不应该谎报接受邮件。但这是一种受限制的情况。)
  • 如何判断我应该处于正常模式还是静音模式:一个简单的脚本,可能是这样的ip addr | grep -q $FLOAT_IP

所以...我猜基本问题是“静默模式”是如何发生的。这是一个完全独立的 postfix 配置吗?我必须用正确的配置重新启动 postfix 吗?

设立一个队列后内容过滤器

还有其他想法吗?

答案1

好的,在 @sebix 提示“使用传输discard”之后,我有一些似乎有效的东西:

设置交通地图:

# echo >>/etc/postfix/main.cf 'transport_maps = hash:/etc/postfix/transport'

将默认传输图设置为空;还设置一个用于丢弃传输的文件

# cat </dev/null >/etc/postfix/transport
# cat </dev/null >/etc/postfix/transport.normal
# echo >/etc/postfix/transport.discard '* discard:'

keepalived 可以调用一个 bash 脚本/usr/local/bin/keepalived_togglemail.sh来打开或关闭 postfix:

#!/bin/bash

TYPE=$1
NAME=$2
STATE=$3

case $STATE in
        "MASTER") cp /etc/postfix/transport.normal /etc/postfix/transport
                  postmap /etc/postfix/transport
                  /etc/init.d/postfix reload
                  exit 0
                  ;;
        "BACKUP") cp /etc/postfix/transport.discard /etc/postfix/transport
                  postmap /etc/postfix/transport
                  /etc/init.d/postfix reload
                  exit 0
                  ;;
        "FAULT")  echo FAULT
                  exit 0
                  ;;
        *)        echo "unknown state"
                  exit 1
                  ;;
esac

并加入一行/etc/keepalived/keepalived.conf来实现它。(摘录):

....
vrrp_instance VRRP1 {
     state BACKUP
     interface ens32
     ...
     notify /usr/local/bin/keepalived_togglemail.sh
}

相关内容