Hướng dẫn cài đặt và cấu hình máy chủ Email với Exim, Roundcube và Dovecot trên CentOS 7
Giới thiệu
Ngày nay, email đóng một vai trò vô cùng quan trọng trong công việc và đời sống hàng ngày. Nhằm tăng sự thuận tiện, bảo mật và độ chuyên nghiệp thì nhiều ngươi dùng doanh nghiệp và cá nhân đã lựa chọn Mail Server (Máy chủ email) để nhận gửi, quản lý email của mình.
Khi nhắc đến các mail server thì ta sẽ nghĩ đến Exim, Postfix, Sendmail và Qmail. Trong bài ngày hôm nay mình sẽ cùng các bạn đi qua các bước sử dụng Exim để tạo ra một máy chủ Email cho riêng mình.
Yêu Cầu
- Hệ thống CentOS 7
- Quyền root
- Đã có DNS, Domain
Bước 1: Thiết lập hostname và DNS Records
1. DNS Record:
Ở bước DNS Records sẽ có một chút trở ngại vì mỗi nhà cung cấp sẽ có một giao diện cấu hình riêng nhưng chung quy lại đều sẽ có 4 mục để chúng ta thay đổi:
A Record
: Đây là một bản ghi mà liên kết một tên tới một địa chỉ IP tĩnh . Ví dụ như bạn đăng nhập một cổng web (web portal) tạiexample.com
và tạo một A Record chomail
tại192.168.0.1
, điều này sẽ tạo một địa chỉmail.example.com
mà sử dụng được trên Internet. Tuy vậy, mailserver vẫn sẽ không biết gửi mail tới đâu, lúc này MX Record được sử dụng. Nhập địa chỉ IP tĩnh của server của bạnMX Record
: Bản ghi này sẽ nói với các mail server khác rằng "gửi mail tớimail.example.com
à ? Gửi vào server này nhé". Điều đó đồng nghĩa rằng bản ghi định vị mail server cho một tên miền cụ thể nào đó. Nhập tên mail serverPTR Record (Pointer record translate)
: Bản ghi PTR là một bản ghi tra cứu ngược. Thay vì tra cứu từ tên sang địa chỉ IP, nó sẽ tra cứu ngược lại. Một số máy chủ mail chỉ tin tưởng nhận thư của bạn khi mà họ có thể tuy ngược DNS. Đây cũng là một trong những yếu tố để đánh giá thư có phải làspam
hay không. Nhập tên mail serverTXT Record
: Bản record sẽ cho nhập các ghi chú chứa thông tin cho các nguồn bên ngoài tên miền của các bạn. Có thể sử dụng cho nhiều mục đích như xác thực chủ sỡ hữu, bảo mật, phòng ngừa email spam. Nhập TXT Record
Sau khi hoàn thành thì bạn sẽ có một cấu hình hoàn chỉnh như sau:
2. Hostname
Bây giờ bạn cần phải chắc chắn rằng hostname của mình đã được cài đặt đúng cách. Ở bước cấu hình DNS, ta đã cài A record
= mail.example.com
rồi, vì thế nên ta cũng sẽ đặt hostname là mail.example.com
luôn.
Đồng thời bạn cũng sẽ phải chỉnh sửa địa chỉ IP đúng với hostname trong etc/hosts
:
Hãy thêm địa chỉ IP và hostname, ví dụ như sau:
Cuối cùng ta sẽ cài đặt EPEL repo và cập nhật server.
Bước 2: Thiết lập tường lửa.
- Để tăng tính bảo mật, bạn nên đóng tất cả các port và chỉ mở port của email mà thôi. Ngoài ra thay đổi cổng SSH cũng rất cần thiết.
- Tắt SeLinux bằng cách chuyển
enforcing
sang trạng tháidisable
trong File cấu hình SeLinux
- Đổi cổng SSH trong file
/etc/ssh/sshd_config
. Tìm tới dòng#Port 22
. Xoá dấu#
và thay số22
thành cổng port SSH của bạn (Điều này cũng có nghĩa bạn sẽ cần mở cổng này bằngfirewalld
).
Mở cổng 22 trên firewall
Mở file sshd config
- Sau khi hoàn thành các bước trên. bạn cần khởi động lại SSH
- Thêm địa chỉ IP vào whitelist (Hay thay IP
192.168.0.1
thành IP của bạn)
- Mở cổng Pop3, Imap, SMTP
- Tạo Chứng Chỉ SSL (SSL Certificate)
Để thuận tiện cho việc mã hoá, bạn sẽ cần tới
cert-bot
để tạo chứng chỉ SSL cho email server của bạn. Đầu tiên, hãy dừng firewall.
Sau đó tải cert-bot
và tạo chứng chỉ
Lưu ý: Certbot sẽ có 2 loại : Standalone (Sử dụng cổng 443 để tạo chứng chỉ) và Webroot (Sử dụng web service để tạo chứng chỉ). Hãy chọn Standalone.
Hãy đảm bảo file config được trao quyền đầy đủ như sau:
Cuối cùng khởi động lại firewall và bắt đầu bước tiếp theo thôi nào!
Bước 3: Cài đặt và cấu hình Exim mail server
Bây giờ sẽ là bước chính để tạo nên máy chủ mail của bạn. Để có thể tuỳ chỉnh sao sao cho chạy một cách mượt mà và phù hợp với nhu cầu của bạn mình khuyến nghị bạn nên đọc Docs của Exim tại đây. Còn nếu muốn chạy cơ bản thì bạn có thể cấu hình như mình thôi. Bắt đầu nào!
Đầu tiền ta cần tải và cài đặt Exim
Lúc này một file cấu hình sẽ xuất hiện, bạn sẽ cần thay đổi một chút như sau:
Lưu lại và thoát khỏi trình chỉnh sửa file. Lúc này ta cần thông báo cho hệ thông rằng ta sẽ sử dụng Exim để gửi mail
Để đảm bảo mọi thứ đã chính xác hay thử chạy demo:
Nó sẽ báo lỗi nếu file cấu hình sai, bạn chỉ cần tìm số dòng và chỉnh lại cho đúng là được. Khi mọi thứ đều chạy tốt, hãy khởi động lại Exim.
Bước 4: Cài đặt và cấu hình Dovecot
Dovecot sẽ đóng vai trò xác thực người dùng để cho phép sử dụng máy chủ mail.
Tải Dovecot và mở file config 10-ssl.conf
của Dovecot để đặt đường dẫn chứng chỉ SSL.
Tìm tới dòng ssl_cert
và thêm đường dẫn chứng chỉ SSL của bạn vào
Và đừng quên phân quyền Khoá SSL .
Tiếp theo ta sẽ cấu hình phần xác thực dovecot. Chúng ta sẽ xác thực bằng SSL.
Lưu ý: Trong file cấu hình exim.conf lúc trước, ta đã bật auth_advertise_hosts = ${if eq {$tls_cipher}{}{}{*}}, điều này cho phép ta sử dụng tài khoản CentOS để xác thực cho exim. Nói cách khác thì khi đăng nhập vào mailserver thì ta sẽ sử dụng luôn tài khoản của hệ thống.
- Khởi động lại Dovecot
Bước 5: Cấu hình DKIM.
DKIM (Domain Keys Identified Mail) có chức năng xác nhận mail gửi tới đến từ đâu, thuộc miền nào nhằm tránh thư rác, thư spam.
Vì DKIM được tích hợp trong exim nên bạn chỉ cần mở file /etc/exim/exim.conf
Khởi động lại Exim
Cấu hình DNS.
- Cấu hình
MX Record
(tạo một nếu DNS của bạn không có).
- Priority:
1
- Host :
@
- Points to:
@
- Tạo một
TXT Record
cho SPF.
- Host:
@
- Txt value:
v=spf1 a mx ip4:xxx.xxx.x.xx ip6:xxxx:xxxx:xx:xxxx:: ~ all
(Bạn sẽ điền Ip của mailserver vàox
)
- Tạo một
TXT Record
cho DKIM.
- Host:
x._domainkey
- Txt value:
v=DKIM1; p=<Hãy copy public key bạn tạo bằng certbot vào đây>
Để kiểm tra DKIM đã hoạt động hay chưa thì bạn có thể vào website dưới đây để test.
Bước 6: Thêm tài khoản email và quản lý người dùng
Như đã nhắc ở bước 4, để thêm một tài khoản email, ta cần tạo một tài khoản CentOS và cho vào nhóm người dùng Exim. Giả sử mình tạo một tài khoản example@mail.example.com
Sau đó đặt mật khẩu cho tài khoản example
Còn nếu bạn muốn xoá một tài khoản nào đó ?
Bước 7: Cài đặt và cấu hình Webmail bằng Roundcube
Roundcube là một webmail cung cấp cho người dùng GUI (Graphical User Interface) mà người dùng có thể sử dụng các nút bấm, các trình soạn thảo, tạo và xoá thư mục một cách trực quan, không thông qua các lệnh phức tạp.
- Tải Nginx, PHP-FPM và MariaDB.
- Đầu tiên ta sẽ cần cài các package phụ khác để chạy Roundcube bằng cách:
- Sau khi tải xong, bạn khởi động web server và cho tự động chạy mỗi lần khởi động
- Mở cổng Port 80
- Mở file
etc/php.ini
, tìm tới dòng cócgi.fix_pathinfo=1
, xoá dấu#
và chỉnh về 0. Ngoài ra bạn cũng cần đặt timezone ở dòngdate.timezone=
như sau.
- Lưu và khởi động lại
- Tải Roundcube.
- Bạn có thể lên trang chủ để tải thủ công hoặc sử dụng wget (tại thời điểm viết bài thì bản mới nhất là 1.5.2).
- Giải nén file.
- Đổi tên file vừa mới giải nén thành Roundcube và đặt các quyền cho nó
- Cấu hình Database
- Khởi động Mariadb.
- MariaDB mặc định không an toàn. Bạn cần chạy một tập lệnh để bảo mật . Bạn sẽ được yêu cầu đặt mật khẩu gốc, xóa người dùng ẩn danh, vô hiệu hóa đăng nhập root từ xa và xóa cơ sở dữ liệu thử nghiệm.
- Truy cập và database, lúc này bạn sẽ nhập mật khẩu gốc mà bạn đã tạo trong quá trình chạy tập lệnh ở trên.
- Tạo database
roundcubemail
- Tạo người dùng
roundcube
với mật khẩu là=213@!#webL
.
- Cấp tất cả các quyền cho người dùng mới tạo.
- Thoát khỏi trình database
- Thêm bảng Roundcube vào database
- Cấu hình Server Block cho Roundcube Web Installer
- Tạo một file cấu hình etc/nginx/conf.d/
như sau :
- Bây giờ ta cần thay đổi một số chỗ trong file
/etc/php-fpm.d/www.conf
cho PHP-FPM
Thay đổi user
sang nginx, đổi đường dẫn listen
và đặt quyền sang nginx.
- Lưu và khởi động lại Nginx và PHP-FPM
- Cài đặt với Roundcube Installer
Trước khi cài đặt, bạn cần đặt lại Owner cho thư mục
/var/lib/php/session
Bây giờ hay truy cập vào http://mail.example.com/roundcubemail/installer
Tiếp theo, bấm phím Next ở cuối cùng để đi tới cài đặt Database và thêm các thông tin chi tiết.
Có khá nhiều thứ để cấu hình cho webmail nên mình chỉ nói một số cái quan trọng mà thôi. Nếu muốn tìm hiểu bạn có thể lên trang chủ của Roundcube để biết thêm chi tiết. (Hầu hết các thông tin cơ bản đều được điền sẵn nếu bạn config đúng như mình).
- General Configuration:
product_name
: Đặt tên cho dịch vụ của bạn (ví dụ như Example.com webmail). - Database setup: Nhập host, tên, tên đăng nhập và mật khẩu mà bạn đặt ở phần tạo bảng Mariadb để kết nối tới database.
- IMAP và SMTP: Để
localhost
nếu bạn sử dụng chung server mà bạn chạy Roundcube
Sau các thay đổi cấu hình, trình cài đặt sẽ tạo cho bạn một file config.inc.php
hãy lưu lại ở địa chỉ /var/www/html/roundcubemail/config/
. Một số trường hợp roundcube sẽ tự lưu cho bạn như hình dưới.
- Bình thường nếu sử dụng config này thì ta sẽ không gửi được mail bởi vì SMTP chưa xác thực. Thế nên chúng ta cần thêm các dòng sau.
- Hãy xoá thư mục
installer
đi và chắc chắn rằng bạn đã đặt$config['enable_installer'] = false;
trong fileconfig.inc.php
.
Bước 8. Gửi email đầu tiên
Vậy là bạn đã tạo một Web mail bằng Roundcube thành công. Bây giờ bạn có thể sử dụng tài khoản, mật khẩu đã tạo trước đó để đăng nhập vào. http://mail.example.com/
Như bạn thấy, giao diện của Roundcube vô cùng dễ dùng và tựa như gmail vậy. Để gửi email, bạn bấm vào icon Compose
Lúc này cửa sổ soạn thư sẽ hiện ra. Bạn cần nhập thông tin người gửi và người nhận, nội dung, ..v...v
Bây giờ mình sẽ sử dụng phần mềm thứ 3 là Thunderbird để đăng nhập vào tài khoản admin
để xem email đã tới chưa nhé !
Việc đăng nhập trên Thunderbird cũng tương tự với Roundcube, bạn chỉ cần nhập đúng tài khoản và mật khẩu đã tạo là được.
Lưu ý: Nếu bạn sử dụng Self-signed certificate thì thunderbird sẽ xuất hiện thông báo thêm ngoại lệ, chỉ cần bấm Add-exception là được.
Voila! Email cuối cùng cũng đã tới người nhận thành công.
Kết bài
Vậy là trong bài hôm nay chúng ta đã tạo thành công một Mailserver giống Gmail cho riêng mình bằng Exim. Bên cạnh đó ta sử dụng dovecot để xác thực và Roundcube để làm webmail. Nếu có câu hỏi nào, bạn có thể comment bên dưới để được giải đáp, chúc các bạn thành công.
Tính năng đang được phát triển