Aliases
Đây là địa chỉ thứ 2 dành cho mailbox, chúng phải thuộc về cùng 1 domain cũng như địa chỉ đến. 1 Alias có thể được gán đến nhiều mailbox, nếu trong trường hợp tất cả các mailbox nhận email để gửi tới các địa chỉ có sẵn. Trong mục dữ liệu mẫu, baggins@middle.earth là 1 alias của frodo@middle.earth và shire@middle.earth là alias của cả 2, frodo@middle.earth và sam@middle.earth.
Để gán các alias vào mailbox có sẵn, các bạn chỉ cần thêm thuộc tính mailLocalAddress với địa chỉ mail của alias đó. File /etc/exim4/conf.d/router/070_mailMEO_alias đảm nhận nhiệm vụ định tuyến cho những địa chỉ như mailMEO_alias:
mailMEO_alias:
driver = redirect
debug_print = "R: locally aliased from $local_part@$domain"
domains = +mailMEO_domains
qualify_domain = MAILMEO_MAINDOMAIN
check_ancestor = true
local_parts = <\n ${sg{\
${sg{\
${lookup ldapm \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?mailLocalAddress?one?\
(&(objectClass=inetLocalMailRecipient)(objectClass=inetOrgPerson)(mailLocalAddress=$local_part@$domain))}\
}}{([\\w\\-\\.]+)@([\\w\\-]+\\.)([\\w\\-]+)}{\$1}}\
}{,}{\\n}}
data = ${sg{\
${lookup ldapm \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?uid?one?\
(&(objectClass=inetLocalMailRecipient)(objectClass=inetOrgPerson)(mailLocalAddress=$local_part@$domain))}}\
}{([\\w\-\.]+)}{\$1@$domain}\
}
Chuyển tiếp – Forwarder
Quá trình chuyển tiếp này khá giống với alias ngoại trừ việc chúng có thể luân chuyển email đến các địa chỉ không thuộc trên domain hoặc thậm chí là những địa chỉ remote. Để tạo mail forward, hãy tạo LDAP entry bên dưới domain entry theo mẫu sau:
dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: %FWD_LOCALPART%
mail: %DEST_MAILADDR%
mailHost: %IPADDR_OF_MAILSTORE%
mailRoutingAddress: %DEST_MAILADDR%
objectClass: inetMailForwarder
objectClass: inetOrgPerson
objectClass: top
sn: Alias address
uid: %FWD_LOCALPART%
File /etc/exim4/conf.d/router/071_mailMEO_fwd cũng thuộc dạng địa chỉ này:
mailMEO_fwd_routes:
driver = redirect
debug_print = "R: Forwarded from $local_part@$domain"
domains = +mailMEO_domains
qualify_domain = MAILMEO_MAINDOMAIN
check_ancestor = true
forbid_pipe = true
forbid_file = true
forbid_exim_filter = true
local_parts = ${lookup ldap \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?uid?one?\
(&(uid=$local_part)(objectClass=inetOrgPerson)(objectClass=inetMailForwarder))}\
}
data = ${lookup ldap \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?mailRoutingAddress?one?\
(&(uid=$local_part)(objectClass=inetOrgPerson)(objectClass=inetMailForwarder))}\
}
Catchall
Có thể hiểu nôm na đây là 1 hòm thư rác phân loại, có thể nhận tất cả các email được gửi tới các domain khác nhau bất kể đường dẫn local là gì. Người sử dụng có thể hòa nhập mailbox bình thường hoặc mailbox catchall này với nhau (dĩ nhiên là chỉ được sử dụng 1 catchall trên 1 domain mà thôi). Và để gán các địa chỉ catchall tới domain, hãy ghép posixAccount tới domain entry (và tất cả các thuộc tính cần thiết) như mailLocalAddress và mailQuota:
objectClass: posixAccount
mailLocalAddress: %CATCHALL_ADDR%
gidNumber: %gID%
homeDirectory: %MAILDIR_PATH%
uid: %CATCHALL_LOCALPART%
uidNumber: %UID%
userPassword:: %HASH_PASS_STR%
mailQuota: %KB%
File /etc/exim4/conf.d/router/079_mailMEO_catchall sẽ khởi tạo giá trị định tuyến cho catchall:
mailMEO_catchall:
driver = redirect
debug_print = "R: domain catchall for $domain <- $local_part"
domains = <\n ${sg{${lookup ldapm {\
USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///ou=domains,dc=middle,dc=earth?associatedDomain?one?\
(&(objectClass=inetLocalMailRecipient)(objectClass=posixAccount)(objectClass=dNSDomain)(mailHost=$primary_hostname))}}}{,}{\\n}}
qualify_domain = MAILMEO_MAINDOMAIN
data = ${lookup ldap \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?uid?base?}\
}
Các tài khoản người sử dụng ảo
Để tạo được tài khoản này, các bạn hãy ghép LDAP entry bên dưới domain theo mẫu sau:
dn: uid=%LOCALPART%,dc=%DOMAIN%,ou=domains,dc=middle,dc=earth
cn: %SOMETHING_DESCRIPTIVE%
displayName: %SOMETHING_DESCRIPTIVE%
gidNumber: %GID%
givenName: %SOMETHING_DESCRIPTIVE%
homeDirectory: %MAILDIR_PATH%
mail: %EMAIL_ADDR%
mailHost: %IPADDR_OF_MAILSTORE%
mailQuota: %KB%
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: %SOMETHING_DESCRIPTIVE%
uidNumber: %UID
uid: %LOCALPART%
userPassword:: %HASH_PASS_STR%
mailLocalAddress: %EMAIL_ADDR%
Nhưng hãy lưu ý rằng các địa chỉ email chính phải được thiết lập theo tính năng mailLocalAddress giống như của alias. Quá trình định tuyến được thực hiện dựa vào file /etc/exim4/conf.d/router/077_mailMEO_users:
mailMEO_virtual:
driver = accept
debug_print = "R: mailMEO virtual for $local_part@$domain"
domains = +mailMEO_domains
local_parts = ${lookup ldap\
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?uid?sub?\
(&(objectClass=inetLocalMailRecipient)(uid=$local_part))}\
}
transport = mailMEO_virtual_delivery
Spamassassin
Chức năng này được sử dụng để kiểm tra email, ngăn chặn spam bằng spamassassin daemon:
spamcheck_router:
no_verify
condition = ${if and { {<{$message_size}{90K}} {!def:header_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}}} {1}{0}}
driver = accept
transport = spamcheck
Quá trình kiểm tra này được áp dụng với tất cả các email nhận diện trong spamassassin daemon. Và SA transport được thiết lập trong file /etc/exim4/conf.d/transport/50_mailMEO_spamcheck:
spamcheck:
driver = pipe
command = /usr/sbin/exim4 -oMr spam-scanned -bS
use_bsmtp = true
transport_filter = /usr/bin/spamc -u $local_part@$domain
home_directory = "/dev/shm"
current_directory = "/dev/shm"
# must use a privileged user to set $received_protocol on the way back in!
user = mail
group = mail
log_output = true
return_fail_output = true
return_path_add = false
message_prefix =
message_suffix =
Và bây giờ là các thao tác điều chỉnh SpamAssassin, hầu hết các file cấu hình đều được lưu trữ trong /etc/spamassassin/local.cf:
user_scores_dsn ldap://ldap.middle.earth/ou=domains,dc=middle,dc=earth?spamassassinUserPrefs?sub?(&(mailLocalAddress=__USERNAME__)(objectClass=inetLocalMailRecipient))
user_scores_ldap_username uid=exim,dc=middle,dc=earth
user_scores_ldap_password eximmta
clear_headers
add_header all Flag _YESNO_
add_header spam Result _SCORE_/_REQD_ (_TESTS_)
Với việc thay đổi thiết lập này, bạn có thể phân loại ra cho từng tài khoản, chỉ việc áp dụng thuộc tính spamassassinUserPrefs với form mẫu item value. Bên cạnh đó, chúng ta cần kích hoạt thêm spamd tại /etc/default/spamassassin:
ENABLED=1
OPTIONS="-x --ldap-config -u nobody --max-children 5"
và khởi động tính năng này:
sudo /etc/init.d/spamassassin restart
Khởi động lại exim:
sudo /etc/init.d/exim4 restart
Tại thời điểm này, toàn bộ email chưa thể gửi đến mailstore (cần điều chỉnh lại dovecot), và hầu hết các chức năng bảo mật đều chưa được kích hoạt.