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]반송됩니다. 그리고 혹시 궁금하시다면[이메일 보호됨]여전히 승인되고 삭제됩니다.

관련 정보