Chủ Nhật, 17 tháng 10, 2010

Thiết lập Mail Server trên nền tảng Debian

Trong bài viết sau, chúng tôi sẽ 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. Mô hình này cung cấp các dịch vụ host ảo dành cho mailbox với nhiều định dạng khác nhau, chế độ lọc quota và server - side, alias domain, alias address, forward address và catchall address. Quá trình chuyển tiếp được đảm bảo an ninh với giao thức STARTTLS và SMTP-AUTH. Các email nhận sẽ được kiểm soát chặt chẽ bằng những bộ lọc virus, spam, mã độc đồng thời nhanh chóng loại bỏ các SPF policy và DNSBL.


Thiết lập Mail Server trên  nền tảng Debian

Và toàn bộ quá trình này sẽ được trải qua 3 server chính:

- 1 server MX, tại đây sẽ tập trung toàn bộ các tính năng bảo mật (faramir.middle.earth)

- 1 giao thức chuyển tiếp SMTP, cho phép người dùng gửi email ra bên ngoài (ectelion.middle.earth)

- 1 server Mailstore dùng để chứa toàn bộ dữ liệu của mailbox (denetor.middle.earth)

Tất nhiên, bạn có thể gán thêm nhiều bản ghi MX tùy thích sử dụng DNS MX tới domain, các dịch vụ chuyển tiếp bằng DNS round-robin, chức năng lưu trữ, chuyển tiếp và phân nhánh email... sẽ được đề cập đầy đủ trong bài viết.

Tất cả các thao tác đều được thực hiện trên hệ thống sử dụng hệ điều hành Debian server.

Thiết lập LDAP


Toàn bộ thông tin của người sử dụng đều được lưu trữ trong thư mục LDAP. Và đây là cách chúng ta cài đặt trên server làm nhiệm vụ chuyển tiếp. Hệ thống yêu cầu những gói cần thiết sau:

sudo apt-get install slapd ldap-utils

Tại đây, chúng ta sẽ sử dụng những thông số LDAP sau đây:

- ldapBase: dc=middle,dc=earth

- adminDn: cn=admin,dc=middle,dc=earth

- adminPwd: thirdAge

Bên cạnh đó, ta cần dùng giản đồ LDAP có sẵn. Hầu hết các thuộc tính và đối tượng phải theo chuẩn, lưu ý rằng có rất nhiều thuộc tính chuẩn người sử dụng cần chú ý tránh trường hợp trùng lặp xảy ra.

Ghép giản đồ có sẵn vào openldap trong /etc/ldap/schema/mailMEO.schema:

attributetype ( 2.16.840.1.113730.3.1.13
NAME 'mailLocalAddress'
DESC 'RFC822 email address of this recipient'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 2.16.840.1.113730.3.1.16
NAME 'mailQuota'
DESC 'Maiximal amount of disk space for a mailbox in kilobytes'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 2.16.840.1.113730.3.1.18
NAME 'mailHost'
DESC 'FQDN of the SMTP/MTA of this recipient'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}
SINGLE-VALUE )
attributetype ( 2.16.840.1.113730.3.1.22
NAME 'mailCopyAddress'
DESC 'RFC822 email shadow copy address'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 2.16.840.1.113730.3.1.47
NAME 'mailRoutingAddress'
DESC 'RFC822 routing address of this recipient'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 2.16.840.1.113730.3.1.49
NAME 'spamassassinUserPrefs'
DESC 'SpamAssassin user preferences'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
objectclass ( 2.16.840.1.113730.3.2.147
NAME 'inetLocalMailRecipient'
DESC 'Internet local mail recipient'
SUP top AUXILIARY
MAY ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )

objectclass ( 2.16.840.1.113730.3.2.148
NAME 'inetMailForwarder'
DESC 'Internet mail Forward Address'
SUP top AUXILIARY
MAY ( mailHost $ mailRoutingAddress ) )

và gán đúng giản đồ cần thiết bên trong /etc/ldap/slapd.conf:

...
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/mailMEO.schema
...

Kiểm tra lại các hậu tố (khi cài đặt slapd thì debconf đã được cấu hình sẵn):

suffix "dc=middle,dc=earth"

Sau đó, gán thêm các ACLs của daemon cần sử dụng để truyền dữ liệu tới LDAP. Khởi tạo thuộc tính readonly để truy cập tới userPassword dành cho devecot:

access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=middle,dc=earth" write
by dn="uid=dovecot,dc=middle,dc=earth" read
by anonymous auth
by self write
by * none

Thiết lập thuộc tính tương tự đối với exim và dovecot:

access to *
by dn="cn=admin,dc=middle,dc=earth" write
by dn="uid=dovecot,dc=middle,dc=earth" read
by dn="uid=exim,dc=middle,dc=earth" read
by * read
by anonymous none

Thông số ACL cuối cùng đảm nhận nhiệm vụ ngăn chặn khả năng đọc dữ liệu từ các tài khoản anonymous nhưng lại được phép chỉnh sửa với các tài khoản được xác nhận. Khởi động lại slapd để áp dụng các thay đổi trên:

sudo /etc/init.d/slapd restart

Sau đó, chúng ta phải tạo ra các tài khoản người dùng với các ACL trước đó. Để làm được việc này, ta phải sử dụng file user.ldif sau:

dn: uid=exim,dc=middle,dc=earth
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: exim
userPassword:: e01ENX1hOElTeXAwV2hnVzFSVnhHd0hCNDF3PT0=
dn: uid=dovecot,dc=middle,dc=earth
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: dovecot
userPassword:: e01ENX1yZGp2Q1lPNmtDRm1scXAyVWQwa0xBPT0=

Tài khoản này sẽ có user / pass là: dovecot / dovecotpopper và exim4 / eximmta

Để cung cấp thông tin, dữ liệu cho thư mục gốc, sử dụng lệnh sau:

ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldif

Dưới đây là mẫu 1 file ldif có chứa các dữ liệu khác:

dn: ou=domains,dc=middle,dc=earth
objectClass: organizationalUnit
objectClass: top
ou: domains
dn: dc=middle.earth,ou=domains,dc=middle,dc=earth
dc: middle.earth
objectClass: dNSDomain
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: domainRelatedObject
objectClass: posixAccount
mailLocalAddress: catchall@middle.earth
cn: catchall
gidNumber: 8
homeDirectory: /var/mail/middle.earth/c/catchall
uid: catchall
uidNumber: 8
userPassword:: e01ENX1EV3RteGErOFROanJKNUFXZWt1Z0tBPT0=
mailQuota: 102400
mailHost: denetor.middle.earth
associatedDomain: middle.earth
associatedDomain: lotr.middle.earth
dn: uid=sam,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: sam
displayName: Sam Gamji
gidNumber: 8
homeDirectory: /var/mail/middle.earth/s/sam
mail: sam@middle.earth
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Gamji
uidNumber: 8
uid: sam
userPassword:: e01ENX1NeVV5M1BxaHkvWWVLaVpyMXlOaExBPT0=
mailLocalAddress: sam@middle.earth
mailLocalAddress: gamji@middle.earth
mailLocalAddress: shire@middle.earth
dn: uid=frodo,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: frodo
displayName: Frodo Baggins
gidNumber: 8
givenName: Frodo
homeDirectory: /var/mail/middle.earth/f/frodo
mail: frodo@middle.earth
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Baggins
uidNumber: 8
uid: frodo
userPassword:: e01ENX04UGlDRHVnWEdCMmNhRktnbDljTmpRPT0=
mailLocalAddress: frodo@middle.earth
mailLocalAddress: baggins@middle.earth
mailLocalAddress: shire@middle.earth
dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: gmail
mail: alxgomz@gmail.com
mailHost: 172.16.16.23
mailRoutingAddress: alxgomz@gmail.com
objectClass: inetMailForwarder
objectClass: inetOrgPerson
objectClass: top
sn: alias to Gmail address
uid: gmail

T.Anh (theo HowToForce)

Không có nhận xét nào:

Đăng nhận xét