SMTPS(Simple Mail Transfer Protocol Secure)는 전자메일을 보내고 받을 때 사용되는 프로토콜인 SMTP의 보안 버전이다. HTTPS와 마찬가지로 송수신되는 데이터를 암호화하여 전자메일 통신의 보안을 강화할 수 있다.

SMTPS도 HTTPS와 같이 TLS 암호화를 사용하기 때문에 SMTPS 서버 구축 시 SSL 인증서 발급을 필요로 한다. SSL 인증서 발급에 대해서는 ‘서비스식별: HTTPS (443)’를 참고하여 진행할 수 있다.

SMTPS 서버 구축을 위해서는 기본적인 메일 서버를 구축해야 한다. 이를 위해 ‘Ubuntu 20.04’ 운영체제를 사용하였으며 서비스는 ‘Postfix’를 사용했다. 부가적으로 ‘Dovecot, MySQL’ 서비스도 함께 사용하였다. 구축 과정이 상당히 길기 때문에 이에 대해 적는 대신 아래 링크를 참고하면 된다.

 

How To Configure a Mail Server Using Postfix, Dovecot, MySQL, and SpamAssassin | DigitalOcean

 

www.digitalocean.com

메일 서버 구축이 끝나면 mxtoolbox.com/SuperTool.aspx 라는 링크에서 구축한 메일서버에 대한 테스트를 간단히 진행할 수 있다.

 

이렇게 서버 구축을 하고 나면 기본적인 SMTP 메일 서버로의 기능을 사용할 수 있다. 그러나 이 상태에서 서버의 네트워크 연결 상태를 확인하면 465번 포트는 활성화되어 있지 않을 것이다. Postfix에서는 465번 포트를 활성화시키기 위해 별도로 설정 파일을 수정해야 한다. 이에 대한 과정도 참고할 수 있도록 링크를 남겨둔다. 이 과정까지 마치면 비로소 465번 포트를 이용하여 SMTPS 통신을 수행할 수 있게 된다.

 

Enable SMTPS Port 465 in Postfix SMTP Server For Email Submission

This tutorial will be showing you how to enable SMTPS port 465 in Postfix SMTP server, so Microsoft Outlook users can send emails. SMTPS stands for Simple Mail Transfer Protocol Secure.

www.linuxbabe.com

 

통신 테스트를 위해 python의 ‘smtplib’ 라이브러리를 사용하여 간단한 테스트 코드를 작성하였다. 이 코드는 SSL을 사용하여 SMTP 연결을 시도한다. 연결 시도 시 SSL 프로토콜을 필요로 하기 때문에 SMTP 서버이더라도 SMTPS 통신을 사용하지 않을 경우 SMTPS 서비스로 판단하지 않는다.

import smtplib

def test_SMTPS(mail_server):
	result = ''
    try:
    	smtp = smtplib.SMTP_SSL(mail_server, 465)
        smtp.quit()
    except:
    	result = 'no service'
    else:
    	result = 'on service'

if __name__ == "__main__":
	mail_server = '<mail server domain or IP address>'
    print(test_SMTPS(mail_server))

 

이러한 과정을 네트워크 패킷 레벨에서 확인한 결과는 다음과 같다. 

연결 성공 시 TCP 3-way handshake에 성공하며 그 이후 암호화 통신을 사용하여 데이터를 교환한다. [그림 1] 그러나 연결에 실패할 경우 서버로부터 TCP RST 패킷을 반환 받는다. [그림 2]

그림 1
그림 2

 

'Penetration testing' 카테고리의 다른 글

서비스 식별: PostgreSQL (5432)  (0) 2023.09.01
서비스 식별: Submissions (587)  (0) 2023.09.01
서비스 식별: HTTPS (443)  (0) 2023.09.01
서비스 식별: LDAP (389)  (0) 2023.09.01

+ Recent posts