Postfix 이메일 서버가 실행 중이고 모든 것이 정상입니다...누군가가 다른 사용자를 가장하기로 결정하기 전까지는 말이죠. 현재 상황은 다음과 같습니다.
[email protected]
from
위조된 헤더가 포함된 이메일을 보낼 수 있습니다[email protected]
.
가짜 이메일 헤더에서 다음을 볼 수 있습니다.
From: User2 <[email protected]>
(Authenticated sender: [email protected])
분명히 사용자는 합법적인 이메일 주소/비밀번호를 사용하여 서버를 인증한 다음 From
가장하려는 사용자로 헤더를 설정하고 있습니다.
나는 이것을 직접 테스트했으며 작동합니다. 그러나 가상 도메인 테이블에 없는 다른 도메인으로 도메인을 변경하면 이메일 클라이언트는 서버가 이메일을 거부했다고 말합니다.
가상 도메인 테이블에 있는 다른 사람이 아닌 그의 이메일과 일치하는 [email protected]
헤더가 있는 이메일만 보낼 수 있도록 하는 방법이 있습니까 ? from
-- 도메인이 목록에 없을 때 발생하는 것과 같은 오류가 발생합니다.
현재 smtpd
제한사항은 다음과 같습니다.
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_unknown_sender_domain, reject_unknown_recipient_domain
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_address, reject_unknown_sender_domain, reject_non_fqdn_sender
노트: 서버에 추가 주소(예: user1+something@ mydomain.dev
이메일 보내기 [email protected]
)와 가상 별칭 맵이 있습니다. 위 문제에 대한 해결책을 게시한 사람들의 경우 사용자가 플러스 주소나 별칭을 기반으로 자신의 이메일을 "스푸핑"할 수 있는지 확인할 수 있습니다. 그런 다음 [email protected]
또는 [email protected]
(그들이 속한 경우에만) 에서 보낼 수 있어야 합니다 .
감사해요.
답변1
@tarleb(나에게 올바른 방향을 알려준)의 귀중한 도움으로 나는 다음과 같은 해결책을 생각해 냈습니다.
reject_sender_login_mismatch
섹션 끝에 추가하십시오smtpd_sender_restrictions
.- 쿼리는 MySQL을
virtual_mailbox_domains
기반 으로 했기 때문에 을 추가했습니다. 이는 보낸 사람의 로그인 이메일과 필드가 일치하는지 확인하기 위해 postfix에서 사용하는 매핑입니다.virtual_alias_maps
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual_sender-login-maps.cf
from
/etc/postfix/mysql-virtual_sender-login-maps.cf
다음 콘텐츠로 만듭니다.user = emailserveruser password = sdfjn1234ns hosts = 127.0.0.1 dbname = mailstack query = SELECT * FROM (SELECT email FROM `virtual_users` WHERE email = '%s' UNION SELECT destination FROM `virtual_alias` WHERE source = '%s' ) a
어떻게 작동하나요?
From
Postfix는 이메일을 제공 %s
하지만 쿼리 결과 SMTP 인증에 사용된 주소와 일치하는 주소를 받게 됩니다.
이 경우 먼저 virtual_users
테이블을 쿼리하고 거기에서 아무것도 반환되지 않으면(해당 이메일에 대한 실제 사용자가 없음을 의미) 잠재적인 이메일 별칭(필드) 사용자 이메일과 일치하는 주소(실제)를 virtual_alias
가져오기 위해 쿼리합니다 .destination
source
일치하는 항목이 없으면 쿼리는 아무것도 반환하지 않습니다. 즉, 1) 해당 이메일에 대한 사용자가 없습니다. 2) 해당 이메일에 대한 사용자의 별칭이 없습니다. Postfix는 메일 클라이언트에 Sender address rejected: not owned by user
오류를 표시합니다.