Chúng tôi xin tiếp tục hướng dẫn các bạn cách thiết lập hệ thống mail server đầy đủ tính năng, an toàn bảo mật, dễ dàng mở rộng và thay thế một số chức năng khác nếu cần.
MX server
Tại bước này, chúng ta sẽ tiến hành ghép các tính năng bảo mật. Cũng tại đây, MX server sẽ đảm nhiệm chức năng quét virus, mặt khác cần phải có repository volatile trong file /etc/apt/sources.list.d/volatile.list:
deb http://volatile.debian.org/debian-volatile lenny/volatile main
và backport dành cho các phiên bản mới hơn của dovecot trong file /etc/apt/sources.list.d/backports.list:
deb http://backports.debian.org/debian-backports lenny-backports main
Cập nhật cơ sở dữ liệu cho apt:
sudo apt-get update
và cài đặt các gói yêu cầu như bình thường:
sudo apt-get install clamav-daemon clamav-freshclam exim4-daemon-heavy libmail-spf-query-perl
sudo apt-get -t lenny-backports install dovecot-imapd dovecot-pop3d
Tiếp tục với quá trình cài đặt exim4 tương tự như với server relay. File /etc/exim4/conf.d/main/04_mailMEOmacrodefs khởi tạo các macro để chúng ta sử dụng trong các file config khác:
ldap_default_servers = ldap.middle.earth
# mailMEO macros definitions
.ifndef MAILMEO_DOMAINROOT
MAILMEO_DOMAINROOT = ou=domains,dc=middle,dc=earth
.endif
.ifndef MAILMEO_MAINDOMAIN
MAILMEO_MAINDOMAIN = ${lookup ldap {USER=userid=exim,dc=middle,dc=earth PASS=eximmta ldap:///MAILMEO_DOMAINROOT?dc?one?(associatedDomain=$domain)}}
.endif
domainlist mailMEO_domains = <\n ${sg{${lookup ldapm {\
USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///MAILMEO_DOMAINROOT?associatedDomain?one?\
(&(objectClass=inetLocalMailRecipient)(objectClass=dNSDomain))}}}{,}{\\n}}
.ifndef CHECK_RCPT_IP_DNSBLS
CHECK_RCPT_IP_DNSBLS = cbl.abuseat.org:dnsbl.njabl.org:sbl.spamhaus.org
.endif
.ifndef CHECK_RCPT_SPF
CHECK_RCPT_SPF = true
.endif
CHECK_RCPT_SPF kích hoạt SPF để kiểm tra trong giao đoạn SMTP, từ chối mail để kiểm tra mail nếu spf thất bại. Mặt khác, CHECK_RCPT_IP_DNSBL cũng kích hoạt chức năng DNSBL lookup. Mở file /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt và thay đổi lại các tham số sau:
.ifdef CHECK_RCPT_IP_DNSBLS
warn
message = X-Warning: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text)
log_message = $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text)
dnslists = CHECK_RCPT_IP_DNSBLS
.endif
thành:
.ifdef CHECK_RCPT_IP_DNSBLS
deny
message = Access denied: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text)
dnslists = CHECK_RCPT_IP_DNSBLS
.endif
Và chỉ định exim chấp nhận các giá trị domain được khởi tạo bởi mailMEO_domains trong file /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt. Hãy thay đổi:
require
message = relay not permitted
domains = +local_domains : +relay_to_domains
thành:
require
message = relay not permitted
domains = +local_domains : +relay_to_domains : +mailMEO_domains
Kích hoạt chức năng antivirus tương tự với server relay trong file /etc/exim4/conf.d/main/02_exim4-config_options:
av_scanner = clamd:/var/run/clamav/clamd.ctl
Bỏ dấu chú thích của 3 dòng trong file /etc/exim4/conf.d/acl/40_exim4-config_check_data:
deny
malware = *
message = This message was detected as possible malware ($malware_name).
Và gán các tài khoản người dùng clamav vào nhóm Debian-exim:
sudo adduser clamav Debian-exim
sudo /etc/init.d/clamav-daemon restart
Mục đích chính của MX server là định hướng toàn bộ email tới MX server mailstore – nơi mailbox được lưu trữ. Trong Exim, quá trình định hướng này có thể được thực hiện bằng cách sử dụng manualroute driver, có khả năng gửi email qua các host remote dùng SMTP. Tại đây, chúng ta cần 2 trình điều khiển – driver để quản lý, nắm giữ các tài khoản người dùng, alias và forwarder trên 1 phía và tất cả các tài khoản catchall tại phía bên kia.
Tất cả đều có trong file /etc/exim4/conf.d/router/075_mailMEOroutes:
mailMEO_routes:
debug_print = "R: $local_part@$domain routed with mailMEO_routes to $0"
driver = manualroute
domains = +mailMEO_domains
transport = remote_smtp
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)(mailLocalAddress=$local_part@$domain))}\
}}{([\\w\\-\\.]+)@([\\w\\-]+\\.)([\\w\\-]+)}{\$1}}\
, ${lookup ldap \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?uid?one?\
(uid=$local_part)}}\
}{,}{\\n}}
route_data = ${lookup ldap \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?mailHost?base?}}
host_find_failed = defer
same_domain_copy_routing = yes
mailMEO_catchall_routes:
debug_print = "R: $local_part@$domain routed with mailMEO_catchall_route to $0"
driver = manualroute
domains = <\n ${sg{\
${lookup ldapm {\
USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///MAILMEO_DOMAINROOT?associatedDomain?one?\
(&(objectClass=inetLocalMailRecipient)(objectClass=posixAccount)(objectClass=dNSDomain))}}\
}{,}{\\n}}
transport = remote_smtp
route_data = ${lookup ldap \
{USER=userid=exim,dc=middle,dc=earth PASS=eximmta \
ldap:///dc=MAILMEO_MAINDOMAIN,MAILMEO_DOMAINROOT?mailHost?base?}}
host_find_failed = defer
same_domain_copy_routing = yes
Quá trình này có thể được giải thích ngắn gọn như sau: bộ router này sẽ làm nhiệm vụ kiểm tra và xác nhận domain trước tiên được lưu trữ trên ldap, sau đó kiểm tra lại xem các địa chỉ email đó có sẵn hay không, và yêu cầu hostname của mail server nơi chứa mailbox.
Sau đó, hãy khởi động lại exim và tiếp tục với dovecot trong phần sau:
sudo /etc/init.d/exim4 restart