
내 메일 서버는 현재 mxtoolbox에 Open Relay로 표시됩니다.
RCPT TO:
목표: example.com이라고 표시된 경우에만 SMTP 연결 허용
RCPT TO:
가 아니라는 것을 알면 즉시 연결을 거부하도록 어떤 변경을 해야 합니까 example.com
? 현재 나는 스팸을 받고 있으며 에 기반한 이메일을 거부하고 있습니다 check_recipient_access
.
테스트 이메일:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 <HOSTNAME> ESMTP Postfix (Debian/GNU)
ehlo test.com
250-<HOSTNAME>
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
현재 상황:
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
기대:
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
REJECT
그리고
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
의 출력postconf -n
user@hostname:~$ sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
header_checks = pcre:/etc/postfix/header_checks
inet_interfaces = loopback-only
mailbox_size_limit = 0
mydestination = <hostname>, localhost.<domain>, localhost
mydomain = example.com
myhostname = <hostname>
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.32.247.0/24
myorigin = <hostname>
readme_directory = no
recipient_delimiter = +
relay_domains = example.com
relayhost = [10.32.247.125]:10000
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_unauth_destination, reject_unknown_recipient_domain, permit
smtpd_sender_restrictions = check_recipient_access pcre:/etc/postfix/sender_access, reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination, permit
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
상세 모드의 메일로그 파일:http://pastebin.com/9q7f5DFp
내 현재 시나리오:
이메일 --> Postfix 허용 --> 헤더 확인 --> example.com에 속하지 않는 경우 삭제
예상되는:
이메일 --> Postfix는 RCPT TO를 확인합니다: == example.com --> 그렇지 않은 경우 거부하고 더 이상 처리하지 않습니다.
답변1
여기 mail.log의 핵심 라인이 있습니다.
NOQUEUE: 폐기: localhost[127.0.0.1]의 RCPT: : 수신자 주소가 DISCARD 작업을 트리거합니다. 에서= 으로= proto=ESMTP helo=
postfix에서 DISCARD
postfix는 이메일을 수락하는 척하지만 실제로는 이메일을 /dev/null로 보냅니다(다른 의미에서는 이메일을 삭제함). 따라서 telnet으로 확인하면 postfix는 "OK I accept it"이라고 응답합니다.
답변2
오픈 릴레이의 정의는 네트워크에 물리적으로 연결되어 있지 않은 모든 사람이 이를 통해 메일을 보낼 수 있도록 허용하는 smtp 서버입니다. 따라서 내부 네트워크의 모든 사용자는 인증 없이 서버를 통해 다른 smtp 서버로 메일을 보낼 수 있어야 합니다. 그러나 당신은 그 능력을 세계로 확장하고 싶지 않습니다. 일반적으로 모든 허가 문이 먼저 수행되고 그 다음인 Reject_unauth_destination 반대 방향으로 수행되는 것을 본 적이 없으므로 작동하는지 확실하지 않습니다. 그러나 설정에서 잘못된 것을 거부하고 있습니다. Reject_unknown_recipient_domain은 여기에 실제로 적용되지 않으며 발신자 제한입니다. Reject_unauth_destination은 허가 문으로 모든 것을 허용하기 때문에 여기서는 아무 작업도 수행하지 않습니다. 그렇기 때문에 허가는 일반적으로 거부 문 앞에 있으므로 무엇을 거부할지 알 수 있습니다. 적어도 그것이 나에게 의미가 있는 것입니다.
smtpd_recipient_restrictions = 허가_내 네트워크, 허가_sasl_인증, 거부_unauth_destination
이것이 말하는 것은 mynetworks에 정의된 모든 네트워크를 허용하고 SSL/TLS 연결로 적절하게 인증된 모든 사용자를 허용하고 다른 모든 것을 거부한다는 것입니다. 즉, 오픈 릴레이가 아닙니다.