ค้นหาเว็บไซต์

วิธีการตั้งค่า Postfix Mail Server และ Dovecot ด้วยฐานข้อมูล (MariaDB) อย่างปลอดภัย - ตอนที่ 1


ในชุด 3 บทความ นี้ เราจะพูดถึงวิธีตั้งค่าเซิร์ฟเวอร์อีเมล Postfix พร้อมการป้องกันไวรัสและสแปมในกล่อง CentOS 7 โปรดทราบว่าคำแนะนำเหล่านี้ใช้ได้กับการกระจายอื่นๆ เช่น RHEL/Fedora และ Debian/Ubuntu

แผนของเราประกอบด้วยการจัดเก็บบัญชีอีเมลและนามแฝงในฐานข้อมูล MariaDB ซึ่งเพื่อความสะดวกของเรา โดยจะได้รับการจัดการผ่าน phpMyAdmin

หากคุณเลือกที่จะไม่ติดตั้ง phpMyAdmin หรือกำลังจัดการกับเซิร์ฟเวอร์ CLI เท่านั้น เราจะจัดเตรียมโค้ดที่เทียบเท่ากันเพื่อสร้างตารางฐานข้อมูลที่จะใช้ตลอดทั้งซีรีส์นี้

เนื่องจากการดูแลให้เมลเซิร์ฟเวอร์ทำงานเป็นหนึ่งในงานสำคัญที่โดยปกติแล้วผู้ดูแลระบบและวิศวกรจะได้รับมอบหมาย เราจึงมอบเคล็ดลับบางประการในการใช้บริการที่สำคัญนี้อย่างมีประสิทธิภาพในสภาพแวดล้อมการใช้งานจริง

สร้างระเบียน A และ MX สำหรับโดเมนใน DNS

ก่อนดำเนินการต่อ มีข้อกำหนดเบื้องต้นบางประการที่ต้องปฏิบัติตาม:

1. คุณจะต้องมีโดเมนที่ถูกต้องซึ่งจดทะเบียนผ่านผู้รับจดทะเบียนโดเมน ในชุดนี้เราจะใช้ www.linuxnewz.com ซึ่งได้รับการลงทะเบียนผ่าน GoDaddy

2. โดเมนดังกล่าวจะต้องชี้ไปที่ IP ภายนอกของ VPS หรือผู้ให้บริการโฮสต์บนคลาวด์ของคุณ หากคุณโฮสต์เมลเซิร์ฟเวอร์ด้วยตนเอง คุณสามารถใช้บริการที่ FreeDNS นำเสนอได้ (ต้องลงทะเบียน)

ไม่ว่าในกรณีใด คุณจะต้องตั้งค่าระเบียน A และ MX สำหรับโดเมนของคุณด้วย (คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับระเบียน MX ได้ในคำถามที่พบบ่อยนี้จาก Google)

เมื่อเพิ่มแล้ว คุณสามารถค้นหาโดยใช้เครื่องมือออนไลน์ เช่น MxToolbox หรือ ViewDNS เพื่อให้แน่ใจว่าได้รับการตั้งค่าอย่างเหมาะสม

ข้อสำคัญ: โปรดทราบว่าอาจใช้เวลาสักครู่ (1-2 วัน) จนกว่าระเบียน DNS จะได้รับการเผยแพร่และโดเมนของคุณพร้อมใช้งาน ในระหว่างนี้ คุณสามารถเข้าถึง VPS ของคุณผ่านทางที่อยู่ IP เพื่อดำเนินการตามที่ระบุไว้ด้านล่าง

3. กำหนดค่า FQDN (ชื่อโดเมนแบบเต็ม) ของ VPS ของคุณ:

hostnamectl set-hostname yourhostname

เพื่อตั้งชื่อโฮสต์ของระบบ จากนั้นแก้ไข /etc/hosts ดังต่อไปนี้ (แทนที่ AAA.BBB.CCC.DDD, ชื่อโฮสต์ของคุณ และ โดเมนของคุณ ด้วย IP สาธารณะของเซิร์ฟเวอร์ของคุณ ชื่อโฮสต์ของคุณ และโดเมนที่ลงทะเบียนของคุณ):

AAA.BBB.CCC.DDD yourhostname.yourdomain.com       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

ใน Debian และอนุพันธ์:

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

ใน Debian และอนุพันธ์:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

เมื่อการติดตั้งเสร็จสมบูรณ์และเปิดใช้งานและเรียกใช้บริการข้างต้น เราจะเริ่มต้นด้วยการตั้งค่าฐานข้อมูลและตารางเพื่อจัดเก็บข้อมูลเกี่ยวกับบัญชีเมล Postfix

การสร้างฐานข้อมูลบัญชีเมล Postfix

เพื่อความง่าย เราจะใช้ phpMyAdmin ซึ่งเป็นเครื่องมือที่มีวัตถุประสงค์เพื่อจัดการฐานข้อมูล MySQL/MariaDB ผ่านทางอินเทอร์เฟซเว็บ เพื่อสร้างและจัดการ ฐานข้อมูลอีเมล

อย่างไรก็ตาม ในการเข้าสู่ระบบและใช้เครื่องมือนี้ เราต้องทำตามขั้นตอนเหล่านี้:

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 ของเราจะเดินทางเป็นข้อความธรรมดาผ่านสาย

หากต้องการตั้งค่า Transport Layer Security (TLS) ในเซิร์ฟเวอร์ของคุณ ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนที่ 8 ของซีรี่ส์ RHCE: การใช้ HTTPS ผ่าน TLS โดยใช้ Network Security Service (NSS) สำหรับ Apache ก่อนดำเนินการต่อ

หมายเหตุ: หากคุณไม่สามารถเข้าถึงคอนโซลของเซิร์ฟเวอร์ได้ คุณจะต้องหาวิธีอื่นในการสร้างเอนโทรปีที่จำเป็นระหว่างการสร้างคีย์ ในกรณีนั้น คุณอาจต้องการพิจารณาติดตั้ง 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, ไซต์พร้อมใช้งาน และ เปิดใช้งานไซต์ มีไดเรกทอรีอยู่):

<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. ตอนนี้คุณสามารถเปิดอินเทอร์เฟซ phpMyAdmin ได้ที่ https://www.yourdomain.com/managedb (โปรดทราบว่า managedb< เป็นนามแฝงที่เราตั้งค่าไว้ก่อนหน้านี้สำหรับไดเร็กทอรีข้อมูล phpMyAdmin)

หากไม่ได้ผล (ซึ่งอาจเกิดจากความล่าช้าในการเผยแพร่หรือการขาดการกำหนดค่าระเบียน DNS) ในขณะนี้ คุณสามารถลองใช้ที่อยู่ IP สาธารณะของเซิร์ฟเวอร์ของคุณแทน www.yourdomain.com :

ไม่ว่าในกรณีใด หลังจากที่คุณเข้าสู่ระบบ 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 เนื่องจากความสัมพันธ์ที่ต้องสร้างขึ้นระหว่างตารางที่ต่างกัน:

Users_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 จะแจ้งข้อผิดพลาดทางไวยากรณ์):

นามแฝง_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

นอกจากนี้ โปรดทราบว่าอีเมลที่ส่งไปยัง [ป้องกันอีเมล] จะถูกเปลี่ยนเส้นทางไปที่ [ป้องกันอีเมล]:

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 ');

หลังจากเพิ่มโดเมนของเรา บัญชีผู้ใช้สองบัญชี และนามแฝงอีเมลแล้ว เราพร้อมที่จะตั้งค่าเซิร์ฟเวอร์อีเมลของเราต่อไปในบทความถัดไปของชุดนี้ ซึ่งเราจะกำหนดค่า Dovecot และ Postfix.

สรุป

ในบทความนี้ เราได้แสดงรายการแพ็คเกจที่จำเป็นสำหรับการติดตั้งเซิร์ฟเวอร์อีเมล Postfix ใน CentOS 7 VPS และอธิบายวิธีจัดการฐานข้อมูลพื้นฐานโดยใช้ phpMyAdmin

ในสองบทความถัดไป เราจะตรวจสอบการกำหนดค่าของทั้งสองโปรแกรมที่จะดูแลการกระจายอีเมลสำหรับโดเมนของเรา (ส่วนที่ 2) และแสดงวิธีเพิ่มการป้องกันสแปมและไวรัส (ส่วนที่ 3) สำหรับเซิร์ฟเวอร์ของคุณ

ในระหว่างนี้ โปรดติดต่อเราโดยใช้แบบฟอร์มด้านล่างหากคุณมีคำถามหรือความคิดเห็นใดๆ