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 = ...@...
'개발 및 운영' 카테고리의 다른 글
sslh & openvpn connection-reset 문제 (0) | 2019.07.09 |
---|---|
Nitrokey HSM key import (0) | 2019.06.08 |
libeay32.dll/ssleay32.dll LoadLibrary시 ERROR_INVALID_ADDRESS(487)오류나는 경우 (0) | 2019.05.17 |
C++에서 Java스럽게 개발하기 (0) | 2019.04.12 |
크롤링 Tree 구조 그래프 민들레인듯 꽃다발인듯 (1) | 2019.02.22 |
댓글