웹사이트 검색

데이터베이스(MariaDB)를 사용하여 Postfix 메일 서버 및 Dovecot을 안전하게 설정하는 방법 - 1부


3개의 기사 시리즈에서는 CentOS 7 상자에서 바이러스 백신 및 스팸 방지 기능을 갖춘 Postfix 메일 서버를 설정하는 방법에 대해 설명합니다. 이 지침은 RHEL/FedoraDebian/Ubuntu와 같은 다른 배포판에서도 작동합니다.

우리의 계획은 편의를 위해 phpMyAdmin을 통해 관리되는 MariaDB 데이터베이스에 이메일 계정과 별칭을 저장하는 것으로 구성됩니다.

phpMyAdmin을 설치하지 않기로 선택하거나 CLI 전용 서버를 다루는 경우, 이 시리즈 전체에서 사용될 데이터베이스 테이블을 생성하기 위한 동등한 코드도 제공됩니다.

메일 서버를 계속 실행하는 것은 일반적으로 시스템 관리자와 엔지니어에게 할당되는 필수 작업 중 하나이므로 프로덕션 환경에서 이 중요한 서비스를 효율적으로 실행하기 위한 몇 가지 팁도 제공합니다.

DNS에서 도메인에 대한 A 및 MX 레코드 생성

계속 진행하기 전에 충족해야 할 몇 가지 전제 조건이 있습니다.

1. 도메인 등록기관을 통해 등록된 유효한 도메인이 필요합니다. 이 시리즈에서는 GoDaddy를 통해 등록된 www.linuxnewz.com을 사용합니다.

2. 해당 도메인은 VPS 또는 클라우드 호스팅 제공업체의 외부 IP를 가리켜야 합니다. 메일 서버를 자체 호스팅하는 경우 FreeDNS에서 제공하는 서비스를 사용할 수 있습니다(등록 필요).

어떤 경우든 도메인에 대한 AMX 레코드도 설정해야 합니다. MX 레코드에 대한 자세한 내용은 Google의 FAQ에서 확인할 수 있습니다.

추가한 후에는 MxToolbox 또는 ViewDNS와 같은 온라인 도구를 사용하여 검색하여 제대로 설정되었는지 확인할 수 있습니다.

중요: DNS 레코드가 전파되고 도메인을 사용할 수 있을 때까지 다소(1~2일) 걸릴 수 있습니다. 그동안 IP 주소를 통해 VPS에 액세스하여 아래 표시된 작업을 수행할 수 있습니다.

3. VPS의 FQDN(정규화된 도메인 이름)을 구성합니다.

hostnamectl set-hostname yourhostname

시스템 호스트 이름을 설정하려면 /etc/hosts를 다음과 같이 편집합니다(AAA.BBB.CCC.DDD, yourhostname교체). >yourdomain을 서버의 공개 IP, 호스트 이름 및 등록된 도메인으로 바꿉니다):

AAA.BBB.CCC.DDD yourhostname.yourdomain.com       yourhostname

여기서 yourhostname은 이전에 hostnamectl 명령을 사용하여 설정된 시스템 호스트 이름입니다.

필수 소프트웨어 패키지 설치

4. Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV 등과 같은 필수 소프트웨어 패키지를 설치하려면 EPEL 저장소를 활성화해야 합니다.

yum install epel-release

5. 위 단계를 수행한 후 필요한 패키지를 설치하십시오.

CentOS 기반 시스템의 경우:

yum update && yum install httpd httpd-devel postfix dovecot dovecot-mysql spamassassin clamav clamav-scanner clamav-scanner-systemd clamav-data clamav-update mariadb mariadb-server php phpMyAdmin

데비안과 파생상품에서:

aptitude update && aptitude install apache2 postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql spamassassin clamav clamav-daemon clamav-base mariadb-client mariadb-server php5 phpMyAdmin

6. 웹 및 데이터베이스 서버를 시작하고 활성화합니다.

CentOS 기반 시스템의 경우:

systemctl enable httpd mariadb
systemctl start httpd mariadb

데비안과 파생상품에서:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

설치가 완료되고 위 서비스가 활성화되어 실행되면 Postfix 메일 계정에 대한 정보를 저장할 데이터베이스와 테이블을 설정하는 것으로 시작하겠습니다.

Postfix 메일 계정 데이터베이스 생성

단순화를 위해 웹 인터페이스를 통해 MySQL/MariaDB 데이터베이스 관리를 처리하기 위한 도구인 phpMyAdmin을 사용하여 데이터베이스를 생성하고 관리합니다. 이메일 데이터베이스.

그러나 이 도구에 로그온하여 사용하려면 다음 단계를 따라야 합니다.

7. MariaDB 계정을 활성화합니다(명령줄에서 mysql_secure_installation 유틸리티를 실행하고 사용자 루트에 대한 비밀번호를 할당한 후 이를 수행할 수 있음). "원격으로 루트 로그인을 허용하지 않으시겠습니까?"를 제외하고 도구에서 제안한 기본 설정을 지정합니다.

또는 그렇지 않으면 새 데이터베이스 사용자를 만듭니다.

MariaDB [(none)]> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'YourPasswordHere';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'dba'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

인증서로 Apache 보호

8. 이메일 서버 데이터베이스를 관리하기 위해 웹 애플리케이션을 사용할 것이므로 서버 연결을 보호하기 위해 필요한 예방 조치를 취해야 합니다. 그렇지 않으면 phpMyAdmin 자격 증명이 일반 텍스트로 전송됩니다.

서버에서 전송 계층 보안(TLS)을 설정하려면 RHCE 시리즈의 파트 8: TLS를 통해 HTTPS 구현에 설명된 단계를 따르세요. 계속 진행하기 전에 Apache용 NSS(네트워크 보안 서비스)를 사용하세요.

참고: 서버 콘솔에 액세스할 수 없는 경우 키 생성 중에 필요한 엔트로피를 생성하는 다른 방법을 찾아야 합니다. 이 경우 rng-tools를 설치하고 rngd -r /dev/urandom을 실행하는 것이 좋습니다.

PhpMyAdmin 구성 및 보안

9. /etc/httpd/conf.d/phpMyAdmin.conf(CentOS) 또는 /etc/phpmyadmin/apache에 있습니다. conf(Debian 및 파생 버전)에서 다음 줄의 항목을 모두 찾아서 서버의 공개 IP를 가리키는지 확인하세요.

Require ip AAA.BBB.CCC.DDD
Allow from AAA.BBB.CCC.DDD

또한 기본 별칭을 비활성화하고 새 별칭을 만들어 phpMyAdmin 로그인 페이지에 액세스하세요. 이는 www.yourdomain.com/phpmyadmin 또는 www.yourdomain.com/phpMyAdmin을 표적으로 삼는 봇 및 외부 공격자로부터 사이트를 보호하는 데 도움이 됩니다.

#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /managedb /usr/share/phpMyAdmin

또한 안에 다음 줄을 추가하세요.

Require all granted

도메인용 Apache VirtualHost 생성

10. 귀하의 도메인이 활성화된 사이트에 추가되었는지 확인하세요. /etc/httpd/sites-available/linuxnewz.com.conf(CentOS) 또는 /etc/apache2/sites-available/linuxnewz.com 을 생성합니다. (Debian)을 다음 콘텐츠로 포함합니다(DocumentRoot, sites-availablesites-enabled ) 디렉토리가 존재함):

<VirtualHost *:80>
    ServerName www.linuxnewz.com
    ServerAlias linuxnewz.com
    DocumentRoot /var/www/linuxnewz.com/public_html
    ErrorLog /var/www/linuxnewz.com/error.log
    CustomLog /var/www/linuxnewz.com/requests.log combined
    Options Indexes FollowSymLinks
</VirtualHost>

심볼릭 링크는 다음과 같습니다.

CentOS에서:
ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
데비안에서:
a2ensite linuxnewz.com

이제 끝났습니다.

Postfix 이메일 데이터베이스 설정

11. 이제 https://www.yourdomain.com/managedb에서 phpMyAdmin 인터페이스를 열 수 있습니다(managedb<은 이전에 phpMyAdmin 데이터 디렉터리에 대해 설정한 별칭입니다.

그래도 작동하지 않는 경우(전파 지연 또는 DNS 레코드 구성 부족으로 인해 발생할 수 있음) 당분간 www.yourdomain.com 대신 서버의 공용 IP 주소를 사용해 볼 수 있습니다. :

어쨌든 phpMyAdmin에 로그인하면 다음 인터페이스가 표시됩니다. 왼쪽 섹션에서 새로 만들기를 클릭합니다.

데이터베이스 이름(이 경우 EmailServer_db, 데이터 정렬을 선택할 필요 없음)을 입력하고 만들기를 클릭합니다.

12. 다음 화면에서 첫 번째 테이블의 이름을 선택합니다(이 메일 서버가 관리할 도메인을 저장할 위치).

이 시리즈에서는 하나의 도메인만 관리하므로 나중에 더 추가할 수 있습니다.) 및 원하는 필드 수를 입력한 다음 이동을 클릭하세요. 다음 이미지에 표시된 대로 안전하게 진행할 수 있는 두 필드의 이름을 지정하고 구성하라는 메시지가 표시됩니다.

DomainId에 대한 색인에서 기본을 선택하는 경우 기본값을 수락하고 이동을 클릭합니다.

또는 SQL 미리보기를 클릭하여 내부 코드를 볼 수 있습니다.

CREATE TABLE `EmailServer_db`.`Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;

준비가 되면 저장을 클릭하여 변경사항을 확인하세요. 그런 다음 EmailServer_db에서 새로 만들기를 클릭하여 계속해서 테이블을 만들 수 있습니다.

13. 이제 다음 단계에 따라 나머지 표를 만듭니다. SQL 탭을 클릭하고 각 데이터베이스 개체에 대해 표시된 코드를 입력합니다.

이 경우에는 서로 다른 테이블 간에 관계를 설정해야 하기 때문에 SQL 쿼리를 사용하여 테이블을 생성하기로 선택했습니다.

사용자_tbl

CREATE TABLE `Users_tbl` ( 
    `UserId` INT NOT NULL AUTO_INCREMENT,  
    `DomainId` INT NOT NULL,  
    `password` VARCHAR(100) NOT NULL,  
    `Email` VARCHAR(100) NOT NULL,  
    PRIMARY KEY (`UserId`),  
    UNIQUE KEY `Email` (`Email`),  
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE 
) ENGINE = InnoDB; 

확인 메시지를 받아야 합니다(그렇지 않은 경우 phpMyAdmin은 구문 오류 메시지를 표시합니다).

Alias_tbl

CREATE TABLE `Alias_tbl` (
    `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_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

(하단의 이동을 클릭하면 테이블 생성이 진행됩니다.)

지금까지는 다음과 같은 데이터베이스 구조를 갖춰야 합니다.

이는 다음 섹션에서 일부 레코드를 추가할 준비가 되었음을 의미합니다.

Postfix 도메인, 사용자 및 별칭 만들기

14. 이제 세 개의 테이블에 다음 레코드를 삽입하겠습니다. [email [email 의 비밀번호와 INSERT INTO Users_tbl 문이 암호화됩니다.

또한 [email 로 전송된 이메일은 [email 로 리디렉션됩니다.

INSERT INTO Domains_tbl (DomainName) VALUES ('linuxnewz.com');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForFirstEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, '[email ', '[email ');

도메인, 두 개의 사용자 계정 및 이메일 별칭을 추가했으므로 이 시리즈의 다음 기사에서 DovecotPostfix.

요약

이 기사에서는 CentOS 7 VPS에 Postfix 이메일 서버를 설치하는 데 필요한 패키지를 나열하고 phpMyAdmin을 사용하여 기본 데이터베이스를 관리하는 방법을 설명했습니다.

다음 두 기사에서는 도메인의 이메일 배포를 관리하는 두 프로그램의 구성을 검토하고(파트 2) 스팸 및 바이러스로부터 보호 기능을 추가하는 방법을 보여줍니다( >파트 3).

그때까지 질문이나 의견이 있으면 아래 양식을 사용하여 언제든지 문의해 주세요.