오랜만에 작성하는 Linux 포스팅이다. 사실 1월 중에 언제라도 시간이 되면 빨리 작성을 시작해야겠다고 마음먹었던 메일서버 구축 포스팅인데, 코로나때문에 밀린 일이 많다보니, 1월 중순까지 도저히 시간이 나지 않았다. 테스트 진행 후 포스팅을 해야하는 Linux 특성도 있었고... 어쨌든, 이번 포스팅에서는 Linux의 메일 서버의 개요에 대해 이야기해보려 한다.
1. Linux 내에서 메일 서버의 필요성
(1) 관리자가 사용자에게 중요하지 않은 내용의 메세지 전달에 사용
Linux는, 관리자가 Linux에 현재 접속하여 사용중인 사용자에게 공지 알림을 줄 수 있는 명령어가 존재한다. 바로 wall 명령어와 write 명령어인데, 시스템을 종료해야 해서 사용자에게 공지를 한다던가, 특정 사용자가 시스템을 해집고 다니는 이상 징후를 발견했을 때 경고 공지를 주는 식으로 사용한다. wall은 전체 사용자에게, write는 특정 사용자에게만 공지를 한다는 차이점이 있다.
문제는, 정말 중요하지 않은 공지사항을 모든 사용자가 봐야 할 필요가 있을 때, wall 과 write 명령어로는 접속하지 않은 사용자에게 이를 알릴 방법이 없다는 것이다.
Linux 내에 메일 서버가 설치되어 있다면, 이 메일 서버를 이용하여 각 사용자에게 메일 전달이 가능한데, 접속하지 않은 사용자에게 메일이 전달된 경우, 해당 사용자가 접속 후 메일함을 확인하면 당시 확인하지 못한 공지 내용을 볼 수 있다.
(2) 다른 도메인을 사용하는 서버로 메일 송/수신
위의 예시처럼, Linux 사용자 중 한 명이 sudo와 같이 권한 이상의 명령어를 수행할 때, 종종 관리자에게 메일이 날아가는 경우가 있다. 하지만 일반적인 기업 환경에서 root와 같은 superuser 계정을 사용할 수 있도록 허용해 놓은 곳이 많지 않을 뿐더러, 설령 root 계정을 사용한다고 하더라도 관리자가 Linux에 일일이 접속하지 않는 이상 경고 메일을 확인하기는 불가능하다.
따라서, Linux를 기반으로 하는 서버를 사용하는 대부분의 기업은 이러한 System 알람 메일이 자신들이 주로 확인하는 메일 주소로 날아오도록 설정을 많이 하며, 이를 위해 Linux 내부에 메일 서버(서비스)가 필수적으로 설치되어 있어야 한다.
관리자 뿐만 아니라, 일반 사용자에게도 메일 서버는 매우 활용도가 높은데, 우리가 일반적으로 사용하는 Nav**나 Daum과 같은 이메일 서비스 역시 메일 서버로 인해 타 도메인(Daum -> Nav**라던지 반대로 Nav** -> Daum)으로 전송할 수 있기 때문이다.
2. 메일 서버의 프로토콜 및 동작 원리
메일 송/수신은 둘 이상의 프로토콜이 관여하는, 이전에 보았던 다른 서비스보다 조금 더 복잡한 절차를 가진다. 우선, 메일을 직접 Linux에서 보내느냐, 아니면 Outlook Express와 같은 별도의 메일 프로그램을 통해 전달하느냐에 따라 동작 과정이 조금 달라진다. 두 메일 서버 구조를 그림으로 나타내면 아래와 같다.
메일 송/수신에 관여하는 프로토콜은 크게 아래와 같이 구분할 수 있다.
- 사용자 <-> 메일서버: 별도의 MUA가 설치되어 있는 경우. IMAP 및 POP3 프로토콜)
- 메일서버 <-> DNS 서버: DNS 프로토콜, 그림에서는DNS가 빠져있다. DNS 서비스는 이곳의 내용을 참고하자)
- 메일서버 <-> 메일서버: SMPT 프로토콜
가장 중요한 프로토콜은 메일서버 간 동작하는 프로토콜인 SMTP다. 먼저 SMTP에 대해 간략하게 알아보고, DNS를 제외한 나머지 프로토콜도 살펴보도록 하자.
(1) SMTP 프로토콜(MTA)가 사용
메일 서버의 MTA(Mail Transfer Agent)는 다른 메일 서버로 메일을 전송하거나 수신할 때, SMTP, Simple Mail Transfer Protocol을 사용한다. 약자의 풀이말에서 알 수 있듯이 이 프로토콜은 메일 전달 및 수신과 관련된 프로토콜이며 TCP/25번을 사용한다. 이 프로토콜이 하는 역할을 단순하게 요약하자면, 사용자가 보내고자 하는 메일을 받아, 목적지 주소의 도메인에 존재하는 다른 메일서버에 이 메일을 전달하는 것이다. 그림으로 나타내면 아래와 같이 나타난다.
다른 프로토콜과 마찬가지로, MTA 동작을 위한 서비스를 rpm 파일 또는 yum 명령어 등으로 설치해야 한다. 여러 서비스가 있는데 대표적인 것으로는 sendmail과 postfix라는 서비스가 있다. postfix는 Linux 설치 시, 메일 서버를 사용한다는 설정을 걸어놓으면 기본으로 제공되는 서비스이며, sendmail은 별도로 설치를 진행해야 하는 서비스다. 현재 CentOS에서 사용을 권고하는 서비스는 postfix다.
(2) IMAP, POP3
이 두 프로토콜은 MUA를 사용할 때 활용되는 프로토콜이다. Outlook 등의 프로그램 사용 시, 사용자가 작성한 메일을 MTA로 전송하거나, 반대로 MTA에 도착한 메일을 Outlook 프로그램으로 다운받는 역할을 한다.
두 프로토콜의 기능에는 큰 차이가 없다. 다만 차이점이 있다면 사용하는 포트 번호가 다르다는 것과, 메일 서버에 저장된 메일을 가져올 때, 가져온 메일을 메일 서버에서 삭제하느냐 아니냐의 차이만 있다. 이를 정리하면 아래와 같다.
- IMAP(Internet Mail Access Protocol) : TCP/143, 메일 서버에서 직접 메일 관리하며, MUA에서는 수신 메일을 직접 서버에서 읽어들이기 때문에 메일 서버에서 /var/spool/mail의 내용을 삭제하지 않음.
- POP3(Post Office Protocol 3): TCP/110, 클라이언트 프로그램(MUA)에서 직접 메일을 관리하며, 메일 서버에서 메일 다운로드 시, 서버에서 메일 삭제.
POP3는 메일 서버의 /var/spool/mail/에 존재하는 메일을 삭제하기 때문에, 메일 서버가 축적되는 메일에 의해 용량 부하가 심해지지 않으며, 메일 서버와의 통신이 끊기더라도 Offline에서 저장되어 있던 메일을 확인할 수 있다는 장점이 있다. 대신 통신이 끊긴 시점부터는 메일 서버에 새 메일이 도착하더라도 이를 MUA에서 확인할 수 없기 때문에 직접 메일 서버로 접속하여 확인해야 한다는 불편함이 있다.
IMAP는 메일 서버와 통신이 연결된 상태에서만 메일 확인이 가능하기 때문에 통신이 끊기는 경우, 이전에 받은 메일마저도 확인이 불가능하다. 더불어, 메일 서버에서 메일 삭제가 진행되지 않기 때문에 메일이 많이 축적되는 경우 서버의 용량 부하도 POP3에 비해 쉽게 일어난다. 따라서 대용량의 메일 서버를 제공할 수 있는 포털 기업들은 보통 IMAP을 사용한 메일 서비스를 제공한다.
IMAP과 POP3 프로토콜 역시 별도의 서비스를 이용하는데, CentOS는 dovecot이라고 불리는 서비스를 권장하고 있다.
이번 포스팅에서는 Linux의 메일 서버 필요성과, 동작 과정, 그리고 동작에 사용되는 프로토콜의 종류와 기능에 대해 간략히 알아보았다. 다음 포스팅에서는 Linux의 기본 서비스인 Postfix를 사용하여 메일 서버 구축과 설정을 진행하고, 메일을 전송함으로써 서버가 잘 동작하는지 확인해보려 한다. IMAP과 POP3 관련 포스팅은 그 다음에 진행할 예정이다.
Fin.
'IT Security > LINUX Basic' 카테고리의 다른 글
37. Linux - yum, rpm 대신 소스파일로 프로그램 설치하기 (0) | 2021.05.31 |
---|---|
36. Linux - 메일서버 구축 및 메일 전송2 - Postfix 설정 및 메일 전송 (0) | 2021.05.02 |
34. Linux - NTP 서버 설치 및 시간 동기화2 (0) | 2020.12.09 |
33. Linux - NTP 서버 설치 및 시간 동기화1 (0) | 2020.10.25 |
32. Linux - rpm 명령어 기본 사용법3(의존성 외) (0) | 2020.10.25 |
댓글