📝 메일 서버
- 메일 서버란 프로토콜을 통해 클라이언트와 클라이언트 간의 메일 송수신을 지원하는 서버이다.
- SMTP(Simple Mail Transfer Protocol): 클라이언트가 메일을 보내거나, 메일 서버끼리 메일을 주고 받을 때 사용하는 프로토콜
- POP3(Post Office Protocol): 메일 서버에 도착되어 있는 메일을 클라이언트로 가져올 때 사용하는 프로토콜
- IMAP(Internet Mail Access Protocol): POP3와 같음
📜 센드메일
- 센드메일(sendmail)이란 리눅스에서 제공하는 패키지 중 전자메일(E-mail)을 전송하기 위해 사용되는 프로그램으로써, 간단하게 설치하여 사용할 수 있다.
- 즉, 전자메일을 송수신하는 메일 서버에 설치되는 프로그램을 의미한다.
📜 메일 서버 구축 실습
- 메일 서버를 구축해보도록 할 것이며, 실습 구성도는 위와 같다.
- Server와 Server(B) 두 개의 가상머신에 메일 서버를 구축하여 각각의 도메인 이름을 mail.daum.net, mail.naver.com으로 지정할 것이며, 그에 대응하는 메일 클라이언트는 WinCilent와 Cilent 가상머신이다.
- 도메인 이름으로 daum.net과 naver.com을 사용해도 문제가 없는 이유는 사설 네트워크 안에서 이루어지는 활동이기 때문이다.
- Server 가상머신의 경우 메일 서버와 더불어 네임 서버의 기능을 수행한다.
📄 메일 서버에 sendmail 및 dovecot 설치
- 우선 아래 명령어를 통해 각각의 메일 서버에 sendmail과 dovecot 패키지를 설치해준다.
- sendmail은 메일을 보내는 기능을 하고, dovecot은 메일을 받아오는 기능을 수행한다.
- sendmail: 클라이언트 -> 서버
- dovecot: 서버 -> 클라이언트
# dnf -y install sendmail
# dnf -y install sendmail-cf
# dnf -y install dovecot
📄 메일 서버 기본 설정 및 구축
- 이제 현재 서버를 mail.naver.com 또는 mail.daum.net의 도메인 이름을 사용하는 메일 서버로 만들어주어야 한다.
- 이를 위해 먼저
/etc/hostname
파일을 아래와 같이 수정해준다.
# nano /etc/hostname
- 다음으로
/etc/hosts
파일에 아래와 같이 구문을 추가해준다.
# nano /etc/hosts
- 다음으로
/etc/mail/local-host-names
파일에 아래와 같이 구문을 추가해준다.
# nano /etc/mail/local-host-names
- 다음으로
/etc/sysconfig/network
파일에 아래와 같이 구문을 추가해준다.
# nano /etc/sysconfig/network
- 이후
hostname
명령어를 통해 현재 서버의 호스트명을 출력해보면 정상적으로 설정된 것을 확인할 수 있다.
- 다음으로
/etc/mail/sendmail.cf
파일로 이동하여 85행의 'Cwlocalhost'로 되어있는 부분을 아래와 같이 수정해준다.
- 추가로 267행의
Addr
옵션을 삭제해준다.
- 다음으로는
/etc/mail/access
파일에 아래와 같은 구문을 추가해준다.
- 위 과정은 메일을 전달하는 기능(RELAY)을 우리가 만든 메일 서버에 추가하는 것이다.
- 이후 위 설정 내용을 저장하기 위해 아래와 같은 명령어를 수행한다.
# makemap hash /etc/mail/access < /etc/mail/access
- 다음으로
/etc/dovecot/dovecot.conf
파일을 열어 24행과 30행, 33행의 주석을 해제해준다.
- 다음으로
/etc/dovecot/conf.d/10-ssl.conf
파일을 열어 8행의ssl = required
구문을 다음과 같이 수정한다.
- 다음으로
/etc/dovecot/conf.d/10-mail.conf
파일을 열어 25행과 121행, 166행의 주석을 해제해주고, 121행의 경우 구문 뒤에 아래와 같이 문장을 추가해준다.
- 이렇게 하면 현재 서버를 mail.naver.com을 도메인으로 하는 메일 서버로 구현하는 기본적인 설정 및 구축은 끝났다.
- 위 과정과 마찬가지로 Server(B) 가상머신에 대한 센드메일, dovecot 설치 및 설정을 수행한다.
📄 네임 서버 구축
- 이후 위의 실습 구성도와 동일하게 Server 가상머신에 네임 서버를 추가로 구축해준다.
- 네임 서버 구축 과정은 이전 포스팅에서 진행했기 때문에 생략하겠다.
- 다만 다른 점이 있다면 캐시 DB에 저장될 zone 파일을 설정할 때 아래와 같이 작성해주어야 한다.
$TTL 3H
@ SOA @ root. ( 2 1D 1H 1W 1H )
IN NS @
IN A 192.168.111.100
IN MX 10 mail.naver.com.
mail IN A 192.168.111.100
- 여기서
IN MX 10 mail.naver.com.
의 의미는 이메일이 캐시 DB로 요청될 경우 이를mail.naver.com
을 도메인 이름으로 하는 메일 서버로 전달한다는 의미이다. mail.daum.net
역시 위와 동일한 방법으로 설정해준다.- 설정을 완료했다면 아래 명령어를 통해 설정 파일에 문법 오류가 없는지 확인하고, 서비스를 시작시킨 뒤 마무리한다.
# named-checkconf
# named-checkzone naver.com naver.com.db
# named-checkzone daum.net daum.net.db
# systemctl restart named
# systemctl enable named
- 추가로 이번에는 아예 방화벽을 끈 상태로 실습하기 위해 아래 명령어를 수행해주었다.
# systemctl stop firewalld
# systemctl disable firewalld
- 이후
nslookup
명령어를 통해 간단히 테스트해보면 아래와 같다.
- 네임 서버 구축을 완료했으니 해당 서버를 기본 네임 서버로 사용하도록 각각의 가상머신에 존재하는
/etc/sysconfig/network-scripts/ifcfg-ens160
파일 및/etc/resolv.conf
파일의 네임 서버 IP 주소를 알맞게 변경해준다.
📄 메일 송수신 테스트
- 위에서 구축한 메일 서버를 이용한 메인 송수신 테스트를 위해 먼저 메일 서버에 사용자를 등록한다.
- 실제 메일 서버에 회원가입하는 개념과 동일하다.
- 우선 각각의 메일 서버에 아래와 같은 방식으로 한 명씩 사용자를 추가해주었다.
# useradd lee
# passwd lee
- 이후 클라이언트 시스템으로 접속하여 [현재활동] -> [에볼루션]을 실행하여 아래와 같이 메일 서버에 등록해주었다.
- 이후 다른 클라이언트 시스템에서 위 사용자의 전자 메일 주소로 이메일을 전송하면 정상적으로 전달되는 것을 확인할 수 있다.
- 즉, 우리가 구축한 메일 서버가 잘 동작한다는 것을 확인할 수 있다.
📝 웹 메일의 설치 및 사용
- 웹 브라우저에서 메일을 사용하는 것을 '웹 메일'이라고 부른다.
- 위에서 메일 서버를 구축하여 제대로 동작하는 것까지 확인하였으니 여기서는 이를 웹 기반으로 동작시켜 웹 메일처럼 사용하도록 구현해본다.
📜 라운드 큐브
- 라운드 큐브(Roundcube)는 PHP로 작성되었으며, Sendmail 및 IMAP 서버(Dovecot)를 기반으로 하는 웹 메일 프로그램이다.
- 반드시 아파치 웹 서버(httpd) 및 PHP가 설치되어 있어야 한다.
- 라운드 큐브를 사용하면 일반적인 웹 메일과 거의 동일하게 사용할 수 있다.
📄 라운드 큐브 설치
- 우선 라운드 큐브를 설치한다.
- 참고로 라운드 큐브를 사용하기 위해서는 해당 메일 서버가 아파치 웹 서버가 되어야 하기 때문에 아래와 같은 패키지들을 함께 설치해준다.
# dnf -y install httpd mariadb-server php php-mysqlnd php-gd php-mbstring php-pecl-zip php-xml php-json php-intl
- 이후 아래와 같이 서비스를 시작시킨다.
# systemctl restart httpd
# systemctl restart mariadb
# systemctl enable httpd
# systemctl enable mariadb
- 이렇게 완전히 아파치 웹 서버로 만든 후에 라운드 큐브 프로그램을 다운로드 받기 위해 아래 명령어를 수행한다.
# wget https://github.com/roundcube/roundcubemail/releases/download/1.3.10/roundcubemail-1.3.10-complete.tar.gz
- 이후 해당 파일의 압축을 푼다.
# tar xfz roundcubemail-1.3.10-complete.tar.gz
- 압축을 풀고 나서 파일 이름을 간단하게 바꾸어주고, 해당 프로그램은 모든 사용자가 접근하여 사용할 수 있도록 해야하기 때문에 아래와 같은 명령어들을 수행해주었다.
# mv roundcubemail-1.3.10 roundcube
# chmod 777 roundcube/temp/
# chmod 777 roundcube/logs/
📄 데이터베이스 생성
- 이제 메일을 저장하기 위한 라운드 큐브용 DB를 만들어야 하므로 위에서 설치한 mariaDB로 접속하여 아래 명령어들을 차례로 수행해주었다.
# mysql
> CREATE DATABASE emailDB;
> GRANT ALL ON emailDB.* TO 'emailAdmin'@'localhost' IDENTIFIED BY '1234';
> FLUSH PRIVILEGES;
> exit
- 위 명령어은 단순히 'emailDB'라는 데이터베이스를 만들고, 해당 데이터베이스에 대한 모든 권한을 갖고 있는 사용자 'emailAdmin'을 생성한 것이다.(비밀번호는 '1234')
📄 라운드 큐브 설정 및 테스트
- 이제 라운드 큐브로 접속하여 몇 가지 설정을 진행해주어야 한다.
- 이를 위해 웹 브라우저에서
mail.naver.com/roundcube/installer
로 접속한다.
- 이후 아래로 스크롤하여 'NEXT' 버튼을 클릭한 뒤, 라운드 큐브 설정을 진행한다.
- 'product_name'의 경우 원하는 이름을 입력하면 된다.
- Database setup 부분은 아래와 같이 설정해준다.
- 나머지 설정은 생략하고 아래로 스크롤하여 'CREATE CONFIG' 버튼을 통해 설정을 완료한다.
- 이후에 나오는 화면에서 'Download' 버튼을 클릭하여 라운드 큐브 설정 파일을 다운로드한다.
- 다음으로 위에서 다운로드한 파일을
/roundcube/config
폴더로 옮겨주고, 속성을 변경해주었다.
# mv /root/다운로드/config.inc.php /var/www/html/roundcube/config/
# chmod 707 /var/www/html/roundcube/config/config.inc.php
- 이후 다시 웹 브라우저로 돌아와 'CONTINUE' 버튼을 클릭하고, 이후에 나오는 화면에서 'Initialize database' 버튼을 클릭하여 설정 파일대로 데이터베이스를 초기화한 뒤, 아래에 있는 테스트를 진행한다.
- 아래와 같이 발신자와 수신자의 이메일을 입력한 뒤 테스트 버튼을 클릭하면 테스트 결과를 확인할 수 있다.
- 바로 아래에 있는 테스트 역시 사용자 이름과 비밀번호를 입력하여 테스트를 수행해본다.
📄 클라이언트 테스트
- 이제 실제 클라이언트로 접속하여 라운드 큐브를 테스트해보자
- 마찬가지로 웹 브라우저를 열고
mail.naver.com/roundcube
로 접속하면 로그인 화면이 출력되며, 로그인을 하고나면 우리가 흔히 사용하는 웹 메일과 비슷한 화면이 출력되게 된다.
- 이후 기본 메일 서버와 동일하게 메일을 송수신해보면 정상적으로 전달되는 것을 확인할 수 있다.
📄 첨부파일 용량 설정
- 추가로 라운드 큐브는 첨부파일을 함께 보낼 경우 첨부파일의 최대 용량을 2MB로 제한하고 있어, 이보다 큰 용량의 첨부파일은 보낼 수가 없는데 이를 수정하기 위해서는 웹 서버의 설정을 바꿔주어야 한다.
- 이를 위해 메일 서버 컴퓨터로 돌아와
/etc/php/ini
파일을 열어 383행의max_execution_time
과, 672행의post_max_size
그리고 825행의upload_max_filesize
를 적당한 값으로 늘려준다.
'🐧 Linux > 이것이 리눅스다(CentOS 8)' 카테고리의 다른 글
[이것이 리눅스다(CentOS 8)] 13장. FTP 서버 설치와 운영 (0) | 2023.04.05 |
---|---|
[이것이 리눅스다(CentOS 8)] 12장. 웹 서버 설치와 운영 (0) | 2023.04.05 |
[이것이 리눅스다(CentOS 8)] 09장. 네임 서버 설치와 운영 (0) | 2023.04.03 |
[이것이 리눅스다(CentOS 8)] 08장. 원격지 시스템 관리하기 (0) | 2023.04.02 |
[이것이 리눅스다(CentOS 8)] 07장. 쉘 스크립트 프로그래밍 (0) | 2023.04.02 |