108.3 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
108 Dịch vụ Hệ thống thiết yếu |
Mục tiêu: |
108.3 Các khái niệm cơ bản về Tác nhân vận chuyển Thư (MTA) |
Bài: |
1 trên 1 |
Giới thiệu
Trong các hệ điều hành giống Unix (chẳng hạn như Linux), mỗi một người dùng đều có hộp thư đến của riêng mình: đây là một vị trí đặc biệt trên hệ thống tệp mà những người dùng khác (ngoại trừ siêu người dùng) không thể truy cập được; nó được sử dụng để lưu trữ các thư điện tử cá nhân của người dùng. Thư mới sẽ được thêm vào hộp thư đến của người dùng bởi Tác nhân vận chuyển Thư (MTA). MTA là một chương trình chạy dưới dạng một dịch vụ hệ thống với nhiệm vụ thu thập các thư được gửi tới bởi các tài khoản cục bộ khác cũng như các thư nhận được từ mạng được gửi từ các tài khoản người dùng từ xa.
Chính MTA này cũng chịu trách nhiệm gửi thư tới mạng nếu địa chỉ đích là một tài khoản từ xa. Nó thực hiện điều này bằng cách sử dụng vị trí hệ thống tệp làm hộp thư đi cho tất cả mọi người dùng hệ thống: ngay khi người dùng đặt một thư mới vào hộp thư đi, MTA sẽ xác định nút mạng mục tiêu từ tên miền do địa chỉ email đích cung cấp — phần sau dấu @
— và sau đó nó sẽ cố gắng chuyển thư đến MTA từ xa bằng cách sử dụng Giao thức truyền thư đơn giản (SMTP). SMTP được thiết kế dành cho các mạng không đáng tin cậy; do đó, nó sẽ cố gắng thiết lập các tuyến phân phối thay thế nếu nút đích đến của thư chính không thể truy cập được.
MTA cục bộ và từ xa
Tài khoản người dùng truyền thống trong các máy được kết nối mạng sẽ tạo nên một kịch bản trao đổi email đơn giản nhất mà trong đó, mỗi nút mạng sẽ chạy trình nền MTA của riêng nó. Chúng ta sẽ không cần có phần mềm nào khác ngoài MTA để gửi và nhận thư. Tuy nhiên, trên thực tế, việc sử dụng tài khoản một tài khoản thư điện tử từ xa và không có dịch vụ MTA cục bộ đang hoạt động lại phổ biến hơn (tức là thay vào đó sẽ sử dụng một ứng dụng email khách để truy cập tài khoản từ xa).
Không giống như các tài khoản cục bộ, một tài khoản email từ xa — còn được gọi là hộp thư từ xa — sẽ yêu cầu xác thực người dùng để cấp quyền truy cập vào hộp thư và MTA từ xa (trong trường hợp này được gọi đơn giản là máy chủ SMTP). Mặc dù người dùng tương tác với hộp thư đến cục bộ và MTA đã được hệ thống xác định nhưng hệ thống từ xa vẫn sẽ phải xác minh danh tính của người dùng trước khi xử lý thư của nó thông qua IMAP hoặc POP3.
Note
|
Ngày nay, phương pháp phổ biến nhất để gửi và nhận email là thông qua tài khoản được lưu trữ trên máy chủ từ xa (ví dụ như máy chủ thư điện tử tập trung của công ty sẽ lưu trữ tất cả các tài khoản nhân viên hoặc dịch vụ thư điện tử cá nhân như Gmail của Google). Thay vì thu thập các thư được gửi cục bộ, ứng dụng email khách sẽ kết nối với hộp thư từ xa và truy xuất các thư từ đó. Các giao thức POP3 và IMAP thường được sử dụng để truy xuất thư từ máy chủ từ xa, nhưng các giao thức độc quyền không chuẩn khác cũng có thể được sử dụng. |
Khi một trình nền MTA đang chạy trên hệ thống cục bộ, người dùng cục bộ có thể gửi email đến những người dùng cục bộ khác hoặc tới những người dùng trên máy từ xa, miễn là hệ thống của họ cũng có dịch vụ MTA chấp nhận kết nối mạng. Cổng TCP 25 là cổng tiêu chuẩn cho giao tiếp SMTP, nhưng các cổng khác cũng có thể được sử dụng, tùy thuộc vào lược đồ xác thực và/hoặc mã hóa đang được sử dụng (nếu có).
Bỏ qua các cấu trúc liên kết liên quan đến quyền truy cập vào hộp thư từ xa, mạng trao đổi email giữa các tài khoản người dùng Linux thông thường cũng có thể được triển khai, miễn là tất cả các nút mạng đều có một MTA đang hoạt động và có thể thực hiện các tác vụ sau:
-
Duy trì hàng đợi hộp thư đi của các thư sẽ được gửi. Đối với mỗi thư được xếp hàng đợi, MTA cục bộ sẽ đánh giá MTA đích từ địa chỉ của người nhận.
-
Giao tiếp với trình nền MTA từ xa bằng cách sử dụng SMTP. MTA cục bộ sẽ có thể sử dụng Giao thức truyền thư đơn giản (SMTP) qua chồng TCP/IP để nhận, gửi và chuyển hướng thư từ/đến các trình nền MTA từ xa khác.
-
Duy trì hộp thư đến riêng cho từng tài khoản cục bộ. MTA thường sẽ lưu trữ thư ở định dạng mbox: một tệp văn bản duy nhất chứa tất cả các email theo trình tự.
Thông thường, địa chỉ email sẽ chỉ định một tên miền làm vị trí (ví dụ như lpi.org
trong info@lpi.org
). Trong trường hợp này, MTA của người gửi sẽ truy vấn dịch vụ DNS để tìm bản ghi MX tương ứng. Bản ghi DNS MX sẽ có chứa địa chỉ IP của MTA xử lý email cho miền đó. Nếu cùng một tên miền có nhiều hơn một bản ghi MX được chỉ định trong DNS, MTA sẽ cố gắng liên hệ với chúng theo các giá trị ưu tiên. Nếu địa chỉ người nhận không chỉ định tên miền hoặc miền không có bản ghi MX thì phần sau ký hiệu @
sẽ được coi là máy chủ của MTA đích.
Các khía cạnh bảo mật cũng phải được tính đến nếu máy chủ MTA được hiển thị với các máy chủ trên Internet. Ví dụ: một người dùng không xác định có thể sử dụng MTA cục bộ để mạo danh người dùng khác và gửi đi các email có khả năng gây hại. Hiện tượng MTA chuyển tiếp email một cách "mù quáng" được gọi là chuyển tiếp mở (open relay), tức là khi nó có thể được sử dụng làm trung gian để có khả năng ngụy trang người thực sự đã gửi thư. Để ngăn chặn những hành vi lạm dụng này, người dùng được khuyến nghị là chỉ chấp nhận kết nối từ các miền được ủy quyền và triển khai lược đồ xác thực an toàn.
Ngoài ra, chúng ta còn có nhiều triển khai MTA khác nhau cho Linux, mỗi cách triển khai sẽ tập trung vào các khía cạnh cụ thể như khả năng tương thích, hiệu suất, bảo mật, v.v. Tuy nhiên, tất cả các MTA đều sẽ tuân theo các nguyên tắc cơ bản và cung cấp các tính năng tương tự như nhau.
MTA của Linux
MTA truyền thống có sẵn cho các hệ thống Linux là Sendmail - một MTA có mục đích chung rất linh hoạt được nhiều hệ điều hành giống Unix sử dụng. Một số MTA phổ biến khác là Postfix, qmail và Exim. Lý do chính để chọn một MTA thay thế là để triển khai các tính năng nâng cao dễ dàng hơn vì việc định cấu hình máy chủ email tùy chỉnh trong Sendmail có thể là một nhiệm vụ khá phức tạp. Ngoài ra, mỗi bản phân phối cũng có thể có MTA tương thích của riêng nó với các cài đặt được xác định trước phù hợp với hầu hết các thiết lập phổ biến. Tất cả các MTA đều nhắm đến mục đích thay thế Sendmail; vì vậy, tất cả các ứng dụng tương thích với Sendmail đều sẽ hoạt động bất kể là MTA nào đang được sử dụng.
Nếu MTA đang chạy nhưng không chấp nhận kết nối mạng, nó sẽ chỉ có thể gửi email trên máy cục bộ. Đối với MTA sendmail
, tệp /etc/mail/sendmail.mc
phải được sửa đổi để chấp nhận các kết nối không cục bộ. Để làm được điều đó, mục nhập
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
nên được sửa đổi thành địa chỉ mạng chính xác và dịch vụ sẽ được khởi động lại. Một số bản phân phối Linux (chẳng hạn như Debian) có thể có cung cấp các công cụ cấu hình để giúp hiển thị máy chủ email với một tập hợp các tính năng thường được sử dụng được xác định sẵn.
Tip
|
Do vấn đề bảo mật, hầu hết các bản phân phối Linux sẽ không cài đặt MTA theo mặc định. Để kiểm tra các ví dụ được đưa ra trong bài học này, hãy đảm bảo rằng mọi máy đều có một MTA đang chạy và chúng chấp nhận kết nối trên cổng TCP 25. Vì mục đích bảo mật, các hệ thống này sẽ không được tiếp xúc với các kết nối đến từ Internet công cộng trong quá trình thử nghiệm. |
Khi MTA đang chạy và chấp nhận các kết nối từ mạng, các email mới sẽ được chuyển đến nó bằng các lệnh SMTP được gửi qua kết nối TCP. Lệnh nc
— một tiện ích mạng được sử dụng để đọc và ghi dữ liệu chung trên mạng — có thể được sử dụng để gửi lệnh SMTP trực tiếp đến MTA. Nếu lệnh nc
không có, nó sẽ được cài đặt với gói ncat hoặc nmap-ncat, tùy thuộc vào hệ thống quản lý gói đang được sử dụng. Việc viết các lệnh SMTP trực tiếp vào MTA sẽ giúp chúng ta hiểu rõ hơn về giao thức và các khái niệm email chung khác; ngoài ra, nó cũng có thể giúp chẩn đoán các vấn đề phát sinh trong quá trình gửi thư.
Ví dụ: nếu người dùng emma
tại máy chủ lab1.campus
muốn gửi thư cho người dùng dave
tại máy chủ lab2.campus
thì cô ấy có thể sử dụng lệnh nc
để kết nối trực tiếp với lab2.campus
MTA (giả định là nó đang lắng nghe trên cổng TCP 25):
$ nc lab2.campus 25 220 lab2.campus ESMTP Sendmail 8.15.2/8.15.2; Sat, 16 Nov 2019 00:16:07 GMT HELO lab1.campus 250 lab2.campus Hello lab1.campus [10.0.3.134], pleased to meet you MAIL FROM: emma@lab1.campus 250 2.1.0 emma@lab1.campus... Sender ok RCPT TO: dave@lab2.campus 250 2.1.5 dave@lab2.campus... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Subject: Recipient MTA Test Hi Dave, this is a test for your MTA. . 250 2.0.0 xAG0G7Y0000595 Message accepted for delivery QUIT 221 2.0.0 lab2.campus closing connection
Sau khi kết nối được thiết lập, MTA từ xa sẽ tự nhận dạng và sau đó sẽ sẵn sàng nhận lệnh SMTP. Lệnh SMTP đầu tiên trong ví dụ là HELO lab1.campus
biểu thị lab1.campus
là người khởi tạo trao đổi. Hai lệnh tiếp theo là MAIL FROM: emma@lab1.campus
và RCPT TO: dave@lab2.campus
cho biết người gửi và người nhận. Một email tiêu chuẩn sẽ bắt đầu sau lệnh DATA
và kết thúc bằng một dấu chấm trên một dòng. Để thêm trường subject
(chủ đề) vào email, trường này phải ở dòng đầu tiên sau lệnh DATA
như trong ví dụ. Khi sử dụng trường chủ đề, chúng ta phải có một dòng trống ngăn cách với nội dung email. Lệnh QUIT
sẽ kết thúc kết nối với MTA tại máy chủ lab2.campus
.
Trên máy chủ lab2.campus
, người dùng dave
sẽ nhận được một thông báo tương tự như You have new mail in /var/spool/mail/dave
ngay khi người dùng này vào một phiên vỏ. Tệp này sẽ chứa thông báo email thô được gửi bởi emma
cũng như các tiêu đề được MTA thêm vào:
$ cat /var/spool/mail/dave From emma@lab1.campus Sat Nov 16 00:19:13 2019 Return-Path: <emma@lab1.campus> Received: from lab1.campus (lab1.campus [10.0.3.134]) by lab2.campus (8.15.2/8.15.2) with SMTP id xAG0G7Y0000595 for dave@lab2.campus; Sat, 16 Nov 2019 00:17:06 GMT Date: Sat, 16 Nov 2019 00:16:07 GMT From: emma@lab1.campus Message-Id: <201911160017.xAG0G7Y0000595@lab2.campus> Subject: Recipient MTA Test Hi Dave, this is a test for your MTA.
Tiêu đề Received:
đã cho thấy rằng thông báo từ lab1.campus
đã được lab2.campus
nhận trực tiếp. Theo mặc định, MTA sẽ chỉ chấp nhận thư gửi đến người nhận cục bộ. Lỗi sau có thể xảy sẽ ra nếu người dùng emma
cố gắng gửi email cho người dùng henry
tại máy chủ lab3.campus
nhưng lại sử dụng MTA lab2.campus
thay vì MTA lab3.campus
chuẩn:
$ nc lab2.campus 25 220 lab2.campus ESMTP Sendmail 8.15.2/8.15.2; Sat, 16 Nov 2019 00:31:44 GMT HELO lab1.campus 250 lab2.campus Hello lab1.campus [10.0.3.134], pleased to meet you MAIL FROM: emma@lab1.campus 250 2.1.0 emma@lab1.campus... Sender ok RCPT TO: henry@lab3.campus 550 5.7.1 henry@lab3.campus... Relaying denied
Các số phản hồi SMTP được bắt đầu bằng 5, chẳng hạn như thông báo Relaying denied
(Chuyển tiếp bị từ chối) cho biết đã có lỗi. Có những tình huống thực sự cần thiết phải chuyển tiếp, chẳng hạn như khi máy chủ gửi và và máy chủ nhận email không được kết nối toàn thời gian: MTA trung gian có thể được định cấu hình để chấp nhận các email dành cho các máy chủ khác và hoạt động như một máy chủ chuyển tiếp SMTP có khả năng chuyển tiếp thư giữa các MTA .
Khả năng định tuyến lưu lượng email thông qua các máy chủ SMTP trung gian không khuyến khích việc kết nối trực tiếp với máy chủ được chỉ định bởi địa chỉ email của người nhận (như minh họa trong các ví dụ trước). Hơn nữa, địa chỉ email thường đều có tên miền để xác nhận vị trí (sau @
); vì vậy, tên thực của máy chủ MTA tương ứng phải được truy xuất thông qua DNS. Do đó, người dùng được khuyến nghị nên ủy quyền nhiệm vụ xác định máy chủ đích thích hợp cho MTA cục bộ hoặc cho máy chủ SMTP từ xa khi sử dụng hộp thư từ xa.
Sendmail có cung cấp lệnh sendmail
để thực hiện nhiều thao tác liên quan đến email bao gồm cả việc hỗ trợ soạn thư mới. Nó cũng yêu cầu người dùng nhập tiêu đề email bằng tay nhưng theo một cách thân thiện hơn so với việc sử dụng trực tiếp các lệnh SMTP. Vì vậy, một phương pháp phù hợp hơn để người dùng emma@lab1.campus
gửi email đến dave@lab2.campus
sẽ là:
$ sendmail dave@lab2.campus From: emma@lab1.campus To: dave@lab2.campus Subject: Sender MTA Test Hi Dave, this is a test for my MTA. .
Ở đây lại một lần nữa, dấu chấm trên một dòng đã tự nó kết thúc thư. Thư phải được gửi ngay đến người nhận trừ khi MTA cục bộ không thể liên lạc với MTA từ xa. Lệnh mailq
(nếu được thực thi bởi siêu người dùng) sẽ hiển thị tất cả các thư chưa được gửi. Ví dụ: nếu MTA tại lab2.campus
không phản hồi thì lệnh mailq
sẽ liệt kê thư chưa được gửi và nguyên nhân gây ra lỗi:
# mailq /var/spool/mqueue (1 request) -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------- xAIK3D9S000453 36 Mon Nov 18 20:03 <emma@lab1.campus> (Deferred: Connection refused by lab2.campus.) <dave@lab2.campus> Total requests: 1
Vị trí mặc định cho hàng đợi hộp thư đi là /var/spool/mqueue/
, nhưng các MTA khác nhau có thể sử dụng các vị trí khác nhau trong thư mục /var/spool/
(ví dụ như việc Postfix sẽ tạo một cây thư mục trong /var/spool/postfix/
để quản lý hàng đợi). Lệnh mailq
cũng tương đương với sendmail -bp
và chúng phải xuất hiện bất kể là MTA nào được cài đặt trong hệ thống. Để đảm bảo khả năng tương thích ngược, hầu hết mọi MTA đều có cung cấp các lệnh quản trị thư truyền thống này.
Nếu máy chủ đích đến email chính — khi nó được cung cấp từ bản ghi MX DNS cho miền — không thể truy cập được, MTA sẽ cố gắng liên hệ với các mục có mức độ ưu tiên thấp hơn (nếu có bất kỳ mục nào được chỉ định). Nếu không mục nào có thể truy cập được, thư sẽ ở lại trong hàng đợi hộp thư đi cục bộ để được gửi đi sau. Nếu được định cấu hình để làm như vậy, MTA có thể kiểm tra định kỳ tính khả dụng của các máy chủ từ xa và thử thực hiện một phiên phân phối mới. Nếu sử dụng MTA tương thích với Sendmail, một phiên mới sẽ ngay lập tức diễn ra bằng lệnh sendmail -q
.
Sendmail sẽ lưu trữ các thư đến trong một tệp được đặt tên theo chủ sở hữu hộp thư đến tương ứng (ví dụ như /var/spool/mail/dave
). Các MTA khác (như Postfix) có thể lưu trữ các thư đến ở các vị trí như /var/mail/dave
, nhưng nội dung tệp sẽ giống như nhau. Trong ví dụ này, lệnh sendmail
đã được sử dụng trên máy chủ của người gửi để soạn thư; do đó, tiêu đề thư thô sẽ cho thấy rằng email đã thực hiện các bước bổ sung trước khi đến đích đến cuối cùng:
$ cat /var/spool/mail/dave From emma@lab1.campus Mon Nov 18 20:07:39 2019 Return-Path: <emma@lab1.campus> Received: from lab1.campus (lab1.campus [10.0.3.134]) by lab2.campus (8.15.2/8.15.2) with ESMTPS id xAIK7clC000432 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for <dave@lab2.campus>; Mon, 18 Nov 2019 20:07:38 GMT Received: from lab1.campus (localhost [127.0.0.1]) by lab1.campus (8.15.2/8.15.2) with ESMTPS id xAIK3D9S000453 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for <dave@lab2.campus>; Mon, 18 Nov 2019 20:03:13 GMT Received: (from emma@localhost) by lab1.campus (8.15.2/8.15.2/Submit) id xAIK0doL000449 for dave@lab2.campus; Mon, 18 Nov 2019 20:00:39 GMT Date: Mon, 18 Nov 2019 20:00:39 GMT Message-Id: <201911182000.xAIK0doL000449@lab1.campus> From: emma@lab1.campus To: dave@lab2.campus Subject: Sender MTA Test Hi Dave, this is a test for my MTA.
Từ dưới lên trên, các dòng bắt đầu bằng Received:
cho biết lộ trình của thư. Thư đã được gửi bởi người dùng emma
với lệnh sendmail dave@lab2.campus
được cấp trên lab1.campus
như đã nêu trong tiêu đề Received:
đầu tiên. Sau đó, vẫn trên lab1.campus
, MTA đã sử dụng ESMTPS — một tập lớn của SMTP để bổ sung phần mở rộng mã hóa — để gửi thư đến MTA tại lab2.campus
như đã nêu ở tiêu đề Received:
cuối cùng (trên cùng).
MTA sẽ hoàn thành công việc của mình sau khi thư được lưu trong hộp thư đến của người dùng. Người dùng thường sẽ thực hiện một số loại lọc email, chẳng hạn như trình chặn thư rác hoặc thực thi các quy tắc lọc do người dùng xác định. Các tác vụ này được thực thi bởi các ứng dụng của bên thứ ba hoạt động cùng với MTA. Ví dụ: MTA có thể gọi tiện ích SpamAssassin để đánh dấu các thư đáng ngờ bằng các tính năng phân tích văn bản của nó.
Mặc dù có thể thực hiện được nhưng việc đọc trực tiếp tệp hộp thư sẽ không được thuận tiện. Thay vào đó, người dùng nên sử dụng một chương trình email khách (ví dụ như Thunderbird, Evolution hoặc KMail) để phân tích tệp và quản lý thư một cách thích hợp. Các chương trình như vậy cũng cung cấp các tính năng bổ sung như lối tắt cho các hành động phổ biến, thư mục con cho hộp thư đến, v.v.
Lệnh mail
và Trình duyệt Thư (MUA)
Chúng ta có thể viết thư trực tiếp ở định dạng thô, nhưng sẽ thực tế hơn nhiều khi sử dụng một ứng dụng khách — hay còn được gọi là MUA (Mail User Agent - Tác nhân Người dùng Thư) — để tăng tốc quá trình và tránh sai sót. MUA sẽ đảm nhiệm các công việc không tên, nghĩa là ứng dụng email khách sẽ trình bày và sắp xếp các thư nhận được cũng như xử lý giao tiếp thích hợp với MTA sau khi người dùng soạn email.
Có nhiều loại Tác nhân Người dùng Thư khác nhau. Các ứng dụng dành cho máy tính như Mozilla Thunderbird và Evolution của Gnome có hỗ trợ cả tài khoản email cục bộ lẫn từ xa. Ngay cả giao diện Webmail cũng có thể được coi là một loại MUA vì chúng làm trung gian cho sự tương tác giữa người dùng và MTA cơ bản. Tuy nhiên, ứng dụng email khách sẽ không bị hạn chế ở giao diện đồ họa: tứng dụng email khách bảng điều khiển được sử dụng rộng rãi để truy cập các hộp thư không được tích hợp với giao diện đồ họa và để tự động hóa các tác vụ liên quan đến email trong tệp lệnh vỏ
Ban đầu, lệnh mail
của Unix chỉ nhằm mục đích chia sẻ thư từ giữa những người dùng hệ thống cục bộ (lệnh mail
đầu tiên có từ phiên bản Unix đầu tiên phát hành năm 1971). Khi trao đổi email trên mạng trở nên phổ biến hơn, các chương trình khác đã được tạo ra để đối phó với các hệ thống phân phối thư mới và dần thay thế chương trình mail
cũ.
Ngày nay, lệnh mail
được sử dụng phổ biến nhất được cung cấp bởi gói mailx tương thích với tất cả các tính năng email hiện đại. Trong hầu hết các bản phân phối Linux, lệnh mail
chỉ là một liên kết tượng trưng đến lệnh mailx
. Các triển khai khác (như gói GNU Mailutils) về cơ bản cũng cung cấp các tính năng tương tự như mailx
với một số khác biệt nhỏ, đặc biệt là về các tùy chọn dòng lệnh.
Bất kể cách triển khai là gì, tất cả các biến thể hiện đại của lệnh mail
đều hoạt động ở hai chế độ: chế độ bình thường và chế độ gửi. Nếu một địa chỉ email được cung cấp làm đối số cho lệnh mail
, nó sẽ vào chế độ gửi; nếu không, nó sẽ vào chế độ bình thường (chế độ đọc). Ở chế độ bình thường, các thư đã nhận sẽ được liệt kê với một chỉ mục bằng số cho từng thư. Vì vậy, người dùng có thể tham chiếu tới từng chỉ mục khi gõ lệnh trong dấu nhắc lệnh tương tác. Ví dụ: lệnh print 1
có thể được sử dụng để hiển thị nội dung của thư số 1. Các lệnh tương tác có thể được viết tắt; do đó, các lệnh như print
, delete
hoặc reply
có thể được thay thế tương ứng bằng p
, d
hoặc r
. Lệnh mail
sẽ luôn xem xét các thư được nhận lần cuối hoặc các thư được xem lần cuối khi số chỉ mục của chúng bị bỏ qua. Lệnh quit
hoặc q
sẽ thoát khỏi chương trình.
Chế độ gửi sẽ đặc biệt hữu ích trong việc gửi email tự động. Ví dụ: nó có thể được sử dụng để gửi email đến quản trị viên hệ thống nếu tệp lệnh bảo trì theo lịch trình không thực hiện được nhiệm vụ của nó. Trong chế độ gửi, mail
sẽ sử dụng nội dung từ đầu vào tiêu chuẩn làm nội dung thư:
$ mail -s "Maintenance fail" henry@lab3.campus <<<"The maintenance script failed at `date`"
Trong ví dụ này, tùy chọn -s
đã được thêm vào để đưa trường chủ đề vào thư. Nội dung của thư được cung cấp bởi chuyển hướng Hereline tới đầu vào tiêu chuẩn, nhưng nội dung của tệp hoặc đầu ra của lệnh cũng có thể được dẫn tới stdin của chương trình. Nếu chuyển hướng đến đầu vào tiêu chuẩn không cung cấp nội dung thì chương trình sẽ đợi người dùng nhập nội dung thư. Trong trường hợp này, hãy nhấn phím Ctrl+D để kết thúc thư. Lệnh mail
sẽ thoát ngay lập tức sau khi thư được thêm vào hàng đợi hộp thư đi.
Tùy chỉnh phát Thư
Theo mặc định, tài khoản email trên hệ thống Linux sẽ được liên kết với tài khoản hệ thống tiêu chuẩn. Ví dụ: Nếu người dùng Carol có tên đăng nhập là carol
trên máy chủ lab2.campus
thì địa chỉ email của cô ấy sẽ là carol@lab2.campus
. Sự liên kết một-một giữa các tài khoản hệ thống và hộp thư có thể được mở rộng bằng các phương pháp tiêu chuẩn được cung cấp bởi hầu hết các bản phân phối Linux, đặc biệt là cơ chế định tuyến email do tệp /etc/aliases
cung cấp.
Bí danh (alias) email là một người nhận email “ảo” có thư nhận được được chuyển hướng đến hộp thư cục bộ hiện có hoặc đến các loại đích đến lưu trữ hoặc xử lý thư khác. Ví dụ: bí danh rất hữu ích trong việc đặt các thư được gửi tới postmaster@lab2.campus
(một hộp thư cục bộ thông thường trong hệ thống lab2.campus
) trong hộp thư của Carol. Để làm như vậy, dòng postmaster: carol
phải được thêm vào tệp /etc/aliases
trong lab2.campus
. Sau khi sửa đổi tệp /etc/aliases
, lệnh newaliases
sẽ được thực thi để cập nhật cơ sở dữ liệu bí danh của MTA và làm cho các thay đổi có hiệu lực. Các lệnh sendmail -bi
hoặc sendmail -I
cũng có thể được sử dụng để cập nhật cơ sở dữ liệu bí danh.
Mỗi bí danh sẽ được xác định trên mỗi dòng theo định dạng <alias>: <destination>
. Ngoài các hộp thư cục bộ thông thường được biểu thị bằng tên người dùng tương ứng, chúng ta còn có các loại đích đến khác:
-
Một đường dẫn đầy đủ (bắt đầu bằng
/
) tới một tệp. Thư được gửi tới bí danh tương ứng sẽ được thêm vào tệp. -
Một lệnh xử lý thư.
<destination>
phải được bắt đầu bằng một ký tự ống dẫn và nếu lệnh có chứa các ký tự đặc biệt (như khoảng trắng) thì nó phải được đặt trong dấu trích dẫn kép. Ví dụ: bí danhsubscribe: |subscribe.sh
tronglab2.campus
sẽ chuyển tiếp tất cả các thư được gửi đếnsubscribe@lab2.campus
tới đầu vào tiêu chuẩn của lệnhsubscribe.sh
. Nếu Sendmail đang chạy ở chế độ vỏ hạn chế, các lệnh được phép — hoặc liên kết tới chúng — phải ở dưới dạng/etc/smrsh/
. -
Một tệp được bao gồm. Một bí danh có thể có nhiều đích đến (được phân tách bằng dấu phẩy); do đó, việc giữ chúng trong một tệp ngoại vi có thể sẽ thực tế hơn. Từ khóa
:include:
phải chỉ ra đường dẫn tệp (như trong:include:/var/local/destinations
). -
Một địa chỉ ngoại vi. Bí danh cũng có thể chuyển tiếp thư đến các địa chỉ email bên ngoài.
-
Một bí danh khác.
Một người dùng cục bộ không có đặc quyền có thể xác định bí danh cho email của riêng họ bằng cách chỉnh sửa tệp .forward
trong thư mục chính của họ. Vì bí danh chỉ có thể ảnh hưởng đến hộp thư của chính người dùng đó nên chỉ có phần <destination>
là cần thiết. Ví dụ: để chuyển tiếp tất cả các email đến đến một địa chỉ bên ngoài, người dùng dave
trong lab2.campus
có thể tạo tệp ~/.forward
sau:
$ cat ~/.forward emma@lab1.campus
Nó sẽ chuyển tiếp tất cả các email được gửi đến dave@lab2.campus
tới emma@lab1.campus
. Giống như tệp /etc/aliases
, các quy tắc chuyển hướng khác có thể được thêm vào .forward
, mỗi quy tắc trên một dòng. Tuy nhiên, tệp .forward
chỉ có thể được ghi bởi chủ sở hữu của nó và ta sẽ không cần phải thực thi lệnh newaliases
sau khi sửa đổi nó. Các tệp bắt đầu bằng dấu chấm sẽ không xuất hiện trong danh sách tệp thông thường. Điều này có thể khiến người dùng không nắm rõ được về các bí danh đang hoạt động. Do đó, quan trọng nhất là ta phải xác minh xem tệp có tồn tại hay không khi chẩn đoán sự cố gửi email.
Bài tập Hướng dẫn
-
Nếu không có thêm tùy chọn hoặc đối số, lệnh
mail henry@lab3.campus
sẽ chuyển sang chế độ nhập để người dùng có thể nhập thư gửi tớihenry@lab3.campus
. Sau khi soạn xong thư, phím nào sẽ đóng chế độ nhập và gửi email đi? -
Siêu người dùng có thể thực thi lệnh nào để liệt kê các thư chưa được gửi bắt nguồn từ hệ thống cục bộ?
-
Làm cách nào một người dùng không có đặc quyền có thể sử dụng phương thức MTA tiêu chuẩn để tự động chuyển tiếp tất cả thư đến của họ tới địa chỉ
dave@lab2.campus
?
Bài tập Mở rộng
-
Bằng cách sử dụng lệnh
mail
domailx
cung cấp, lệnh nào sẽ gửi thư đếnemma@lab1.campus
với tệplogs.tar.gz
dưới dạng tệp đính kèm và đầu ra của lệnhuname -a
làm nội dung email? -
Một quản trị viên dịch vụ email muốn giám sát việc lưu chuyển email qua mạng nhưng họ không muốn làm hộp thư của mình lộn xộn với các thư thử nghiệm. Làm cách nào để quản trị viên này có thể định cấu hình bí danh email trên toàn hệ thống để chuyển hướng tất cả email được gửi tới người dùng
test
sang tệp/dev/null
? -
Ngoài
newaliases
, lệnh nào có thể được sử dụng để cập nhật cơ sở dữ liệu bí danh sau khi thêm bí danh mới vào/etc/aliases
?
Tóm tắt
Bài học này đề cập đến vai trò và cách sử dụng Đơn vị vận chuyển Thư (MTA) trong hệ thống Linux. MTA cung cấp một phương thức tiêu chuẩn để liên lạc giữa các tài khoản người dùng và có thể được kết hợp với các phần mềm khác để cung cấp thêm chức năng. Bài học đã thảo luận về các chủ đề sau:
-
Các khái niệm về công nghệ, hộp thư và giao thức liên quan đến email.
-
Cách các MTA của Linux trao đổi thư qua mạng.
-
Bảng điều khiển ứng dụng email khách và MUA (Trình duyệt Thư).
-
Bí danh và chuyển tiếp email cục bộ.
Các công nghệ, lệnh và quy trình đã được đề cập tới là:
-
SMTP và các giao thức liên quan.
-
MTA có sẵn cho Linux: Sendmail, Postfix, qmail, Exim.
-
Lệnh MTA và MUA:
sendmail
vàmail
. -
Các tệp và lệnh quản trị:
mailq
,/etc/aliases
,newaliases
,~/.forward
.
Đáp án Bài tập Hướng dẫn
-
Nếu không có thêm tùy chọn hoặc đối số, lệnh
mail henry@lab3.campus
sẽ chuyển sang chế độ nhập để người dùng có thể nhập thư gửi tớihenry@lab3.campus
. Sau khi soạn xong thư, phím nào sẽ đóng chế độ nhập và gửi email đi?Nhấn Ctrl+D sẽ khiến chương trình đóng và gửi email.
-
Siêu người dùng có thể thực thi lệnh nào để liệt kê các thư chưa được gửi bắt nguồn từ hệ thống cục bộ?
Lệnh
mailq
hoặcsendmail -bp
. -
Làm cách nào để một người dùng không có đặc quyền có thể sử dụng phương thức MTA tiêu chuẩn để tự động chuyển tiếp tất cả thư đến của họ tới địa chỉ
dave@lab2.campus
?Người dùng nên thêm
dave@lab2.campus
vào~/.forward
.
Đáp án Bài tập Mở rộng
-
Bằng cách sử dụng lệnh
mail
domailx
cung cấp, lệnh nào sẽ gửi thư đếnemma@lab1.campus
với tệplogs.tar.gz
dưới dạng tệp đính kèm và đầu ra của lệnhuname -a
làm nội dung email?uname -a | mail -a logs.tar.gz emma@lab1.campus
-
Một quản trị viên dịch vụ email muốn giám sát việc lưu chuyển email qua mạng nhưng họ không muốn làm hộp thư của mình lộn xộn với các thư thử nghiệm. Làm cách nào để quản trị viên này có thể định cấu hình bí danh email trên toàn hệ thống để chuyển hướng tất cả email được gửi tới người dùng
test
sang tệp/dev/null
?Dòng
test: /dev/null
trong/etc/aliases
sẽ chuyển hướng tất cả cacs thư được gửi đến hộp thư cục bộtest
sang tệp/dev/null
. -
Ngoài
newaliases
, lệnh nào có thể được sử dụng để cập nhật cơ sở dữ liệu bí danh sau khi thêm bí danh mới vào/etc/aliases
?Lệnh
sendmail -bi
hoặcsendmail -I
.