μ‹œμŠ€ν…œμ„ κ°œλ°œν•˜λŠ” λ‹¨κ³„μ—μ„œλŠ” 메일 λ°œμ†‘ κΈ°λŠ₯을 μœ„ν•΄μ„œ νšŒμ‚¬ λ‚΄ μ„œλ²„ 인프라 μ—”μ§€λ‹ˆμ–΄λΆ„κ»˜ 사내 메일 μ„œλ²„λ₯Ό λŒ€μ‹  μ΄μš©ν•  수 μžˆλ„λ‘ μš”μ²­ν•˜κ³  메일 μ„œλ²„λ₯Ό μ΄μš©ν•  수 μžˆλŠ” SMTP μ„œλ²„μ™€ μ‚¬μš©μž 인증 정보λ₯Ό μ „λ‹¬λ°›μ•„μ„œ ν…ŒμŠ€νŠΈν•˜κ³€ ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, μ‹€μ œλ‘œ μ‹œμŠ€ν…œμ„ μš΄μš©ν•˜λŠ” μ‹œμ μ— λ“€μ–΄μ„œμž νšŒμ‚¬ 사내 메일 μ„œλ²„λ‘œ μ „λ‹¬λ˜λŠ” 전솑 건듀이 λ§Žμ•„μ Έμ„œ νšŒμ‚¬ 인프라 λ‹΄λ‹Ή μ—”μ§€λ‹ˆμ–΄λΆ„μœΌλ‘œλΆ€ν„° Amazon SES둜 메일 μ„œλ²„λ₯Ό μ „ν™˜ν•΄λ‹¬λΌλŠ” μš”μ²­μ„ λ°›κ³  화사 사내 메일 μ„œλ²„ λŒ€μ‹ μ— ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œ μ œκ³΅ν•˜λŠ” SMTP μ„œλ²„λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μž‘μ—…μ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

Amazon SES

μ €λŠ” μ„œλ²„ 인프라 μ—”μ§€λ‹ˆμ–΄λŠ” μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 인프라 μ˜μ—­μ—μ„œ μ‚¬μš©λ˜λŠ” λͺ¨λ“  지식을 μ•Œμ§€λŠ” λͺ»ν•˜λŠ”λ°μš”. 개발자둜써 이메일 λ°œμ†‘ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ 찾아보면 ν”„λ¦¬λ§ˆμ»€ ν…œν”Œλ¦ΏμœΌλ‘œ 이메일 λ°œμ†‘ν•˜κΈ°μ™€ 같이 SMTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

Amazon SESλŠ” SMTP μ—”λ“œν¬μΈνŠΈμ™€ STARTTLS/TLS μ˜΅μ…˜μ— 따라 μ‚¬μš©ν•΄μ•Όν•˜λŠ” ν¬νŠΈμ™€ SMTP 인증을 μœ„ν•œ ν¬λ ˆλ΄μ…œμ„ λ°œκΈ‰ν•˜κ³  인증만 ν•˜λ©΄ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•œ ν΄λ¦­λ§ŒμœΌλ‘œλ„ SMTP ν¬λ ˆλ΄μ…œμ„ λ°œκΈ‰ν•  수 있기 λ•Œλ¬Έμ— 개발자라면 λˆ„κ΅¬λ‚˜ μ‰½κ²Œ μ‚¬μš©μž 인증 정보λ₯Ό κ°€μ Έμ™€μ„œ 메일 μ„œλ²„λ₯Ό μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Amazon SESλŠ” 인증된 이메일 μ£Όμ†Œλ‘œ 메일을 λ°œμ†‘ν•  수 μžˆκ±°λ‚˜ 도메인을 μΈμ¦ν•˜μ—¬ 이메일 λ°œμ†‘μ— λŒ€ν•œ 신원을 검증할 수 μžˆλ„λ‘ μ œκ³΅ν•˜κ³  μžˆλŠ”λ°μš”. κ·Έλž˜μ„œ μ•„λž˜μ™€ 같이 이메일 μˆ˜μ‹ μ΄ κ°€λŠ₯ν•œ λ°œμ‹  이메일이 μ‘΄μž¬ν•œλ‹€λ©΄ κ°„λ‹¨ν•˜κ²Œ λ°œμ‹  μ£Όμ†Œλ₯Ό 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.

이메일에 λŒ€ν•œ λ°œμ‹  μ£Όμ†Œλ₯Ό μ‹ λ’°ν•  수 μ—†μŒ

κ°„λ‹¨ν•˜κ²Œ SMTP 메일 μ„œλ²„λ₯Ό μ „ν™˜ν•  수 있기 λ•Œλ¬Έμ— μ–΄λ €μš΄ μž‘μ—…μ€ μ•„λ‹ˆλΌκ³  μƒκ°ν–ˆμ—ˆλŠ”λ° μž μ‹œ ν›„ μ˜ˆμƒν•˜μ§€ λͺ»ν–ˆλ˜ λ¬Έμ œκ°€ νŒŒμ•…λ˜μ—ˆμ–΄μš”. Amazon SES의 SMTP μ„œλ²„λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ „ν™˜ν•˜κ³ λ‚˜μ„œ μ‹œμŠ€ν…œμ—μ„œ λ°œμ†‘ν•˜λŠ” 이메일을 μˆ˜μ‹ μžκ°€ λ°›μ•˜μ„λ•Œ 슀팸 λ©”μΌν•¨μœΌλ‘œ μ „λ‹¬λ˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 원인을 μ°Ύμ•„λ³΄λ‹ˆ Amazon SESλ₯Ό μ‚¬μš©ν•˜μ—¬ μ „μ†‘ν•˜λŠ” 이메일이 슀팸으둜 ν‘œμ‹œλ˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?와 같은 κ°€μ΄λ“œλ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. SMTP μ„œλ²„μ— μ˜ν•΄ μ „λ‹¬λ˜λŠ” 이메일을 μ‹ λ’°ν•  수 μžˆλŠ”μ§€ κ²€μ¦ν•˜λŠ” 것은 Amazon SESκ°€ 보μž₯ν•  수 μ—†λ‹€λŠ” λΆ€λΆ„κ³Ό λ‹€μŒμ˜ μš”μΈμ΄ μžˆλ‹€λŠ” 것을 μ•ˆλ‚΄ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

DomainKeys Identified Mail(DKIM) λ˜λŠ” Sender Policy Framework(SPF)와 같은 이메일 인증 λΆ€μ‘±

λ°œμ‹  도메인 검증

Configuring identities in Amazon SES λ¬Έμ„œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ SMTP ν”„λ‘œν† μ½œμ€ 자체적으둜 인증 κΈ°λŠ₯이 μ—†λ‹€λŠ” 것과 μ΄λŸ¬ν•œ λΆ€λΆ„μœΌλ‘œ 인해 μŠ€νŒ¨λ¨Έκ°€ λ°œμ‹  μ£Όμ†Œλ₯Ό μœ„μž₯ν•  수 μžˆλ‹€λŠ” 점을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ SPF λ˜λŠ” DKIM와 같은 인증 λ§€μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜κ²Œ λœλ‹€κ³  μ†Œκ°œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이제껏 듣도보도 λͺ»ν•œ μƒˆλ‘œμš΄ μš©μ–΄κ°€ λ‚˜νƒ€λ‚˜κ²Œ 된거죠. 이메일 μŠ€ν‘Έν•‘κ³Ό 피싱에 λŒ€μ²˜ν•˜κΈ°μ—μ„œ DNS의 도메인 λ ˆμ½”λ“œλ₯Ό μ‚¬μš©ν•΄μ„œ μŠ€ν‘Έν•‘μ„ λ°©μ§€ν•˜κΈ° μœ„ν•œ λ§€μ»€λ‹ˆμ¦˜μ„ κ΅¬μ„±ν•œλ‹€λŠ” 점을 이해할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μˆ˜μ‹ λœ 이메일이 μ˜¬λ°”λ₯Έ κ³³μœΌλ‘œλΆ€ν„° λ°œμ†‘λœ 것인지λ₯Ό κ²€μ¦ν•˜κΈ° μœ„ν•΄μ„œλŠ” 도메인 기반으둜 신원을 κ²€μ¦ν•˜κ³  SPF, DKIM, DMARC와 같은 DNS λ ˆμ½”λ“œλ₯Ό 도메인에 μ„€μ •ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆλ„ Route53으둜 도메인을 μ‚¬μš©μ€‘μ΄κΈ°μ— Amazon SESμ—μ„œ μžλ™μœΌλ‘œ DNS λ ˆμ½”λ“œλ₯Ό μ„€μ •ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. Amazon SESλ₯Ό μ‚¬μš©ν•˜μ—¬ DMARC μ€€μˆ˜μ— 따라 도메인 λ ˆμ½”λ“œμ— DMARC 정책이 μ„€μ •λ˜μ—ˆλŠ”μ§€λ₯Ό ν™•μΈν•˜κ³  Amazon SESκ°€ 도메인을 κ²€μ¦ν•˜κΈ°λ₯Ό κΈ°λ‹€λ ΈμŠ΅λ‹ˆλ‹€.

이메일 λ³΄μ•ˆ DNS λ ˆμ½”λ“œ 질의

DKIM으둜 도메인 검증을 ν•˜μ˜€μŒμ„ ν™•μΈν•˜μ˜€κ³  μΆ”κ°€μ μœΌλ‘œ dig와 같은 DNS 질의 λͺ…λ Ήμ–΄ 도ꡬλ₯Ό ν†΅ν•΄μ„œ DNS λ ˆμ½”λ“œκ°€ λ°˜μ˜λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

# SPF λ ˆμ½”λ“œ 확인
dig TXT example.com +short
"v=spf1 include:_spf.google.com ip4:xxx.xxx.xxx.xxx a:mail.example.com ~all"
# DKIM λ ˆμ½”λ“œ 확인
dig TXT google._domainkey.example.com +short
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoamWoQQ5zEdcFQnGaWN055oT3sEnCgN5bcAze5R6uvI1P" "X4d+CGbNDSVJqOmQPyrJdK2fOVG3hvjMkoilYcgWrGKDat2Nh29ftN5tTx5SVK/kl+5aPKRd9q6q9c9EWL7aRS2hqoGRyzW0Nb0ilKZc/" "odDbh3bgNhN6AJqIZwlE9BJgkYT5aT6TGJM/Vi4GJcYDEKm6yDexTJKzfZ8o8TCRDufCYDF8F+dKKyLvyaKrngfgIjRi5PiGVGbyNrIL7iMp1CkJ7ErpkYCJw5DeTQkXi8Gxt+Km61sIP2F8IZyd/" "WrEXJmk2pHzRfiJJqIiY4r3s4loR/sJ4hQPS6HEq7JQIDAQAB"
# DMARC λ ˆμ½”λ“œ 확인
dig TXT _dmarc.example.com +short
"v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com; ruf=mailto:postmaster@example.com"

λ°œμ‹  도메인 μ‹ λ’° 확인

도메인 기반의 인증 λ§€μ»€λ‹ˆμ¦˜μ΄ μ μš©λ˜κ³ λ‚˜μ„œλŠ” μˆ˜μ‹ λœ 이메일이 슀팸으둜 λΆ„λ₯˜λ˜μ§€ μ•Šκ²Œ λ˜μ—ˆκ³  원본 메일 정보λ₯Ό ν™•μΈν•˜λ©΄ SPF, DKIM, DMARC에 λŒ€ν•œ 검증이 ν†΅κ³Όλœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

원본 메일을 ν™•μΈν•˜λŠ” 것은 μ„œλ²„ 인프라 μ—”μ§€λ‹ˆμ–΄λΆ„μ΄ μ•Œλ €μ£Όμ…¨μ–΄μš”! 😁

SMTP μ„œλ²„λ₯Ό Amazon SES둜 μ „ν™˜ν•˜λŠ” κ²½ν—˜μ„ ν†΅ν•΄μ„œ 이메일이 정상적인 κ³³μœΌλ‘œλΆ€ν„° λ°œμ‹ λ˜μ—ˆλ‹€λŠ” 것을 κ²€μ¦ν•˜κΈ° μœ„ν•΄μ„œ 도메인 λ ˆμ½”λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λ§€μ»€λ‹ˆμ¦˜μ„ μ΄μš©ν•œλ‹€λŠ” 지식을 μ•Œκ²Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μˆ˜μ‹ λœ 이메일을 κ²€μ¦ν•˜λŠ” 과정을 더 μžμ„Έν•˜κ²Œ μ•Œκ³  μ‹Άλ‹€λ©΄ μ΄λ©”μΌμ˜ SPF/DKIM/DMARCκ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μΈν„°λž™ν‹°λΈŒν•˜κ²Œ 보기λ₯Ό μ΄μš©ν•΄λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

μ°Έκ³