AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 772810
Accepted
Bene
Bene
Asked: 2016-04-26 10:00:20 +0800 CST2016-04-26 10:00:20 +0800 CST 2016-04-26 10:00:20 +0800 CST

postfix 只允许 localhost 本地用户

  • 772

我有一个小问题。我提供一些客户端访问我的服务器以执行自己的脚本(当然在他们自己的 chroot 环境中,等等......)。今天发生的问题:有些人在端口 25 上获得对 localhost 的 telnet 访问权限,并且正在向世界发送电子邮件,这几乎是一个开放的中继:(

我正在使用后缀,它还需要身份验证:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination

但是本地脚本显然不需要经过 sasl 认证。如果从 permit_mynetworks 中删除 localhost,则某些反垃圾邮件例程不再起作用...

那么如何配置 postfix 以允许本地主机在本地发送邮件而不是在没有身份验证的情况下从外部发送邮件呢?

有什么建议么?

smtp postfix localhost smtpd
  • 2 2 个回答
  • 5317 Views

2 个回答

  • Voted
  1. Best Answer
    Darigaaz
    2016-04-26T15:16:14+08:002016-04-26T15:16:14+08:00

    因此,您的反垃圾邮件例程使用的是 localhost,而坏人使用的是 localhost,而postfix 无法区分。

    禁止坏人或从受信任的网络中删除 localhost ( permit_mynetworks) 并配置您的反垃圾邮件以使用其他内容。或者使用smtpd_client_restrictions 允许您的反垃圾邮件check_ccert_access。

    回到你的问题。你要求这样的东西:

    /etc/postfix/main.cf:
        smtpd_recipient_restrictions =
            /* replace permit_mynetworks with the next line */ 
            check_client_access hash:/etc/postfix/client_access,
            /* your other stuff */
            permit_sasl_authenticated,
            check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf,
            reject_unauth_destination
    
        smtpd_restriction_classes = local_only
        local_only = 
            check_recipient_access hash:/etc/postfix/local_domains, reject
    
    /etc/postfix/client_access:
        localhost      local_only
        127.0.0.1      local_only
        /* check bash#postconf mynetworks for full list of your networks */
    
    /etc/postfix/local_domains:
        this.domain     OK      matches this.domain and subdomains
        that.domain     OK      matches that.domain and subdomains
    

    但它可能不会起作用,因为您的反垃圾邮件会重新注入带有外部收件人的邮件。但这取决于。

    向我们提供有关您的反垃圾邮件工具的更多信息,我们可能会提供帮助。

    UDP:

    你能解释一下邮件流是如何通过这个设置的吗?

    不能比官方文档更好地解释限制类。

    后缀限制类

    Postfix SMTP 服务器支持访问限制,例如 SMTP 服务器访问 (5) 表右侧的 reject_rbl_client 或 reject_unknown_client_hostname。这允许您为不同的客户端或用户实施不同的垃圾邮件限制。

    必须为每个收件人指定访问限制列表很快就会变得乏味。后缀限制类允许您为 UCE 限制组提供易于记忆的名称(例如“permissive”、“restrictive”等)。

    Postfix 限制类存在的真正原因更为普通:您不能在 Postfix 访问表的右侧指定查找表。这是因为 Postfix 需要提前打开查找表,但读者可能并不关心这些底层细节。

    local_only我们用定义我们的限制类smtpd_restriction_classes = local_only。和

    local_only = 
            check_recipient_access hash:/etc/postfix/local_domains,
            reject
    

    说“每当检查这个类时检查check_recipient_access(搜索指定的访问(5)数据库以获取已解析的 RCPT TO 地址、域、父域或 localpart@,并执行相应的操作。)首先并拒绝邮件。local_domains文件说“如果它的 this.domain 通过检查,如果它的 that.domain 通过检查”。

    但我们不想将此限制类应用于所有电子邮件。我们想在发送主机是 localhost 时应用它并删除permit_mynetworks规则。为此,我们添加check_client_access 哈希:/etc/postfix/client_access(在指定的访问数据库中搜索客户端主机名、父域、客户端 IP 地址或通过剥离最低有效八位字节获得的网络。请参阅access(5)手册页详细信息。)到 smtpd_recipient_restrictions。它说要检查/etc/postfix/client_access文件以及是否localhost应用local_only限制。这正是我们想要做的。

    希望能帮助到你。

    邮件流程为:

    • 邮件到达
    • 循环通过 smtpd_recipient_restrictions
      • check_client_access(如果发送主机是localhost应用local_only限制类)
        • 现在 check_recipient_access(如果收件人 RCPT TO 地址、域、父域或 localpart@ 是“this.domain”或“that.domain”,则接受此邮件)(跳过进一步检查)
        • 否则拒绝
      • 否则继续 permit_sasl_authenticated、check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf 等

    UPD2 我刚刚找到了您可能感兴趣的 smtpd_recipient_restrictions (和其他自定义类)的另一个选项

    permit_auth_destination

    当下列情况之一为真时,允许该请求:

    • Postfix是邮件转发器:解析的RCPT TO域匹配$relay_domains或其子域,地址不包含发件人指定的路由(user@elsewhere@domain),
    • Postfix 是最终目的地:解析的 RCPT TO 域匹配 $mydestination、$inet_interfaces、$proxy_interfaces、$virtual_alias_domains 或 $virtual_mailbox_domains,并且该地址不包含发件人指定的路由 (user@elsewhere@domain)。
    • 2
  2. kartik_subbarao
    2016-04-26T13:03:35+08:002016-04-26T13:03:35+08:00

    一种选择是使用 iptables 来阻止这些用户在端口 25 上连接到 localhost。例如:

    iptables -A OUTPUT -p tcp -d 127.0.0.1 --dport 25 -m owner --uid-owner user1 -j REJECT
    iptables -A OUTPUT -p tcp -d 127.0.0.1 --dport 25 -m owner --uid-owner user2 -j REJECT
    [etc]
    
    • 0

相关问题

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 如何将 SMTP 直接从 IIS 6.0 服务器中继到 Exchange 2003 服务器

  • 使用 telnet 或 netcat 发送带有附件的电子邮件

  • 我应该使用什么策略在 linux 上安装 smtp 服务器?用于多线程服务

  • 适用于 Linux 的 SMTP 服务器,配置简单

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve