제한 사항에 관계없이 모든 이메일을 Postfix로 전달

제한 사항에 관계없이 모든 이메일을 Postfix로 전달

메일이 localhost에서 오는 경우에만 그리고 특정 도메인으로 가는 경우에만 메일을 릴레이하도록 Postfix를 설정하려고 합니다. 그러나 릴레이 서버를 지정하자마자 모든 것(로컬 전달 제외)이 해당 서버로 이동합니다. 제한이 잘못됐다고 생각해서 결국 "모든 것을 거부"하게 되었는데 여전히 진행 중입니다. 모든 것을 우회하는지 궁금해서 mynetworksundefine mynetworks. 여전히 모든 것을 중계합니다.

이 시점에서 다음을 postconf -n제공합니다.

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks =
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = domain.com
relayhost = [mailserver.domain.com]:587
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_client_restrictions = reject
smtpd_recipient_restrictions = reject
smtpd_relay_restrictions = reject
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

나는 처음에 다음과 같은 것을 시도하고 있었습니다(다른 점을 보여줌).

mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject

나는 헤매고 있다. 운송 테이블이 없습니다. 포스트픽스 2.11.0(우분투 14.04).

답변1

Postfix 용어의 릴레이 서버는 Postfix가 로컬이 아닌 모든 이메일을 전달하는 서버입니다(예를 들어 회사 내부 네트워크의 Postfix는 회사의 기본 이메일 서버를 릴레이로 정의하므로 대상 서버에 전혀 연결을 시도하지 않습니다). 이는 이메일 전송을 위한 것이며,relayhost지령.

Postfix는 구성을 통해 어떤 도메인이 자신의 도메인인지 알고 있습니다.mydestination지령. 이 목록의 도메인은 로컬로 배달됩니다(올바른 MX 레코드가 있는 경우).

호스트mynetworks어디에서나 이메일을 보낼 수 있습니다. 따라서 여기에서는 신뢰할 수 있는 네트워크(로컬 호스트만 또는 내부 네트워크)만 설정해야 합니다. postfix는 이들 호스트에서 인터넷으로 이메일을 중계한다고 합니다. 이는 기본 설정으로, v2.10 이전에 smtpd_relay_restrictions설정된 값 입니다 . postfix 구성에서 완전히 제거하면 매개변수는 아무 작업도 수행하지 않습니다.smtpd_recipient_restrictionspermit_mynetworkspermit_mynetworksmynetworks

지령relay_domains로컬이 아닌 도메인 postfix가 전 세계의 이메일을 허용하는 제어입니다. 이는 일반적으로 postfix가 일부 도메인의 백업 MX일 때 사용됩니다.


따라서 귀하의 경우 구성이 mynetworks비어 있어야 합니다(비어 있을 수 없는 경우 10.10.10.10과 같이 네트워크에서 사용되지 않는 일부 내부 IP를 사용하십시오).또는permit_mynetworks에서 제거하십시오 smtpd_client_restrictions.

relay_domains = domain.com
mydestination = host.domain.com localhost
relayhost = [mailserver.domain.com]:587

답변2

내가 마침내 작업한 내용은 다음과 같습니다. 핵심은 default_transport = error릴레이와 일치하지 않는 모든 항목이 반송되도록 하는 것입니다. smtpd 설정 이상의 것을 생각하게 해준 @Marki555에게 감사드립니다.

default_transport = error
inet_interfaces = loopback-only
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
relay_domains = domain.com
relay_transport = smtp
relayhost = [mailserver.domain.com]:587
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject

또 다른 좋은 postfix 디버깅 힌트: 로컬 바운스 메시지(즉, 릴레이가 즉시 거부됨)에는 릴레이 호스트가 건드리지 않았음에도 불구하고 여전히 릴레이 호스트의 이름이 있습니다!

나도 살펴봤지만 master_service_disable = inet, localhost:25에 연결하여 로컬 메일 전송을 처리하는 데에는 많은 것들이 실제로 실용적이지 않았습니다.

관련 정보