logo
Hỗ trợ: 24/7
Điện thoại: 098 984 8886
Email: info@thuonghieuweb.com

Xây dựng mail server postfix và quản lý email bằng php mysql

1/5 1123 votes
updated on 2020-08-02

Trước đây thuonghieuweb đã có một bài viết hướng dẫn triển khai mail server đơn giản trên hệ điều hành linux, sử dụng các user của hệ điều hành làm email account. Nay thuonghieuweb tiếp tục phát triển hướng này và chia sẻ cách để có thể quản lý được nhiều tên miền nhiều email trên một server.

Để tìm hiểu từ gốc đến ngọn các bạn có thể tham khảo bài viết này để biết cách hình thành một mail server nguyên thủy là như thế nào, tuy nhiên nếu muốn học theo kiểu step-by-step thì vẫn có thể bắt đầu ngay với bài viết này và chịu khó theo đúng từng bước của bài viết là xong.



HOT: VDATA tuyển dụng kỹ thuật viên CNTT! Tham khảo chi tiết tại đây

Chuẩn bị:

  • Bạn cần có một máy chủ hoặc một VPS cài đặt hệ điều hành Centos 5.x trở lên
  • Giả định là bạn đã biết về webserver và đã cài đặt sẵn các ứng dụng apache, php, mysqlphpmyadmin lên server này nếu như bạn chưa có các ứng dụng này, hãy tham khảo bài viết này để cài đặt chúng.

Bước 1: Thiết lập hostname

Đầu tiên chúng ta cần kiểm tra hostname của máy chủ vì hostname này sẽ dùng cho một số thiết lập hệ thống sau này. Để kiểm tra hostname của linux, chúng ta dùng lệnh sau

# hostname -f

Để thay đổi hostname, chúng ta chỉnh sửa dòng HOSTNAME trong file /etc/sysconfig/network.

Ngoài ra ta cũng cần định nghĩa hostname gắn với ip của máy chủ này trong file /etc/hosts. Việc định nghĩa hostname trong file /etc/hosts sẽ giúp server có thể diễn dịch các hostname dùng để test mà không cần phải định nghĩa các bản ghi trên DNS server.

Bước 2: Kiểm tra và update yum, repo


Trước hết chúng ta update công cụ cài đặt yum bằng lệnh sau

# yum -y update

Ngoài ra chúng ta cũng cần kiểm tra trong repo của hệ điều hành đã có dòng lệnh exclude=postfix* như hình dưới đây hay chưa bằng lệnh sau:

# vi /etc/yum.repos.d/CentOS-Base.repo

Nếu chưa có thì thêm dòng này vào để quá trình download và cài đặt sẽ lấy bản postfix hỗ trợ mysql.



Bước 3: Kiểm tra và cài đặt các gói mysql-devel, cyrus-sasl, dovecot, postfix


Khi bạn cài đặt mysql có thể thiếu một số gói phần mềm cần thiết để kết nối postfix với mysql đó là mysql-develcyrus-sasl vì vậy chúng ta cần kiểm tra bằng các lệnh sau

# rpm -qa | grep mysql (kiểm tra xem có các gói dịch vụ nào đi kèm với mysql đã được cài đặt)
# rpm -qa | grep sasl (kiểm tra xem gói cyrus-sasl đã được cài đặt chưa)
# rpm -qa | grep dovecot
# rpm -qa | grep postfix

Nếu các gói trên đã có thì OK, còn nếu chưa có chúng ta dùng lệnh sau để cài đặt đồng loạt các gói này

# yum -y install mysql mysql-devel dovecot cyrus-sasl

Chúng ta cũng cần dùng lệnh sau đây để kiểm tra xem postfix đã được cài đặt cùng module mysql hay chưa

# postfix -m

Nếu nhìn thấy module mysql thì OK, còn nếu không thấy, chúng ta dùng lệnh yum remove postfix để gỡ bỏ bản postfix cũ và cài lại bản mới bằng lệnh sau

# yum --enablerepo=centosplus install postfix

Bước 4. Gỡ bỏ các dịch vụ có xung đột và đặt chế độ tự khởi động cho postfix, dovecot


Hệ điều hành Centos có sẵn một số dịch vụ như sendmail, exim... chúng ta cần kiểm tra và tắt các dịch vụ này đi để tránh xung đột với postfix bằng cách sau

# service sendmail status
# service sendmail stop
# chkconfig sendmail off

Sau đó bật các dịch vụ mới cài đặt ở bước 3 lên

# service mysql start
# service dovecot start
# service postfix start
# chkconfig mysql on
# chkconfig dovecot on
# chkconfig postfix on

Bước 5: Đặt mật khẩu cho user root của cơ sở dữ liệu mysql


Bạn cần lưu ý rằng, ngay sau khi cài đặt mysql, cơ sở dữ liệu này đã có sẵn một user có quyền tối cao. Đó là user root, trùng tên với user root của hệ thống nhưng khác là có password bằng trống. Vì vậy phải ngay lập tức đặt mật khẩu cho user này bằng lệnh sau:

# mysql_secure_installation

Khi thực hiện lệnh trên bạn sẽ nhận được 4 câu hỏi như sau:

- Set root password? [Y/n] (Đặt mật khẩu cho root )
- Remove anonymous users? [Y/n] (Xóa bỏ user vô danh)
- Disallow root login remotely? [Y/n] (Không cho phép root đăng nhập từ xa)
- Remove test database and access to it? [Y/n] (Xóa bỏ database test )

Bạn nên trả lời Y cho cả 4 câu hỏi trên để bịt các lỗ hổng bảo mật của mysql.

Bước 6: Tạo database mailserver để lưu các thông số domain, email account ảo.


Chúng ta dùng luôn user root vừa đặt mật khẩu trên để thực hiện các lệnh tạo database và table từ dòng lệnh như sau. Hoặc nếu bạn đã cài phpmyadmin thì có thể thao tác tạo database và table trên giao diện web.

# mysql -u root -p

sau khi gõ mật khẩu bạn sẽ được vào khu vực dòng lệnh của mysql với dấu nhắc như sau:

mysql >

Bạn gõ lệnh

mysql> CREATE DATABASE mail;

để tạo một database tên là mail. Sau đó tạo một user có quyền thao tác trên database này bằng lệnh sau:

mysql> USE mail;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO "mail_admin"@"localhost" IDENTIFIED BY "123#abc";
mysql> FLUSH PRIVILEGES;

Trong đó 123#abc là mật khẩu của user mail_admin. Bạn nên ghi lại mật khẩu này vì sau đó nó sẽ bị mã hóa trong cơ sở dữ liệu, không còn nhìn được ở dạng plain text nữa.

Lưu ý:
- các lệnh của mysql đều phải kết thúc bằng dấu chấm phảy (;)
- các tham số in đậm và mầu đỏ ở trên là tùy biến, bạn có thể đặt tên database, và user, mật khẩu theo ý thích của mình, tuy nhiên nếu để test chúng ta nên dùng thống nhất các tên này để tránh phải sửa đổi nhiều ở các bước sau.

Bước 7: tạo các table để quản lý domain và user ảo.


Chúng ta cần tạo 4 table là domains, forwarding, transports, và users. table forwarding và transport để dùng cho các chức năng mở rộng sau này của email như forward, relay... Trong bài viết này chưa đề cập đến các chức năng đó nên có thể không cần tạo các table này. Chỉ cần có table domains và users là đủ.

mysql> CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
mysql> CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
mysql> CREATE TABLE transport ( domain varchar(128) NOT NULL default "", transport varchar(128) NOT NULL default "", UNIQUE KEY domain (domain) );
mysql> CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
mysql> exit

Lưu ý các lệnh trên có thể thực hiện trong phpmyadmin nếu các bạn đã cài đặt gói dịch vụ này.

Bước 8: Thiết lập địa chỉ ip cho mysql server

# vi /etc/my.cnf

thêm vào một dòng như sau:

bind-address = 127.0.0.1

Ghi lại và khởi động lại dịch vụ mysql

# service mysql restart

Bước 9: Tạo các file cấu hình cho postfix


Chúng ta cần tạo 4 file cấu hình để postfix biết cách query vào cơ sở dữ liệu, lấy ra các giá trị như domain, forwarding, email account... Các bạn download cả 4 file ở đây sau đó upload lên thư mục /etc/postfix/, mở ra và sửa các tham số user, password và dbname như vừa tạo ở trên .

Sau đó thiết lập permissions và ownership cho các file này bằng các lệnh sau

# chmod o= /etc/postfix/mysql-virtual_*.cf
# chgrp postfix /etc/postfix/mysql-virtual_*.cf


Để có thể nhận email, chúng ta cần tạo một user và group có tên là vmail. Các virtual mailboxes của các email account được tạo ra sau này, sẽ được lưu trữ trong thư mục home của user này (/home/vmail)

# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /home/vmail –m


Bước 10: Cấu hình postfix.


Các bạn tải file config.sh này về, sau đó upload vào thư mục /etc/postfix/ và sửa dòng đầu tiên của file cho đúng với hostname của các bạn, chmod sang 755 và chạy file để nó tự add các dòng trong config.sh vào file main.cf của postfix.

# vi /etc/postfix/config.sh
# chmod 755 /etc/postfix/config.sh
# /etc/postfix/config.sh


Tiếp theo chúng ta chỉnh sửa file master.cf, thêm dòng sau vào đoạn giữa fie, mục Interfaces to non-Postfix software

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


Khởi động lại dịch vụ postfix

# service postfix restart

Bước 11: Cấu hình dovecot


Các bạn tải file cấu hình dovecot.conf mới ở đây về, sau đó upload lên /etc. Lưu ý, nên backup lại một bản của file dovecot.conf cũ trước khi đè file mới lên. Mở file dovecot.conf ra và sửa dòng postmaster_address = postmaster@thuonghieuweb.com với tên miền của bạn.

Sau đó tạo 1 file dovecot-sql.conf để móc vào database như sau:

# vi /etc/dovecot-sql.conf

driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail_admin password=123#abc
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email="%u";

Gán quyền truy cập cho file này như sau

# chgrp dovecot /etc/dovecot-sql.conf
# chmod o= /etc/dovecot-sql.conf


Khởi động lại dovecot

# service dovecot restart

Bước 12. Kiểm tra kết quả của các bước trên


Kiểm tra log để đảm bảo dịch vụ dovecot đã chạy và ko có lỗi gì

# tail -f /var/log/maillog

Nếu có 2 dòng sau là ok (xem thêm hình chụp)
: Dovecot v1.0.7 starting up
: mysql : Connected to 127.0.0.1 (mail)




Kiểm tra dịch vụ POP 3 gõ lệnh telnet localhost pop3 và nếu thấy thông báo +OK Dovecot ready là được

# telnet localhost pop3

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is "^]".
+OK Dovecot ready.

quit để thoát.

Bước 13. Tạo alias và kiểm tra sự hoạt động của postfix


Mở file aliases và thêm một dòng gán bí danh cho root như sau

# vi /etc/aliases

thêm dòng:

root: mail_admin

Sau đó chạy lại alias và khởi động lại postfix

# newaliases
# service postfix restart

Kiểm tra dịch vụ postfix bằng lệnh sau

# telnet localhost 25

Sau đó kiểm tra theo hình sau, nếu thấy giống như hình này là ok



Bước 14: Bắt đầu tạo các domain và email account


Sau các bước trên có thể coi như phần ảo hóa và kết nối postfix với database đã xong chúng ta có thể tạo các domain và email gắn với domain được rồi. Bước tạo email account này có thể dùng phpmyadmin hoặc viết một script php để tạo, quản lý email cho nó chuyên nghiệp. Ở đây, với mục đích test chúng ta sẽ dùng dòng lệnh để tạo một domain tên là mailtest.com và một email tên là hai@mailtest.com.

Trước tiên, chúng ta khai báo tên miền này vào file hosts để giả lập một bản ghi DNS

# vi /etc/hosts

Thêm dòng sau

127.0.0.1 mailtest.com

Sau đó bắt đầu khai báo domain này với user test trong cơ sở dữ liệu

# mysql -u root -p
mysql> USE mail;
mysql> INSERT INTO domains (domain) VALUES ("mailtest.com");
mysql> INSERT INTO users (email, password) VALUES ("hai@mailtest.com", ENCRYPT("123456"));
mysql> quit

Để account mail này có thể truy cập Imap hay Pop3 thì ta phải gởi 1 mail (welcome message) cho user đó bằng một tiện ích gửi mail sẵn có của linux, hãy gõ lệnh như sau

# mail -s "xin chao" hai@mailtest.com

Gõ nội dung email ngay sau lệnh trên, sau đó bấm Ctrl-D 2 lần (lần thứ nhất nó hỏi cc để thêm địa chỉ cc, lần thứ 2 để kết thúc và gửi mail)

Sau đó vào thư mục /home/vmail để kiểm tra, nếu mọi thứ OK bạn sẽ nhìn thấy thư mục mailtest.com và trong mailtest.com lại có thư mục hai chứa các email của hai@mailtest.com. Tóm lại nếu bạn vào được đường dẫn này /home/vmail/mailtest.com/hai/Maildir/new và thấy một file thì dó chính là email vừa được gửi bằng tiện ích nói trên và như vậy postfix đã hoạt động tốt.


Bước 15: Check mail thực sự với outlook


Để có thể check mail từ một máy tính bất kỳ dùng outlook, bạn cần phải có một domain và có quyền trỏ bản ghi cho domain này. Giả sử bạn có domain là thuonghieuweb.com, hãy trỏ các bản ghi cần thiết cho email tới máy địa chỉ của máy chủ nói trên (bản ghi A và bản ghi MX) việc trỏ bản ghi không đề cập đến trong này. Bạn hãy làm sao để sau khi trỏ bản ghi bạn sẽ phải ping thành công đến địa chỉ mail.thuonghieuweb.com và thấy là nó đã được trỏ đến ip của máy chủ này.

Sau đó bạn lặp lại bước 14 (nhưng bỏ qua đoạn sửa file hosts vì đã trỏ tên miền từ DNS server rồi) để tạo 2 bản ghi domain = thuonghieuweb.com và user = tenban@thuonghieuweb.com.

Mở outlook trên máy của bạn và khai báo một account mới như hình sau:



Sau khi khai báo các tham số như hình trên, bấm vào test account setting nếu cả 2 bước gửi, nhận mail đều xanh là OK. còn nếu không hãy xem thông báo lỗi là gì để có thể kiểm tra lại.

Outlook làm việc rất tốt với hệ thống mail postfix ảo hóa này tuy nhiên trong một số trường hợp, chẳng hạn đi công tác xa, chúng ta cần check mail bằng webmail thì cần cài đặt thêm một dịch vụ nữa. Hướng dẫn cài đặt webmail có trong bài viết Hướng dẫn cài đặt dịch vụ squirrel mail gắn với postfix, các bạn có thể tiếp tục tìm hiểu thêm.

Chúc các bạn thành công


   
 
Có thể bạn muốn xem thêm....

Những điều cần biết khi xây dựng website

Xây dựng một website không đơn giản chỉ là một gian hàng hay một tờ rơi. Bạn cần phải làm mọi cách để website của mình hướng tới khách hàng, và quan trọng hơn cả, là làm sao để nội dung của bạn có sức lan tỏa nhanh chóng trong môi trường mạng từ đó lôi kéo khách hàng đến với website của bạn

Xem chi tiết

Những điều cần biết về dịch vụ email với tên miền riêng

Email tên miền riêng là email gắn với tên miền của doanh nghiệp kiểu như tennhanvien@tencongty.com. Email tên miền riêng sẽ tạo sự chuyên nghiệp và tin cậy khi giao dịch, đồng thời có thể cấp phát cho nhân viên khi mới đi làm, thu hồi lại khi nhân viên đó thôi việc và lưu trữ được mọi giao dịch trên email mà không sợ nhân viên đổi mật khẩu, mang theo hòm thư khi rời công ty...

Xem chi tiết
Đội ngũ lập trình viên, kỹ thuật viên và seo-er của Thương Hiệu Web cam kết

Hỗ trợ 24/7

Hỗ trợ khách hàng 24 giờ 1 ngày, 7 ngày 1 tuần qua điện thoại, email và chat online

Hoàn tiền 100%

Trong thời gian 45 ngày sử dụng dịch vụ, nếu quý khách không hài lòng!

Cam kết uptime 99.99%

Nếu dịch vụ của quý khách bị gián đoạn, chúng tôi sẽ cộng thêm 1 tháng sử dụng

KHÁCH HÀNG NÓI VỀ CHÚNG TÔI

Một đơn vị xây dựng web tận tâm và chuyên nghiệp!

"Thương Hiệu Web là đơn vị thiết kế website có năng lực, tôn trọng và có trách nhiệm với khách hàng, đặt mình vào vị trí khách hàng để mang lại cho khách hàng nhiều giá trị từ chính dịch vụ của mình. Với tôi, Thương Hiệu Web là một lựa chọn hợp lý!" Chị Nguyễn Phượng, TP kinh doanh, Công Ty Cổ Phần Quản Lý Công Trình Đô Thị Hải Dương.

Xem bình luận trên FB
Sitemap Điều khoản sử dụng Chính sách riêng tư
Bản quyền thuộc về công ty cổ phần truyền thông số VDATA
Tầng 2, tòa nhà 71 Hoàng Cầu, Đống Đa, Hà Nội
Điện thoại: (04) 3990 9643 - Email: info@vdata.com.vn
Giấy chứng nhận ĐKKD số: 0102766780, do Sở KHĐT Tp Hà Nội cấp ngày 28/04/2009

Online