2. Tác nhân chuyển thư Mail Transfer Agents (MTAs)
LOOKUP_INCLUDE LOOKUP_LIBS
LOOKUP_LIBS
Các biến này cung cấp một phương tiện bổ sung CFLAGS hiện có và biến
LDFLAGS khi xây dựng Exim. Để hỗ trợ tra cứu LDAP, phải xác định vị trí các tập tin và thư viện LDAP. Ví dụ:
LOOKUP_INCLUDE=-I/opt/ldap/include LOOKUP_LIBS=-L/opt/ldap/lib -llldap -llber
LDAP_LIB_TYPE Biến này định nghĩa thư viện khách hàng LDAP nào được dùng. Giá trị có thể là
UMICHIGAN, OPENLDAP1, OPENLDAP2, NETSCAPE, and SOLARIS. Xây dựng server mail với các phần cài đặt LDAP sau: (trong Local/Makefile của Exim)
## Included in Exim's Local/Makefile to enable LDAP lookup support LOOKUP_LDAP=yes
LOOKUP_INCLUDE=-I /usr/local/include LOOKUP_LIBS=-L/usr/local/lib -lldap -llber LDAP_LIB_TYPE=OPENLDAP2
Xác thực rằng thư viện OpenLDAP có liên kết tới nhị phân exim bằng cách dùng các công cụ, chẳng hạn
ldd(1), để xem các liên kết phụ thuộc:
$ ldd /usr/exim/bin/exim libresolv.so.2 => /lib/libresolv.so.2 (0x40026000) libnsl.so.1 => /lib/libnsl.so.1 (0x40037000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004b000) libdb-4.0.so => /lib/libdb-4.0.so (0x40078000) libldap.so.2 => /usr/local/lib/libldap.so.2 (0x4010f000) liblber.so.2 => /usr/local/lib/liblber.so.2 (0x40146000) libc.so.6 => /lib/libc.so.6 (0x40153000) libdl.so.2 => /lib/libdl.so.2 (0x4027b000)
libssl.so.2 => /lib/libssl.so.2 (0x40290000) libcrypto.so.2 => /lib/libcrypto.so.2 (0x402bd000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Khi các mã nhị phân Exim được xây dựng và cài đặt (ta giả sử rằng vị trí mặc định thư mục cài đặt là
/usr/exim/), bước tiếp theo là quyết định dữ liệu nào cần lấy từ thư mục. Lược đồ sẽ dùng loạt thuộc tính
uid (posixAccount) như là khóa và loại thuộc tính mail (inetOrgPerson) như là giá trị kết quả.
as the resulting value. Tương tự như Postfix, tất cả mail tới người dùng địa phương tên là guest1 sẽ được chuyển tiếp tới địa chỉ 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 uidNumber: 783 gidNumber: 1000 homeDirectory: /home/guest1 gecos: Guest Account sn: Account
mail: jerry@plainjoe.org
Tìm kiếm Exim được định nghĩa bằng cách sử dụng từ khóa data. Cú pháp chung của bảng tra cứu là:
data = ${lookup db_type {db_search_parameters}}
Truy vấn LDAP có thể dùng db_type: ldap
Chỉ định rằng tìm kiếm chỉ trả về một giá trị duy nhất và Exim xem là lỗi nếu như trả về nhiều giá trị.
ldapdn
Xác định rằng việc tìm kiếm sẽ chỉ khớp với một mục trong thư mục và trả về giá trị của DN của mục đó.
ldapm
Có thể trả về nhiều giá trị.
Để thông tin cho Exim rằng dữ liệu địa phương alias nên được lấy từ thư mục LDAP, bạn phải cấu hình một bộ định tuyến chuyển hướng (redirect) thích hợp. Để làm vậy, bạn tạo ra mục ldap_aliases trong
/usr/exim/configure:
## Alias Director, which retrieves data from an LDAP director. The name ## "ldap_aliases" has been arbitrarily chosen.
ldap_aliases: driver = redirect data = ${lookup ldap \ { ldap://ldap.plainjoe.org/\ ou=people,dc=plainjoe,dc=org\ ?mail?sub?(uid=${local_part})} }
Từ khóa driver được dùng để định nghĩa loại định tuyến được thực hiện. Ngược lại so với cả Sendmail và Postfix, Exim dùng LDAP URL để định nghĩa host, port, search base, giá trị thuộc tính được lấy (retrieved attribute values), scope, và filter. Dòng tiếp theo, ký tự (\) được dùng để làm dòng dễ đọc hơn.
{local_part} của jdoe@garion.plainjoe.org là jdoe). Do đó bạn có thể đọc các đặc tả truy vấn như sau:
“Dùng server LDAP tại ldap.plainjoe.org (port mặc định của tcp/389), thực hiện tìm kiếm chuỗi con của thuộc tính uid, tìm kiếm phần địa phương của địa chỉ email, và trả về giá trị của thuộc tính mail. Thực hiện tìm kiếm với cơ sở ou=people,dc=plainjoe,dc=org.”
Với việc dùng mode kiểm tra địa chỉ của Exim, bạn có thể xác minh rằng mail gởi tới địa chỉ
guest1@garion sẽ thực sự được chuyển tiếp tới jerry@plainjoe.org:
root# exim -v -bt guest1@garion jerry@plainjoe.org
<-- guest1@garion.plainjoe.org deliver to jerry@plainjoe.org
router = dnslookup, transport = remote_smtp host plainjoe.org [xxx.xxx.xxx.xxx]
Các tập tin đăng nhập cho slapd (loglevel256) cho thấy việc tra cứu (uid=guest1) được thực hiện như mong đợi:
Aug 16 17:05:09 ldap slapd[3574]: conn=36 op=1 SRCH
base="ou=people,dc=plainjoe,dc=org" scope=2 filter="(uid=guest1)"
Định dạng LDAP URL không cho phép định nghĩa các thông tin được dùng khi kết nối tới server. Hành vi mặc định là thực hiện một liên kết vô danh và không yêu cầu bất kỳ giới hạn của kết quả tìm kiếm. Exim có thể yêu cầu một kết nối đơn giản bằng cách dùng các thông tin quy định bởi tùy chọn user và
pass
Bảng 7-9 liệt kê một vài thông số có thể có trong truy vấn LDAP như là option=value để chỉ định thông tin chứng thực như là giới hạn tìm kiếm:
Table 7-9. Additional Exim LDAP query parameters
Parameter Description
user DN được dùng khi kết nối tới server thư mục.
pass Mật khẩu trắng được sử dụng khi kết nối tới server thư mục với user không rỗng size Giới hạn trên của số các mục được trả về từ việc tra cứu.
time Giới hạn trên, tín bằng giây của việc tra cứu.
To use these additional parameters when performing an LDAP lookup, they must preceed the URL in the
data string. For example, to bind to the LDAP server as the user cn=MailAdmin,dc=plainjoe,dc=org using the password secret, you would define the following query:
data = ${lookup ldap \
{ user="cn=Mail Admin,dc=plainjoe,dc=org"\ pass=secret \
ldaps://ldap.plainjoe.org/\ ou=people,dc=plainjoe,dc=org\ ?mail?sub?(uid=${local_part})} }
Vì Exim dùng kết nối LDAPv2, nên nó không thể tận dụng các điểm mạnh của chứng thực SASL hoặc mở rộng StartTLS LDAv3. Tuy nhiên, nó có thể hiểu URL dùng ldaps://. Điều này quan trọng khi gởi
một DN và password tới server thư mục trong dạng trắng.