홈페이지 제작할땐!

비버팩토리

it 인프라 노트/우분투

roundcube 설치하기

윤비버 2025. 6. 23. 23:13
728x90

이전 시간에 postfix와 dovecot으로 메일 서버 구축하기에 대해 포스팅글 남겨봤습니다.

이번에는 라운드 큐브 웹메일 설치 하는 방법에 대해서 남겨봅니다.

챗지피티 도움으로 문제 해결 하면 됩니다.  경험을 토대로 설명 하는거니 약간 내용이 다를수있습니다.

 

 

 

 

상황을 요약하면:


✅ 현재 상태 요약

항목 상태

도메인 support@beaverfactory.kr 있음
SSL 설정 완료 (HTTPS 접근 가능)
메일 서버 Postfix + Dovecot 설치 완료
메일 발송 정상 작동 (예: 다음 메일로 발신 확인됨)
메일 수신 메일이 수신은 되는 듯하지만, 확인할 UI가 없음
웹메일 미설치 상태 (접속 시 File not found)

🎯 목표

support@beaverfactory.kr 계정으로 받은 메일을 확인할 수 있는 웹메일 UI 설치
Roundcube 설치


✅ Roundcube 설치 순서 (요약)

  1. 웹서버 루트에 Roundcube 설치
  2. .env 또는 config.inc.php에서 IMAP/SMTP 설정
  3. 접속 시 로그인 → 메일 확인 가능

🔧 설치 예시 (Ubuntu 기준)

① Roundcube 다운로드

cd /var/www/html
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.6/roundcubemail-1.6.6-complete.tar.gz
tar -xvzf roundcubemail-1.6.6-complete.tar.gz
mv roundcubemail-1.6.6 roundcube

② 권한 설정

chown -R www-data:www-data /var/www/html/roundcube
chmod -R 755 /var/www/html/roundcube

③ Roundcube 접속

브라우저에서:
👉 https://support.beaverfactory.kr/roundcube/installer/
(설치 마법사가 열려야 합니다)

만약 "File not found" 라면:

  • nginx.conf 또는 sites-available/support.beaverfactory.kr 설정 확인 필요
  • index.php 없거나 권한 문제 가능성 있음

여기서 설명을 덧붙이자면 nginx 설치는 되어있고 ssl은 무조건 달아놓아야됩니다.

(안해도 되긴한데.. 저같은경우 보안을 생각해서 왠만하면 달아놓습니다. 무료 ssl 만해도 하루에 5개씩만 가능하니..)

여기서 주소를 /roundcube를 뺀상태에서 /installer 로 접근하게 설정 해둡니다.

 

④ NGINX 설정 예시

server {
    listen 443 ssl;
    server_name support.beaverfactory.kr;

    root /var/www/html/roundcube;
    index index.php index.html;

    ssl_certificate /etc/letsencrypt/live/support.beaverfactory.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/support.beaverfactory.kr/privkey.pem;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

root 경로와 PHP 버전에 맞는 fastcgi_pass 경로 꼭 확인


⑤ 데이터베이스 설정

Roundcube는 내부적으로 사용자 계정 캐시나 메일 리스트 저장용 DB 필요:

CREATE DATABASE roundcube DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'roundcube_user'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube_user'@'localhost';
FLUSH PRIVILEGES;

설치 마법사에서 입력할 정보입니다.


⑥ 설치 후 config 폴더 보안

설치 완료 후 다음 실행:

rm -rf /var/www/html/roundcube/installer

🔑 로그인 예시

Roundcube 웹메일 로그인 시:

항목 값

이메일 주소 support@beaverfactory.kr
비밀번호 실제 메일 계정 비밀번호
IMAP 서버 localhost or 127.0.0.1 (Dovecot)
SMTP 서버 localhost (Postfix)

🛠 로그인 안될 경우 체크

  • Dovecot의 IMAP 서비스 활성 여부 (/etc/dovecot/dovecot.conf 확인)
  • /var/mail/support 또는 /home/vmail/... 에 실제 메일 저장됨
  • telnet localhost 143 으로 Dovecot IMAP 응답 확인

필요하시면 Roundcube config.inc.php 예시, nginx 세팅 파일 전체 등도 도와드릴게요.
지금부터는 Roundcube 설정을 마무리하시면 바로 웹메일로 수신확인 가능합니다.
지금 어떤 단계에서 막히셨는지도 알려주시면, 딱 맞는 조치 드릴 수 있습니다.

 

 

여기서 확인 할것이 Dovecot 와 postfix 가 잘 작동되는지 다시 한번 체크해보세요.

 

 

https://도메인/installer/ 접속 시 403 Forbidden 오류가 발생하는 건 일반적으로 퍼미션 또는 Nginx 설정 문제입니다.


✅ 가능한 원인 3가지와 해결 방법

① 📂 installer/ 디렉터리의 퍼미션 문제

Roundcube 설치 후 installer/ 폴더가 있지만, 웹서버(www-data)가 읽을 수 없는 권한일 수 있습니다.

확인 및 수정:

sudo chown -R www-data:www-data /var/www/html/roundcube
sudo find /var/www/html/roundcube -type d -exec chmod 755 {} \;
sudo find /var/www/html/roundcube -type f -exec chmod 644 {} \;

roundcube 설치 폴더가 /var/www/html/roundcube가 아니라면, 실제 경로로 바꿔주세요.


② 🔒 Nginx가 PHP를 실행하지 않도록 설정돼 있음

설정에 deny all; 이 들어가 있거나 location ~ \.php$ 블록이 누락된 경우도 있습니다.

확인: /etc/nginx/sites-available/beavermail.beaverfactory.kr (또는 유사한 설정파일)

예시 설정:

server {
    listen 443 ssl;
    server_name beavermail.beaverfactory.kr;

    root /var/www/html/roundcube;
    index index.php index.html;

    ssl_certificate /etc/letsencrypt/~/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/~/privkey.pem;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock; # PHP 버전에 맞게 수정
    }

    location ~ /\.ht {
        deny all;
    }
}

🔁 적용 후엔 반드시:

sudo nginx -t && sudo systemctl reload nginx

③ 💡 index.php 실행되지 않아서 403

installer/ 내부에 index.php가 있는데, PHP가 실행되지 않거나 index 항목에 index.php가 빠져 있으면 403이 뜰 수 있습니다.

해결:

  • /installer/index.php 파일 존재 확인
  • 위 Nginx 설정에서 index index.php 포함됐는지 확인

✅ 최종 확인 체크리스트

항목 체크

installer/ 폴더 존재 및 파일들 있음
www-data 권한 적용됨 (chown, chmod)
Nginx 설정에서 root 경로 및 PHP 실행 설정 있음
nginx -t 정상 → nginx reload 함
브라우저에서 https://도메인/installer/ 접속

💬 도와드릴 수 있는 것

  • Roundcube 전체 설정 파일 보내드림
  • 실제 nginx.conf 리뷰해드림
  • 직접 동작 확인 위한 디버그 코드 제공 가능

필요하신 부분 알려주세요.
또는 ls -al /var/www/html/roundcube/installer 결과 보여주시면 바로 원인 분석해드릴게요.

 

 

✅ 해결 방법

1. 전체 Roundcube 설치 파일을 재다운로드

cd /경로/
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.6/roundcubemail-1.6.6-complete.tar.gz
tar -xvzf roundcubemail-1.6.6-complete.tar.gz
mv roundcubemail-1.6.6/* .
rm -rf roundcubemail-1.6.6 roundcubemail-1.6.6-complete.tar.gz

 

이 설치 방법을 그대로 따라하면됩니다. 

 

만약에 날라갔으면 복구하는데 도움 됩니다.

 

 

🔁 접속 확인

브라우저에서 다음 경로로 접속:

https://도메인/installer/

이제 Roundcube 설치 마법사가 제대로 나와야 합니다.

 

인스톨러 그대로 접속 하면됩니다. 

그러면 기본 config.inc.php 설정을 다운받아서 ./config/ 으로 파일을 옮겨줍니다.

 

 

좋습니다. 이제 Roundcube 설치 마법사 화면이 나왔지만,
서버 환경 설정이 일부 조건을 충족하지 않아서 설치를 막고 있는 상황입니다.


✅ 해결 방법 요약

마법사 페이지 상단에 다음과 같은 문구가 있을 것입니다:

"NOT OK"로 표시된 항목만 수정하면 됩니다.

아래 절차대로 진행하세요.


1. ✅ php.ini 위치 확인

php -i | grep "Loaded Configuration File"

출력 예시:

Loaded Configuration File => /etc/php/8.1/fpm/php.ini

PHP 버전에 따라 경로가 다를 수 있습니다. 해당 파일을 수정합니다.


2. ✅ 자주 발생하는 “NOT OK” 항목들

항목 해결 방법

mbstring sudo apt install php-mbstring
intl sudo apt install php-intl
xml sudo apt install php-xml
dom sudo apt install php-dom 또는 php-xml에 포함
pdo, pdo_mysql sudo apt install php-mysql
fileinfo sudo apt install php-fileinfo 또는 php-common 포함
openssl, curl sudo apt install php-curl
zip sudo apt install php-zip
gd sudo apt install php-gd

PHP 8.1을 사용 중이라면:

sudo apt install php8.1-mbstring php8.1-intl php8.1-xml php8.1-mysql php8.1-curl php8.1-zip php8.1-gd

3. ✅ 모듈 설치 후 PHP-FPM 재시작

sudo systemctl restart php8.1-fpm

그리고 Nginx도 재시작 또는 리로드:

sudo nginx -t && sudo systemctl reload nginx

4. ✅ 브라우저 새로고침

https://도메인/installer/
→ 새로고침해서 다시 “Check environment”를 확인하세요.


💡 추가 팁

  • PHP CLI가 아니라 PHP-FPM 기준으로 설치돼야 합니다.
  • 위 명령어에서 php8.1-모듈명 버전을 반드시 맞춰주세요 (php -v로 버전 확인 가능)

문제가 되는 모듈 이름이 헷갈리거나 NOT OK 항목 스크린샷을 보여주실 수 있으면, 어떤 걸 설치해야 할지 더 정확하게 안내해드릴 수 있어요.

 

위에 문제는 설치 에러 때문에 다시 한번 문제가 발생하면 위에 설치 명령대로 세팅하면됩니다.

 

 

만약에 mysql 세팅 문제가 있으면 이거를 따라하면됩니다.

CREATE DATABASE roundcube DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

CREATE USER 'roundcube_user'@'localhost' IDENTIFIED BY 'your_secure_password';

GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube_user'@'localhost';

FLUSH PRIVILEGES;

 

 

✅ 6. Configuration file

설정을 모두 마치고 마지막 단계로 가면, config.inc.php 파일 내용을 보여줍니다.
이걸 복사해서 다음 경로에 저장해야 합니다:

/home/email/config/config.inc.php
 

또는 /var/www/html/roundcube/config/config.inc.php 등 설치 위치에 따라 다름

 

 

 

전체적으로 잘 구성된 Roundcube config.inc.php입니다.
하지만 몇 가지 확인 및 개선 포인트가 있습니다. 아래 항목 하나씩 확인해보세요:


✅ 문제없는 설정

  • db_dsnw: 형식도 올바르고 비밀번호 등도 URL 인코딩까지 잘 되어 있음.
  • product_name, language, username_domain: 문제 없음.
  • des_key: 24자 키로 적절함.
  • plugins: 비어 있어도 정상 동작 (기본 기능만 사용 시 OK)

⚠️ 점검 및 수정이 필요한 부분

1. imap_host 및 smtp_host 설정 방식

현재:

$config['imap_host'] = 'support.beaverfactory.kr';
$config['smtp_host'] = 'support.beaverfactory.kr';

이 설정은 암호화 연결이 아님 (STARTTLS 또는 SSL 사용 안함).
대부분의 서버에서는 SSL 또는 STARTTLS가 필수이며, 포트 자동 지정이 되지 않아 오류 발생 가능.

권장 방식:

$config['imap_host'] = 'ssl://support.beaverfactory.kr:993';
$config['smtp_host'] = 'tls://support.beaverfactory.kr:587';

또는:

$config['imap_host'] = 'tls://support.beaverfactory.kr:143';
$config['smtp_host'] = 'tls://support.beaverfactory.kr:587';

👉 ssl://는 포트 993 (IMAP), tls://는 STARTTLS 방식 (143/587) 입니다.


2. MySQL 사용자 인증 확인

$config['db_dsnw'] = '';

✅ @ 같은 특수문자 문제 방지를 위해 %21(= !), %40(= @) URL 인코딩까지 잘 되어 있음.
단, localhost 접속이 안 된다면 127.0.0.1로 바꿔보세요.

 

위에 mysql 은 공개하면 문제가 되어서 비웠습니다.


3. 언어 설정

$config['language'] = 'ko_KR';

✅ 정상. 단, locale 패키지 설치가 되어 있지 않으면 적용 안 될 수 있습니다:

sudo apt install language-pack-ko

4. 메일 로그인 불가 이슈가 있다면

Roundcube는 기본적으로 전체 이메일 주소로 로그인하는 방식입니다.
→ username_domain 설정을 통해 아이디만 입력해도 되도록 도와줍니다.

예를 들어:

$config['username_domain'] = 'beaverfactory.kr';

사용자가 support라고만 입력해도 support@beaverfactory.kr로 로그인 시도함.

단, Postfix 또는 Dovecot 쪽에서도 해당 계정을 virtual_mailbox 형식 등으로 등록해줘야 함.


✅ 추가로 설정하면 좋은 것

// Enable spellchecking if supported
$config['enable_spellcheck'] = false;

// Disable installer after setup (보안)
$config['enable_installer'] = false;

설치 마무리 후 아래 폴더는 삭제하거나 차단하세요:

sudo rm -rf /home/..../installer

✅ 결론

🔒 바로 고쳐야 할 건 아래 두 가지입니다:

  1. imap_host / smtp_host → 암호화 방식 명시 (ssl:// 또는 tls://)
  2. 설치 마무리 후 installer/ 폴더 삭제 또는 접근 차단

나머지는 문제 없습니다. 이 설정 그대로 잘 적용하면 정상 작동할 것입니다.

필요하시면 Dovecot + Postfix의 사용자 인증 방식까지 도와드릴 수 있어요.

 

 

 

인스톨러 페이지에서 config 설정 이후에 디비랑 imap, smtp 테스트 로 넘어가는데 페이지 닫지 마시고 그대로 진행하세요

디비 세팅 버튼 꼭 눌러줘야합니다. 만약에 이 단계를 무시하고 닫기 했으면 아래 방법 그대로 따라해야됩니다.

 

 

에러 메시지에 따르면 Roundcube가 실행되면서 필수 테이블(session)이 데이터베이스에 존재하지 않음을 나타냅니다.


❗ 에러 요약

DB Error: [1146] Table 'beaveremaildb.session' doesn't exist

session 테이블을 포함한 Roundcube의 모든 테이블이 아직 생성되지 않았기 때문에 발생한 문제입니다.


✅ 해결 방법

1. Roundcube 설치 폴더에서 SQL 초기화 스크립트 실행

Roundcube는 설치 시 기본 테이블들을 만들어주는 SQL 파일을 제공합니다.

cd /home/.../SQL

보통 mysql.initial.sql 또는 mysql.sql 파일이 존재합니다.

2. MySQL에 해당 DB 사용자로 로그인

mysql -u 사용자 -p 디비명

로그인 후, SQL 초기화 스크립트 실행:

SOURCE /home/.../SQL/mysql.initial.sql;
-- 또는
SOURCE /home/.../SQL/mysql.sql;

정확한 경로는 Roundcube 설치 디렉토리 내 SQL/ 폴더를 확인하세요.


📦 대안 방법 (명령어 직접 실행)

mysql -u 사용자 -p 디비명 < /home/.../SQL/mysql.initial.sql

패스워드 입력 후 실행되며, 필요한 모든 테이블(session, users, messages, identities 등)을 생성합니다.


🔁 이후 조치

  1. 위 명령 실행 후, 웹에서 다시 Roundcube 접속 시도
  2. 정상 작동되면 로그인 화면 또는 Roundcube 초기 화면이 보일 것입니다

🛠️ 참고: 설치 체크 다시 진행

https://도메인/installer/ 경로에서 스텝 2까지 완료한 후에 위 DB 설정이 되어야 합니다.


문제 지속 시, 다음 항목을 알려주세요:

  • 설치 경로
  • Roundcube 버전
  • 에러 전체 로그

필요 시 초기화 스크립트를 직접 확인해드릴 수 있습니다.

 

 

 

 

https://93it-serverengineer.co.kr/62

 

Roundcube mail 설정

Roundcube 란? RoundcubeMail은 IMAP 클라이언트 기반 응용프로그램으로 다국어 사용자 인터페이지를 지원합니다. 또한 전자메일,주소록,MIME,편지함설정,메세지검색,맞춤법검사등 많은 기능을 제공합니

93it-serverengineer.co.kr

 

 

https://foxydog.tistory.com/32

 

CentOS 8 - 메일서버 구축(Postfix, Dovecot, MariaDB And Roundcube)

CentOS 8 MailServer With Postfix, Dovecot, MariaDB And Roundcube Install [2022-05-30] Rocky 리눅스에서 새로 구축한 메일서버[리뉴얼] https://foxydog.tistory.com/104 Rocky Linux - 메일서버 구축(Postfix, Dovecot, MariaDB And Roundcube)

foxydog.tistory.com

 

위에  링크 참고해서 다시 세팅 해봅니다.

 

센토 os는 아니고 우분투 환경이어서 몇가지만 추려서 설정 방법 안내 합니다.

 

1-4 호스트 등록

 

이부분을 따라하면 됩니다.

[root@localhost ~]# hostnamectl set-hostname mail.eztest.com

[root@localhost ~]# hostname
mail.eztest.com  (적용 확인)

 

그리고 디비 접속합니다.

이전에 디비 등록은 해둔 상태이고 안된 부분을 등록하면 됩니다.

□Postfix 계정을 저장할 데이터베이스 생성

MariaDB [(none)]> create database postfix_accounts;


□방금 생성한 데이터베이스에 접근할 전체 권한 계정을 생성

예시) grant all on 데이터베이스 이름.* to '유저 ID'@'localhost' identified by '패스워드';

MariaDB [(none)]> grant all on postfix_accounts.* to eztest_admin@localhost identified by 'test123';

MariaDB [(none)]> flush privileges;  (바로 적용)

 

□서버에 도메인을 저장할 테이블 만들기(전체 한 줄)

MariaDB [(none)]> CREATE TABLE `postfix_accounts`.`domains_table` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;

 

□사용자 계정을 보관할 테이블 만들기(전체 한 줄)

MariaDB [(none)]> CREATE TABLE `postfix_accounts`.`accounts_table` (
    `AccountId` INT NOT NULL AUTO_INCREMENT,
    `DomainId` INT NOT NULL,
    `password` VARCHAR(300) NOT NULL,
    `Email` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`AccountId`),
    UNIQUE KEY `Email` (`Email`),
    FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

 

□별칭 사용자 계정을 보관할 테이블 만들기(전체 한 줄)

별칭은 일종의 리다이렉션처럼 A계정이 수신을 받으면 B계정으로 받는 기능

MariaDB [(none)]> CREATE TABLE `postfix_accounts`.`alias_table` (
    `AliasId` INT NOT NULL AUTO_INCREMENT,
    `DomainId` INT NOT NULL,
    `Source` varchar(100) NOT NULL,
    `Destination` varchar(100) NOT NULL,
    PRIMARY KEY (`AliasId`),
    FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

 

여기 보면서 그대로 따하면됩니다. 디비 명만 다른걸로 하고 테이블은 그대로 세팅하면됩니다.

 

이제 만든 테이블에 사용할 도메인 및 계정 정보 레코드 입력(각 한 줄씩 명령어)

□eztest.com 도메인 등록

MariaDB [(none)]> INSERT INTO `postfix_accounts`.`domains_table` (DomainName) VALUES ('eztest.com');

 

□test1@eztest.com 계정 생성

MariaDB [(none)]> INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email) VALUES (1, ENCRYPT('test123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'test1@eztest.com');

 

□test2@eztest.com 계정 생성

MariaDB [(none)]> INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email) VALUES (1, ENCRYPT('test123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'test2@eztest.com');

 

□testfc@eztest.com ▷ testsc@eztest.com 별칭 계정 생성

MariaDB [(none)]> INSERT INTO `postfix_accounts`.`alias_table` (DomainId, Source, Destination) VALUES (1, 'testfc@eztest.com', 'testsc@eztest.com');

 

여기서 주의할게 있습니다. ENCRYPT 은 사용하지 않아서 아래 방법 따라하면됩니다.

 

에러 메시지:

Error Code: 1305. FUNCTION 디비명.ENCRYPT does not exist

는 MySQL에서 ENCRYPT() 함수가 비활성화되었거나 존재하지 않는 경우 발생합니다.
특히 MySQL 8.0부터는 ENCRYPT() 함수가 제거되었습니다.


✅ 해결 방법

MySQL에서 비밀번호를 암호화하려면 ENCRYPT() 대신 SHA2(), bcrypt, 또는 애플리케이션 레벨에서 비밀번호 해시 처리를 하는 것이 일반적입니다.


🔒 권장: 비밀번호는 PHP나 Node.js 등에서 bcrypt로 암호화해서 저장

하지만 SQL 내에서만 처리하고 싶다면, 아래처럼 **SHA2()**를 쓸 수 있습니다:

INSERT INTO `accounts_table` (DomainId, password, Email)
VALUES (
    1,
    SHA2('비밀번호', 256),
    '이메일'
);

이렇게 하면 SHA-256 해시가 저장됩니다.


❗ 참고: SHA2는 암호화가 아니라 "단방향 해시"입니다

로그인 시 사용자가 입력한 비밀번호를 같은 방식으로 SHA2 해시한 뒤, DB 값과 비교해야 합니다.


🔐 더 안전하게: bcrypt 사용 예 (PHP 예시)

$password = 'apdlfWkd2024!@#';
$hash = password_hash($password, PASSWORD_BCRYPT);

// DB에 저장

그리고 로그인 검증 시에는:

password_verify($input_password, $stored_hash);

✅ 요약

방법 설명

SHA2() MySQL 내에서 단방향 해시 (빠르고 간단)
password_hash() + password_verify() PHP에서 bcrypt 사용 (강력 추천)
ENCRYPT() MySQL 8.0 이상에서 제거됨. 사용하지 마세요.

필요하시면 MySQL 테이블 구조나 추천되는 accounts_table 설계도 알려드릴게요.

 

 

STEP04 → Postfix 구성 세팅 하기

※ 구성파일 위치 /etc/postfix/
4-1 master.cf 파일 설정(수정 또는 추가 후 저장)

 

이부분은 그대로 따라하면 됩니다.

단 문제가 되는 부분은 이걸로 대처하면됩니다.

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

 

4-2 main.cf 파일 설정(수정 또는 추가후 저장)

 

여기도 그래도 따라하면됩니다.

 

4-3 Postfix가 데이터베이스에 각 정보를 엑세스 할 수 있도록 파일 생성(추가 후 저장)

□도메인 엑세스

 

여기서 중요한게 

 

user = eztest_admin
password = test123

디비 명 하고 비밀번호 본인껄로 설정합니다.

dbname = postfix_accounts

디비명도 꼭 본인이 했던걸로 변경해주세요.

 

sql 명령어는 그대로 따라하면됩니다.

 

 

4-5 설정 테스트(Postfix가 데이터베이스에 정상 접근하는지)

※ 응답 값이 숫자 1이 나오거나 끝에는 별칭(리다이렉트) 계정이 표시되면 정상

 

 

여기서 중요한게  postmap -q eztest.com mysql:/etc/postfix/database-domains.cf 명령어로 했을때 

그대로 1 이 나와야합니다. 

 

 

만약에 이런 에러가 나오면 아래 처럼 따라하면됩니다.

 

해당 에러 메시지:

postmap: warning: unsupported dictionary type: mysql. Is the postfix-mysql package installed?

Postfix가 MySQL 연동 기능이 없기 때문에 발생하는 에러입니다.


✅ 해결 방법: postfix-mysql 패키지 설치

sudo apt update
sudo apt install postfix-mysql

postfix-mysql 패키지는 Postfix가 MySQL을 연동할 수 있게 해주는 필수 모듈입니다.


🔁 설치 후 해야 할 일

  1. 다시 테스트:
postmap -q support@beaverfactory.kr mysql:/etc/postfix/.....
  1. 오류가 해결되면 Postfix 재시작:
sudo systemctl restart postfix
  1. 로그 확인 (문제 있는 경우):
sudo tail -f /var/log/mail.log

🔍 추가 확인 사항

  • 만약 postfix-pgsql, postfix-ldap 같은 다른 DB 연동도 필요한 경우, 각각의 패키지를 따로 설치해줘야 합니다.
  • postfix-mysql은 설치 후 Postfix가 자동으로 인식합니다. 빌드 옵션 설정 등은 필요 없습니다.

필요하시면 .cf 파일 예시나 쿼리 테스트도 도와드릴게요.

 

 

 

 

 

좋습니다! https://foxydog.tistory.com/32 의 STEP05는 Dovecot 설치 및 구성을 다루고 있으며, Postfix와 연동해서 MySQL 사용자 인증을 처리하는 메일 시스템을 구축하는 데 핵심입니다.

당신은 Ubuntu 환경이므로, Ubuntu에 맞는 방식으로 설치 및 설정을 안내드리겠습니다.


✅ STEP05 – Ubuntu에서 Dovecot 설치 및 구성


1. 🔧 Dovecot 설치

sudo apt update
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql

이 패키지들은 각각 다음 역할을 합니다:

  • dovecot-core: 핵심 서비스
  • dovecot-imapd, dovecot-pop3d: IMAP, POP3 프로토콜 지원
  • dovecot-lmtpd: Postfix와의 메일 전달을 위한 LMTP 지원
  • dovecot-mysql: MySQL 기반 인증 연동

2. 🔧 Dovecot 메일 디렉토리 구조 설정

10-mail.conf 편집:

sudo nano /etc/dovecot/conf.d/10-mail.conf

다음 내용을 확인 및 수정:

mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group = mail

/var/mail/vhosts/도메인명/유저 구조를 따릅니다. 예: /var/mail/vhosts/beaverfactory.kr/support/


3. 🔐 사용자 인증 설정

10-auth.conf 편집:

sudo nano /etc/dovecot/conf.d/10-auth.conf

수정:

disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.ext

auth-sql.conf.ext는 MySQL 연동을 위한 파일입니다.


4. 🔐 MySQL 연동 설정

/etc/dovecot/dovecot-sql.conf.ext 생성 또는 수정:

sudo nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=디비명 user=유저명 password=비밀번호

default_pass_scheme = SHA512-CRYPT

password_query = SELECT Email as user, password FROM accounts_table WHERE Email='%u'
user_query = SELECT '/var/mail/vhosts/%d/%n' as home, 'maildir:/var/mail/vhosts/%d/%n' as mail, 1000 AS uid, 1000 AS gid FROM accounts_table WHERE Email='%u'

비밀번호는 실제 데이터베이스 접속 정보로 바꿔주세요.
uid, gid는 vmail 사용자/그룹 ID를 사용하거나 직접 계정을 지정합니다.


5. ⚙️ 서비스 제어 설정

10-master.conf 편집:

sudo nano /etc/dovecot/conf.d/10-master.conf

LMTP 섹션 주석 해제:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

Auth 섹션 수정:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }

  user = dovecot
}

vmail 계정은 메일 저장용 가상 계정입니다. 없다면 생성:

sudo groupadd -g 1000 vmail
sudo useradd -g vmail -u 1000 vmail -d /var/mail/vhosts -m

6. 🔒 SSL 설정 (선택)

10-ssl.conf 편집:

sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/support.beaverfactory.kr/fullchain.pem
ssl_key = </etc/letsencrypt/live/support.beaverfactory.kr/privkey.pem

7. 📂 디렉토리 및 권한 설정

sudo mkdir -p /var/mail/vhosts/beaverfactory.kr/support
sudo chown -R vmail:vmail /var/mail/vhosts
sudo chmod -R 700 /var/mail/vhosts

8. ✅ 서비스 재시작

sudo systemctl restart dovecot
sudo systemctl enable dovecot

9. 🧪 테스트

IMAP 포트 테스트:

openssl s_client -connect support.beaverfactory.kr:993

로그인:

a login support@beaverfactory.kr 비밀번호

성공 시 a OK 응답이 나옵니다.


필요하시면 Postfix 쪽 설정도 연동해서 설명해드릴게요.
Roundcube 연동도 바로 가능합니다.

 

 

좋습니다. 메시지 useradd: user 'vmail' already exists는 이미 vmail 계정이 존재한다는 뜻이니, 중복 생성 없이 그냥 사용하면 됩니다.

이제 확인해야 할 몇 가지가 있습니다:


✅ 1. vmail 계정 확인

id vmail

출력 예시:

uid=1000(vmail) gid=1000(vmail) groups=1000(vmail)
  • uid와 gid가 1000인지 확인
  • vmail 홈디렉토리: /var/mail/vhosts

✅ 2. 홈 디렉토리 존재 여부 확인

ls -ld /var/mail/vhosts

없다면 수동으로 생성:

sudo mkdir -p /var/mail/vhosts
sudo chown -R vmail:vmail /var/mail/vhosts
sudo chmod -R 700 /var/mail/vhosts

✅ 3. Roundcube와 Dovecot에서 사용하는 경로도 확인

Dovecot 설정 파일 (/etc/dovecot/conf.d/10-mail.conf) 에서:

mail_location = maildir:/var/mail/vhosts/%d/%n

위 구조에 맞게 사용자 메일 저장 경로는 다음과 같아야 합니다:

/var/mail/vhosts/beaverfactory.kr/support/

없다면 생성:

sudo mkdir -p /var/mail/vhosts/beaverfactory.kr/support
sudo chown -R vmail:vmail /var/mail/vhosts

✅ 4. Postfix나 Dovecot 재시작

sudo systemctl restart dovecot
sudo systemctl restart postfix

이제 vmail 계정은 문제 없이 설정되었고, Dovecot에서 정상적으로 가상 사용자로 인식해야 합니다.
Roundcube 로그인 오류나 IMAP 접속 오류는 이후 MySQL 쿼리 / 인증 연동 여부를 점검하면 됩니다.

필요하면 Roundcube 로그인까지 테스트 도와드릴게요.

 

 

 

좋습니다. 아래는 현재 vmail 사용자 상태에 대한 분석과 Postfix + Dovecot + Roundcube 통합 메일서버 구성을 위한 정리 및 수정 가이드입니다.


✅ 현재 vmail 사용자 상태

id vmail
# 결과:
uid=5000(vmail) gid=8(mail) groups=8(mail)

🔎 분석

  • uid=5000 → OK (대체로 중요하지 않음)
  • gid=8(mail) → ⚠️ 문제 가능성 있음
    • 보통 vmail은 독립된 그룹 (vmail) 을 가져야 함
    • mail 그룹은 시스템 그룹으로, 권한 충돌 또는 접근 제어 문제 발생 가능

✅ 권장 상태로 변경하기

1. vmail 그룹이 없다면 생성

sudo groupadd -g 5000 vmail

-g 5000 은 선택 사항입니다. uid=5000 에 맞춰 정렬하려는 목적이 있다면 지정합니다.

2. vmail 사용자 속성 변경

sudo usermod -g vmail vmail

그 후 다시 확인:

id vmail
# 기대 출력:
uid=5000(vmail) gid=5000(vmail) groups=5000(vmail)

✅ 홈 디렉토리와 퍼미션 확인

sudo mkdir -p /var/mail/vhosts/beaverfactory.kr/support
sudo chown -R vmail:vmail /var/mail/vhosts
sudo chmod -R 700 /var/mail/vhosts

✅ dovecot 설정 확인

/etc/dovecot/conf.d/10-mail.conf 예시:

mail_location = maildir:/var/mail/vhosts/%d/%n

/etc/dovecot/conf.d/10-auth.conf:

disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.ext

/etc/dovecot/dovecot-sql.conf.ext:

driver = mysql
connect = host=127.0.0.1 dbname=beaveremaildb user=your_user password=your_pass
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM accounts_table WHERE email = '%u'

✅ dovecot 재시작

sudo systemctl restart dovecot

✅ 요약

항목 상태 조치

vmail 그룹 ❌ 없음 groupadd vmail 후 usermod -g
홈 디렉토리 ⚠️ 없는 듯 /var/mail/vhosts/... 생성
권한 설정 ⚠️ 필요 chown -R vmail:vmail
Dovecot 연동 점검 필요 auth-sql, mail_location, SQL 쿼리 등
Roundcube 로그인 차후 확인 위 설정 후 정상 동작 예상

추가적으로 원하시면 MySQL 사용자 계정 설정, dovecot-sql 연동, Roundcube 설정까지 이어서 도와드릴게요.

 

 

 

이 에러는 상위 디렉토리인 /home/vmail/가 존재하지 않기 때문에 발생한 것입니다. mkdir은 기본적으로 상위 디렉토리가 없으면 하위 디렉토리를 만들 수 없습니다.


✅ 해결 방법

-p 옵션을 사용하면 상위 디렉토리가 없을 경우 자동 생성됩니다:

sudo mkdir -p /home/vmail/support

📌 하지만, 주의!

Roundcube + Dovecot + Postfix 통합 메일서버에서 일반적으로 메일 저장 경로는:

/var/mail/vhosts/도메인/계정명/

즉, support@beaverfactory.kr 사용자의 메일 디렉토리는 다음과 같이 구성하는 게 정석입니다:

sudo mkdir -p /var/mail/vhosts/beaverfactory.kr/support
sudo chown -R vmail:vmail /var/mail/vhosts
sudo chmod -R 700 /var/mail/vhosts

그리고 Dovecot 설정도 이 경로를 기준으로 동작합니다:

/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/var/mail/vhosts/%d/%n
  • %d → 도메인 (예: beaverfactory.kr)
  • %n → 유저명 (예: support)

✅ 요약

작업 명령어

올바른 디렉토리 생성 sudo mkdir -p /var/mail/vhosts/beaverfactory.kr/support
권한 설정 sudo chown -R vmail:vmail /var/mail/vhostssudo chmod -R 700 /var/mail/vhosts
잘못된 디렉토리 /home/vmail/ 제거 (필요시) sudo rm -r /home/vmail

원하는 메일 경로가 다르다면 알려주세요. 그에 맞춰 mail_location을 조정해드릴 수 있습니다.

 

 

 

현재 Roundcube에서 IMAP 서버 (ssl://support.beaverfactory.kr:993)에 로그인하려고 시도했지만 SSL 연결에 실패하고 있습니다. 로그에 나타난 메시지를 기반으로 문제를 진단하면 다음과 같습니다:


❗ 주요 오류 요약

IMAP Error: Login failed for support@beaverfactory.kr
Wrong startup greeting (ssl://support.beaverfactory.kr:993): * BYE Auth process broken
Could not connect to ssl://support.beaverfactory.kr:993: Unknown reason

✅ 점검 및 해결 순서

① Dovecot SSL 포트 993이 제대로 열렸는지 확인

sudo ss -tlnp | grep 993
  • 아무 것도 안 뜨면 Dovecot이 SSL IMAP을 리스닝하지 않음 → 설정 확인 필요

② Dovecot에서 SSL 설정 확인

/etc/dovecot/conf.d/10-ssl.conf에서 다음 항목을 확인하세요:

ssl = required
ssl_cert = </etc/letsencrypt/live/support.beaverfactory.kr/fullchain.pem
ssl_key = </etc/letsencrypt/live/support.beaverfactory.kr/privkey.pem

💡 Let's Encrypt 인증서 경로가 정확해야 하며 권한도 읽을 수 있어야 함


③ Dovecot이 SSL 포트를 리스닝하도록 master 설정 확인

/etc/dovecot/conf.d/10-master.conf 확인:

service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

④ 인증 방식 점검 – /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext   # 또는 auth-passwdfile.conf.ext, auth-system.conf.ext
  • 현재 Auth process broken 메시지는 auth 메커니즘 오류 가능성 높음
  • 어떤 인증 backend를 사용하는지 (auth-sql, auth-system)에 따라 연결 오류 발생

⑤ dovecot 재시작

설정 수정 후 반드시:

sudo systemctl restart dovecot

⑥ 테스트 – 로컬에서 직접 IMAP 접속 가능 여부 확인

openssl s_client -connect support.beaverfactory.kr:993
  • 성공 시: IMAP 프로토콜 응답 (* OK Dovecot ready.) 확인 가능
  • 실패 시: 인증서 문제, 방화벽 문제, Dovecot 오류 등

⑦ Roundcube 설정 다시 확인 (config.inc.php)

$config['default_host'] = 'ssl://support.beaverfactory.kr';
$config['default_port'] = 993;

또는

$config['imap_host'] = 'ssl://support.beaverfactory.kr:993';

✳️ 요약 체크리스트

항목 체크 사항

🔐 SSL 인증서 경로 10-ssl.conf에서 cert/key 경로 맞는지 확인
🔌 993 포트 리스닝 `ss -tlnp
🔧 인증 백엔드 auth-sql vs auth-system 설정 일치 여부
🔁 서비스 재시작 sudo systemctl restart dovecot
📡 openssl 테스트 openssl s_client -connect ... 응답 확인
📦 Roundcube 설정 imap_host, smtp_host에 SSL 포함했는지 확인

필요하시면 dovecot.conf, 10-ssl.conf, 10-master.conf, 10-auth.conf 전체 내용 공유해 주시면 맞춤 설정 진단해드릴 수 있습니다.

 

 

 

"저장소 연결 실패" 메시지가 뜨는 경우, Roundcube가 Dovecot IMAP 서버에 접속을 시도했지만 인증 또는 스토리지 디렉토리 접근 등에서 실패한 상황입니다.
현재 auth-sql 인증을 쓰고 있으므로, 다음 항목들을 순서대로 점검해보세요.


✅ 체크리스트 순서

1️⃣ auth-sql.conf.ext에 SQL 쿼리 설정 확인

/etc/dovecot/conf.d/auth-sql.conf.ext에서 다음 항목이 있는지 확인:

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

🔍 여기서 중요한 건:

  • %d = 도메인 (ex: beaverfactory.kr)
  • %n = 유저명 (ex: support)
  • 결국 /var/mail/vhosts/beaverfactory.kr/support 디렉토리를 사용하게 됩니다.

🧱 이 디렉토리는 실제로 존재해야 하며 권한도 vmail에게 있어야 함


2️⃣ /etc/dovecot/dovecot-sql.conf.ext 설정 확인

driver = mysql
connect = host=127.0.0.1 dbname=beaveremaildb user=beaveremaildb password=********

default_pass_scheme = SHA512-CRYPT

password_query = SELECT email as user, password FROM accounts_table WHERE email = '%u'

📌 주의:

  • user_query는 생략해도 되며, userdb static으로 처리하면 OK
  • password_query에서 반드시 user와 password 컬럼 반환해야 함
  • %u는 full email address (support@beaverfactory.kr)

3️⃣ 유저 메일 디렉토리 존재 여부 확인

다음 명령으로 실제 디렉토리 있는지 확인:

ls -ld /var/mail/vhosts/beaverfactory.kr/support

❌ 없다면 수동으로 생성:

sudo mkdir -p /var/mail/vhosts/beaverfactory.kr/support
sudo chown -R vmail:vmail /var/mail/vhosts
sudo chmod -R 700 /var/mail/vhosts

4️⃣ vmail 유저 및 권한 확인

id vmail

uid=5000(vmail) gid=8(mail) 같은 정보가 출력되면 OK
그리고:

ls -ld /var/mail/vhosts

vmail이 소유자여야 함


5️⃣ Dovecot 재시작

설정 다 했으면 꼭 재시작:

sudo systemctl restart dovecot

로그 확인:

sudo journalctl -xeu dovecot

6️⃣ Roundcube 접속 테스트

이제 Roundcube에서 로그인이 실패한다면 로그를 확인:

tail -f /home/email/logs/errors.log

또는 Dovecot 로그:

sudo tail -f /var/log/mail.log

⚠️ 자주 나는 오류 요약

문제 원인

"IMAP 연결 실패" Dovecot에서 993 포트가 안 열렸거나 인증 오류
"저장소 연결 실패" 메일 디렉토리 없음, 권한 없음, userdb 경로 설정 문제
로그인 실패 SQL 쿼리 결과 없음, 암호화 방식 불일치 (SHA512-CRYPT 등)

🛠️ 필요시 테스트 도구

Dovecot 로그인 테스트:

doveadm auth test support@beaverfactory.kr '비밀번호'

→ 성공 시 OK / 실패 시 SQL 인증, 비밀번호 암호화 방식 문제


📩 원하시면 dovecot-sql.conf.ext, auth-sql.conf.ext, 10-mail.conf, 10-auth.conf 파일 내용 전체를 올려주시면 더 정확하게 디버깅 도와드릴게요.

 

 

 

여기서 중요한게 디비 비밀번호가 암호화 방식을 sha512-crypt 으로 변경해야됩니다.

 

이 에러 메시지:

AUTHENTICATE PLAIN: Authentication failed.

Roundcube가 Dovecot에 PLAIN 방식으로 로그인 시도했지만 인증에 실패했다는 뜻입니다.


🔍 주요 원인 정리

원인 설명 조치

✅ Dovecot이 SQL 계정 연동 설정이 안 됨 /etc/dovecot/conf.d/auth-sql.conf.ext 미설정 SQL 사용자 인증 설정 확인
✅ Roundcube에서 입력한 비밀번호와 DB 비밀번호 불일치 Roundcube에 로그인한 비밀번호가 DB에 저장된 것과 다름 DB 비밀번호 암호화 확인
✅ 사용자 이메일 계정이 존재하지 않음 support@beaverfactory.kr 이 DB에 없음 DB에 계정 추가
🔒 disable_plaintext_auth = yes인데 SSL 연결 실패 암호화된 연결이 안 되어 있어도 PLAIN 비활성화됨 SSL 포트 993 활성화 확인

✅ 순서대로 점검하세요


① Roundcube에서 로그인 시도한 비밀번호가 DB에 저장된 것과 일치하는가?

사용자 테이블(accounts_table 또는 users)에 저장된 비밀번호 확인:

SELECT Email, password FROM accounts_table WHERE Email = 'support@beaverfactory.kr';

비밀번호가 평문이 아닌 SHA512-CRYPT 또는 MD5-CRYPT 등으로 되어 있어야 합니다.

예시 삽입 (SHA512-CRYPT):

-- 패키지 설치
sudo apt install -y whois

-- 암호 생성
mkpasswd --method=SHA-512

-- INSERT 예시
INSERT INTO accounts_table (Email, password, DomainId) VALUES (
  'support@beaverfactory.kr',
  '$6$roundcube$shZfYcvB0u3Wz7H0eT...', -- mkpasswd 결과
  1
);

② dovecot이 SQL에서 계정 정보를 읽을 수 있도록 설정됐는가?

📄 /etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

③ /etc/dovecot/dovecot-sql.conf.ext 설정 확인

driver = mysql
connect = host=localhost dbname=디비명 user=유저명 password=dbpassword

default_pass_scheme = SHA512-CRYPT

password_query = SELECT Email as user, password FROM accounts_table WHERE Email = '%u'

dbuser, dbpassword는 MySQL에 실제 접근 가능한 계정으로 설정해야 합니다.


④ dovecot 로그 추가 확인

sudo tail -f /var/log/mail.log

이 부분에서 SQL 연동 오류나 비밀번호 해시 인식 실패 메시지가 나오는지 확인하세요.


🔁 마무리 체크리스트

  • Roundcube에서 로그인 시도한 계정이 DB에 존재하는가?
  • DB에 저장된 비밀번호는 dovecot에서 인식 가능한 해시(SHA512 등)인가?
  • dovecot 설정에서 passdb, userdb가 SQL로 되어 있는가?
  • /etc/dovecot/dovecot-sql.conf.ext 경로와 권한은 올바른가?
  • dovecot 재시작 했는가?
  • sudo systemctl restart dovecot

필요하다면 다음 정보를 추가로 주세요:

  • dovecot-sql.conf.ext 내용
  • accounts_table의 구조 (SHOW CREATE TABLE accounts_table;)
  • Roundcube 로그인 시 사용하는 정확한 이메일과 비밀번호 조합

그럼 더 정확히 진단해드릴 수 있습니다.

 

 

-- 암호 생성
mkpasswd --method=SHA-512 이명령어를 입력하면 비밀번호 입력하라는 명령어가 생깁니다.

꼭 비번을 입력해서 접속하면됩니다.

 

 

 

 

좋습니다! 로그에 따르면 Postfix 서비스가 정상적으로 시작되었고, 설정 오류는 없습니다:

Finished postfix.service - Postfix Mail Transport Agent.

하지만 여전히 587 포트가 열리지 않거나 연결이 거부되는 경우가 있다면, 다음 핵심 체크리스트를 확인해보세요:


✅ 최종 점검 체크리스트

1. 587 포트 리스닝 확인

sudo ss -tuln | grep 587

나와야 할 예시:

LISTEN  0  100  0.0.0.0:587  0.0.0.0:*

❌ 안 나온다면 master.cf 설정이 적용 안 된 상태이거나 Postfix가 제대로 리로드되지 않았을 수 있음.

해결 방법:

sudo postfix check         # 설정 확인
sudo postfix reload        # 설정 반영
sudo systemctl restart postfix

2. master.cf 파일 다시 점검

/etc/postfix/master.cf 아래 설정 확인:

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o milter_macro_daemon_name=ORIGINATING

이 형식대로 정확하게 되어 있어야 하고, 주석처리(#) 되어 있으면 안 됩니다.


3. Dovecot Auth 소켓 확인

Postfix가 Dovecot의 인증을 쓰려면 이 소켓이 필수:

ls -l /var/spool/postfix/private/auth

❌ 없으면 아래 설정을 /etc/dovecot/conf.d/10-master.conf 에 추가:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

그리고 다음 실행:

sudo systemctl restart dovecot
sudo systemctl restart postfix

4. 방화벽 설정 확인

587 포트 열려 있는지 다시 확인:

sudo ufw status numbered

안 열렸다면:

sudo ufw allow 587/tcp

5. SELinux 사용 여부 (CentOS일 경우)

Ubuntu는 보통 안 쓰지만 CentOS라면:

sudo setsebool -P httpd_can_sendmail 1

✅ 테스트

587 포트가 열렸는지 테스트:

openssl s_client -starttls smtp -crlf -connect support.beaverfactory.kr:587

여기서 CONNECTED 나오면 성공.


모든 설정이 맞는데도 587 포트가 열리지 않으면, 설정 전체를 점검해서 postfix에서 submission 서비스를 제대로 리스닝하고 있는지 다시 체크해야 합니다. 필요하시면 main.cf, master.cf, dovecot.conf 공유해주시면 세부 분석 도와드릴게요.

 

 

그대로 따라하면 됩니다.

 

sudo postfix check 명령어 입력하면 뭐가 문제가 되는지 에러가 나옵니다.

 

여기서 문제가 메일 발송이 갑자기 안될때...

 

 

이 메시지는 DKIM 설정이 서버에는 되어 있지만, DNS에 DKIM 공개키가 등록되지 않았다는 뜻입니다.


🚨 문제 요약

opendkim-testkey: 'mail._domainkey.beaverfactory.kr' record not found

→ 도메인 beaverfactory.kr의 DNS에 mail._domainkey.beaverfactory.kr이라는 TXT 레코드가 존재하지 않음


✅ 해결 방법 (DNS에 DKIM 공개키 등록)

  1. DKIM 공개 키를 확인:
cat /etc/opendkim/keys/beaverfactory.kr/mail.txt

이 파일의 내용은 보통 이런 식으로 되어 있습니다:

mail._domainkey IN TXT ( "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0B..." ) ; ----- DKIM key mail for beaverfactory.kr
  1. 해당 TXT 레코드를 도메인의 DNS 설정 페이지에서 등록:
  • 호스트/이름: mail._domainkey
  • 타입: TXT
  • 값: v=DKIM1; k=rsa; p=... 이하 한 줄 또는 여러 줄을 하나로 붙여서 등록
    (공백/줄바꿈 없이)

💡 주의: " 기호는 DNS 콘솔에 따라 자동 삽입되기도 하므로, DNS 제공업체에 따라 "v=...p=..."로 감싸거나 따옴표 없이 붙여야 할 수 있습니다.

예시 (일부만 표시):

Host: mail._domainkey
Type: TXT
Value: v=DKIM1; k=rsa; p=MIIBIjANBgkq... (공개키)

✅ 등록 후 확인

등록 후 5~15분 정도 지나면 다음 명령어로 테스트:

opendkim-testkey -d beaverfactory.kr -s mail -vvv

성공 시:

key OK

DNS에 등록한 TXT 값이 잘못되었거나, 호스트 이름이 잘못되었거나, 아직 DNS가 퍼지지 않았다면 여전히 오류가 납니다.


필요하시면 mail.txt 내용 공유해주시면 DNS에 넣을 수 있도록 예쁘게 정리해드릴게요.

 

 

이거 dns 에서 꼭 설정 해놓으세요 화이트 도메인 설정하고 mail._domainkey 을 꼭 해야지 메일 발송 거절 안됩니다.

 

 

접속하면 문제 없이 로그인이 됩니다.

 

728x90