SENDMAIL
Giới thiệu
MUAs, MTAs, and MDAs
Cấu trúc của 1 Email Message
SMTP và the Message Envelope
Lịch sử sendmail
The Mail Queue
Aliases
Biên dịch sendmail và cài đặt
Tại sao dùng Berkeley sendmail?
Tải Source Code
Cấu hình Build-Time
Database Map Support
Ví dụ site.config.m4
Biên dịch sendmail
Cấu hình sendmail
File cấu hình có thể làm gì ?
So sánh .cf files với .mc files
Cấu trúc của .mc File
Biến cấu hình
FEATURE() Macros
Masquerading
Relaying
Database Maps
Sinh ra .cf file từ .mc file
Anti-Spam
Định nghĩa "spam"
No Default Relaying
Access Control Database
Better Checking on Sender Information
Chạy sendmail:
Các tham số dòng lệnh
Khởi động
MUAs, MTAs, and MDAs
Part What It Does Examples
Mail User
Agent
(MUA)
MUA là chương trình dùng để
đọc và gửi mail. Có thể gọi là
mail client.
elm, pine,
Outlook,
Eudora
Mail
Transfer
Agent
(MTA)
MTA làm nhiệm vụ như là "mail
router". Nó nhận mail từ MUA lẫn
MTA, căn cứ vào header của
mail mà nó quyết định chuyển đi
bằng cách nào
sendmail,
qmail,
exchange
server
Mail
Delivery
Agent
(MDA)
MDA chấp nhận các mail từ MTA
và chuyển đi cụ thể đến user
mail.local
procmail
Ví dụ
MTA: phần quan trọng nhất. Nó chịu
trách nhiệm làm các công việc chuyển
mail “thông minh".
Quá trình gửi nhận mail
1. jsmith's MUA (pine, outlook, … ) trên host1.uiuc.edu chuyển
message đến MTA (sendmail) trên local host.
2. MTA (sendmail) chú ý message được đánh địa chỉ đến 1 user
tại host2.uiuc.edu. Khi đó nó được cấu hình để biết rằng nó
có thể đến host2.uiuc.edu thông qua SMTP, nó chuyển
message sang SMTP MDA (thường SMTP MDA được build sẵn
trong sendmail, nhưng các MDA khác có thể là 1 chương
trình ngoài).
3. SMTP MDA kết nối vào MTA trên host2.uiuc.edu (sendmail)
và gửi nó 1 message.
4. MTA trên host2.uiuc.edu (sendmail) thông báo rằng message
được đánh địa chỉ đến 1 user trên localhost, do đó nó
chuyển message vào local MDA.
5. Local MDA lưu message trong mailbox của johndoe .
6. Kế tiếp johndoe kết nối vào host2.uiuc.edu và chạy MUA,
message sẽ ở đó để anh ta đọc.
Structure of an Email Message
Email messages có 2 phần :
Headers: dòng có dạng "field: value" chứa
thông tin về message, như là "To:", "From:",
"Date:", and "Message-ID:"
Body: nội dung của message
From Tue Nov 30 09:54:29 2010
Return-Path: <>
Received: from alibaba.citd.edu.vn (alibaba [127.0.0.1])
by alibaba.citd.edu.vn (8.12.8/8.12.8) with ESMTP id
oAU2sNOR003125
for <>; Tue, 30 Nov 2010 09:54:28
+0700
Received: (from root@localhost)
by alibaba.citd.edu.vn (8.12.8/8.12.8/Submit) id oAU2sNKh003123
for natuan; Tue, 30 Nov 2010 09:54:23 +0700
Date: Tue, 30 Nov 2010 09:54:23 +0700
From: root <>
Message-Id: <>
To:
Subject: Test sendmail program
This is the message body.
SMTP and the Message Envelope
[root@alibaba mail]# telnet 172.16.10.1 25
Trying 172.16.10.1
Connected to 172.16.10.1.
Escape character is '^]'.
220 pascal.citd.edu.vn ESMTP Sendmail
8.12.8/8.12.5; Sun, 30 Nov 2003 09:14:37 -
0500
helo pascal
250 pascal.citd.edu.vn Hello [192.168.1.13],
pleased to meet you
mail from:
250 2.1.0 Sender ok
Quá trình gửi mail
rcpt to:
250 2.1.5 Recipient ok
data
354 Enter mail, end with "." on a line by itself
subject: Test mail from alibaba CITD
This is the message body
.
250 2.0.0 hAUEEb7S003989 Message accepted
for delivery
quit
221 2.0.0 pascal.citd.edu.vn closing connection
Connection closed by foreign host.
Lịch sử sendmail
The Past:
sendmail là một trong những MTA cổ nhất và dùng
nhiều nhất trên Internet
Bản gốc được viết trước khi Internet được chuẩn
hoá
Được thiết kế đủ linh hoạt để chuyển mail cho các
mail systems khác nhau bất kể tính chất của nó
Today:
Internet được chuẩn hoá nhiều hơn
Dùng SMTP (Simple Mail Transfer Protocol)
Nhiều tính năng cũ của sendmail được bỏ qua
Mặc dù dùng SMTP, MTA vẫn còn được dùng cho
việc dẫn đường mail!
The Mail Queue
sendmail chạy background đợi new
messages. Khi có 1 kết nối đến, một child
process được sinh ra để xử lý kết nối, trong
khi parent process quay trở lại tiếp tục đợi
new connections.
Khi một message được nhận, sendmail
child process đặt chúng vào mail queue
(/var/spool/mqueue) và theo định kỳ nó sẽ
được chuyển đi. Sau khi mail được chuyển
đi, nó sẽ bị xoá khỏi mqueue
Messages nằm trong mqueue sẽ ở đó cho
đến khi queue được xử lý. parent sendmail
sẽ thường xuyên fork một child process để
chuyển bất cứ mail nào còn nằm trong
queue theo những quãng thời gian nhất
định
Xử lý mqueue
Tập tin /etc/mail/aliases
Một alias cho phép sendmail chuyển hướng
(redirect) mail gửi đến một address. mail này
có thể được redirected đến một email address
khác
sendmail's alias database thường được lưu
dạng flat-text trong file /etc/mail/aliases.
Ví dụ:
# Basic system aliases these MUST be present.
MAILER-DAEMON: postmaster
postmaster: tuanna
root: tuanna
tuan: ,
Tập tin /etc/mail/aliases
Mailling list
k11: ,
, ,
, ,
,
, ,
,
, ,
, ,
,
, , ,
,
, ,
,
,
Tập tin /etc/mail/aliases
Sau khi đã hiệu chỉnh lập tin aliase ta
phải compile thành binary để
sendmail hiểu.
Sử dụng lệnh newaliases. Tập tin
aliases.db sẽ được sinh ra
Tại sao dùng Berkeley sendmail?
Security fixes: Các lỗi về security
được cập nhật và sửa thường xuyên
Features: Các tính năng của
sendmail hỗ trợ rất nhiều
Standards: Sendmail là một mail
server hỗ trợ chuẩn SMTP và được
chuẩn hoá trên Internet
Support: Sendmail được hỗ trợ
Sendmail source code
Có thể tải sendmail source code từ :
(home site)
/>es/mail/sendmail (local mirror)
Cấu hình sendmail
Nhiệm vụ của tập tin
/etc/mail/sendmail.cf: chỉ cho sendmail
biết các công việc phải xử lý khi nhận và
gửi mail :
General configuration options, such as queue
directory and timeout values
Definitions for each MDA, including pathnames
and options
Rulesets for header processing/rewriting, and
the "routing table" which determines which
MDAs get used for which messages
Các thông tin này thường là phức tạp đặc
biệt là ở các large mail hub.
Tập tin .cf và tập tin .mc
"He who has never hacked
sendmail.cf has no soul;
he who has hacked sendmail.cf
more than once has no brain.“
Old Hacker Proverb
/etc/mail/sendmail.cf
/etc/mail/sendmail.cf được thiết kế để
sendmail có thể parse nhanh, không phải
để human-readable, và nó được xem là
một trong những cái bí hiểm nhất mà
Unix administrator cần phải đương đầu.
Do đó, từ version 8, tập các macros cho
m4 macro language được viết để làm nó
dễ dàng hơn trong việc thêm xoá sửa và
bảo trì cấu hình trong sendmail.cf. Tập tin
chứa các macro này gọi là .mc file.
Bảng so sánh .cf với .mc
.cf .mc
Flexible very
not totally, but covers
99% of situations
Understandable no yes
Quickly machine-
parsed
yes no
Cấu trúc của .mc
Cấu hình cơ bản của.mc là như sau:
OSTYPE()
Ví dụ: OSTYPE(linux), m4 sẽ đọc
cf/ostype/linux.m4.
define()
Có thể dùng 0 hay nhiều chỉ dẫn define()
để thiết lập biến điều khiển thao tác của
các cấu hình macro. Cú pháp :
define(`variable', `value')
Thông thường, cả variable và value được
đặt trong dấu nháy.