본문 바로가기
개발 및 운영

postfix restrictions 에 대해.. 끄적끄적

by Joseph.Lee 2019. 5. 28.

postfix으로 메일서버 구축하면서 끄적임...

(아 어려워..ㅠㅠ 설명이 어려워.. 그림으로 설명해주면 안되나?ㅋㅋㅋㅋ)

 

**추가**  Docker로 만들어서 올렸습니다.

postfix + dovecot + mysql(mariadb) 연동합니다.

kubernetes 설정포함

https://github.com/jc-lab/mailserver-docker

restrictions 문법

smtpd_sender_restrictions = aaa, bbb, ccc # 한 줄에 쓸 때 이렇게
smtpd_sender_restrictions = # 여러줄로 쓸 때 이렇게
   aaa
   bbb
   ccc

restrictions에 들어가는것들

  • permit_mynetworks : mynetworks에 정의된 네트워크로 들어오는 요청에 대해 허용
  • permit_sasl_authenticated : sasl(일반적으로 아이디,비번)으로 인증된 사용자에 대해 허용
  • reject_sender_login_mismatch : 보내는이(from email)와 sasl으로 인증된 사용자의 아이디가 다르면 거부

* 아래 내용 정확하지 않을 수 있음. 틀린내용이 있다면 지적바람.

restrictions 종류

* smtpd_sender_restrictions

이메일 보낼때 통하는 것

  • email client --> 메일서버(smtpd_sender_restrictions) --> 외부 받는 메일 서버
  • 외부 보내는 메일 서버 --> mail gateway --> 메일서버(smtpd_sender_restrictions) --> store

여기에 reject_sender_login_mismatch 을 썼을 때 from mail과 username이 다르면

Sender address rejected: not owned by user (username) 이런 오류가 뜸.

중간에 gateway가 있는 경우 메인메일서버에서는

smtpd_sender_restrictions = permit_mynetworks, reject_authenticated_sender_login_mismatch, permit_sasl_authenticated

이렇게 하면 permit_mynetworks를 통해 gateway를 통해서 들어오는건 허용하고(받기),
reject_authenticated_sender_login_mismatch를 통해 메일은 보낼때 로그인한 사용자가 이메일을 변조하면 reject하고,
sasl 인증되어야야한다.

직접 외부망과 연결되는 메일서버라면

참고로 reject_sender_login_mismatch하면 외부에서 메일 못받음! 뭐 이런 이상한게 다있나.. 했는데
version 2.1부터 reject_authenticated_sender_login_mismatch 이게 나옴!

smtpd_sender_restrictions = reject_unknown_sender_domain, check_sender_access hash:/etc/postfix/access

이정도로 스팸필터링하는 용도로 사용 가능함

* smtpd_relay_restrictions

외부로 이메일을 보낼 때 통하는 것 / 받을때도 통함

  • email client --> 메일서버(smtpd_sender_restrictions) --> relay서버(relayhost) --> 외부 받는 메일 서버

(내 상황에는 relay서버(relayhost) 이 부분이 있는데 이게 영향을 미치는건진 잘 모르겠음)

예시

smtpd_relay_restrictions = permit_sasl_authenticated, reject

인증된 사용자만 메일 보낼 수 있고 그 외에는 거부함
이거에서 permit되면 이후 smtpd_sender_restrictions 를 타는듯

외부망과 직접 연결된 상태에서는 permit_sasl_authenticated, reject 하면 아무것도 못받음...

smtpd_relay_restrictions = reject_unauth_destination

이렇게 해야 함.

* smtpd_recipient_restrictions

뭐지...? 일단 난 여기에 스팸필터링을 적용했음...

그나저나.. 테스트 해 본 바로는

여기에 permit없이

smtpd_recipient_restrictions=reject_non_fqdn_hostname,reject_invalid_hostname

이렇게 하고 메일클라이언트에서 HELO localhost 이렇게 주고 정상적인 로그인과정 등을 통해 메일을 전송(to 외부)하려고 할 때 오류를 뱉었다.

내부 -> 외부, 외부 -> 내부 모두 적용되나?

힘겹게 구축한 메일서버... (단일메일서버, 외부망에 직접 연결되고 게이트웨이없음)

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix/sbin
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = all
inet_protocols = all
mydestination = localhost
# mydestination에다가 도메인 입력 금지!
unknown_local_recipient_reject_code = 550
#mynetworks = 10.0.0.0/24
relay_domains=
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual-sender-maps.cf
#smtpd_relay_restrictions = reject_unauth_destination
smtpd_recipient_restrictions =
 reject_unauth_pipelining
 permit_sasl_authenticated
 reject_unauth_destination
# reject_unknown_recipient_domain
# reject_non_fqdn_sender
# reject_unknown_sender_domain
# reject_unverified_recipient
# check_sender_access hash:/etc/postfix/sender_access
# check_client_access hash:/etc/postfix/rbl_override
# reject_rbl_client spamlist.or.kr
# reject_rbl_client sbl-xbl.spamhaus.org
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch
smtpd_sasl_authenticated_header = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_cert_file = /secret/tls.crt
smtpd_tls_key_file =  /secret/tls.key
smtpd_tls_session_cache_database = btree:/var/run/postfix.smtpd_scache
smtpd_use_tls = yes
smtpd_tls_mandatory_exclude_ciphers = DHE, ECDH, ECDHE, MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
smtpd_tls_exclude_ciphers = DHE, ECDH, ECDHE, MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
tls_preempt_cipherlist = yes
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
smtp_sasl_auth_enable = yes
smtp_tls_security_level = encrypt
smtp_sasl_tls_security_options = noanonymous
smtp_use_tls = yes
lmtp_host_lookup=native
smtp_host_lookup=native
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-map.cf
local_recipient_maps = $virtual_mailbox_maps
smtpd_helo_required = yes
broken_sasl_auth_clients = yes
notify_classes = bounce
message_size_limit=268435456
mailbox_size_limit=0

myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain
bounce_notice_recipient = ...@...
반응형

댓글