Postfix가 네트워크에서 To:mydestination을 거부하도록 하지만 로컬로 보낸 경우에는 이를 수락하고 네트워크에서는 To:virtual_mailbox_domains를 계속 허용합니다.

Postfix가 네트워크에서 To:mydestination을 거부하도록 하지만 로컬로 보낸 경우에는 이를 수락하고 네트워크에서는 To:virtual_mailbox_domains를 계속 허용합니다.

CentOS8에는 거의 완벽한 Postfix(v3.3.1) 설정이 있습니다. 내 목표는 다음과 같습니다

  • 서비스가 Linux 사용자에게 이메일을 보낼 수 있도록 허용합니다. (crontab에서 루트로)
  • Linux 사용자의 공개 이메일은 허용되지 않습니다. ([이메일 보호됨])
  • Linux 사용자를 생성하지 않고 공개 이메일을 받을 사용자를 정의합니다.

위의 작업을 성공적으로 수행했지만, 어떻게 예방해야 할지 모르는 부작용이 있습니다. 지금까지 내가 한 일들:

myhostname = server.foobar.com
mydomain = foobar.com
myorigin = $myhostname
mydestination = $myhostname, localhost
mail_spool_directory = /var/spool/mail

virtual_transport = virtual
virtual_mailbox_domains = foobar.com
virtual_mailbox_base = /var/spool/email/

이 비트는 Postfix 서비스에 $myhostname([이메일 보호됨]) 표준 시스템 이메일로 전송됩니다 /var/spool/mail.

도메인의 Linux 사용자에게 전송된 모든 이메일[이메일 보호됨]가상 도메인으로 취급되어 가상 사용자를 찾아보고, 없으면 이메일을 거부합니다.

더미 사용자(예: 웹사이트 관리자)를 추가하면 해당 사용자에게 전송되는 모든 이메일([이메일 보호됨])이 승인되어 /var/spool/email/...시스템 이메일과 별도의 공개 이메일로 전송됩니다.


질문...

누구든지 호스트 이름([이메일 보호됨]) 인터넷에서 수락되어 으로 전달되는 것을 /var/spool/mail중지하는 방법을 모르겠습니다.


설정을 시도했지만 default_transport = error:Domain doesn't accept email.동작이 바뀌지 않습니다. 문서에서는 이 기능을 지원하지 않지만 포럼에서 보고 시도해 보았습니다.

Linux 사용자를 user@$myhostname으로 유지하는 것은 나에게 중요하지 않습니다. 이는 스패머를 방지하기 위해 Linux 사용자를 동일한 도메인의 더미 사용자와 분리하는 방법을 알아낼 수 있는 유일한 방법일 뿐입니다.[이메일 보호됨],[이메일 보호됨], 등.

추가 구성 설정(중요한 경우):

html_directory = no
local_recipient_maps =
luser_relay = postmaster
mail_spool_directory = /var/spool/mail
meta_directory = /etc/postfix
mydestination = $myhostname, localhost
mydomain = foobar.com
myhostname = server.foobar.com
mynetworks_style = host
myorigin = $myhostname
relay_domains =
relayhost =
virtual_mailbox_base = /var/spool/email/
virtual_mailbox_domains = foobar.com
virtual_transport = virtual

이 문제를 해결할 수 있는 아이디어나 다른 방법이 있나요?

답변1

해결책을 찾았습니다.

내 질문에 명시된 대로 myorigin = $myhostname로컬 사용자를 동일한 도메인의 가상 사용자와 별도로 유지하십시오.

smtpd_recipient_restrictions섹션 에서 목록 뒤에 포인터를 main.cf추가합니다 . 나는 그것을 사용했고 그것은 다음과 같습니다 :permit_mynetworkscheck_recipient_accesshash:

# Don't include the "...", its just to show this is among other settings

smtpd_recipient_restrictions =
   ...
   permit_mynetworks
   check_recipient_access hash:/etc/postfix/block_mydomain
   ...

그런 다음 목록/해시 파일을 만듭니다./etc/postfix/block_mydomain

hostname.domain.com     513 Invalid domain.

파일을 저장하고 실행하여 postmap block_mydomain*.db 버전을 만듭니다.

그런 다음 postfix를 다시 시작하십시오 systemctl restart postfix.

테스트해본 결과 로컬에서 sendmail 명령을 사용하여 모든 Linux 사용자에게 메일을 보낼 수 있습니다. crontab은 로컬 Linux 사용자에게 이메일을 보낼 수 있습니다. 그러나 인터넷에서 이메일을 보내면 [email protected]반송됩니다. 알고 싶다면[이메일 보호됨]여전히 승인되고 폐기됩니다.

관련 정보