Định tuyến mail dùng LDAP

Một phần của tài liệu Đồ án tin học nghiên cứu về giao thức LDAP (Trang 97)

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)

mailHostmailRoutingAddress 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

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à hoàn toà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

Một phần của tài liệu Đồ án tin học nghiên cứu về giao thức LDAP (Trang 97)