Postfix là một Mail Transfer Agent (MTA) nguồn mở phổ biến có thể được sử dụng để định tuyến và gửi email trên hệ thống Linux. Người ta ước tính rằng khoảng 25% máy chủ thư công cộng trên internet chạy Postfix.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt và định cấu hình Postfix trên máy chủ Ubuntu 22.04. Sau đó, bạn sẽ kiểm tra xem Postfix có thể định tuyến thư chính xác hay không bằng cách cài đặt s-nail
, Mail User Agent (MUA), còn được gọi là email client.
Lưu ý rằng mục tiêu của hướng dẫn này là giúp bạn thiết lập và chạy Postfix nhanh chóng chỉ với một số chức năng email cơ bản. Bạn sẽ không có một máy chủ email đầy đủ tính năng khi kết thúc hướng dẫn này, nhưng bạn sẽ có một số thành phần cơ bản của một thiết lập như vậy để giúp bạn bắt đầu.
Việc thiết lập và duy trì máy chủ mail của riêng bạn rất phức tạp và tốn thời gian. Đối với hầu hết người dùng, việc dựa vào dịch vụ mail trả phí sẽ thực tế hơn. Nếu bạn đang cân nhắc chạy máy chủ mail của riêng mình, chúng tôi khuyên bạn nên xem lại bài viết này về lý do tại sao bạn có thể không muốn làm như vậy.
Nếu bạn chắc chắn muốn làm theo hướng dẫn này để cài đặt và định cấu hình Postfix thì trước tiên bạn phải có những thứ sau:
sudo
và tường lửa được định cấu hình bằng UFW. Bạn có thể làm theo hướng dẫn thiết lập máy chủ ban đầu Ubuntu 22.04 của chúng tôi để thiết lập điều này.Lưu ý rằng hướng dẫn này giả định rằng bạn đang định cấu hình máy chủ lưu trữ có FQDN là mail.example.com
. Bất cứ khi nào cần thiết, hãy nhớ thay đổi example.com
hoặc mail.example.com
để phản ánh FQDN của riêng bạn.
Postfix được bao gồm trong kho lưu trữ mặc định của Ubuntu, vì vậy bạn có thể cài đặt nó bằng APT.
Để bắt đầu, hãy cập nhật bộ đệm gói apt
cục bộ của bạn:
- sudo apt update
Sau đó cài đặt gói postfix
bằng lệnh dưới đây. Lưu ý rằng ở đây chúng tôi chuyển biến môi trường DEBIAN_PRIORITY=low
vào lệnh cài đặt này. Điều này sẽ khiến quá trình cài đặt nhắc bạn định cấu hình một số tùy chọn bổ sung:
- sudo DEBIAN_PRIORITY=low apt install postfix
Quá trình cài đặt này sẽ mở ra một loạt lời nhắc tương tác. Đối với mục đích của hướng dẫn này, hãy sử dụng thông tin sau để điền vào lời nhắc của bạn:
mail.example.com
. Bạn có thể muốn đặt tên mail hệ thống thành example.com
để, với tên người dùng user1
, Postfix sẽ sử dụng địa chỉ user1@example.com
.root@
và postmaster@
. Sử dụng tài khoản chính của bạn cho việc này. Trong trường hợp ví dụ này, sammy.0
sẽ vô hiệu hóa mọi hạn chế về kích thước.+
sẽ hoạt động cho hướng dẫn này.Nói rõ hơn, đây là các cài đặt được sử dụng trong hướng dẫn này:
example.com
(không phải mail.example.com
)$myhostname, example.com, mail.example.com, localhost.example.com, localhost
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
0
+
Lưu ý: Nếu bạn cần quay lại để thay đổi các cài đặt này, bạn có thể thực hiện bằng cách nhập:
- sudo dpkg-reconfigure postfix
Lời nhắc sẽ được điền sẵn các câu trả lời trước đó của bạn.
Khi bạn được nhắc khởi động lại dịch vụ, hãy chấp nhận các giá trị mặc định và chọn OK
.
Khi quá trình cài đặt kết thúc, bạn đã sẵn sàng thực hiện một vài cập nhật cho cấu hình Postfix của mình.
Giờ đây, bạn có thể điều chỉnh một số cài đặt mà quá trình cài đặt gói không nhắc bạn. Nhiều cài đặt cấu hình của Postfix được xác định trong tệp /etc/postfix/main.cf
. Thay vì chỉnh sửa tệp này trực tiếp, bạn có thể sử dụng lệnh postconf
của Postfix để truy vấn hoặc đặt cài đặt cấu hình.
Để bắt đầu, hãy đặt vị trí cho hộp thư của non-root Ubuntu user của bạn. Trong hướng dẫn này, chúng tôi sẽ sử dụng định dạng Maildir, định dạng này sẽ phân tách thư thành các tệp riêng lẻ, sau đó được di chuyển giữa các thư mục dựa trên hành động của người dùng. Tùy chọn thay thế không được đề cập trong hướng dẫn này là định dạng mbox, định dạng lưu trữ tất cả thư trong một tệp.
Đặt biến home_mailbox
thành Maildir/
. Sau đó, bạn sẽ tạo cấu trúc thư mục dưới tên đó trong thư mục chính của người dùng. Định cấu hình home_mailbox
bằng cách nhập:
- sudo postconf -e 'home_mailbox= Maildir/'
Tiếp theo, đặt vị trí của bảng virtual_alias_maps
, bảng ánh xạ các tài khoản email tùy ý sang các tài khoản hệ thống Linux. Chạy lệnh sau, lệnh này ánh xạ vị trí bảng tới tệp cơ sở dữ liệu băm có tên /etc/postfix/virtual
:
- sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'
Bây giờ bạn đã xác định vị trí của tệp bản đồ ảo trong tệp main.cf
của mình, bạn có thể tự tạo tệp đó và bắt đầu ánh xạ tài khoản email tới tài khoản người dùng trên hệ thống Linux của mình. Tạo tệp bằng trình soạn thảo văn bản ưa thích của bạn; trong ví dụ này, chúng tôi sẽ sử dụng nano
:
- sudo nano /etc/postfix/virtual
Liệt kê bất kỳ địa chỉ nào mà bạn muốn chấp nhận email, theo sau là khoảng trắng và người dùng Linux mà bạn muốn thư đó được gửi đến.
Ví dụ: nếu bạn muốn chấp nhận email tại contact@example.com
và admin@example.com
và muốn những email đó được gửi tới sammy Linux user, bạn có thể thiết lập tệp của mình như sau:
contact@example.com sammy
admin@example.com sammy
Sau khi bạn đã ánh xạ tất cả các địa chỉ tới các tài khoản máy chủ thích hợp, hãy lưu và đóng tệp. Nếu bạn đã sử dụng nano
, hãy thực hiện việc này bằng cách nhấn CTRL + X
, Y
, rồi ENTER
.
Áp dụng ánh xạ bằng cách gõ:
- sudo postmap /etc/postfix/virtual
Khởi động lại quy trình Postfix để đảm bảo rằng tất cả các thay đổi của bạn đã được áp dụng:
- sudo systemctl restart postfix
Giả sử bạn đã làm theo hướng dẫn Thiết lập Máy chủ Ban đầu tiên quyết, bạn sẽ cấu hình tường lửa với UFW. Theo mặc định, tường lửa này sẽ chặn các kết nối bên ngoài tới các dịch vụ trên máy chủ của bạn trừ khi các kết nối đó được cho phép một cách rõ ràng, do đó, bạn sẽ phải thêm một quy tắc tường lửa để cho phép một ngoại lệ cho Postfix.
Bạn có thể cho phép kết nối với dịch vụ bằng cách gõ:
- sudo ufw allow Postfix
Cùng với đó, Postfix được cấu hình và sẵn sàng chấp nhận các kết nối bên ngoài. Tuy nhiên, bạn vẫn chưa sẵn sàng để thử nghiệm nó với mail client. Trước khi bạn có thể cài đặt ứng dụng khách và sử dụng nó để tương tác với thư được gửi đến máy chủ của mình, bạn cần thực hiện một số thay đổi đối với thiết lập máy chủ Ubuntu của mình.
Để tương tác với thư được gửi, bước này sẽ hướng dẫn bạn quá trình cài đặt gói s-nail
. Đây là một biến thể giàu tính năng của BSD xmail
client có thể xử lý chính xác định dạng Maildir.
Tuy nhiên, trước khi cài đặt ứng dụng khách, bạn nên thận trọng đảm bảo biến môi trường MAIL
của mình được đặt chính xác. s-nail
sẽ tìm biến này để tìm ra nơi tìm thư cho người dùng của bạn.
Để đảm bảo rằng biến MAIL
được đặt bất kể bạn truy cập tài khoản của mình bằng cách nào — chẳng hạn như thông qua ssh
, su
, su -
hoặc sudo
— bạn sẽ cần đặt biến trong tệp /etc/bash.bashrc
và thêm nó vào một tệp trong /etc/profile.d
để đảm bảo rằng nó được đặt cho tất cả người dùng theo mặc định.
Để thêm biến vào các tệp này, hãy nhập:
- echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh
Để đọc biến vào phiên hiện tại của bạn, hãy tìm nguồn tệp /etc/profile.d/mail.sh
:
- source /etc/profile.d/mail.sh
Khi hoàn tất, hãy cài đặt email client s-nail
với APT:
- sudo apt install s-nail
Trước khi chạy ứng dụng khách, bạn cần điều chỉnh một vài cài đặt. Mở tệp /etc/s-nail.rc
trong trình chỉnh sửa của bạn:
- sudo nano /etc/s-nail.rc
Ở dưới cùng của tệp, thêm các tùy chọn sau:
. . .
set emptystart
set folder=Maildir
set record=+sent
Đây là những gì những dòng này làm:
set emptystart
: cho phép máy khách mở ngay cả khi hộp thư đến trốngset folder=Maildir
: đặt thư mục Maildir
thành biến folder
nội bộset record=+sent
tạo một tệp mbox sent
để lưu trữ thư đã gửi trong bất kỳ thư mục nào được đặt làm biến folder
, trong trường hợp này là Maildir
Lưu và đóng tệp khi bạn hoàn tất. Bây giờ bạn đã sẵn sàng khởi tạo cấu trúc Maildir của hệ thống.
Một cách nhanh chóng để tạo cấu trúc Maildir trong thư mục chính của bạn là gửi email cho chính bạn bằng lệnh s-nail
. Vì tệp sent
sẽ chỉ khả dụng sau khi Maildir được tạo, bạn nên tắt tính năng ghi vào tệp cho email ban đầu này. Thực hiện việc này bằng cách chuyển tùy chọn -Snorecord
.
Gửi email bằng cách chuyển một chuỗi tới lệnh s-nail
. Điều chỉnh lệnh để đánh dấu người dùng Linux của bạn là người nhận:
- echo 'init' | s-nail -s 'init' -Snorecord sammy
Lưu ý: Bạn có thể nhận được phản hồi sau:
OutputCan't canonicalize "/home/sammy/Maildir"
Điều này là bình thường và có thể chỉ xuất hiện khi gửi tin nhắn đầu tiên này.
Bạn có thể kiểm tra để đảm bảo thư mục đã được tạo bằng cách tìm thư mục ~/Maildir
của mình:
- ls -R ~/Maildir
Bạn sẽ thấy cấu trúc thư mục đã được tạo và một tệp tin nhắn mới nằm trong thư mục ~/Maildir/new
:
Output/home/sammy/Maildir/:
cur new tmp
/home/sammy/Maildir/cur:
/home/sammy/Maildir/new:
1650294586.Vfc01I7e11dM993645.mail.example.com
/home/sammy/Maildir/tmp:
Bây giờ cấu trúc thư mục đã được tạo, bạn đã sẵn sàng kiểm tra ứng dụng khách s-nail
bằng cách xem tin nhắn init
bạn đã gửi và gửi tin nhắn đến một địa chỉ email bên ngoài.
Để mở ứng dụng khách, hãy chạy lệnh s-nail
:
- s-nail
Trong bảng điều khiển của mình, bạn sẽ thấy một hộp thư đến thô sơ với thông báo init
đang chờ:
Outputs-nail version v14.9.15. Type `?' for help
"/home/sammy/Maildir": 1 message 1 new
>N 1 sammy@example.com 2022-04-18 15:09 14/452 init
Nhấn ENTER
để hiển thị thông báo:
Output[-- Message 1 -- 14 lines, 452 bytes --]:
Date: Mon, 18 Apr 2022 15:09:46 +0000
To: sammy@example.com
Subject: init
Message-Id: <20220418150946.EE6897E11A@@mail.example.com>
From: sammy@example.com
init
Bạn có thể quay lại danh sách tin nhắn bằng cách nhập h
, rồi ENTER
:
- h
Output>R 1 sammy@example.com 2022-04-18 15:09 14/452 init
Lưu ý rằng tin nhắn hiện có trạng thái R
, cho biết rằng nó đã được đọc.
Vì thông báo này không hữu ích lắm nên bạn có thể xóa nó bằng cách nhấn d
, rồi ENTER
:
- d
Để quay lại terminal, gõ q
rồi ENTER
:
- q
Là thử nghiệm cuối cùng, hãy kiểm tra xem s-nail
có thể gửi email chính xác hay không. Để thực hiện việc này, bạn có thể đưa nội dung của tệp văn bản vào quy trình s-nail
, giống như bạn đã làm với thông báo init
mà bạn đã gửi ở bước trước.
Bắt đầu bằng cách viết một tin nhắn thử nghiệm trong trình soạn thảo văn bản:
- nano ~/test_message
Bên trong, nhập một số văn bản bạn muốn gửi:
Hello,
This is a test. Please confirm receipt!
Lưu và đóng tệp sau khi viết tin nhắn của bạn.
Sau đó, sử dụng lệnh cat
để gửi thông báo tới quy trình s-nail
. Bạn có thể làm như vậy với ví dụ sau, sử dụng các tùy chọn này:
-s
: Điều này xác định dòng chủ đề của thông báo email-r
: Một thay đổi tùy chọn đối với trường “From:” của email. Theo mặc định, người dùng Linux mà bạn đã đăng nhập sẽ được sử dụng để điền vào trường này. Tùy chọn -r
cho phép bạn ghi đè địa chỉ này bằng một địa chỉ hợp lệ, chẳng hạn như một trong những địa chỉ bạn đã xác định trong tệp etc/postfix/virtual
. Để minh họa, lệnh sau sử dụng contact@example.com
Ngoài ra, hãy đảm bảo thay đổi user@email.com
thành địa chỉ email hợp lệ mà bạn có quyền truy cập:
- cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example.com user@email.com
Sau đó, điều hướng đến hộp thư đến cho địa chỉ email mà bạn đã gửi tin nhắn. Bạn sẽ thấy tin nhắn của mình đang chờ ở đó gần như ngay lập tức.
Lưu ý: Nếu thư không có trong hộp thư đến của bạn, thì thư đó có thể đã được chuyển đến thư mục Thư rác.
Bạn có thể xem các tin nhắn đã gửi trong ứng dụng khách s-nail
của mình. Bắt đầu lại ứng dụng khách tương tác:
- s-nail
Từ ứng dụng email, xem thư đã gửi của bạn bằng cách nhập:
- file +sent
Bạn sẽ thấy đầu ra như thế này:
Output+[/home/sammy/Maildir/]sent: 1 message 1 new
▸N 1 To contact@example.com 2022-04-18 15:12 10/211 Test email subject line
Bạn có thể quản lý thư đã gửi bằng các lệnh giống như bạn sử dụng cho thư đến.
Bây giờ bạn đã cấu hình Postfix trên máy chủ Ubuntu 22.04 của mình. Quản lý máy chủ email có thể là một nhiệm vụ khó khăn đối với quản trị viên hệ thống mới, nhưng với cấu hình này, bạn sẽ có đủ chức năng email MTA để bắt đầu.