실습과제 결과
이전 실습과제는 server(b)에 mail.it.ac.kr이라는 메일 서버를 추가로 구축하여 mail.cs.ac.kr과 메일을 주고받아 보는 것이었다. server와 server(b)에 각각 peng과 soo라는 계정을 생성하여 client(kubuntu)의 evolutiond으로 서로 메일을 주고 받아 보았다. 메일을 주고받는 모습은 아래 영상으로 확인할 수 있다.
새로 배운 내용
이번 시간에는 메일 서버에 관한 전반적인 내용을 배울 수 있었다. 우선 메일 송수신에서 사용되는 프로토콜에는 SMTP, POP3, IMAP의 세 가지가 있다. SMTP는 client가 메일을 보내거나 메일 서버끼리 메일을 주고 받을 때 사용하는 프로토콜이고, POP3의 경우 메일 서버에 도착해있는 메일 내용을 client로 내려받을 때 사용하는 프로토콜이다. 마지막으로 IMAP은 POP3와 유사하나 중앙 서버와 장치들이 동기화된다는 특징이 있다. 때문에 연결된 모든 장치에서 동일한 이메일 내용을 확인할 수 있으며, 우리가 스마트폰과 컴퓨터에서 모두 메일을 확인할 수 있도록 해주는 것이 바로 이 IMAP이다. 이번 실습에서는 sendmail이라는 패키지를 이용하여 메일서버를 구축하고 사용해 보았다. 또한 powershell을 설치하여 이를 통해 원격 접속하여 리눅스 server와 server(b)에 메일서버를 구축해보았다. 실습 과정은 다음과 같다.
우선, server와 server(b)에 원격 접속에 사용될 계정을 adduser명령을 통해 생성한다. 그리고 openssh-server를 설치해준 후 systemctl restart/enable ssh를 해주고 방화벽에서 22번 포트를 허용해준다.
이어서 windows사용자의 경우 본인의 컴퓨터에 poweshell을 설치해주어야 하는데, powershell은 Microsoft Store에서 찾아 설치하면 된다. powershell을 열고 ssh (계정)@(IP주소)를 입력하면 해당 IP주소로 원격접속할 수 있다.
- DNS서버 구축
이제 DNS서버를 구축해주어야 하는데, 이번에는 server(b)에 DNS를 구축하고 server(b)와 server에 각각 메일 서버를 구축하였다. 우선 bind9과 bind9utils를 설치하고 /etc/bind/named.conf.options에서 설정을 다음과 같이 변경해준다.

그리고 /etc/bind/named.conf 파일에 들어가서 아래와 같이 메일 서버 정보를 등록해준다.

다음으로 /etc/bind/폴더로 들어가서 cs.ac.kr.db 파일과 it.ac.kr.db 파일을 생성해준 후 각 파일에 다음과 같은 내용을 각각 작성해주었다.


작성이 끝났으면 각 내용을 저장하고, 아래와 같이 named-checkconf 명령과 named-checkzone 명령을 입력하면 작성한 내용들 중 오류가 있지는 않은지 검사가 가능하다.

오류가 없다면 systemctl restart/enable named 명령을 입력하여 bind9을 재시작하고 자동으로 동작할 수 있도록 설정한다. 그리고 server와 server(b)에서 ufw disable 명령으로 방화벽을 잠시 꺼둔다. 이는 나중에 client로 메일을 보내고자할 때 포트를 열어주는 과정을 생략하기 위함이다. 마지막으로 server와 server(b)의 /etc/resolv.conf 파일에서 nameserver의 IP주소를 server(b)의 IP주소로 변경해주면 DNS서버 설정이 끝난다.
- 메일 서버 구축
다음으로 메일서버를 구축하는 방법은 다음과 같다. 우선 server와 server(b)에 sendmail을 설치해준다. 그리고 /etv/hostname에서 기존의 hostname을 변경해주는데, server의 경우 mail.cs.ac.kr로, server(b)의 경우 mail.it.ac.kr로 변경해주었다.
이어서 /etc/hosts 파일에서 ip - url 내용을 추가해준다. server의 경우 (server의 IP주소) <tab> mail.cs.ac.kr 내용을 추가해주고, server(b)의 경우 (server(b)의 IP주소) <tab> mail.it.ac.kr 내용을 추가해준다.
server와 server(b)의 /etc/mail/local-host-names 파일에 각각 mail.cs.ac.kr과 mail.it.ac.kr을 추가해준 다음 두 서버를 reboot한다.
서버가 다시 켜졌으면, 두 서버 모두 /etc/mail/sendmail.cf 파일의 98번째 줄의 내용을 각각 Cwcs.ac.kr과 Cwit.ac.kr로 변경하고 269행과 270행의 끝에 Addr=127.0.0.1을 삭제한다. 이는 자기 자신만이 아니라 외부에서도 메일을 보낼 수 있도록 설정해주는 것이다.
다음으로 두 서버의 /etc/mail/access 파일에 아래와 같은 내용을 추가해주고 makemap hash /etc/mail/access < /etc/mail/access 명령을 입력한 뒤 systemctl restart/enable sendmail 을 해주면 된다.

그 후 두 서버에 dovecot-pop3d를 설치해준다. dovecot은 사용자에게 메일 박스의 내용을 보내주는 역할을 한다. 설치 후 /etc/dovecot/dovecot.conf 파일에서 30행과 33행의 주석을 제거하고 34행에 disable_plaintext_auth = no를 추가해준다. 그리고 /etc/dovecot/conf.d/10-mail.conf 파일의 121행의 주석을 제거하고 맨 뒤에 mail을 추가해준다. 마지막으로 166행의 주석을 제거해준 다음 systemctl restart/enable dovecot을 해주면 된다.
이제 다음으로 메일이 잘 전송되는지 확인하는 과정만이 남았다. 그 전에 server에는 peng계정을, server(b)에는 soo 계정을 추가해주었다. 또한 nslookup으로 각 메일 서버의 IP주소가 잘 검색되는지도 확인해보았다.


client로 메일 전송을 테스트해보기 전에, server에서 바로 메일을 시험적으로 보내볼 수 있다. 두 가지 방법이 있는데, 첫 번째는 echo "Subject: (제목)" | sendmail -v (보낼 계정의 메일 주소) 를 입력하는 것이다. 두 번째는 mail.txt라는 파일을 만들어 아래와 같이 작성하고, sendmail -vt < ~/mail.txt 명령을 입력하는 방법이다. 첫 번째 방법의 경우 내용을 보낼 수 없다는 단점이 있으나 두 번째의 경우 내용을 따로 추가하여 보낼 수 있다.
To: peng@cs.ac.kr
Subject: sendmail test
From: soo@it.ac.kr
- Client에 Evolution 설치하기
우선 Kubuntu에서 터미널을 열고 evolution을 설치한다. 그리고 '네트워크 연결 -> IPv4'로 들어가 아래와 같이 설정해준다.

그 후 Kubuntu를 재부팅하고 /etc/resolv.conf에서 nameserver의 IP주소를 server(b)로 변경해주었다. 아래 사진은 Client에서 nslookup으로 메일 서버의 IP주소가 잘 나오는지 확인한 것이다.

다음으로 evolution을 열고 계정을 추가해주었다. 우선 Identity에서 Full name에 peng을 입력하고 Email Address에 peng@cs.ac.kr을 입력해주었다. 그 다음으로 나오는 설정들은 아래 사진과 같이 설정해주면 되고, 다른 것들은 다 기본설정으로 유지해주면 된다. soo 계정을 추가하는 방법도 이와 동일하다.


문제가 발생하거나 고민한 내용
이번 실습에서는 다른 실습에서보다 많은(!) 오류를 만나볼 수 있었다.
첫 번째 에러) powershell에서 server로 원격 접속이 안되는 에러가 발생하였다. powershell을 설치하고 원격 접속을 시도하였는데, 아래와 같은 오류 메시지가 나타났다.

하지만 해당 오류는 교수님의 강의 중에서도 만나볼 수 있는 오류라, 교수님이 해결하시는 모습을 보며 차근차근 해결해나갈 수 있었다. 해결 과정을 간단히 정리하자면 다음과 같다.
1. 우선 cd \Users\user\.ssh\를 입력하여 오류가 발생하는 파일이 있는 디렉토리로 이동한다.
2.ls 명령으로 known_hosts 파일을 확인한 뒤 rm .\known_hosts를 입력하여 해당 파일을 삭제해준다. (만약 known_hosts.old 파일도 있다면 그 파일도 지워주면 된다)
3. notepad .\config를 입력하여 config파일의 내용을 확인하고, 내용 중에 잘못된 것이 있다면 고쳐준다.
4. 다시 원격 접속을 시도해보면, 아마도 잘 접속이 될 것이다!
두 번째 에러) DNS서버를 구축하고 systemctl enable bind9을 시도하는데 아래와 같은 오류 메세지가 나타났다.

구글링을 해보니, bind9이 아니라 named로 입력하면 해결할 수 있다고 하여 systemctl enable named를 입력하였더니 정상적으로 작업이 수행되었다. 교재도 찾아보니 systemctl restart/enable을 할 때 bind9이 아닌 named로 입력하고 있다. 처음에 restart를 했을 땐 bind9으로도 잘 되었는데, 혹시나하는 마음에 restart도 named로 다시 수행하였다.
세 번째 에러) 사실 이 세 번째 에러가 나를 가장 괴롭게 만들었다. DNS서버와 메일 서버의 구축을 모두 마치고 터미널 창에서 시험삼아 peng@cs.ac.kr에서 soo@it.ac.kr로 메일을 보내보았는데, 아래와 같은 오류 메세지가 계속 나타났다.

host unknown... 구글링을 해보니 계속 DNS서버를 확인해보라고 해서 DNS서버를 몇 번이고 확인해 보았는데, DNS 서버에서는 문제가 발견되지 않았다. 그렇게 server와 server(b)를 지웠다가 다시 설치하는 것을 3번이나 반복하고 나서야 문제의 원인을 찾을 수 있었다. 바로 두 서버의 /etc/mail/access 파일을 수정할 때 server에서는
cs.ac.kr <tab> RELAY
192.168.85 <tab> RELAY
만을 입력하였고 server(b)에서는
it.ac.kr <tab> RELAY
192.168.85 <tab> RELAY
만을 입력한 것이 문제였다. 나는 192.168.85 <tab> RELAY의 의미가 192.168.85. _ _ _인 컴퓨터의 릴레이를 허용하는 것이라 하여 따로 다른 메일 서버는 입력하지 않아도 되는 줄 알았는데, 두 서버의 /etc/mail/access 파일에 모두(!)
cs.ac.kr <tab> RELAY
it.ac.kr <tab> RELAY
192.168.85 <tab> RELAY
이와 같이 입력해주어야 한다는 것을 알게 되었다. 이처럼 내용을 수정한 후 sendmail을 재시동하였더니 it.ac.kr과 cs.ac.kr이 서로 메일을 주고 받을 수 있게 되었다.
참고할 만한 내용
위의 "문제가 발생한 내용"에서 세 번째 에러를 해결하고자 구글링을 할 때 찾은 사이트이다.
https://docs.oracle.com/cd/E37933_01/html/E36535/mailadmin-219.html
오류 메시지 해결 - Oracle Solaris 11.1에서 sendmail 서비스 관리
오류 메시지 해결 이 절에서는 일부 sendmail 관련 오류 메시지를 해결하는 방법에 대해 설명합니다. http://www.sendmail.org/faq를 참조할 수도 있습니다. 다음 오류 메시지에는 다음과 같은 유형의 정보
docs.oracle.com
oracle 사이트인데, sendmail과 관련된 오류 메시지의 해결 방법이 잘 정리되어 있다.
회고
회고를 작성하려니 한 문장 밖에 생각이 나지 않는다.
하얗게 불태웠다....

'Linux 실습일지' 카테고리의 다른 글
Linux 실습일지(14) - 방화벽과 Docker (0) | 2023.02.02 |
---|---|
Linux 실습일지(13) - Web Server (0) | 2023.02.02 |
Linux 실습일지(11) - DNS Server (0) | 2023.02.02 |
Linux 실습일지(10) - VNC Server (1) | 2023.02.02 |
04 프로그램 개발 환경 구축 (0) | 2023.02.02 |