리눅스, 네트워크

메일서버 - 이론 기반 준비

베노 2025. 1. 5. 03:03

이전에 메일서버를 가동을 하여 네이버 및 구글등 메일 수/발신이 되었다

언젠가 내 능지가 처참히 무너지는걸 방지하고자 글을 싸질러볼려고 한다

물론 저번에도 글을 썼지만 누락된 내용들이 많고 나사가 하나 둘 빠진 증거품들도 많아서 다시 작성할려고 한다

 

우선 메일이 어떻게 보내지고, 받아지는지 알아야 한다

이런 시스템을 이해하기 위해서는 기본적으로 네트워크에 대해 어느정도 알아야 하며, 보안 또한 잘 알고있는게 좋다

하지만 이걸 보고 있는 사람이 어느 작은 유치원의 푸른소나무반에 다니는 어린이의 수준으로 한번 작성해볼려고 한다

 

메일을 주고 받을때는 네트워크를 사용한다는건 지나가다 버려진 개똥도 알고있을거다

하지만 네트워크에서는 수많은 종류와 단어, 개빡센 정보들이 있다

여기서 핵심적인것만 골라서 설명하는데 핵심은 프로토콜, 서버, 보안 이렇게 나눠본다

 


프로토콜


네트워크란 어떠한 정보를 주고받기 위한 하나의 수단이다 여기서 통신도 포함되는데 통신은 나를 포함한 다른것과의 소통하는걸 의미한다

네트워크는 우리 대한민국만 사용하는게 아니다

미국, 중국, 일본, 콜롬비아, 영국 등 다양한 나라들이 사용하고 있다. 우리가 어런 네트워크를 질서있고, 규칙성 있게 사용하기 위해 오래전부터 모든 국가들한테 약속한게 있는데 이게 바로 프로토콜이다.

쉽게 말해 다른 나라들에 있는 사람들과 통신을 원활하고, 질서있게 하자고 한 것이 프로토콜이다. 

통신을 할 때 주고받는 데이터는 다양하다. 이런 데이터의 종류에 따라 당연히 네트워크의 흐름이 바뀌고 이 통신을 받는쪽에서도 받는 방식도 다양하기에 이런 프로토콜을 지정한거다

 

예를 들면 내가 중국집에 들어가서 주문을 할려고 한다 하지만 그 중국집에는 나뿐만 아니라 여러 사람이 있을것이다

이때 내가 주문을 하는데 딱히 음식에 대한 미리 정의된 이름이 없다면 "불리고 삶은 콩에 밀과 소금을 섞어 발효 시키고 추가로 캐러멜 색소와 조미료로 섞은 소스기반으로 야채와 고기를 볶아 밀과메밀, 쌀, 감자 등 여러 곡물가루로 만든 반죽을 가늘고 길게 뽑아낸것과 섞어서 먹는 음식 주세요!"라고 했다. 이걸 나뿐만 아니라 다른사람도 먹고 싶은데 그 사람도 주문을  "원래 중국요리중 하나인 작장면인데 한국으로 유입된 뒤 변형된 검은 소스가 들어간 면 요리 주세요"라고 주문을 하여 주문이 2개가 들어갔다. 사실 이 주문은 "짜장면"을 가리키는건데 정의된 약속이 없다면 위와 같은 일이 일어난다. 주문을 넣었지만 주문을 받은 주방장은 "ㅅㅂ.. 뭔말이야 이게" 라는 생각으로 큰 혼란을 겪으면서 이상한 메뉴를 만들게 된다. 그래서 이런 문제를 방지하기 위해 "야 그냥 저걸 짜장면이라고 하자;" 라고 한다면, 단순하게 "짜장면 주세요"라고 하면 된다

이렇게 되면 네트워크 세상에서는 큰 문제 없이 질서와 규칙이 생기게 되면서 빠르고, 정확한 정답이 나오게 된다

 

서버가 이런 정보를 받기 위해 프로토콜에 따라 방화벽 설정이 되어있어야 한다

내 서버가 외부와 통신을 하기 위해 여러 정보를 받고 보내는데 여기서 중요한 정보를 외부로부터 받는다면, 명령을 받은 컴퓨터는 이걸 무조건 수행해야 한다 이렇게 된다면, 큰 보안유출이 된다. 이걸 막기 위해 방화벽이 적절한 요청을 보낸건지 체크해주는거다

쉽게 말해 미상의 사람이 청와대 앞에와서 "님들아 문좀열어주세요"라고 무작정 요청을 했다 신원이 불확실한 사람을 문 열어주면 그 사람이 어떤 깽판을 칠지 모른다. 그래서 이 요청이 신뢰한 사람인지, 안전한 요청인지 확인하기 위해 청와대 경호원들이 "님 누구임? 죽이기전에 말해" 라고 위협을 한다면, 신원미상의 남자는 "ㅈㅅㅠㅠ 사실 북한군이에요ㅠㅠ"라고 말한다면, 청와대는 안전하게 된다. 이때 청와대 경호원들이 방화벽과 같은 역할을 하고 이 원리가 방화벽의 원리다 보통 방화벽은 숫자로 되어있는 번호가 있는데 이는 미리 정의된 프로토콜에 따라 번호로 체크하는데 이를 "방화벽 포트번호"라고 한다. 프로토콜에 따라 포트번호가 다르고, 다양한 포트번호가 존재한다.

 

그럼 프로토콜을 이해했다고 가정하고, 메일시스템에서 사용되는 프로토콜이 무엇이 있는지 알아보면 된다

 

메일에서 주고받는 프로토콜은 크게 2가지가 있다

메일을 보내는 SMTP(Simple Mail Transfer Protocol)

메일을 받는 POP(Post Office Protocol)과 IMAP(Ineternet Message Access Protocol)이 있다

쉽게 보면 보내는거랑 받는거라고 생각하면 된다

 

SMTP

SMTP는 메일을 보내는 프로토콜이다. 즉 내서버가 구글이나 네이버로 보내는 메일이 있는데 이를 SMTP 프로토콜이라고 한다 SMTP 프로토콜번호는 25번이다.이 SMTP프로토콜은 1982년에 의해 정의된 프로토콜인데 2025년이 된 지금 보면 엄청 오래된 년도다.1982년의 IT기술과 2025년의 IT기술은 완전히 차이가 난다. 그로인해 당연히 보안에서 엄청 취약하다 사람들은 이 취약한 프로토콜번호를 보안하고, 위험한 취약점을 보안하여 새로 발표한 프로토콜을 만들었다 바로 SMTPS라는 새로운 프로토콜이다.

SMTP는 총 3개의 프로토콜번호가 있다

25번 포트 : 일반적인 보안이 없는 SMTP프로토콜이다. 보안이 없기에 매우 취약하며, 이를 권장하지 않는다

587번 포트 : 25번 포트와 다르게 보안이 적용 되어있지만, 처음 연결 시도 시 보안없이 연결을 시도 하고 그 후 보안을 적용한다. 이렇게 되면 처음 연결을 시도할 때 외부로 부터 공격이 들어온다면 역시 취약하다

465번 포트 : 25번 포트와 다르게 보안이 적용되어있다. 하지만 587번처럼 처음 연결 시 보안없이 연결을 시도하는게 아니라 처음연결부터 보안을 깔고 연결을 시도한다. 그로인해 3개의 SMTP포트중에서 제일 안전하다

 

POP, IMAP

POP과 IMAP은 메일을 받는 프로토콜이다. 즉 내 서버가 구글이나 네이버로부터 날아온 메일을 받아낸다 여기서 받는 프로토콜 종류가 2개이다.

POP : 서버에서 메일을 받았다면 해당하는 계정한테 알려준다. 그럼 이 계정은 서버로부터 메일을 다운로드를 해서 컴퓨터에 저장하게 된다. 이때 서버에서는 해당 메일을 삭제하고, 다운받은 메일은 그 컴퓨터에 저장하게 된다.

IMAP : 서버에서 메일을 받았다면 해당하는 계정한테 알려주낟. 그럼 이 계정은 서버로부터 접속을 하여 해당 메일을 볼수 있다. 이러면 서버에서는 여전히 메일이 존재하며, 해당 메일은 계정의 명령이 있거나 서버의 관리자의 명령이 전달되기전까지 계속 서버에 저장이 된다.

이 역시 각각의 장단점이 뚜렷하게 나타나는데 다시한번 정리하면 아래 표와 같다

  POP 프로토콜 IMAP 프로토콜
전달방식 해당 계정에서 메일 확인 시 컴퓨터로 다운로드 해당 계정으로 서버로 원격 접속하여 서버에서 확인
효율 서버에서 즉시 삭제되기 때문에 서버의 자원을 효율적으로 관리 가능 서버에서 즉시 접속하여 확인하기 때문에 자원 관리를 지속적으로 필요로 함
불편사항 먼저 확인한 기기(컴퓨터 및 휴대폰)에 저장하기 때문에 연동에 대한 불편함이 있음 서버에 계속 남아있기 때문에 받은 메일을 계속 보여준다면, 서버에서 많은 트래픽과 자원을 사용하여 유지비용이 비쌈

위 표와같이 다양한 장/단점이 있고 여기서 적지 않은 다른 장/단점이 있다

 

POP은 110번을 사용한다

IMAP은 143번을 사용하고, IMAP은 원격으로 접속하는것이기 떄문에 보안이 있는 993번 포트번호도 있다

 

이제 이 정보를 가지고 메일이 주고밭은 원리 기반으로 서버에 알아보자

 


서버


서버는 사실 하나의 컴퓨터라고 보면 쉽다

컴퓨터를 어떤 용도로 쓰냐에 따라 여러가지로 불리지만, 포괄적으로 서버라고 불린다

사용자들이 입력한 값을 저장한다면, 데이터베이스

사용자들을 하나의 컴퓨터에 접속시키면 서버

게임, 문서작업, 영상시청, 웹 검색을 하면 가정용컴퓨터

이렇게 불린다.

우선 메일서버가 정보를 주고 받는 방식을 알아보자

A서버에서 메일을 보내면 A서버의 25번, 465번, 587번 포트 중 하나가 작동하게 되면 통신을 보낼 정보를 만들어낸다 이걸 흔히 패킷이라고 한다. 이런 패킷을 가지고 프로토콜이 작동이 된다 그럼 그 정보를 우리가 원하는 서버로 보내면 그 패킷은 해당 서버로 간다. 그럼 그 서버에서 해당 패킷을 받으면 일단 방화벽이 낚아채서 패킷을 분석한다. 위험적인게 없다면 방화벽은 프로토콜 규칙에 따라 적절하게 처리한다. 만약 프로토콜이 보안성이 없는 프로토콜이라면 당연히 방화벽은 해당 프로토콜 규칙을 따라가는수밖에 없다 그래서 가능한 보안이 없는 프로토콜은 안쓰는게 좋다는 말이 여기서 나온다

해당 프로토콜에 따라 패킷을 받게 되면 서버(컴퓨터)에서 정보를 처리한다 이런 정보들이 네트워크 세상세 엄청 짧은 순간에 일어난다

 

 

보안부분은 메일시스템을 구축하면서 설명하는게 이해하는것도 빠르고 내가 설명하기 쉬울거같다

귀찮아서 그러는거 절대 맞는거다

 

잘못된 내용이나 궁금한거는 내 번호로 전화주면 정정해주겠다

'리눅스, 네트워크' 카테고리의 다른 글

네트워크 구축 1  (0) 2025.06.01
메일서버 - 서버에 메일시스템 설치하기  (0) 2025.01.10
메일서버 - 설정 및 구동하기  (1) 2024.04.20
메일서버 - 시작하기  (1) 2024.03.24
정보보안 - AP  (0) 2023.08.13