웹 메일 서버 및 DNS 서버 구축 실습

Hyun·2025년 3월 5일

프로젝트

목록 보기
4/6

메일 서버 구축

  1. 메일 서버를 구축하기 위해서 먼저 필요한 패키지를 다운
    a. sendmail : 메시지를 보내는 역할을 수행, 다른 메일 서버와의 송수신을 진행
    b. dovecot : 받은 메일을 사용자에게 전달하는 역할 수행

    설치 : dnf install -y sendmail dovecot

  2. 패키지 실행

    • systemctl enable --now sendmail dovecot

    • systemctl status [패키지 이름] 으로 패키지 상태를 확인 가능

  3. 설정 파일 수정
    설정 파일 수정할 게 좀 많이 복잡할 수도 있다. 천천히 따라오면 된다.

  • /etc/mail/sendmail.cf 수정

    • 85행의 localhost를 사용하고자 하는 메일 서버 이름으로 수정
      : 기본값으로 설치되는 sendmail의 경우에는 localhosts로 내부에서만 인식되도록 동작하게 되는데 이 값을 변경하게 되어서 외부 사용자와도 사용가능하도록 만드는 것
      변경전 server 1는 dong.com 으로 server 2는 hyun.com 으로 변경

    • 추가적으로 외부와 통신을 위해서 268행의 localhost가 잡혀있는 ip주소를 삭제한다.
      변경 전 변경 후
  • /etc/mail/local-host-names 수정
    메일용 서버라는 호스트 이름을 추가한다. 호스트 이름을 추가하게 된다면 이 도메인으로 들어오는 메일을 자체적으로 처리하게 된다.
    server 1 : mail.dong.com
    server 2 : mail.hyun.com

  • hostname 변경
    클라이언트가 이메일을 받을 때 이메일을 보내는 서버의 신뢰성을 파악하기 위해서 hostname을 메일 서버와 동일한 이름으로 변경한다.

    • server 1 : hostnamectl set-hostname mail.dong.com
    • server 2 : hostnamectl set-hostname mail.hyun.com
      이후 쉘을 껏다가 키면 호스트 이름이 변경된다.
  • /etc/mail/access 파일
    특정 도메인 또는 IP 에 대해서 정책을 설정 하여 접근을 제어해주는 역할을 수행한다.
    현재 실습 중인 2개의 가상 머신은 현재 192.168.111.0/24 네트워크에 존재하기 때문에 네트워크 주소를 추가해주고, 또한 자신과 상대방의 메일 서버 도메인 주소도 추가해주면 된다.
    만약 다른 네트워크 ex) 10.0.1.0/24 네트워크 주소를 사용하는 다른 메일 서버의 접근을 허용하고 싶다면 해당 메일서버의 도메인 주소와, 네트워크 주소를 추가시키면 된다.

    dong.com                             RELAY
    hyun.com                               RELAY
    192.168.111.                            RELAY
  • 변경사항을 적용하기 위해서 makemap hash /etc/mail/access < /etc/mail/access 명령을 실행하여 access.db를 업데이트 해야한다.

  • etc/dovecot/dovecot.conf 파일 수정

    • 메일 서비스를 외부 클라이언트에서 접속 할 수 있도록 허용 해준다. 즉 기본 값이 로컬 내부에서만 동작하도록 설정되어있는 것을 해제하여 외부에서도 접근이 가능하도록 만들었다.
    • 24행 , 30행, 33행 주석 제거
  • /etc/dovecot/conf.d/10-ssl.conf 파일 수정

    • ssl 접속 권한 허용
    • 8행 ssl = yes
  • /etc/dovecot/conf.d/10-mail.conf 파일 수정

    • 25행 주석 제거
      사용자별로 메일을 /var/mail/%u에 저장하도록 설정하여 메일을 관리하기 위해서 주석을 제거해준다.
    • 121행 mail_access_groups = mail
      메일 저장 및 접근 문제를 방지하기 위해 반드시 설정해야 한다. 메일 서버가 /var/mail/ 내의 메일 파일을 읽고 쓸 수 있도록 권한을 설정을 해준다.
  1. 메일 서버 설정이 완료되었기 때문에 재시작을 수행한다.
    systemctl restart sendmail dovecot
  • cf) 만약 오타나 잘못 설정했다면 다음과 같이 오류가 뜬다. 이럴 때는 상태 확인 명령어를 이용해 어떤 것이 문제인지 확인하거나, 다시 위의 과정을 천천히 확인해주면 해결가능하다.
    상태를 확인해보니 dovecot.conf 파일 30번째 줄에서 오타가 발생한듯하다. 바로 수정해주자.

이렇게 되면 현재 메일 서버는 구축이 완료된 상태이다. 이제 도메인 서버를 구축을 수행하자.

도메인 서버 구축

  1. 도메인 서버를 구축하기 위해서 먼저 필요한 패키지를 다운

    dnf -y install bind

  2. 패키지 실행
    systemctl enable --now named

  3. 도메인 설정 파일 수정

  • /etc/named.conf 파일 수정
    • 기존에 기본값으로 있는 localhost(127.0.0.1)느 다른 ip 주소로부터 접근이 허용되지 않는다. 접근 허용을 위해 옵션을 수정해준다.
    • ipv4는 any로 해서 어떤 주소든 받을 수 있도록 설정해줬고, ipv6는 사용하지 않으니 none 옵션으로 변경한다.
    • allow-query 옵션을 any로 하여서 DNS 서버가 다른 클라이언트의 도메인 조회 요청을 처리할 수 있도록 허용할 수 있도록 한다.
  • /etc/named.rfc1912.zones 파일 수정
    • 메일 서버로 사용되는 도메인 구역을 추가한다.
    • 정방향 구역과 역방향 구역 전부 작성해준다.
zone "hyun.com" IN {
        	tpye master;
        	file "hyun.com.zone";
        	allow-update { none; };
        };
zone "dong.com" IN {
        	tpye master;
        	file "dong.com.zone";
        	allow-update { none; };
        };
zone "111.168.192-in-addr.arpa" IN {
        type master;
        file "my.rev";
        allow-update { none; };
};

  • /var/named 디렉토리 내부에 해당 구역 파일 추가

    • named.empty 파일을 이용하여 도메인 구역 파일을 추가한다.
      cp -p /var/named/named.empty /var/named/dong.com.zone
      cp -p /var/named/named.empty /var/named/hyun.com.zone
      cp -p /var/named/named.empty /var/named/my.rev

    • 그리고 해당 파일들에서 메일 서버 도메인 설정을 추가
      dong.com.zone hyun.com.zone my.rev

    • 문법 오류 검사를 하는 방법은 아래와 같다.
      named.conf 파일 검사 : named-checkconf
      zone 파일 검사 : named-checkzone [존 이름] [존 파일 위치]

  • /etc/reslove 파일에서 nameserver의 값을 DNS서버를 설치한 192.168.111.111로 수정한다. 해당 수정은 영구적이지 않다. 가상머신을 재시작하는 경유 다시 기본값으로 변경되기 때문에 만약 고정적으로 변경하고 싶다면 nmcli con 명령을 이용해 ipv4.dns 옵션을 변경해주면 된다.

  • DNS 서버를 재실행 : systemctl restart named

방화벽 개방

  • 기본적으로 DNS 서버와 메일 서버의 경우 방화벽이 열려있지 않았다. 방화벽을 열지 않으면 올바르게 환경 설정을 구현했어도 동작하지 않을 확률이 높다.
    firewall-cmd --add-service={imap,smtp,pop3,dns}
    firewall-cmd --add-service={imaps,smtps,pop3s}
    firewall-cmd --runtime-to-permanent
  • 방화벽이 열린지 유무를 확인하기 위해서는 아래 명령어를 통해 확인 가능하다.
    firewall-cmd --list-all

웹 서버 설정

  • 다운로드
    • php : dnf -y install php*
    • Apache : dnf -y install httpd
  • 실행 : systemctl enable --now httpd
  • 방화벽 개방
    firewall-cmd --add-service=http
    firewall-cmd --runtime-to-permanent

    방화벽까지 개방한 상태에서 웹 서버가 열려있는지 확인하는 방법은 ip 주소를 인터넷에 입력해주면 된다.

웹 메일 서버 구축

  • /var/www/html 디렉터리로 이동
  • 웹 메일 서버로 사용될 roundcubemail 패키지를 다운로드
    wget https://github.com/roundcube/roundcubemail/releases/download/1.6.10/roundcubemail-1.6.10-complete.tar.gz
  • 파일 압축 해제 : tar xfz roundcubemail-1.6.10-complete.tar.gz
  • 디렉토리 이름 변경 : mv roundcubemail-1.6.10 roundcubemail
  • 소유권을 root에서 apache로 변경 : chown -R apache.apache roundcubemail
  • 웹 서버용 DB 다운로드 : dnf -y install mariadb-server
  • DB 시작 : systemctl enable --now mariadb
  • DB 접속 : mysql
  • DB 접속 후 유저 생성 수행
    사용자의 이메일 데이터를 관리하기 위한 데이터 베이스를 생성해야 한다.
    MariaDB [(none)]> CREATE DATABASE rcmdb;
    MariaDB [(none)]> GRANT ALL ON rcmdb.* TO hyun@localhost identified BY '1234';
    MariaDB [(none)]> FLUSH PRIVILEGES;
    MariaDB [(none)]> exit

Roundcube 설치 마법사 실행 : http://[Server ip 주소 입력]/roundcubemail/installer
생성한 데이터베이스 이름과 사용자 아이디 비밀번호 입력
SMTP 설정을 다음과 같이 수정
마지막으로 내려서 생성 실행 후 아래 그림에 있는 데이터를 복사햐여서 /var/www/html/roundcubmail/config/config.inc.php 파일에 저장

다음 페이지로 이동후 SMTP 테스트와 IMAP 테스트를 수행해서 잘되는 것을 확인
IMAP에서 서버의 유저 데이터를 입력하면 된다.

추가적으로 1시간동안 위의 테스트가 안되서 이것저것 확인해보았었는데 설정상 문제는 없었는데 selinux가 켜져있어서 문제가 발생했었다. selinux가 켜져있는지 확인하고 꺼주자!

이제 <메일 서버 ip 주소>/roundcubemail 로 링크를 들어가게 된다면 로그인이 가능하게 된다.
이번 포스팅에서는 웹 메일 서버를 구축해 보았다.

profile
DevSecOps & Cloud Engineer를 꿈꾸는 엔지니어

0개의 댓글