Quản trị web - Sendmail

pdf 52 trang vanle 2320
Bạn đang xem 20 trang mẫu của tài liệu "Quản trị web - Sendmail", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfquan_tri_web_sendmail.pdf

Nội dung text: Quản trị web - Sendmail

  1. SENDMAIL
  2. 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
  3. 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
  4. 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
  5. Anti-Spam Định nghĩa "spam" No Default Relaying Access Control Database Better Checking on Sender Information
  6. Chạy sendmail: Các tham số dòng lệnh Khởi động
  7. MUAs, MTAs, and MDAs Part What It Does Examples Mail User MUA là chương trình dùng để elm, pine, Agent đọc và gửi mail. Có thể gọi là Outlook, (MUA) mail client. Eudora Mail MTA làm nhiệm vụ như là "mail sendmail, Transfer router". Nó nhận mail từ MUA lẫn qmail, Agent MTA, căn cứ vào header của exchange (MTA) mail mà nó quyết định chuyển đi server bằng cách nào Mail MDA chấp nhận các mail từ MTA mail.local Delivery và chuyển đi cụ thể đến user procmail Agent (MDA)
  8. 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".
  9. 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.
  10. 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.
  11. 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
  12. 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.
  13. 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!
  14. 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
  15. Xử lý mqueue
  16. 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
  17. 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
  18. 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
  19. 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ợ
  20. Sendmail source code Có thể tải sendmail source code từ : (home site) es/mail/sendmail (local mirror)
  21. 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.
  22. 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
  23. /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.
  24. Bảng so sánh .cf với .mc .cf .mc not totally, but covers Flexible very 99% of situations Understandable no yes Quickly machine- yes no parsed
  25. 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.
  26. .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)
  27. 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.
  28. 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.
  29. 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.
  30. 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
  31. 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.
  32. 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.
  33. 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.
  34. 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.
  35. 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.
  36. 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.
  37. “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
  38. Relaying
  39. Kiểm soát hành vi relay Directive Explanation RELAY_DOMAIN Nó sẽ thêm domainname vào (domainname) danh sách các domains mà sendmail sẽ cho phép relay mail đến. RELAY_DOMAIN_FILE Nếu ta có 1 lượng lớn domains (/full/path/to/file) 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.
  40. Kiểm soát hành vi relay (2) Directive Explanation FEATURE Thông thường, đầu vào của (relay_hosts_only) 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 Chỉ dẫn này làm cho sendmail (promiscuous_relay) 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.
  41. 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
  42. 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.
  43. 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ó.
  44. 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
  45. 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.
  46. 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).
  47. 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.
  48. 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
  49. 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 Thiết lập full name of sender name_of_sen thàng name_of_sender. Nhiều der 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.
  50. 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.
  51. 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 !
  52. Thank you !