티스토리 뷰
이번 시간에는 메일 서버의 작동방식을 이해하고, 이를 구현해보는 시간을 가졌다.
-새로 배운 내용
<이론>
이메일의 송수신에서 사용되는 프로토콜
- SMTP : 클라이언트가 메일을 보내거나, 메일 서버끼리 메일을 주고받을 때 사용
- POP3 : 메일 서버에 도착되어 있는 메일을 클라이언트로 가져올 때 사용 (서버에서 로컬 장치로 다운로드, 서버에 있던 것은 삭제됨)
- IMAP : 중앙 서버에서 동기화, 모든 장치에서 동일한 이메일을 확인 할 수 있음
-리눅스에선 인터넷에서 메일을 전송하기 위해 sendmail 패키지를 사용한다. SMTP, 25번 포트를 사용함
-dovecot : 리눅스/유닉스 계열 시스템 용. a, b 전자메일 서버
a. POP3
b. IMAP
메일 서버 < ----- > 네임 서버 < --- > 캐시 DB
:
:
:
메일
클라이언트
<실습>
- 캐시 DB에 zone 파일 설정해두기 (/etc/bind/named.conf.local 에 기재)
zone "cs.ac.kr" IN {
type master;
file "/etc/bind/cs.ac.kr.db";
};
- ufw disable (실습이므로 방화벽을 잠시 중지시킴)
- server 이름 변경 시 vi /etc/hostname 에서 변경
- ip 주소 추가 시 vi /etc/hosts 에서 변경
- 메일 서버의 DNS 서버 주소 변경 시 vi /etc/resolv.conf 에서 변경
-문제 발생
수업 내용을 실습하는데 문제가 생겼다. server 에서 메일 서버를 구축하고, sendmail 테스트를 할 때였다.
echo "Subject: sendmail test" | sendmail -v peng@cs.ac.kr 를 입력했는데 메일이 보내지지 않고 연결이 끊겨버렸다.
계속 ssh 에 접속하려해도 Connection timed out 이란 문구가 뜨면서 접속이 되지 않았다. 명령어 실행은 되지만 반응이 느린 경우, 이러한 문구가 뜬다고 한다. 나는 open ssh 설치를 마친 서버로 초기화해 다시 따라해보니 됐다. 중간에 오타를 낸 듯하다.
*실습 과제*
- 기존 Server(b) 에 메일 서버를 추가로 구축해 이메일 주고 받기.
- 호스트 이름 / 메일 서버 주소 : mail.it.ac.kr
- 사용자 계정 : soo
내 컴퓨터에서의 ip 주소
Server : 192.168.203.146 |
Server-b : 192.168.203.131 |
네임 서버로 쓰던 server-b에 메일 서버를 추가로 구축하는 실습을 진행했다. 이를 위해서는
vi /etc/bind/named.conf.local 파일에 "it.ac.kr" zone 파일 하나를 더 만들어야 한다. db 파일도 새로 작성한다.
실습 도중 발생한 문제점은 메일 서버를 구축하기 위해 서버 이름을 변경하려고 vi /etc/hostname 명령을 이용해 바꾸었음에도 불구하고, restart를 하게 되면 초기화가 되어 다시 원상복귀되는 것이었다. (문제점 1 : 재부팅 시 초기화 되는 hostname)
이를 해결할 방법을 검색하다가 한 포스팅을 찾게 되었다.
https://m.blog.naver.com/onlyu/221496129210
이 방법대로 하니 더이상 초기화가 진행되지 않았다. (/etc/cloud/cloud.cfg 파일이 있을 경우 파일 내용 중
preserve_hostname을 true로 수정후 재부팅)
그리고 또 한가지의 문제점은 vi /etc/resolv.conf를 통해 변경 후 저장한 내 호스트명까지 재부팅 시 원상복귀 되는 것이었다. 여러번 반복해봐도 문제는 해결되지 않았다. 검색을 통해 우분투 18.04에서 네임서버 IP 고정하는 법을 찾았다.
https://m.blog.naver.com/onlyu/221510173530
vi /etc/resolvconf/resolv.conf.d/head 를 이용해 이 파일 안에 네임서버 ip 주소를 입력하고
systemctl restart(->enable , (상태 확인)status) resolvconf 재구동시키면 해결되는 문제였다.
이 파일 안에 네임서버 ip 주소를 입력하면 resolv.conf 파일 맨 위에 기입한 내용이 저장된다.
기존 네임서버 ip 주소는 주석처리 한다.
Client 의 콘솔 창에서 nslookup 명령을 실행한 결과이다. server의 ip 주소는 기존의 127.0.0.53으로 등록되어있었다.
이때 server 192.169.203.131 로 설정해주면 바뀐다. 이후 mail.cs.ac.kr 과 mail.it.ac.kr 를 살펴보았는데
네임 서버의 주소는 server-b의 ip 주소인 192.168.203.131이었고, 메일 서버 주소는
mail.cs.ac.kr 의 경우 : server의 ip 주소인 192.168.203.146으로,
mail.it.ac.kr 의 경우 : server-b의 ip 주소와 동일했다.
이후 evolution 프로그램을 설치 후, 실행하여 peng(peng@cs.ac.kr)과 soo(soo@it.ac.kr) 계정 두개를 만들어 서로 메일을 주고 받아보았다. 정상적으로 동작되었다.
이전에는 nslookup 명령을 실행했을 때 위와 동일하게 나오지만 메일 송수신이 되지 않았었다.
550 host unknown 이라는 문구와 함께 메일이 회신되었다.
이는 수신인의 네임서버를 찾지 못했을 때 발생하는 에러라고 한다.
resolv.conf에서 네임서버가 재부팅 시 초기화된다는 것을 알지 못했을 때 이러한 실수가 발생했었다.
따라서 이 오류가 발생하면 vi /etc/resolv.conf를 확인해보기 바란다.
-참고 URL : 위 블로그 포스팅 참고
-회고
평소 이메일을 자주 이용하면서도 메일 서버가 어떻게 연결되어 있는지는 생각하지 못했는데, 이를 이번 시간에 배우게 되어 재밌고 신기했다. 리눅스에서 메일 서버를 구축하는데 큰 도움을 준 sendmail 패키지도 처음 알았는데굉장히 유용하다고 느꼈다. 그리고 이메일 송수신에 사용되는 3가지의 프로토콜(SMTP, POP3, IMAP)의 용도와 POP3와 IMAP의 차이점을 배웠다. (POP3는 다운로드! IMAP은 동기화!)
사실 이번 실습에선 예상 외인 문제들이 좀 많이 생겨서 다른 실습보다 어렵기도 했고 시간도 많이 걸렸었다.
어느 곳에서 잘못되어 오류가 발생한지를 찾는 것이 어려워 많이 헤맸었다. 그래도 성공하니 기쁨은 배로 찾아왔다...ㅎㅎㅎ메일 서버를 구현하기 위해선 먼저 네트워크 환경을 이해하는 것이 중요한 것 같다. 처음에는얼추 이해한 것 같아 바로 실습을 했었는데 머릿속에서 개념이 섞여서 오류가 발생하면 어쩔 줄 몰랐다. 그래서 수업 내용 실습 중 Connection timed out 오류가 발생했을 때 검색 해보다가 그냥 지우고 처음부터 다시 하는 방법을 썼는데, 지나고 생각해보니 이때 '해결법을 좀 더 찾아서 지우지 않고도 해결하는 방법을 써볼걸..' 하는 약간의 아쉬움이 남는다. 실습 과제를 진행하면서 메일이 어떻게 전송되는지를 다시 공부하고 나니 처음 실습때 보다 괜찮았다. 오류가 발생하면 혹시 이쪽에서 문제가 있는 것이 아닐까? 하면서 예측해보고, 스스로 고쳐보는 시간도 가졌다. 비록 답을 스스로 찾지 못했더라도 이 시간은 학습에 큰 도움이 되었다. 메일 서버 구축은 조금 힘들었지만 나름 재미있었다!
'Ubuntu Linux 🐧 > [컴퓨터시스템관리] 실습일지' 카테고리의 다른 글
컴퓨터시스템관리) 13주차 실습일지 / 실습과제 (0) | 2020.06.13 |
---|---|
컴퓨터시스템관리) 12주차 실습일지 / 실습과제 - 데이터베이스 추가 (0) | 2020.06.07 |
컴퓨터시스템관리) 10주차 실습일지 (0) | 2020.05.24 |
컴퓨터시스템관리) 8주차 실습일지 (0) | 2020.05.08 |
컴퓨터시스템관리) 7주차 실습일지 (0) | 2020.04.30 |
- Total
- Today
- Yesterday
- 무료목업레퍼런스사이트
- 리액트state
- ReactAnimation
- 숫자표현JS
- 자바스크립트최단거리
- 프로그래머스
- graphql
- 프로세스스레드차이
- 프로그래머스js
- CSS디자인
- 가까운수js
- 리액트스크롤이벤트
- Graphql서버연결
- JS비동기
- 리액트
- 자바스크립트문법
- 자바스크립트프로그래머스
- 개인플젝
- 리액트스크롤
- 자바스크립트기초
- 리액트독학
- 웹디자인툴
- 리액트버튼누르면스크롤이동
- 프로세스
- 리액트스크롤애니메이션
- 자바스크립트미니프로젝트
- 스크롤내리면나타나는애니메이션
- 리액트커스텀훅
- graphql개념
- 토이프로젝트디자인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |