2. Tác nhân chuyển thư Mail Transfer Agents (MTAs)
2.1.3 Định tuyến mail dùng LDAP
Chức năng định tuyến mail LDAP của Sendmail cĩ thể được mơ tả như là một LDAP virtusertable. Đây là một dạng miền xác định của alsiasing, hỗ trợ trên miền ảo. Nĩ cung cấp quy tắc để viết lại địa chỉ nhận hoặc tái định tuyến mail tới các host thích hợp. Dịng sau đây sẽ định tuyến mail cĩ địa chỉ đến joe@foo.com đến host somehost.foo.com:
joe@foo.com somehost.foo.com
Dưới sự cấu hình mặc định của nĩ, ldap_routing sử dụng inetLocalMailRecipient lớp đối tượng phụ trợ được định nghĩa trong Internet-Draft draft-lachman-laser-ldap-mail-routing-xx.txt. Một phiên bản của bản nháp này được bao gồm với nguồn phân phối OpenLDAP. Khơng cĩ một yêu cầu nào cho lớp đối tượng
mailLocalAddress mailHost
mailRoutingAddress
OpenLDAP chứa định nghĩa của đối inetLocalMailRecipient và liên kết các thuộc tính trong misc.schema. Bạn phải bao gồm file này trong slapd.conf và khởi động lại OpenLDAP trước khi bạn cĩ thể hỗ trợ tính năng ldap_routing của Sendmail.
## Support the inetLocalMailRecipient object. include /usr/local/etc/openldap/schema/misc.schema
Để kích hoạt định tuyến mail LDAP, ta thêm các định nghĩa tính năng sau vào sendmail.mc:
FEATURE(`ldap_routing´)
Để định nghĩa miền định tuyến đơn, Sendmail cung cấp LDAPROUTE_DOMAIN m4 macro. Việc cấu hình cho server của bạn địi hỏi bạn thêm dịng này vào file nguồn sendmail.mc
LDAPROUTE_DOMAIN(`plainjoe.org´)
Như đã đề cập trước đây, ldap_routing dùng lớp đối tượng inetLocalMailRecipient. Nĩ cĩ thể dùng một lược đồ thay thế bằng cách xác định tính năng ldap_routing:
FEATURE(`ldap_routing´,mailHost,mailRoutingAddress,bounce,detail)
mailHost và mailRoutingAddress là dịng cấu hình kết nối LDAP; mặc định là:
ldap -1 -T TMPF -v mailHost -k (&(objectClass=inetLocalMailRecipient) (mailLocalAddress=%0)) Nĩ cũng cĩ thể cĩ mặc định là ldap -1 -T TMPF -v mailRoutingAddress -k (&(objectClass=inetLocalMailRecipient) (mailLocalAddress=%0))
Lọc tìm kiếm là thuộc tính kết quả cĩ thể được định nghĩa lại nếu được yêu cầu. Cả thơng số bounce và detail xác định hành động nếu việc tra cứu khơng trả về một thơng tin định tuyến nào. Hành vi mặc định
là chấp nhận địa chỉ khơng xác định được bởi tìm kiếm LDAP.
Tìm kiếm mặc định được dùng bởi ldap_routing khơng định nghĩa server LDAP, cũng như khơng cĩ chứa hậu tố tìm kiếm. Tùy chọn confLDAP_DEFAULT_SPEC cĩ thể được dùng để chỉ định mặc định cho tất cả các truy vấp LDAP của Sendmail (map, aliase, lớp, định tuyến mail).
define(`confLDAP_DEFAULT_SPEC´, `-h ldap.plainjoe.org -b ou=people,dc=plainjoe,dc=org´)dnl
Điều này là hồn tồn tương thích với cấu hình được sử dụng để laays các mail aliase từ thư mục. Tùy chọn ALIAS_FILE sử dụng hậu tố cơ bản của nĩ (-b)
Với 3 thuộc tính tùy chọn trong lớp đối tượng inetLocalMailRecipient, Sendmail cĩ 6 trường hợp định tuyến.
Table 7-5. Possible results from an ldap_routing search mailHost value
mailRoutingAddress value Result
A local host Exists
A local host Does not exist
Mail được chuyển cho địa chỉ ban đầu của host địa phương A remote host
Exists
Mail được chuyển tới mailRoutingAddress tại mailHost. A remote host
Does not exist
Mail được chuyển tiếp tới địa chỉ ban đầu ở mailHost. D
es not exist Exists
Người nhận được viết lại đến mailRoutingAddress và chuyển cho host địa phương. Does not exist
Does not exist
Mail được gởi tới tới địa chỉ ban đầu hoặc bị trả lại.
Ở đây bạn mở rộng mục người dùng ban đầu trong cây con ou=people. Bạn cĩ thể tạo ra một ou mới
ou=sendmail. Tuy nhiên, thêm thơng tin định tuyến mail cho một mục của user nghĩa là khi tài khoản của
user đã bị xĩa, thơng tin định tuyến mail cũng bị xĩa theo.
Ở đây, thuộc tính mailLocalAddress và mailHost làm cho địa chỉ đến kcarter@plainjoe.org bị chuyển tiếp tới host được chỉ định bởi mail.engr.plainjoe.org:
dn: uid=kristi,ou=people,dc=plainjoe,dc=org objectclass: inetOrgPerson objectclass: posixAccount objectclass: inetLocalMailRecipient cn: Kristi Carter sn: Carter mail: kcarter@plainjoe.org mailLocalAddress: kcarter@plainjoe.org mailHost: mail.engr.plainjoe.org
< . . . remaining attributes not shown . . . >
Ví dụ sau đây thêm thuộc tính mailRoutingAddress. Với thuộc tính này, tất cả các mail tới địa chỉ
kcarter@plainjoe.org được chuyển tiếp tới host được đặt tên bởi MX record cho mail.engr.plainjoe.org,
nhưng chỉ sau khi địa chỉ người nhận được viết lại đến kristi@engr.plainjoe.org:
dn: uid=kristi,ou=people,dc=plainjoe,dc=org objectclass: inetOrgPerson objectclass: posixAccount objectclass: inetLocalMailRecipient cn: Kristi Carter sn: Carter mail: kcarter@plainjoe.org mailLocalAddress: kcarter@plainjoe.org mailHost: mail.engr.plainjoe.org mailRoutingAddress: kristi@engr.plainjoe.org
Các cơng việc viết lại này cĩ thể được xác nhận bằng cách thiết lập chế độ kiểm tra của Sendmail:
$ /usr/sbin/sendmail -bt > /parse kcarter@plainjoe.org
< . . . intervening ruleset output deleted . . . > mailer relay, host mail.engr.plainjoe.org, user kristi@engr.plainjoe.org
Đầu ra này chỉ rằng mail nhận được ở kcarter@plainjoe.org sẽ được chuyển tiếp tới host mail.engr.plainjoe.org sau khi viết lại địa chỉ người nhận là kristi@engr.plainjoe.org.
Thuộc tính mailLocalAddress cĩ thể được sử dụng để chỉ định rằng tất cả mail cho 1 domain phải được chuyển tiếp cho host khác. Đoạn code sau sẽ chuyển tất cả các mail đến miền @plainjoe.org tới host hq.plainjoe.org:
dn: o=plainjoe.org,ou=people,dc=plainjoe,dc=org objectclass: organization
objectclass: inetLocalMailRecipient o: plainjoe.org
description: plainjoe.org mail domain mailLocalAddress: @plainjoe.org mailHost: hq.plainjoe.org
2.2Postfix
Tiếp theo ta sẽ nĩi tới Postfix. MTA này cĩ thể thay thế Sendmail vì nĩ cĩ:
• Tính năng và interface tương thích với Sendmail.
• Việc cấu hình đơn giản.
• Bảo mật tốt hơn.
Giả sử rằng thư viện khách hàng OpenLDAP 2 đã được cài đặt trong thư mục /usr/local/lib/, đoạn lệnh
sau sẽ refresh tất cả:
$ cd postfix-1.1.2/ $ make tidy
$ make makefiles CCARGS="-I/usr/local/include -DHAS_LDAP" \ > AUXLIBS="-L/usr/local/lib -lldap -llber"
$ make
$ /bin/su -c "make install"
Postfix cĩ 6 bảng, trong đĩ cĩ thể được lưu trữ tại bất kỳ phương tiện thơng tin báo cáo bởi postconf -m Bảng 7-6 giới thiệu mỗi bảng của postfix và chỉ ra chương trình lõi nào hoạt động như khách hàng chính của bảng.
Table 7-6. Postfix tables and associated core programs
Table Description programCore
Access Cung cấp thơng tin về message nào được chấp nhận hoặc từ chối dựa trên người gửi, host, network, v.v.. smtpd
phương.
Canonical Cung cấp thơng tin về địa chỉ địa phương hay khơng. cleanup
Relocated Cung cấp thơng tin về “người dùng đã chuyển sang chỗ mới” trong thư trả về. qmgr
Transport Cung cấp thơng tin về cách gửi và host chuyển tiếp cho domain. trivial-rewrite Virtual Cung cấp thơng tin được sử dụng để chuyển hướng người dùng địa phương
hoặc khơng địa phương hoặc domain. cleanup
Phần cịn lại chỉ làm cách nào để cấu hình một server Postfix để lấy aliases địa phương thơng qua truy vấn LDAP. Chúng ta sẽ bắt đầu thảo luận từ tập tin cấu hình sau đây, main.cf.
## /etc/postfix/main.cf
## Postfix configuration file for the plainjoe.org SMTP server. ## Written by <jerry@plainjoe.org> ## Host/domain information myhostname = garion.plainjoe.org mydomain = plainjoe.org myorigin = plainjoe.org ## Who is local?
mydestination = localhost $myhostname
## Who do we accept mail relaying from? mynetworks = 192.168.1.0/24 127.0.0.0/8 ## Program locations command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix queue_directory = /var/spool/postfix mail_owner = postfix
## Sendmail-compatible mail spool directory mail_spool_directory = /var/spool/mail
Như đã nĩi ở trên, một mục aliase sẽ nối một username địa phương tới một địa chỉ email, địa chỉ này cĩ thể là một user khác hoặc là một user của một hệ thống khác. Trong lược đồ LDAP của bạn, một user địa phương được đại diện bởi thuộc tính uid của lớp đối tượng posixAccount. Mục aliase được đại diện bởi thuộc tính mail của lớp đối tượng inetOrgPerson.
Đây là một nội dung LDIF đặc trưng cho một tài khoản user cĩ một email aliase. Mail cho tài khoản này (tải khoản khách) được chuyển tiếp tới miền jerry@plainjoe.org:
## User account including a mail alias dn: uid=guest1,ou=People,dc=plainjoe,dc=org uid: guest1 cn: Guest Account objectClass: posixAccount objectClass: inetOrgPerson userPassword: {CRYPT}Fd8nE1RtCh5G6 loginShell: /bin/bash
gidNumber: 1000
homeDirectory: /home/guest1 gecos: Guest Account sn: Account
mail: jerry@plainjoe.org
Để thơng tin cho Postfix daemons rằng nĩ phải đọc các aliase kết nối từ thư mục LDAP, thêm dịng sau vào main.cf:
alias_maps = ldap:ldapalias
Sau khi chỉ định rằng Postfix phải tra cứu thơng tin aliase từ thư mục bạn phải định nghĩa vài thơng số để chỉ Postfix cách tìm kiếm trong thư mục. Cài đặt phổ biến là tên server LDAP (server_host), cơ sở tìm
kiếm (search_base), the vùng tìm kiếm (scope), lọc tìm kiếm (query_filter), và kết quả giá trị thuộc tính trả về (result_attribute). Thêm các định nghĩa này vào main.cf:
## Parameters for LDAP alias map ldapalias_server_host = localhost
ldapalias_search_base = ou=people,dc=plainjoe,dc=org ldapalias_scope = sub
ldapalias_query_filter = (uid=%s) ldapalias_result_attribute = mail
Bạn cĩ thể kiểm tra bảng tra cứu aliase bằng cách dùng postmap(1) dùng để xác minh rằng mail gởi tới user guest1 sẽ được chuyển tiếp tới tài khoản mail jerry@plainjoe.org:
$ postmap -q guest1 ldap:ldapalias jerry@plainjoe.org
Đoạn trích sau chỉ ra rằng message sẽ được chuyển tới guest1@garion.plainjoe.org. Tuy nhiên, message sau đĩ sẽ được chuyển đến jerry@plainjoe.org, như đã được chỉ định bởi giá trị của thuộc tính mail cho tài khoản guest1:
Return-Path: <root@plainjoe.org> Delivered-To: jerry@plainjoe.org
Received: from XXX.XXX.XXX.XXX ([ XXX.XXX.XXX.XXX ] helo=garion.plainjoe.org) by gamma.jumpserver.net with esmtp (Exim 3.36 #1)
id 18M1Sc-0003tj-00
for jerry@plainjoe.org; Wed, 11 Dec 2002 01:39:14 -0600 Received: by garion.plainjoe.org (Postfix)
id 15CA23FB62; Tue, 10 Dec 2002 11:40:23 -0600 (CST) Delivered-To: guest1@garion.plainjoe.org
Received: by garion.plainjoe.org (Postfix, from userid 0) id F042E3FB69; Tue, 10 Dec 2002 12:40:22 -0500 (EST) To: guest1@garion.plainjoe.org
Subject: testing Postfix/LDAP lookups
Message-Id: <20021210174022.F042E3FB69@garion.plainjoe.org> Date: Tue, 10 Dec 2002 12:40:22 -0500 (EST)
From: root@plainjoe.org (root)
Table 7-7 liệt kê danh sách đầy đr của tất cả thơng số Postfix LDAP, và cả giá trị mặc định của chúng.
Table 7-7. Postfix LDAP parameters Parameter
Default Description
yes
Xác định yêu cầu ràng buộc LDAP được ban hành trước khi thực hiện truy vấn. Cĩ thể là yes or no.
bind_dn
""
DN được
dùng khi kết nối tới thư mục LDAP
bind_pw
""
Mật khẩu trắng dùng khi kết nối tới thư mục bằng cách dùng giá trị bind_dn.
cache no
Quyết định cho phép bộ nhớ đệm của máy phía khách hàng được enable của kết quả tìm kiếm LDAP.
cache_expiry
30 seconds
Xác định thời gian chờ bộ nhớ cache hết hạn, khi cache=yes.
cache_size
32 KB
Xác định kích cỡ của LDAP cache, khi cache=yes.
dereference 0
Điều khiển Postfix cĩ tham chiếu aliase khi tìm thư mục hay khơng, giá trị 0 (khơng bao giờ), 1(khi tìm), 2(khi tìm được đối tượng), 3 (luơn luơn).
domain none
Một danh sách (cĩ thể là bảng tra cứu) của tên miền bị hạn chế khi thực hiện truy vấn.
query_filter
(mailacceptinggeneralid=%s)
Bộ lọc tìm kiếm.
result_attribute maildrop
Giá trị thuộc tính, kết quả của query_filter.
scope sub
Vùng tìm kiếm sub, base, or one.
search_base none
DN hậu tố tìm kiếm cơ bản truy vấn
server_host localhost
Hostname của server LDAP mà truy vấn phải gửi. Giá trị định dạng: hostname[:port][,hostname[:port], . . . ].
server_port 389
none
Cho phép admin xác định thuộc tính trả về DN từ tìm kiếm. Nếu giá trị này được trình bày trong phần trả về của tìm kiếm, một truy vấn khác được ban hành dùng các DN trả về như là search_base.
timeout
10 seconds
Thời gian tối đa tìm kiếm
2.3Exim.
Như Sendmail và Postfix, Exim hỗ trợ rất nhiều loại tập tin và cơ sở dữ liệu tra cứu, như là mySQL, Berkeley DBM, và LDAP. Trong định dạng mặc định của nĩ, Exim Makefile chỉ hỗ trợ việc tìm kiếm tuyến tính trong tập tin (lsearch) và cơ sở dữ liệu tra cứu (dbm). Để kích hoạt tra cứu LDAP, phải set
Table 7-8. Exim LDAP-related Makefile variables
Variable Description
LOOKUP_LDAP Biến này phải được set thành yes để bao gồm hỗ trợ tra cứu LDAP trong nhị phân
exim