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
sendmai
router". Nó nhận mail từ MUA lẫn
l,
MTA, căn cứ vào header của
qmail,
mail mà nó quyết định chuyển đi exchang
bằng cách nào
e
server
Mail
Delivery
Agent
(MDA)
MDA chấp nhận các mail từ MTA mail.loc
và chuyển đi cụ thể đến user
al
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.
2.
3.
4.
5.
6.
jsmith's MUA (pine, outlook, … ) trên host1.uiuc.edu chuyển
message đến MTA (sendmail) trên local host.
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 ngồi).
SMTP MDA kết nối vào MTA trên host2.uiuc.edu (sendmail)
và gửi nó 1 message.
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.
Local MDA lưu message trong mailbox của johndoe .
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 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ị
xố 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 xố 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 machineparsed
yes
no
Cấu trúc của .mc
Cấu hình cơ bản của.mc là như sau:
OSTYPE()
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 :
Ví dụ: OSTYPE(linux), m4 sẽ đọc
cf/ostype/linux.m4.
define(`variable', `value')
Thơng thường, cả variable và value được
đặt trong dấu nháy.