MAIL FROM봉투 주소 위조 방지

MAIL FROM봉투 주소 위조 방지

내 postfix 이메일 서버가 마침내 제대로 작동합니다.

이제 사용자가 헤더의 "보낸 사람" 필드에 있는 클라이언트 프로그램에서 자신의 이메일 주소를 위조하는 것을 방지해야 합니다. 사용자는 해당 주소를 사용하여 다른 사용자로서 이메일을 보낼 수 있고 경험이 없는 사용자는 이것이 진짜라고 생각할 수 있습니다.

사용자가 경험이 있는 경우 이메일 헤더를 확인하고 무슨 일이 일어나고 있는지 알 수 있지만 이러한 동작을 방지할 수 있는 방법이 있습니까?

답변1

보기 smtpd_sender_restrictionssmtpd_sender_login_maps설정. 전자는 잘못된 from주소를 방지하는 반면, 후자는 보낸 사람 주소를 로그인 이름과 일치시키도록 합니다.

# Prevent malformed senders
smtpd_sender_restrictions =
    reject_non_fqdn_sender       # Ensure correct mail addresses
    reject_unknown_sender_domain # Ensure sender address is from an existing domain
    reject_authenticated_sender_login_mismatch # Check if the user is 
                                 # allowed to use this sender address

# Maps used to stop sender address forgeries.
smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

내용은 login_maps.pcre다음과 같습니다.

# Use this regex if your users are local users, i.e. if the login name
# is just the username, not a full mail address.
# Note that literal dots have to be backslash escaped (`\.`) to avoid
# interpretation of these dots as regex wildcard.
/^([^@+]*)(\+[^@]*)?@example\.com$/ ${1}

# If one doesn't care about subaddresses, this could be simplified to
/^(.*)@example\.com/ ${1}

# This is appropriate if you have virtual users who login with their
# full mail address as their username.  Local addresses won't work, though
/^(.*)$/    ${1}

위 구성에서는 postfix가 PCRE 지원으로 컴파일된다고 가정합니다. Ubuntu/Debian에서는 postfix-pcre패키지를 설치해야 합니다.

이는 사용자가 인증되어 메일을 보낼 수 있는 경우에만 작동합니다. 위 방법은 인증되지 않은 사용자의 메일을 허용하는 경우 도움이 되지 않으며 실패하게 됩니다. 이 경우 Rui F Ribeiro의 답변을 꼭 읽어보세요.

답변2

SMTP 위조를 방지할 수 있는 방법이 없고 기본 프로토콜이 보안을 염두에 두고 설계되지 않았지만 postfix에서 내부 사용자의 이메일 위조로 인한 영향을 최소화할 수 있습니다.

포트 587을 통해 전송된 이메일이 인증되도록 강제로 인증하도록 postfix와 클라이언트를 구성할 수 있습니다.

그러나 이로 인해 이메일 전송이 중단되지는 않지만 스팸 악성 코드가 생존하기가 더 어려워집니다(불가능하지는 않음).

Gmail의 경우 코드 사용자 정의가 많으며 자체 이메일 서버도 있습니다. ISP를 관리할 때 우리 도메인에서 발송되지 않은 이메일을 전달하는 것을 허용하지 않고 FROM 필드에 존재하는 인증된 사용자만 허용하는 QMail 확장 프로그램을 수집하고 작성했습니다(예: FROM 작업을 다시 확인). 인증)

/etc/postfix/main.cfsmtpd_recipient_restrictionspostfix에서 인증된 사용자에게만 이메일을 릴레이하려면 지시어 시작 부분에 있는 파일에 다음 두 가지 옵션이 있는지 확인하세요 .

smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

자세한 내용은 공식 문서를 확인하세요.Postfix SMTP 릴레이 및 액세스 제어

답변3

MAIL FROMSMTP를 통해 이메일을 보낼 때 보낸 사람 이메일 주소는 SMTP 요청과 From이메일 헤더 필드의 두 위치에 나타납니다 . 일부 MUA는 메시지 헤더 필드의 값만 표시합니다 From.

MAIL FROM봉투 주소 위조 방지

SMTP 인증 사용자가 보낸 사람 주소를 위조하는 것을 방지하려면 reject_authenticated_sender_login_mismatch의 옵션을 사용하세요. /etc/postfix/main.cf그런 다음 smtpd_sender_login_maps다음과 같은 조정도 이루어져야 합니다.

smtpd_sender_restrictions =
  ...
  reject_authenticated_sender_login_mismatch,
  ...
smtpd_sender_login_maps = pcre:/etc/postfix/maps/smtpd_sender_login_map.pcre

내용은 /etc/postfix/maps/smtpd_sender_login_map.pcre다음을 기반으로 해야 합니다.탈레브의 답변:

  • 사용자가 로컬인 경우 이 정규식을 사용하세요. 즉, 로그인은 전체 이메일 주소가 아닌 사용자 이름일 뿐입니다. \.이러한 점이 정규식 와일드카드로 해석되는 것을 방지하려면 리터럴 점을 백슬래시( )로 이스케이프해야 합니다 .

    /^([^@+]*)(\+[^@]*)?@example\.com$/ ${1}

  • 하위 주소에 관심이 없다면 다음과 같이 단순화할 수 있습니다.

    /^(.*)@example\.com/ ${1}

  • 이는 전체 이메일 주소를 사용자 이름으로 사용하여 로그인하는 가상 사용자가 있는 경우에 적합합니다. 하지만 로컬 주소가 작동하지 않습니다.

    /^(.*)$/ ${1}

위 구성에서는 postfix가 PCRE 지원으로 컴파일된다고 가정합니다. Ubuntu/Debian에서는 postfix-pcre패키지를 설치해야 합니다.

sendmail명령을 사용하면 로컬 사용자가 전송할 때 주소 목록에서 임의의 주소를 선택할 수 있는데, 이는 해킹된 사용자 계정에 문제가 됩니다. 아마도 이 문제를 해결하는 가장 쉬운 방법은 Postfix' 에서 sendmail 명령의 사용을 제한하는 것입니다 main.cf. 예를 들면 다음과 같습니다.

authorized_submit_users = root

From위조된 이메일 헤더 주소 방지

Postfix 자체는 간단한 솔루션을 제공하지 않는 것 같습니다. 그러나 다음 방법으로 수행할 수 있습니다.이리.

~을 위한스팸/etc/rspamd.local.lua, 다음 코드를 사용하여 구성 파일을 생성/확장할 수 있습니다.

local logger = require 'rspamd_logger'

rspamd_config:register_symbol({
  name = 'FROM_HEADER_MISMATCH',
  callback = function(task)
    local user = task:get_user()
    if not user then
      return 0
    end
    for index, smtp_sender in pairs(task:get_from(1)) do
      if smtp_sender.addr ~= user then
        logger.infox('invalid SMTP sender: %1', smtp_sender.addr)
        return 1
      end
    end
    for index, mime_sender in pairs(task:get_from(2)) do
      if mime_sender.addr ~= user then
        logger.infox('invalid MIME sender: %1', mime_sender.addr)
        return 1
      end
    end
    return 0
  end,
  score = 16,
  description = 'sender address in at least one mail header ' ..
    'differs from the sender address in the envelope'
})

이렇게 하면 보낸 사람 주소가 여러 개인 메시지가 스팸으로 표시되고 Postfix가 메시지를 거부하게 됩니다. 봉투 헤더를 위조할 수 없는 경우에만 봉투 헤더 위조를 방지합니다 From(답변의 첫 번째 부분 참조).

아니면 밀트프리드먼From메시지 헤더의 주소를 SMTP 주소로 바꿀 수도 있습니다 MAIL FROM.

관련 정보