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 / 问题 / 1010837
Accepted
James Swift
James Swift
Asked: 2020-04-04 15:32:56 +0800 CST2020-04-04 15:32:56 +0800 CST 2020-04-04 15:32:56 +0800 CST

Exim - 限制用户可以发送的地址

  • 772

默认情况下,exim 允许任何用户使用他们希望的任何“发件人:”地址发送电子邮件,这可能导致用户相互欺骗。如何限制每个系统用户可以发送的地址?例如,用户james应该能够从 james@localhost 发送,但也可以从 [email protected] 和 [email protected] 发送。

我希望所有系统用户都能够从他们的 SYSTEM_USER@HOSTNAME 发送电子邮件,但如果他们尝试从另一个地址发送,我想在文本文件中查找该地址以查看是否允许。

我目前有一个列表,但它是系统用户将从哪些地址收到的。但它仍然可以工作。给定示例[email protected],数据存储在/etc/exim4/virtual/my-domain.com内容如下所示的文件中:

me : james@localhost

如果我们可以重用现有的文件,那就太好了。但任何建议都会有所帮助。先感谢您。

exim
  • 1 1 个回答
  • 1455 Views

1 个回答

  • Voted
  1. Best Answer
    Piotr P. Karwasz
    2020-04-06T13:33:52+08:002020-04-06T13:33:52+08:00

    Exim4已经对信封发送者From:和Sender:本地提交的消息(参见受信任的用户)进行了一些标准检查。由于您想扩展此验证,您应该:

    • 对于通过sendmail(ie exim4 -bm)提交的消息,在主配置部分添加:

      # allow untrusted users to set an envelope sender
      untrusted_set_sender = *
      # don't delete the Sender: header
      local_sender_retain = true
      # don't add Sender: header
      local_from_check = false
      
    • 对于通过您提交的消息,SMTP您需要添加control = submission/sender_retain修饰符。例如 Debian 在MAILacl 中有一个规则:

      accept
        authenticated = *
        control = submission/sender_retain
        control = dkim_disable_verify
      

    要配置您的支票,您需要ACL在邮件处理的不同阶段添加一些规则。由于这些规则需要应用于不同的消息提交方式,您可以创建一个新的命名ACL(我假设您的所有/etc/exim4/virtual/<domain>文件都username@localhost作为值返回):

    # Requires system user id in $acl_arg1
    acl_check_sender:
    
      # Users with default domain
      accept
        condition = ${if eq{$sender_address}{$acl_arg1@$qualify_domain}}
        condition = ${if eq{${address:$h_from:}}{$acl_arg1@$qualify_domain}}
        condition = ${if match_address{${address:$h_sender:}}{:$acl_arg1@$qualify_domain}}
    
      deny
        ! condition = ${if and{\
            {exists{/etc/exim4/virtual/${domain:${address:$h_from:}}}}\
            {eq {${acl_arg1}@localhost}\
              {${lookup {${local_part:${address:$h_from:}}}\
                lsearch{/etc/exim4/virtual/${domain:${address:$h_from:}}}\
              }}\
            }\
          }}
        message = Spoofed From: header.
    
      # Most messages don't have a Sender: header, but if it is not empty, check it.
      deny
        ! condition = ${if or{\
            {eq {$h_sender:}{}}\
            {and{\
              {exists{/etc/exim4/virtual/${domain:${address:$h_sender:}}}}\
              {eq {${acl_arg1}@localhost}\
                  {${lookup {${local_part:${address:$h_sender:}}}\
                    lsearch{/etc/exim4/virtual/${domain:${address:$h_sender:}}}\
                  }}\ 
              }\
            }}\
          }}
        message = Spoofed Sender: header.
    
      deny
        ! condition = ${if and{\
            {exists{/etc/exim4/virtual/$sender_address_domain}}\
            {eq {${acl_arg1}@localhost}\
              {${lookup {$sender_address_local_part}\
                lsearch{/etc/exim4/virtual/$sender_address_domain}\
              }}\
            }\
          }}
        message = Spoofed envelope sender.
    
      accept
    

    有关字符串扩展的语法(充满大括号),请查看Exim 文档的第 11 章。您可以使用它们来测试它们(信封发件人像mbox格式exim4 -bem <message> <expansion_string>一样在消息中传递)。

    您可以将其应用于不同的情况:

    • 对于通过 提交的消息,将以下规则exim4 -bm添加到ACL:acl_not_smtp

      deny
        ! acl = acl_check_sender ${sender_ident}
      
    • 对于经过身份验证的用户通过SMTP添加到acl_smtp_dataACL 提交的消息,例如:

      deny
        authenticated = *
        ! acl = acl_check_sender ${authenticated_id}
      
    • 一些程序使用未经身份验证的SMTP连接来提交消息localhost(或exim -bs)。对于他们,您可以添加到acl_smtp_dataACL:

      deny
        hosts = : localhost
        ! acl = acl_check_sender ${sender_ident}
      

      并在服务器上安装一些identd。

    • 0

相关问题

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

  • 将所有(未被拒绝的)垃圾邮件重定向到 sa-exim 中的特殊邮箱

  • 设置 Exim 转发邮件

  • 我可以在 Exchange 2007 的服务器端强制执行邮件规则吗?

  • 用于从多个 IP 地址发送电子邮件的 Linux 电子邮件服务器

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