Trên bất kỳ một hệ thống nào, Windows hay Linux hay …, hệ thống máy chủ thƣ luơn là một vấn đề lớn và rất phức tạp. Hiện nay cĩ rất nhiều phần mềm nguồn mở trong đĩ cĩ Qmail đƣợc cài đặt và vận hành trên hệ điều hành Linux cung cấp cho một dịch vụ máy chủ thƣ hồn hảo với kiến trúc đƣợc thiết kế cẩn thận để vƣợt qua những điểm yếu bảo mật của các thƣ server khác nhƣ Sendmail. Một hệ thống MTA sử dụng Qmail cĩ các tính năng nỏi bật sau:
50
Ổn định và hiệu năng: qmail cĩ khả năng chuyển nhận hàng triệu thơng điệp một
ngày1. Tuy nhiên, nếu biến nĩ thành một máy chủ thƣ phục vụ tất cả các mail
protocol thì bị giới hạn trong vấn đề xác thực (authentication). Nếu máy chủ thƣ thuộc một mạng dùng hồn tồn Unix thì giới hạn này cĩ thể khắc phục dễ dàng. Khơng may trên thực tế hiện nay, khơng cịn nhiều mạng “thuần” Unix hoặc “thuần” một hệ điều hành nào khác. Bởi vậy, qmail hoạt động nhƣ một mail gateway chỉ cĩ trách nhiệm chuyển thƣ đến các thƣ servers khác (trong giới hạn cho phép domain) mà khơng phải lo vấn đề xác thực, do đĩ, ngồi tính bảo mật, tính hiệu năng đƣợc nâng cao đáng kể.
Tính bảo mật: Nhƣ đã nêu ra ở trên những khĩ khăn trong cơ chế quản lý kiểm dịch của một (hoặc nhiều) mạng cĩ đa hệ điều hành khơng những giảm sút tính hiệu năng mà cịn ảnh hƣởng lớn đến tính bảo mật. Lý do, quản lý một trung tâm tài nguyên nhân dụng (central user database) dễ dàng và ổn định hơn nhiều user database. Hơn thế, cơ chế Internet <--> Mail Gateway <--> Firewall <--> Internal Mail Servers <--> Users chặc chẽ và an tồn hơn. Ðĩ là chƣa kể ứng dụng kiểm sốt / ngăn chặn viruses, trojans và cách loại scripts mang tính phá hoại trên một Unix Mail Gateway trƣớc khi thơng điệp đƣợc chuyển vào một Mail Server bên trong (Microsoft Exchange hoặc IBM Lotus chẳng hạn). Các ứng dụng cho POP3 hoặc IMAP đƣợc thiết lập một cách độc lập trên internal mail servers và ngƣời dùng cĩ thể truy cập qua một cơ chế firewalling nào đĩ
Do các đặc tính nổi trội của Qmail mà trong mơ hình này ta lựa chọn Qmail để thực hiện module vận chuyển thƣ trong hệ thống lọc thƣ trong module MTA.
Kiến trúc thiết kế của qmail bắt nguồn từ một số khuơn mẫu khơng phải là mới, nhƣng qmail là một ví dụ cho việc sử dụng chúng một cách hiệu quả nhất. Một trong những nguyên tắc chủ chốt trong kiến trúc của qmail là Defense in Depth, nghĩa là qmail khơng phụ thuộc vào một ý tƣởng riêng lẽ nào để đạt đƣợc tính bảo mật, mà sẽ đƣợc bảo mật qua nhiều lớp. Từ cách phân chia qmail thành những module với mục đích giảm tối đa thiệt hại khi phịng tuyến ở từng module bị phá vỡ, và tránh đƣợc nhiều lỗi liên quan giữa các module đến những thƣ viện lập trình mức thấp đƣợc hiệu chỉnh để loại bỏ những lỗi nghiêm trọng nhƣ tràn bộ đệm... Ta sẽ khảo sát chi tiết từng phần tiếp sau đây. Trƣớc hết ta nên cĩ cái nhìn tổng quan về hệ thống MTA qmail.
Trong sơ đồ hình 15 ta thấy đƣợc các thành phần chính tạo nên qmail và hoạt động của chúng. Hoạt động của qmail cĩ thể đƣợc chia thành hai phần, thứ nhất là
1 http://www.qmail.org
51
nhận và gửi thƣ với remote mail server, thứ hai là nhận và gửi thƣ với localhost. Các thành phần cơ bản của qmail gồm cĩ:
Qmail smtpd, qmail inject: nhận thƣ Qmail-queue: sắp xếp thƣ vào hàng đợi Qmail-send: đẩy thƣ ra
Qmail-rspawn, qmail-lspawn: tạo ra các process qmail-remote để gửi thƣ đi Qmail-remote, qmail-local: liên kết với remote mail server để gửi thƣ Mail box: chứa thƣ của user
qmail-smpt qmail - queue qmail - send qmail rspawn SMTP from network Tcpserver/ tcp- env/inetd qmail-remote qmail ispawn qmail-local remote mailserver qmail-inject MUA mbox/ mdir/ program delivery remote mailserver From local To local qmail - system
52
53
Nguyên tắc hoạt động:
Message của máy chủ thƣ từ xa gửi đến sẽ đƣợc trình quản lí các ứng dụng mạng nhƣ inetd, xinetd hay tcpserver tiếp nhận và chuyển tiếp cho qmail-smtpd. Đối với message của user trong nội bộ gửi thì trình quản lí thƣ là các MUA. Qmail-smtpd cĩ nhiệm vụ là nhận message và đƣa message cho qmail-queue xếp
vào hàng đợi. Message từ local user sẽ đƣợc nhận bởi qmail-inject. Qmail-queue là một hàng đợi chứa các message chờ đƣợc phân phối.
Qmail-send sẽ lấy message từ qmail-queue đƣa đến cho mail-rspawn. Mail- rspawn sẽ đọc mail, xác định địa chỉ, tạo ra các process mail-remote để gửi thƣ đến địa chỉ đích ở xa. Mail-lspawn tạo ra các process mail-local để gửi thƣ đến các mail box của user trong nội bộ. Message cĩ forward đến địa chỉ khác thì sẽ đƣợc đƣa lại vào hàng đợi.