Chương 11 Sendmail

 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

pdf52 trang | Chia sẻ: lylyngoc | Lượt xem: 1892 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Chương 11 Sendmail, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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 root@alibaba.citd.edu.vn 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: natuan@alibaba.citd.edu.vn  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: tuan@citd.edu.vn  250 2.1.0 tuan@citd.edu.vn... Sender ok Quá trình gửi mail  rcpt to:anhtuan98@yahoo.com  250 2.1.5 anhtuan98@yahoo.com...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: tuanna@citd.edu.vn, natuan@citd.edu.vn Tập tin /etc/mail/aliases  Mailling list  k11: ltanh@fit.hcmuns.edu.vn, an_npb@vol.vnn.vn , tdduan@fit.hcmuns.edu.vn , DungDang@psv.com.vn , mtdung@citd.edu.vn, nhdung@csc.quangtrungsoft.com.vn, vulq79@yahoo.com, nvdieu@yahoo.com , ngokhuondung@hotmail.com , nghuudong@vol.vnn.vn , dminhduc@vol.vnn.vn, hoaitang@yahoo.com, hungmn_vn@yahoo.com, DucKhoa@ctu.edu.vn, tranthelan@yahoo.com , dtl112@yahoo.com , nghiencuu1@yahoo.com, NguyenVinhNam@vol.vnn.vn , ptlonnet@yahoo.com, phuclx@yahoo.com, dqpmag@yahoo.com, nguyenkienquoc@yahoo.com, thang@citd.edu.vn 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ừ :  ftp://ftp.sendmail.org/pub/sendmail (home site)  ftp://uiarchive.uiuc.edu/pub/packag 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. .mc  FEATURE()  define()  Có thể 0 hay nhiều macro FEATURE() để chọn các tính năng đặc biệt nào mà bạn muốn dùng hay hỗ trợ  MAILER()  Một hay nhiều MAILER() macros phải được dùng để định nghĩa MDAs nào được dùng bởi cấu hình này. Thường thì chỉ cần định nghĩa local MDA và SMTP MDA, như sau:  MAILER(smtp)  MAILER(local) Masquerading  MASQUERADE_AS(`host.domain')  Masquerading là một phần rất quan trọng của client/server mail hub configuration. Bất kỳ máy nào cấu hình như thế sẽ viết lại SMTP From: header của tất cả outbound mail để cho giống như nó xuất phát từ 1 địa chỉ mà bạn đang muốn mạo danh.  Ex: MASQUERADE_AS(`alibaba.com')  FEATURE(allmasquerade)  macro này cũng quan trọng. Nó sẽ gây nên địa chỉ người nhận cũng như người gửi được mạo danh. Điều này thường hữu dụng trên các máy cluster mà mạo danh như là ở các mail server trung tâm khi bạn muốn tất cả các addresses trên cluster giống như là thế giới bên ngoài khi chúng đến từ mail server. Relaying  Bắt đầu từ version 8.9, sendmail sẽ không relay mail từ 1 external host đến 1 host khác nếu chúng không được cấu hình cụ thể. Điều này dùng để ngăn chặn spammers dùng các mail servers để chuyển mail cho chúng  Để cho phép host cụ thể được phép relay ta phải cấu hình lại sendmail, thêm hostname vào tập tin /etc/mail/relay-domains. Thông thường, các đầu vào trong file này thể hiện toàn bộ các domain mà chúng được phép relay. Tuy nhiên, nếu chúng ta muốn liệt kê cụ thể host trong file, không phải domain, bạn có thể dùng FEATURE(relay_hosts_only).  Nếu vì một vài lý do nào đó bạn cần phải cấu hình sendmail để relay tất cả các mail, FEATURE(promiscuous_relay) macro sẽ làm sendmail relay bất cứ mail nào đến . Tuy nhiên, dùng macro này là hoàn toàn không khuyến khích bởi vì nó sẽ cho luôn cả spam mail được relay thông qua mail server của ta. Database Maps  Một trong những tính năng hữu dụng của sendmail là khả năng có thể dò tìm addresses dựa trên bản đồ bên ngoài. Nhiều kiểu maps được hỗ trợ, từ local DB hay DBM databases đến các network-based services như PH, LDAP, hay NIS. Nếu sendmail được biên dịch với - DNEWDB, kiểu default map là hash. Nếu không, kiểu default map là dbm. FEATURE() macros  FEATURE(virtusertable) map này cho phép ta hỗ trợ virtual domains trên một mail server. Ví dụ:  info@foo.com foo-info  info@bar.com bar-info  joe@bar.com error:nouser No such user here  jax@bar.com error:D.S.N:unavailable Address invalid  @baz.org jane@example.net  @foo.org %1@example.com  old+*@foo.org new+%2@example.com FEATURE() macros  Email gửi đến các địa chỉ bên trái sẽ được chuyển cho các địa chỉ tương ứng bên phải. Nếu địa chỉ bên phải bắt đầu là error:, mail sẽ bị dội lại với thông báo lỗi cụ thể. Nếu address bên trái không có 1 user name, tất cả users tại domain cụ thể sẽ được gửi đến địa chỉ bên phải và %1 token sẽ được thay thế bởi username từ original address. Nếu original address có dạng , nó sẽ match một entry cho user+* bên trái và token %2 sẽ được thay bởi original "detail" string.  Tập tin mặc định cho CSDL là /etc/mail/virtusertable. FEATURE(domaintable)  Cho phép chọn viết lại các domain names. Ví dụ, hàng ux4.cso.uiuc.edu students.uiuc.edu sẽ làm tất cả các email cho ux4.cso.uiuc.edu sẽ đựơc xử lý như là students.uiuc.edu.  Tập tin mặc định cho CSDL là /etc/mail/domaintable. FEATURE(mailertable)  mailertable là một CSDL ánh xạ cụ thể các host hoặc domain vào một dạng mailer:host pair. Nó được dùng để chuyển hướng các địa chỉ mail từ cụ thể một host hay domain vào một nơi đến cụ thể dùng một mailer cụ thể (Ví dụ, dùng phquery).  Tập tin mặc định cho CSDL là /etc/mail/mailertable. FEATURE(access_db)  Tính năng này thiết lập CSDL kiểm soát truy cập, nó sẽ cho phép admin có thể kiểm soát users và hosts nào được phép gửi mail vào local machine hay được phép relay mail thông qua local machine. Xem thêm phần Anti-Spam.  Tập tin mặc định cho CSDL là /etc/mail/access. FEATURE(access_db)  Mỗi macro tính năng chấp nhận một tham số mà có thể override the default map type và tên CSDL. Ví dụ, default filename cho mailertable map là /etc/mail/mailertable. Để ép nó dùng dbm map dùng /etc/mailmap, ta phải làm như sau :  FEATURE(mailertable, dbm -o /etc/mailmap)  Chú ý dùng –o trước filename nói cho sendmail biết map là optional, do đó nó sẽ không cho là có lỗi nếu không tồn tại map. Sinh ra sendmail.cf từ .mc File  Trên đây là nhưng thông tin ta viết trong .mc giờ phải sinh ra sendmail.cf.  Lưu .mc trong thư mục cf/cf directory.  Chạy lệnh sau :  m4 ../m4/cf.m4 filename.mc > sendmail.cf  Với quyền root, move sendmail.cf từ thư mục cf/cf vào /etc/mail, chmod 644, và tạo symlink vào nó từ /etc. “Spam“ là gì?  Spam là 1 thành ngữ chỉ các mail thương mại không mong muốn, thường được gửi đến 1 lượng lớn địa chỉ 1 lần. Không ai thích Spam bởi vì:  Hầu hết mọi người không thích nhận mail quảng cáo lẫn với mail thường trong mailbox của mình.  Spammers thường relay một vài thông báo đến hàng nghìn người khác thông qua 1 mail server của ai đó. Việc này sẽ làm tăng tải của mail server, làm giảm băng thông của 1 mạng làm chậm máy tính.  Chương trình sendmail cung cấp 1 vài tính năng để chặn spam Relaying Directive Explanation RELAY_DOMAIN (domainname) Nó sẽ thêm domainname vào danh sách các domains mà sendmail sẽ cho phép relay mail đến. RELAY_DOMAIN_FILE (/full/path/to/file) Nếu ta có 1 lượng lớn domains cần relay đến, bạn có thể dùng chỉ dẫn này đến một tập tin ngoại thay vì dùng nhiều lần RELAY_DOMAIN(). Mặc định tập tin này là /etc/mail/relay- domains, nó chỉ được đọc khi sendmail starts up. Kiểm soát hành vi relay Directive Explanation FEATURE (relay_hosts_only) Thông thường, đầu vào của danh sách relay là domains. Tùy chọn này cho sendmail biết phải xử lý nó như là hosts thay vì domains. Điều này cũng làm ảnh hưởng trong tập tin CSDL kiển soát truy cập. FEATURE (promiscuous_relay) Chỉ dẫn này làm cho sendmail trả về các hành vi truyền thống và relay bất cứ thứ gì có thể . Điều này là hoàn toàn không nên. Kiểm soát hành vi relay (2) Access Control Database  Bắt đầu với version 8.9, sendmail cung cấp sẵn cơ chế kiểm soán linh hoạt. Tính năng này được chọn với macro the FEATURE(access_db).  Để thiết lập database, tạo text file /etc/mail/access với các dòng có dạng sau:  user@ disposition  user@host disposition  domainname disposition  ###.### disposition Access Control Database (2)  Dạng đầu sẽ match dựa trên phần username của địa chỉ người gửi. Dạng 2 sẽ match dựa trên cụ thể user@host. Dạng 3 match dựa trên bất kỳ host nào thuộc domainname. Dạng 4 match bất kỳ host nào trong các số IP  Phần bên trái của mỗi đầu vào có thể là tùy chọn là 1 trong các tiền tố sau To:, From:, or Connect:. Các đầu vào được đánh dấu kiểu này sẽ match với các envelope recipients, envelope senders, hay client host address. Các đầu vào không được đánh dấu với một trong các tags trên sẽ match messages trên bất kỳ envelope recipients, envelope sender, or client host address. disposition  OK: Được phép chấp nhận mail từ host.  RELAY: Cho phép matched được relay thông qua SMTP server. Có nghĩa là OK.  REJECT: Reject sender/recipient.  DISCARD: Bỏ message completely.  ERROR:D.S.N:### bong message : Reject message với dòng báo lỗi cụ thể, với D.S.N là một RFC 1893, ### là RFC 821 tương thích với SMTP response code, và bong message là 1 vài text đi sau nó. Access Control Database Example  From:ME_TOO@aol.com REJECT  LUSER@ REJECT  Connect:spam-king.com ERROR:5.0.0:550 Tui không thích Spam   Connect:goodhost.spam-king.com OK  From:128.174 RELAY  bad-domain.com REJECT Giải thích ví dụ  Nó sẽ reject mail từ ME_TOO@aol.com, nhưng cho phép mail được gửi đến ME_TOO@aol.com. Tất cả các messages với một envelope sender hay envelope recipient ai mà có username trùng với LUSER sẽ bị reject. KHông có hosts nào trong domain spam-king.com ngoại trừ goodhost.spam-king.com sẽ được phép kết nối. Tất cả các hosts trong địa chỉ 128.174.*.* sẽ được cho phép gửi mail ra ngoài, nhưng server này sẽ không relay outside mail ngược lại chúng. Và cuối cùng, tất cả các kết nối từ bad- domain.com sẽ bị từ chối, tất cả các messages với envelope sender hay envelope recipient address từ bad-domain.com sẽ bị rejected. Kiểm tra thông tin Sender  Nhiều spam được gửi trên Internet ngày nay được nguỵ trang với các địa chỉ from không có thật. Để ngăn ngừa loại spam này, Tất cả các phiên bản mới của sendmail làm 2 điều sau với sender addresses. 1. sender address phải có phần username và phần domainname. Mail sẽ không được chấp nhận từ user tuan, nhưng sẽ được chấp nhận từ user tuan@citd.edu.vn . Để tắt tính năng này dùng FEATURE(accept_unqualified_senders). 2. Phần domainname của sender address phải phân giải được bởi DNS. Để tắt tính năng này dùng FEATURE(accept_unresolvable_domains). Chạy sendmail Flag Description -bd "become daemon". Chạy sendmail background và sendmail lắng nghe các kết nối SMTP từ mạng. -bi Để nói cho sendmail khởi động CSDL aliases. Tương đương với lệnh newaliases. -bp In ra mail queue, tương tự lệnh mailq. Chạy sendmail (2) Flag Description -bs Run an SMTP session on stdout and stdin, just as if you'd telnetted to port 25. -bv Verify address mode. This flag should be followed with a list of addresses to verify commonly useful sendmail flags Flag Description -dX Thiết lập giá trị debug X (không bàn trong bài này). -F name_of_sen der Thiết lập full name of sender thàng name_of_sender. Nhiều versions của sendmail sẽ gắn thêm 1 nhãn warning header vào outgoing message khi option này được dùng, bởi vì nó có thể dùng để giả mạo email. commonly useful sendmail flags Flag Description -qinterval Xử lý mail queue. Nếu không có interval, queue sẽ được xử lý chỉ 1 lần (giống lệnh runq). Quãn interval là 1 con số với đơn vị (s:seconds, m:minutes, h:hours, d:days, w:weeks). Ví dụ: -q90m và -q1h30m sẽ nói sendmail xử lý queue sau 1 giờ rưỡi. Giá trị thông thường là từ 20 đến 30 minutes. Starting sendmail  Chạy sendmail trong daemon mode với queue interval, như sau: /usr/sbin/sendmail -bd -q20m  Dùng ps để kiểm tra sendmail có đang chạy không. Sau đó thử gửi nhận 1 vài mail. Kiểm tra syslog để xem sendmail không báo lỗi gì  Nếu mọi việc trôi chảy. Bạn đã install sendmail thành công mỹ mãn  Xin chúc mừng ! Thank you !