MailServer Trang 1 Một số khái niệm Mail-boxes Một mail-box là 1 file hoặc 1 thư mục chứa các file nơi các mail gửi đến được lưu trữ User Agents Một mail user agent, hoặc MUA, là một ứng dụng chạy trực tiếp bởi người dùng. User agents được dùng để tạo và gửi thư đi, cũng như dùng để hiển thị, tổ chức lưu trữ và in ấn các thông điệp trong mailbox của người dùng. Một số MUA phổ biến như elm, mailx, mh, zmail, Netscape, Eudora, MS Outlook . Transfer Agents Mail transfer agents (MTAs) được dùng để chuyển các thông điệp giữa các máy. User agents chuyển thông điệp đến MTA, MTA này chuyển thông điệp đến một MTA khác hoặc nhiều MTA khác nữa. Người dùng có thể chuyển thông điệp trực tiếp đến MTA không thông qua MUA, nhưng đòi hỏi phải nắm được tập lệnh của giao thức chuyển thư, ví dụ các lệnh SMTP. MTA có nhiệm vụ dẫn đường cho các thông điệp đi đến đúng đích nhận của chúng. MTA phổ biến nhất (trên UNIX) là sendmail. Delivery Agents Delivery agents dùng để đặt các thông điệp vào mail-box của người dùng. Khi thông điệp đến được đích thì MTA sau cuối sẽ chuyển thông điệp đến delivery agent phù hợp và agent này sẽ đưa thông điệp vào mail-box của người dùng. Ví dụ delivery agent cho Solaris từ phiên bản 2.5 trở đi là mail.local. Các thành phần trong hệ thống E-Mail Một hệ thống mail gồm 3 thành phần có thể nằm trên cùng máy hoặc tách biệt trên nhiều máy: • Một mail host • Ít nhất một mailserver • Các mail client Mail Server Trang 2 Cấu hình E-Mail cơ bản Trong trường hợp muốn kết nối với hệ thống bên ngoài dùng giao thức chuyển mail khác thì cần thêm thành phần thứ tư là một mail gateway. Mail Host Một mail host là máy giữ vai trò máy chủ mail chính trong hệ thống mạng. Nó dùng như thành phần trung gian để chuyển mail giữa các vị trí không kết nối trực tiếp được với nhau. Mail host phân giải địa chỉ người nhận để chuyển giữa các mailserver hoặc chuyển đến mail gateway. Một ví dụ về mail host là máy trong mạng cục bộ LAN có modem được thiết lập liên kết PPP hoặc UUCP dùng đường dây thoại. Mail host cũng có thể là máy chủ đóng vai trò router giữa mạng nội bộ và mạng Internet. MailServer Một mailserver là một máy bất kỳ có chứa các mailbox của người dùng. Mailserver nhận mail từ mail client gửi đến và đưa vào hàng đợi (mail queue) để gửi đến mail host. Mailserver nhận mail từ mail host gửi đến và đưa vào mailbox của người dùng. MailServer Trang 3 Người dùng sử dụng NFS (Network File System) để mount thư mục chứa mailbox trên server và đọc thư. Nếu NFS không được hổ trợ thì người dùng phải login vào máy mailserver để đọc thư. Trong trường hợp mail client của người dùng có hổ trợ POP/IMAP (POP/IMAP client) và trên mailserver cũng hổ trợ POP/IMAP (POP/IMAP server) thì người dùng có thể đọc thư bằng POP/IMAP. Mail Client Một mail client là hệ thống bất kỳ nhận mail từ mailserver và không có mailbox cục bộ. Mail Gateway Một mail gateway là máy kết nối giữa các mạng dùng các giao thức truyền thông khác nhau hoặc kết nối các mạng khác nhau dùng chung giao thức. Ví dụ một mail gateway có thể kết nối một mạng TCP/IP với một mạng chạy bộ giao thức Systems Network Architecture (SNA). Một mail gateway đơn giản nhất dùng để kết nối 2 mạng dùng chung giao thức hoặc mailer. Khi đó mail gateway chuyển mail giữa domain nội bộ và các domain bên ngoài. Mail gateway cũng kết nối 2 mạng dùng mailer khác nhau như hình vẽ dưới. Gateway giữa 2 giao thức truyền khác nhau MailServer Trang 4 Một số cấu hình E-Mail Hệ thống mail cục bộ Cấu hình hệ thống mail đơn giản gồm một hoặc nhiều trạm làm việc kết nối vào một mailhost. Tất cả mail đều chuyển cục bộ. Mail cục bộ có thêm kết nối từ xa Hệ thống mail trong một mạng nhỏ gồm một mail server, một mail host và một mail gateway kết nối với hệ thống bên ngoài. Không cần DNS server. Hai domain và một gateway Cầu hình dưới đây gồm 2 domain và một mail gateway. Trong cấu hình này mail server, mail host, và mail gateway (hoặc gateways) cho mỗi domain hoạt động như một hệ thống độc lập. Để quản trị và phân phối mail cho 2 domain dịch vụ DNS buộc phải có. MailServer Trang 5 Low-level Concepts Character Sets Một bảng mã character set đơn giản là sự ánh xạ các giá trị byte nhị phân vào các ký tự. Character set phổ biến nhất là US-ASCII, có 32 ký tự điều khiển (không in được) và 96 ký tự khác (in được), tổng cộng là 128. 128 ký tự này mã hoá bằng 7 bit, vì thế một byte 8 bit biểu diễn các ký tự này chỉ dùng 7 bit thấp, còn bit thứ 8 luôn đặt bằng 0. US-ASCII vì thế được xem là bảng mã 7-bit. Nhưng các ngôn ngữ khác ở châu Âu dùng thêm các ký tự khác từ 128 đến 255 ngoài 128 ký tự trên nên phải dùng 8 bit để mã hoá. Do đó chúng được coi là bảng mã 8-bit (ví dụ ISO-8859-1). Nhiều ngôn ngữ châu Á cần nhiều byte để biễu diễn và được xem là bảng mã multiple- byte. Headers & Bodies Mỗi thông điệp gồm 2 phần là header và body. Phần header chứa các thông tin về ngừoi tạo, người nhận, thời gian tạo, chủ đề của thư, … Mỗi thông điệp có dạng "keyword: value", trong đó keyword là 1 từ đặc biệt (ví dụ From hoặc Date) chỉ ra loại thông tin được chứa trong header, và value là giá trị của nó. Khuyến nghị RFC 822 và RFC 1123, section 5 mô tả các loại header có thể có. Một dòng trắng ngăn cách giữa header và body. Phần body chứa các thông tin mà người gửi muốn chuyển đến cho người nhận. MIME Ban đầu do các thông điệp đều ở dạng text không định dạng dùng bảng mã US-ASCII nên không cần có cấu trúc cho phần body của thông điệp. Tuy nhiên cùng với sự phát triển của Internet đòi hỏi phải chuyển các thông điệp không những dùng bảng mã US-ASCII mà còn cần hổ trợ các ngôn ngữ châu Âu và châu Á, hơn nữa e-mail cũng dùng để chuỵển nội dụng multi-media nên cần phải mở rộng RFC 822. MIME (Multipurpose Internet Mail Extensions, đặc tả trong các RFC từ 2045 đến 2049, đặc biệt là RFC 2045 và RFC 2046) định nghĩa cấu trúc phần body của thông điệp. Nó bổ sung trường trong phần header là Content-Type chỉ ra bảng mã cụ thể hoặc kiểu dữ liệu non- text chứa trong body của 1 thông điệp. Ví dụ header: Content-Type: text/plain; charset=us-ascii MailServer Trang 6 chỉ ra thông điệp chứa text không địng dạng dùng bảng mã US-ASCII. MIME cũng chỉ ra làm thế nào để mã hoá dữ liệu khi cần. MUA dùng các thông tin này để hiể thị thông điệp theo dạng mà người dùng có thể hiểu được. Transfer Protocols Là “ngôn ngữ” giao tiếp giữa các MTA. Có nhiều giao thức chuyển mail đang tồn tại như SMTP (Simple Mail Transfer Protocol); UUCP (Unix-to-Unix copy) và X.400, trong đó SMTP đang được sử dụng rộng rãi nhất hiện nay. Các lệnh SMTP được mô tả trong phần sau. Envelopes và Bodies Giống như hệ thống thư thừong, SMTP sử dụng thông tin lưu trong “bì thư” - envelope để chuyển thông điệp e-mail. Envelope chứa các thông tin như thông điệp xuất phát từ đâu và hướng đến đâu. Địa chỉ nơi gửi dùng trong trường hợp thông điệp bị lỗi và hệ thống thông báo về lại nơi gửi. Tuy nhiên một thông điệp có thể có nhiều đích nhận và các địa chỉ trong phần envelope có thể thay đổi khi chúng chuyển qua mạng. Phần SMTP body chính là toàn bộ thông điệp, tức gồm 2 phần Headers và Bodies đã mô tả ở trên. Ví dụ toàn nội dung của một thông điệp: Envelope: <user1@host1.org> Return address <user2@host2.org> Recipient #1 <user3@host3.org> Recipient #2 Headers: Received: from host1.org by host2.org with SMTP; 01 Oct 1990 12:32:01 EDT Date: Mon, 01 Oct 1990 11:19:47 EDT From: user1@host1.org To: user2@host2.org Cc: user3@host3.org Subject: Hello there Body: Just a quick note to let you know I'm alive. Have a nice day. Địa chỉ MailServer Trang 7 Địa chỉ e-mail có dạng localpart@domain trong đó domain là một domain Internet chỉ ra hệ thống cụ thể. Domain Internet có dạng: subdomain. . .subdomain2.subdomain1.top-level-domain còn localpart thường là một người dùng trong hệ thống. Dữ liệu 7-bit và 8-bit Do ban đầu phụ thuộc bảng mã US-ASCII nên SMTP là 1 giao thức 7-bit, có nghĩa là các byte dữ liệu gửi đi chỉ dùng 7-bit thấp và bit thứ 8 luôn luôn là 0. Tuy nhiên trong trường hợp cần dùng đến 8 bit, như các bộ mã ngôn ngữ châu Âu hoặc khi chuyển nội dung multi-media, sẽ dễ dàng xử lý hơn khi sử dụng mã 8-bit. Hơn nữa nếu dữ liệu 8-bit mã hoá thành dữ liệu 7-bit sẽ tăng kích thước thông điệp lên khoảng 33% (mã hoá Base64). Để đáp ứng yêu cầu trên, giao thức SMTP đã được mở rộng để cho phép dữ liệu 8-bit được chuyển giữa 2 MTA. Hai MTA phải thoả thuận cùng hổ trợ truyền dữ liệu 8-bit theo khuyến nghị RFC 1869 (mô tả ccơ chế mở rộng SMTP gọi là ESMTP), và RFC 1652 (mô tả cơ chế mở rộng truyền dữ liệu 8-bit gọi là 8BITMIME).Trong trường hợp 2 MTA không cùng hổ trợ 8-bit thì phải mã hoá sang dạng 7-bit hoặc MTA nơi nhận thông báo không chấp nhận nhận thông điệp của nơi gửi. Routing Cơ chế tìm đường cho việc chuyển mail dựa trên hệ thống tên miền Domain Name System được mô tả trong RFC 974 . Bản ghi MX (Mail eXchanger) được duy trì bởi các domain name server (DNS) để cho các MTA biết nơi nào cần chuyển mail đến. Một bản ghi MX có thể mô tả đích đến cho một máy (host) hoặc cho một domain. Giao thức SMTP Giao thức SMTP dùng để chuyển mail 1 cách hiệu quả và tin cậy. Giao thức SMTP được thiết kế dựa trên mô hình truyền thông như sau: User mail yêu cầu gửi MTA nơi gửi sẽ thiết lập việc vận chuyển 2 chiều với MTA nơi nhận. MTA nơi nhận có thể là đích hoặc là 1 nút trung gian. MTA nơi gửi phát sinh các lệnh SMTP và gửi đến MTA nơi nhận. MTA nơi nhận trả lời tương ứng với các lệnh gửi từ MTA nơi gửi. MailServer Trang 8 ------------------------------------------------------------- +----------+ +----------+ +------+ | | | | | User |<-->| | SMTP | | +------+ | Sender- |Commands/Replies| Receiver-| +------+ | SMTP |<-------------->| SMTP | +------+ | File |<-->| | and Mail | |<-->| File | |System| | | | | |System| +------+ +----------+ +----------+ +------+ Sender-SMTP Receiver-SMTP Các lệnh SMTP HELO <SP> <domain> <CRLF> MAIL <SP> FROM:<reverse-path> <CRLF> RCPT <SP> TO:<forward-path> <CRLF> DATA <CRLF> RSET <CRLF> SEND <SP> FROM:<reverse-path> <CRLF> SOML <SP> FROM:<reverse-path> <CRLF> SAML <SP> FROM:<reverse-path> <CRLF> VRFY <SP> <string> <CRLF> EXPN <SP> <string> <CRLF> HELP [<SP> <string>] <CRLF> NOOP <CRLF> QUIT <CRLF> TURN <CRLF> Lệnh Chức năng Ví dụ HELO Đồng bộ MTA giữa nơi gửi và nơi nhận HELO abc.com MAIL Khởi động 1 giao tác chuyển mailMAIL FROM: john@yahoo.com MailServer Trang 9 RCPT Chỉ ra 1 người nhận riêng biệt. Nếu có nhiều người nhận thì sẽ có nhiều RCPT RCPT TO: nva@vnn.vn DATA Bắt đầu nhập nội dung thư. Nội dung thư có thể chứa ký tự ASCII 128 bit bất kỳ nào. Nội dung thư kết thúc bằng chuổi <CRLF>.<CRLF> DATA <cr> Subject: Hi! … <CRLF>.<CRLF> SEND Khởi động 1 giao tác chuyển mail trong đó mail sẽ được chuyển đến 1 hoặc nhiều đầu cuối (terminal). SOML (SEND OR MAIL ) Khởi động 1 giao tác chuyển mail trong đó mail sẽ được chuyển đến 1 hoặc nhiều đầu cuối (terminal) hoặc các hộp thư. Nếu người dùng đang làm việc. thư sẽ chuyển đến trạm của họ, ngược lại sẽ chuyển đến hộp thư. SAML (SEND AND MAIL ) Khởi động 1 giao tác chuyển mail trong đó mail sẽ được chuyển đến 1 hoặc nhiều đầu cuối (terminal) và các hộp thư. RSET Bỏ qua giao tác mail hiện thời. Mọi người gửi, các người nhận, nội dung thư bị bỏ qua và mọi vùng đệm cùng bảng trạng thái bị xoá. VRFY Kiểm tra có tồn tại hộp thư người nhận hay không. EXPN Kiểm tra tên danh sách thư tín và trả về các thành viên trong danh sách nếu có. NOOP Yêu cầu MTA nơi nhận trả lời OKz QUIT Yêu cầu MTA nơi nhận trả lời OK và đóng phiên làm việc. . Internet. Mail Server Một mail server là một máy bất kỳ có chứa các mailbox của người dùng. Mail server nhận mail từ mail client gửi đến và đưa vào hàng đợi (mail. đợi (mail queue) để gửi đến mail host. Mail server nhận mail từ mail host gửi đến và đưa vào mailbox của người dùng. Mail Server Trang 3 Người dùng sử