메일서버 구조
*오픈소스 라이센스 확인
오픈소스 라이센스 확인
roundcube - GNU General Public License
postfix - IBM Public License 1.0 (IPL-1.0)
dovecot - NonCommercial-ShareAlike 4.0 International License.
MariaDB - GPL license, 버전 2
Apache - Apache License 2.0
*오픈소스 솔루션 버전 확인
설치버전 확인
roundcube - 1.4.8
postfix - 2.10.1
dovecot - 2.2.36
MariaDB - 5.5.68-MariaDB, for Linux (x86_64)
Apache - Apache/2.4.6 (httpd-2.4.6-97.0.1.e17_9.x86_64
1/5. 개요(Overview)
메일을 전달만 하는 게 아닌 상용 메일 솔루션처럼 웹 인터페이스를 통해 메일을 주고받고 할 수 있는 메일서버를 만들어보도록 하겠습니다.
모든 오픈 소스를 동원해 하나의 메일서버처럼 작동을 해야 하므로 매우 복잡한 세팅 과정을 거쳐야 합니다.
최대한 순차적으로 풀어서 이해할 수 있도록 진행하도록 하겠습니다.
CentOS 7 버전과 CentOS 8 버전 모두 메일서비스가 정상으로 동작하는 것을 확인했으며, 아래는 CentOS 7 버전으로 가이드 합니다.
웹서버는 Apache가 아니더라도 상관없습니다. (nginx와 같은 다른 플랫폼을 사용한다면, 메일서버에서 웹서버를 엑세스 할 수 있도록 파일 소유자 변경(apache→nginx)등의 설정이 추가로 필요합니다. 왜냐하면 apache가 기본적으로 설치된 경우 퍼미션 에러를 만나게 되더라구요.)
2/5. 기초작업(initialize)
나중에 운영이슈를 막기위해 반드시 초기에 패키지 관리자는 업데이트를 진행합시다.
[root@logthink ~]# yum update
Iptables 방화벽설정
[root@logthink ~]# systemctl stop firewalld //firewalld 중지
[root@logthink ~]# systemctl mask firewalld //firewalld 자동시작 중지
[root@logthink ~]# dnf install -y iptables-services //iptables 서비스 관련 패키지 설치
[root@logthink ~]# systemctl enable iptables //iptables 자동 시작
[root@logthink ~]# systemctl start iptables //iptables 시작
[root@logthink ~]# iptables -nL //적용 확인
[root@logthink ~]# /etc/sysconfig/iptables //설정 기본경로
[root@logthink ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config //비활성화 설정
[root@logthink ~]# cat /etc/selinux/config | grep disabled //변경확인 명령어
//결과 'SELINUX=disabled' 가 나와야함.
[root@logthink ~]# hostnamectl set-hostname mail.demologthink.com //호스트 선언
[root@logthink ~]# hostname //적용확인 명령어
[root@logthink ~]# reboot //설정 반영
3/5. 솔루션 세팅 - Postfix, Apache, PHP, MariaDB
나중에 운영이슈를 막기위해 반드시 초기에 패키지 관리자는 업데이트를 진행합시다.
[root@logthink ~]# yum install httpd postfix postfix-mysql policycoreutils-python-utils epel-release
PHP 설치 (7.4.X 버전 설치를 위해 Remi 저장소 이용)
*PHP5버전은 의존성에러 발생하니 7버전으로 정상화하자
[root@logthink ~]# yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
[root@logthink ~]# module enable php:remi-7.4
[root@logthink ~]# yum install php
[root@logthink ~]# yum install php-common php-json php-xml php-mbstring php-mysqlnd
MariaDB 설치 및 구성
[root@logthink ~]# yum install MariaDB-server MariaDB-client //설치
[root@logthink ~]# systemctl start mariadb //DB 구동
[root@logthink ~]# systemctl enable mariadb //부팅 자동 실행
[root@logthink ~]# mysql_secure_installation //DB세팅 (패스워드 왜 다 'Y'입력하자)
[root@logthink ~]# mysql -uroot -p //DB 접속
웹메일 사용을 위한 DB 스키마 구성
□Postfix 계정을 저장할 데이터베이스 생성
MariaDB [(none)]> create database postfix_accounts;
□방금 생성한 데이터베이스에 접근할 전체 권한 계정을 생성
예시) grant all on 데이터베이스 이름.* to '유저 ID'@'localhost' identified by '패스워드';
MariaDB [(none)]> grant all on postfix_accounts.* to demologthink_admin@localhost identified by 'test123';
MariaDB [(none)]> flush privileges; (바로 적용)
□서버에 도메인을 저장할 테이블 만들기(전체 한 줄)
MariaDB [(none)]> CREATE TABLE postfix_accounts
.domains_table
( DomainId
INT NOT NULL AUTO_INCREMENT , DomainName
VARCHAR(50) NOT NULL , PRIMARY KEY (DomainId
)) ENGINE = InnoDB;
□사용자 계정을 보관할 테이블 만들기(전체 한 줄)
MariaDB [(none)]> CREATE TABLE postfix_accounts
.accounts_table
(
AccountId
INT NOT NULL AUTO_INCREMENT,
DomainId
INT NOT NULL,
password
VARCHAR(300) NOT NULL,
Email
VARCHAR(100) NOT NULL,
PRIMARY KEY (AccountId
),
UNIQUE KEY Email
(Email
),
FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
□별칭 사용자 계정을 보관할 테이블 만들기(전체 한 줄)
별칭은 일종의 리다이렉션처럼 A계정이 수신을 받으면 B계정으로 받는 기능
MariaDB [(none)]> CREATE TABLE postfix_accounts
.alias_table
(
AliasId
INT NOT NULL AUTO_INCREMENT,
DomainId
INT NOT NULL,
Source
varchar(100) NOT NULL,
Destination
varchar(100) NOT NULL,
PRIMARY KEY (AliasId
),
FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
이제 만든 테이블에 사용할 도메인 및 계정 정보 레코드 입력(각 한 줄씩 명령어)
□demologthink.com 도메인 등록
MariaDB [(none)]> INSERT INTO postfix_accounts
.domains_table
(DomainName) VALUES ('demologthink.com');
□test1@demologthink.com 계정 생성
MariaDB [(none)]> INSERT INTO postfix_accounts
.accounts_table
(DomainId, password, Email) VALUES (1, ENCRYPT('test123', CONCAT('', SUBSTRING(SHA(RAND()), -16))), 'test1@demologthink.com');
□test2@demologthink.com 계정 생성
MariaDB [(none)]> INSERT INTO postfix_accounts
.accounts_table
(DomainId, password, Email) VALUES (1, ENCRYPT('test123', CONCAT('', SUBSTRING(SHA(RAND()), -16))), 'test2@demologthink.com');
□testfc@demologthink.com ▷ testsc@demologthink.com 별칭 계정 생성
MariaDB [(none)]> INSERT INTO postfix_accounts
.alias_table
(DomainId, Source, Destination) VALUES (1, 'testfc@demologthink.com', 'testsc@demologthink.com');
□나중에 설치할 RoundCube 데이터베이스 미리 생성하기
MariaDB [none]> create database roundcube;
□동일하게 데이터베이스에 접근할 전체 권한 계정을 생성
MariaDB [none]> grant all on roundcube.* to roundcube_admin@localhost identified by 'test123';
MariaDB [none]> flush privileges; (바로 적용)
MariaDB [none]> quit (끝)
Postfix 구성(1)
*master.cf 파일
[root@logthink ~]# vi /etc/postfix/master.cf
17 submission inet n - n - - smtpd
18 -o syslog_name=postfix/submission
20 -o smtpd_sasl_auth_enable=yes
22 -o smtpd_reject_unlisted_recipient=no
27 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
28 -o milter_macro_daemon_name=ORIGINATING
134 dovecot unix - n n - - pipe
135 flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
[root@logthink ~]# vi /etc/postfix/database-domains.cf.cf
user = demologthink_admin
password = test123
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM domains_table WHERE DomainName='%s'
[root@logthink ~]# chmod 640 /etc/postfix/database-domains.cf
[root@logthink ~]# chmod 640 /etc/postfix/database-users.cf
[root@logthink ~]# chmod 640 /etc/postfix/database-alias.cf
[root@logthink ~]# chown root:postfix /etc/postfix/database-domains.cf
[root@logthink ~]# chown root:postfix /etc/postfix/database-users.cf
[root@logthink ~]# chown root:postfix /etc/postfix/database-alias.cf
[root@logthink ~]# systemctl restart postfix
[root@logthink ~]# vi /etc/postfix/main.cf
96 myhostname = mail.demologthink.com
104 mydomain = demologthink.com
120 myorigin = mydomain 137 inet_interfaces = all 140 inet_protocols = all 185 mydestination = $myhostname, localhost.mydomain, localhost
273 smtpd_recipient_restrictions = permit_mynetworks
440 home_mailbox = Maildir/
712 #smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem (SSL인증서 Cert 파일, 지금은 사용안함으로 주석처리)
718 #smtpd_tls_key_file = /etc/pki/tls/private/postfix.key (SSL인증서 Key 파일, 지금은 사용안함으로 주석처리)
723 smtpd_tls_security_level = may
739 smtp_tls_security_level = may
//데이터베이스에 저장 한 계정 대한 Postfix 액세스 권한 부여
755 virtual_mailbox_domains = mysql:/etc/postfix/database-domains.cf
756 virtual_mailbox_maps = mysql:/etc/postfix/database-users.cf
757 virtual_alias_maps = mysql:/etc/postfix/database-alias.cf
/etc/postfix/database-users.cf 파일
[root@logthink ~]# vi /etc/postfix/database-users.cf
user = demologthink_admin
password = test123
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM accounts_table WHERE Email='%s'
/etc/postfix/database-alias.cf 파일
[root@logthink ~]# vi /etc/postfix/database-alias.cf
user = demologthink_admin
password = test123
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT Destination FROM alias_table WHERE Source='%s'
*설정 테스트
[root@logthink ~]# postmap -q demologthink.com mysql:/etc/postfix/database-domains.cf
1
[root@logthink ~]# postmap -q test1@demologthink.com mysql:/etc/postfix/database-users.cf
1
[root@logthink ~]# postmap -q test2@demologthink.com mysql:/etc/postfix/database-users.cf
1
[root@logthink ~]# postmap -q testfc@demologthink.com mysql:/etc/postfix/database-alias.cf
testsc@demologthink.com
※ 응답 값이 숫자 1이 나오거나 끝에는 별칭(리다이렉트) 계정이 표시되면 정상
4/5. 솔루션 세팅 - Dovecot , RoundCube
Dovecot 구성(1)
[root@logthink ~]# yum install dovecot dovecot-mysql
[root@logthink ~]# groupadd -g 6000 vmail
[root@logthink ~]# useradd -g vmail -u 6000 vmail -d /home/vmail -m
[root@logthink ~]# vi /etc/dovecot/dovecot.conf
24 protocols = imap pop3 lmtp
30 listen = , ::
98 !include conf.d/.conf
102 !include_try local.conf
104 log_path = /var/log/dovecot.log
[root@logthink ~]# chown vmail:dovecot /var/log/dovecot.log
[root@logthink ~]# chown vmail:dovecot /var/run/dovecot/stats-writer
10-auth.conf 설정파일
[root@logthink ~]# vi /etc/dovecot/conf.d/10-auth.conf
10 disable_plaintext_auth = yes
100 auth_mechanisms = plain login
123 !include auth-sql.conf.ext
auth-sql.conf.ext 설정파일
[root@logthink ~]# vi /etc/dovecot/conf.d/auth-sql.conf.ext
5 passdb {
6 driver = sql
9 args = /etc/dovecot/dovecot-sql.conf.ext
10 }
27 userdb {
28 driver = static
29 args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
30 }
master.conf 설정파일
[root@logthink ~]# vi /etc/dovecot/conf.d/auth-sql.conf.ext
17 service imap-login {
18 inet_listener imap {
19 port = 143
20 }
21 inet_listener imaps {
24 }
36 }
38 service pop3-login {
39 inet_listener pop3 {
40 port = 110
41 }
42 inet_listener pop3s {
45 }
54 service lmtp {
55 unix_listener /var/spool/postfix/private/dovecot-lmtp {
56 mode = 0666
57 user = postfix
58 group = postfix
59 }
67 }
88 service auth {
102 unix_listener /var/spool/postfix/private/auth {
103 mode = 0666
104 user = postfix
105 group = postfix
106 }
107 unix_listener auth-userdb {
108 mode = 0600
109 user = vmail
110 }
111 user = dovecot
120 }
122 service auth-worker {
126 user = vmail
127
129 service dict {
132 unix_listener dict {
136 }
137 }
별도로 /home/vmail 경로에 이메일을 저장하기 위해 다음과 같은 변수를 이용
%u – 사용자 이름
%n – user@domain의 사용자 부분 , 도메인이 없는 경우 % u와 동일
%d – user@domain의 도메인 부분 , 도메인이 없으면 비어 있음
%h – 홈 디렉토리
메일 사서함 및 네임스페이스 index 사용 설정
[root@logthink ~]# vi /etc/dovecot/conf.d/10-mail.conf
30 mail_location = maildir:/home/vmail/%d/%n/Maildir
42 namespace inbox {
61 inbox = yes
80 }
114 mail_privileged_group = mail
325 mbox_write_locks = fcntl
SSL 일단 예외처리
[root@logthink ~]# vi /etc/dovecot/conf.d/10-ssl.conf
□[사용 안 함]
8 ssl = no
14 #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem (주석 처리)
15 #ssl_key = </etc/pki/dovecot/private/dovecot.pem (주석 처리)
□[사용할 경우]
8 ssl = required
14 ssl_cert = </etc/pki/dovecot/certs/dovecot.pem (인증서 CRT 경로)
15 ssl_key = </etc/pki/dovecot/private/dovecot.pem (인증서 KEY 경로)
[root@logthink ~]# chown -R vmail:dovecot /etc/dovecot
[root@logthink ~]# chmod -R o-rwx /etc/dovecot
[root@logthink ~]# ls -al /etc | grep dovecot
RoundCube 구성(1)
*솔루션 설치 후 설(serving)빙 시작
[root@logthink ~]# wget https://github.com/roundcube/roundcubemail/
releases/download/1.4.11/roundcubemail-1.4.11-complete.tar.gz
[root@logthink ~]# tar xvzf roundcubemail-1.4.11-complete.tar.gz
[root@logthink ~]# mv roundcubemail-1.4.11 roundcube
[root@logthink ~]# mv roundcube /var/www/html/
[root@logthink ~]# chown -R apache:apache /var/www/html/
[root@logthink ~]# systemctl restart httpd
*방화벽 설정
[root@logthink ~]# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
[root@logthink ~]# systemctl restart iptables
RoundCube 구성(2)
(1) 웹 브라우저에서 접속 - http://서버IP/roundcube/installer/
(2) 하단의 Next 클릭
(3) [CREATE CONFIG] 설정에서 [Database setup] 부분만 세팅 후에 다음 진행
MySQL
localhost
roundcube
roundcube_admin
test123
(4) [CREATE CONFIG] 버튼 클릭
(5) 구성 설정 메시지 성공 확인 후 바로 [CONTINUE] 클릭
(6) 데이터베이스 초기화 [Initialize Database] 버튼 클릭후 [Test config] 설정 마무리
*이때 Check DB Config가 전부 'OK' 인지 확인
[root@logthink ~]# vi /var/www/html/roundcube/config/config.inc.php
36 $config['default_host'] = 'localhost';
40 $config['support_url'] = '';
52 $config['plugins'] = array('virtuser_query');
53 $config['virtuser_query'] = "SELECT Email FROM postfix_accounts.accounts_table WHERE Email = '%u'";
54 $config['defautl_port'] = 143;
55 $config['smtp_server'] = 'localhost';
56 $config['smtp_port'] = 587;
57 $config['smtp_user'] = '%u';
58 $config['smtp_pass'] = '%p';
59 $config['smtp_auth_type'] = 'LOGIN';
60 $config['debug_level'] = 1;
61 $config['smtp_debug'] = true;
RoundCube 구성(3) - 최종 메일테스트 진행
웹 브라우저에서 접속 (http://서버IP/roundcube/ ) 후 로그인
→ 지금 부터 메일 서버를 이용하면 된다.
5/5. 메일서버 운영
→ 다만, 대형 외부포털 메일서버에 전송 시 스팸분류가 된다면 참조하길 바랍니다.
( http://confluence.dnco.corp/pages/viewpage.action?pageId=131670042 )
보안설정 적용
*수신이 차단되기 때문에 신뢰되지 않은 SMTP 서버에 도용될 순 없으나, 계정 유무와 관련없이 내부 권한있는 사용자에게 악용될 리스크 존재.
메일캐리어 보안 설정
윈도우 서버 방화벽 설정
릴레이 제한
복잡한 암호 사용 정책
계정 잠금 정책으로 암호 매칭 공격 차단
인트라넷 정의를 통한 인증 제한
발송 큐 모니터링을 통한 메일 서버 보호
암호 세팅 (sendmail 을 통한 건 audit 못함)
발송메일 큐 모니터링 (TBD - ELK 도입)
발송 큐 길이제한 (TBD)
릴레이 서버 줄이기 (None)
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase from email import encoders
def send_auth_test(email, password):
msg = MIMEMultipart()
msg['From'] = email
msg['To'] = password
msg['Subject'] = 'send test - hello'
body = "TTTT"
msg.attach(MIMEText(body, 'plain'))
s=smtplib.SMTP('192.168.5.76', 587)
s.login(email, password)
text=msg.as_string()
s.sendmail(email, password, text)
s.quit()
def send_attach(fromaddr, toaddr, smtpServer):
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = 'send test - hello'
body = "TTTT"
msg.attach(MIMEText(body, 'plain'))
filename='test.txt'
attachment = open("test.txt", "rb")
p = MIMEBase('application', 'octet-stream')
p.set_payload((attachment).read())
encoders.encode_base64(p)
p.add_header('Content-Disposition', 'attachment; filename= %s' %
filename)
msg.attach(p)
s=smtplib.SMTP(smtpServer, 25)
text=msg.as_string()
s.sendmail(fromaddr, toaddr, text)
s.quit()
def send_simple_text(fromaddr, toaddr, smtpServer):
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = 'send test - hello'
text='aaaaaaaaaaaaaaaaaa'
s = smtplib.SMTP(smtpServer, 25)
s.ehlo()
#s.starttls()
s.sendmail(fromaddr, toaddr, text)
s.quit()
if __name__=="__main__":
fromaddr = 'logthink@logthink.kr'
toaddr = 'logthink@logthink.com'
smtpServer = '192.168.5.76'
send_attach(fromaddr, toaddr, smtpServer)
#send_simple_text(fromaddr, toaddr, smtpServer
메일서버 IP차단이 의심되는 대표적 로그 사례
가. 4.3.2 Your ip blocked from this server. Contact to abuse@naver.com or http:/(421)
나. 4.3.2 Your ip blocked from this server(421)
다. 4.4.5 CCRC 123.123.12.123: Connection refused. Server is busy(RC)(421)
라. 5.7.1 DZCNT 123.123.12.123: Message refused. Your domain has sent too many mails:mymailer.co.kr If you need, please contact stamp@daumcorp.com.(554)
마. sorry, your IP is blacklisted.(544)
SPF (Sender Policy Framework)등록 설정완료
SPF 추가설명
스티비와 같은 이메일마케팅 서비스를 사용하면, 발신자 이메일 주소와 실제 발송하는 서버의 도메인이 다를 수 밖에 없습니다. 예를 들어, 스티비에서 "user@domain.com"이라는 발신자 이메일 주소로 이메일을 발송한다면, 실제 발송되는 서버는 스티비의 서버인 "stibee.com"이 되는 것이죠.
이런 경우, "stibee.com"에 대한 레코드를 "domain.com"에 등록하여, 발신자가 위조되지 않았다는 것을 네이버, 다음, 구글 같은 이메일 서비스의 수신서버에 알릴 수 있습니다.
스티비는 기본적으로 이메일 인증을 통해 발신자 이메일 주소의 소유를 확인하고 있습니다. 하지만 이메일 서비스의 수신 정책에 따라 SPF와 DKIM 레코드를 등록해야하는 경우가 있습니다.
이메일 발송에 문제가 있거나 콘텐츠, 구독자 DB에 문제가 없음에도 스팸으로 분류되는 문제가 있다면, 아래의 방법을 참고해서 SPF, DKIM을 설정하시기 바랍니다.
👉 본인이 소유한 도메인을 사용하지 않는 이메일 주소(예. user@naver.com, user@daum.net, user@gmail.com)를 사용한다면 SPF, DKIM 설정을 할 수 없습니다.
👉 도메인에 대한 SPF, DKIM 설정을 쉽고 빠르게 조회하고, 필요한 조치사항을 확인할 수 있습니다. → https://lab.stibee.com/domain?name=logthink.com
설정방법(요약)
TXT 레코드에 아래의 값을 추가합니다.
이름(호스트, 별칭): @ 또는 비워둠.
TTL(수명): 3600 또는 기본값으로 둠.
값(응답, 대상): v=spf1 include:mail.stibee.com ~all
값(응답, 대상)에 2개 이상의 도메인을 입력하는 경우, 하나로 합쳐서 입력합니다. (예. v=spf1 include:sub.domain.com include:mail.stibee.com ~all)
리버스도메인(Reverse Domain) 등록 설정완료
DKIM (DomainKeys Identified Mail) 등록 미설정
설정방법 (요약)
CNAME 레코드에 아래의 값을 추가합니다.
이름(호스트, 별칭): stb._domainkey.yourdomain.com 또는 stb._domainkey
값(응답 ,대상): dkim.stibee.com
"이름(호스트, 별칭)"의 "yourdomain.com"은 발신자 이메일 주소의 도메인으로 대체합니다.
예를 들어, 발신자 이메일 주소가 "hello@stibee.com"이라면, "이름(호스트, 별칭)"은 "stb._domainkey.stibee.com" 또는 "stb._domainkey"로 입력합니다. "stb._domainkey"는 도메인과 상관없는 고정된 값입니다.
DMARC (Domain-based Message Authentication, Reporting and Conformance) 등록 미설정
MX Record / 서브도메인 등록등록 설정완료
화이트도메인(KISA) 등록 진행중
RBL(Real-Time Blacklist) 등록 조회 진행중
알려진 스팸 블랙리스트 등록확인 필요
등록된 스팸블랙리스트는 'korea.services.net'으로 해제 요청이 필요.
※ 대형 포털 메일서버는 RBL에 스팸유의 IP인지를 참고하므로, 대응이 필요함
※ 아래 내용의 IP차단 의심 시 체크사항 확인바람
4. IP차단 의심 시 체크사항
대량 메일 발송 가이드 라인에 맞게 메일을 전송했는지 확인하기.
발송한 메일의 내용이 스팸메일인지 확인
포털사이트의 고객센터로 문의
-Postfix+SASL 서버 설정: https://blog.naver.com/bethbang1004/222095965899
-Linux DNS 설정: https://www.tongkni.co.kr/idcplus/plugin/ga_image/Linux%20Server_DNS.pdf
-스팸분류 개선: https://blog.asamaru.net/2015/12/16/how-can-i-prevent-mail-from-being-classified-as-spam/
-호스팅서비스(가비아) DNS 레코드 설정법: https://customer.gabia.com/manual/domain/287/1201
-도메인 상태조회 서비스(SPF, DKIM) : https://lab.stibee.com/domain?name=logthink.com
-RBL 소개: https://spam.kisa.or.kr/rbl/sub1.do
-RBL 정리: http://blog.servis.co.kr/index.php/2019/04/15/dnsbl-rbl-surbl/
-한국 네트워크 차단 목록(http://korea.services.net): http://korea.services.net/
-메일 에러 플래그 설명: https://itstorys.tistory.com/280
-지메일 스팸 대응: https://m.blog.naver.com/andwise/221625703295, https://hiseon.me/server/how-to-solve-spam-mail-problem/
-메일 방화벽 설정: https://blog.softmail.co.kr/532
-POSTFIX 설정: https://devbin.kr/server-postfix-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-smtp-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0/