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