Người dùng và tên miền ảo với Postfix, Courier, MySQL và SquirrelMail (Ubuntu 13.10)

theanh

Administrator
Nhân viên
Hướng dẫn này có Bản quyền (c) 2014 của Falko Timme & Srijan Kishore. Hướng dẫn này bắt nguồn từ hướng dẫn của Christoph Haas mà bạn có thể tìm thấy tại http://workaround.org. Bạn được tự do sử dụng hướng dẫn này theo giấy phép Creative Commons 2.5 hoặc bất kỳ phiên bản nào mới hơn.

Tài liệu này mô tả cách cài đặt máy chủ thư Postfix dựa trên người dùng và tên miền ảo, tức là người dùng và tên miền nằm trong cơ sở dữ liệu MySQL. Tôi cũng sẽ trình bày cách cài đặt và cấu hình Courier (Courier-POP3, Courier-IMAP) để Courier có thể xác thực với cùng cơ sở dữ liệu MySQL mà Postfix sử dụng.

Máy chủ Postfix kết quả có khả năng SMTP-AUTHTLSquota (quota không được tích hợp sẵn trong Postfix theo mặc định, tôi sẽ chỉ cho bạn cách vá Postfix của bạn một cách phù hợp). Mật khẩu được lưu trữ ở dạng mã hóa trong cơ sở dữ liệu (hầu hết các tài liệu tôi tìm thấy đều xử lý mật khẩu dạng văn bản thuần túy, đây là một rủi ro về bảo mật). Ngoài ra, hướng dẫn này còn đề cập đến cách cài đặt Amavisd, SpamAssassinClamAV để quét thư rác và vi-rút trong email. Tôi cũng sẽ chỉ cách cài đặt SquirrelMail dưới dạng giao diện webmail để người dùng có thể đọc và gửi email cũng như thay đổi mật khẩu của họ.

Ưu điểm của thiết lập "ảo" như vậy (người dùng và tên miền ảo trong cơ sở dữ liệu MySQL) là nó hiệu quả hơn nhiều so với thiết lập dựa trên người dùng hệ thống "thực". Với thiết lập ảo này, máy chủ email của bạn có thể xử lý hàng nghìn tên miền và người dùng. Bên cạnh đó, việc quản lý dễ dàng hơn vì bạn chỉ phải xử lý cơ sở dữ liệu MySQL khi thêm người dùng/tên miền mới hoặc chỉnh sửa những tên miền hiện có. Không cần lệnh postmap để tạo tệp db, không cần tải lại Postfix, v.v. Để quản lý cơ sở dữ liệu MySQL, bạn có thể sử dụng các công cụ dựa trên web như phpMyAdmin cũng sẽ được cài đặt trong hướng dẫn này. Ưu điểm thứ ba là người dùng có địa chỉ email làm tên người dùng (thay vì tên người dùng + địa chỉ email) dễ hiểu và dễ ghi nhớ hơn.

Hướng dẫn này có nghĩa là hướng dẫn thực tế; không đề cập đến bối cảnh lý thuyết. Chúng được xử lý trong rất nhiều tài liệu khác trên web.

Tài liệu này không có bất kỳ bảo hành nào! Tôi muốn nói rằng đây không phải là cách duy nhất để thiết lập một hệ thống như vậy. Có nhiều cách để đạt được mục tiêu này nhưng đây là cách tôi thực hiện. Tôi không đưa ra bất kỳ đảm bảo nào rằng cách này sẽ hiệu quả với bạn!


1 Lưu ý sơ bộ​

Hướng dẫn này dựa trên Ubuntu 13.10 Server (Saucy Salamander), vì vậy bạn nên thiết lập cài đặt máy chủ Ubuntu 13.10 cơ bản trước khi tiếp tục hướng dẫn này. Hệ thống phải có địa chỉ IP tĩnh. Tôi sử dụng 192.168.0.100 làm địa chỉ IP trong hướng dẫn này và server1.example.com làm tên máy chủ.

Đảm bảo rằng bạn đã đăng nhập với tư cách là root (nhập
Mã:
sudo su
để trở thành root), vì chúng ta phải chạy tất cả các bước trong hướng dẫn này với tư cách là người dùng root.

Điều rất quan trọng là bạn phải tạo /bin/sh một liên kết tượng trưng đến /bin/bash...
Mã:
dpkg-reconfigure dash
Sử dụng dash làm shell hệ thống mặc định (/bin/sh)? <-- Không

... và bạn vô hiệu hóa AppArmor:
Mã:
/etc/init.d/apparmor stop 
update-rc.d -f apparmor remove 
apt-get remove apparmor apparmor-utils

2 Cài đặt Postfix, Courier, Saslauthd, MySQL, phpMyAdmin​

Để cài đặt Postfix, Courier, Saslauthd, MySQL và phpMyAdmin, chúng ta chỉ cần chạy
Mã:
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass
Bạn sẽ được hỏi một vài câu hỏi:

Mật khẩu mới cho người dùng "root" của MySQL: <-- yourrootsqlpassword
Lặp lại mật khẩu cho người dùng "root" của MySQL: <-- yourrootsqlpassword
Tạo thư mục để quản trị dựa trên web? <-- Không
Kiểu cấu hình thư chung: <-- Trang web Internet
Tên thư hệ thống: <-- server1.example.com
Yêu cầu chứng chỉ SSL <-- Ok
Máy chủ web tự động cấu hình lại: <-- apache2
Cấu hình cơ sở dữ liệu cho phpmyadmin bằng dbconfig-common? <-- Không


3 Áp dụng Bản vá Quota cho Postfix​

Chúng ta phải lấy các nguồn Postfix, vá nó bằng bản vá quota, xây dựng các gói .deb Postfix mới và cài đặt các gói .deb đó:
Mã:
apt-get build-dep postfix
Mã:
cd /usr/src
apt-get source postfix
(Hãy đảm bảo rằng bạn sử dụng đúng phiên bản Postfix trong các lệnh sau. Tôi đã cài đặt Postfix 2.10.2. Bạn có thể tìm ra phiên bản Postfix của mình bằng cách chạy
Mã:
postconf -d | grep mail_version
Đầu ra sẽ trông như thế này:
Mã:
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.10.2
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#

Mã:
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.10.2
patch -p1 < ../postfix-vda-v13-2.10.0.patch
Tiếp theo mở debian/rules và thay đổi DEB_BUILD_HARDENING từ 1 thành 0:
Mã:
vi debian/rules
Mã:
[...]export DEB_BUILD_HARDENING=0[...]
Nếu bạn không làm điều này, bản dựng của bạn sẽ không thành công với các thông báo lỗi sau:
Mã:
maildir.c: Trong hàm âdeliver_maildirâ:
maildir.c:974:17: lỗi: định dạng không phải là chuỗi ký tự và không có đối số định dạng [-Werror=format-security]
maildir.c:977:17: lỗi: định dạng không phải là chuỗi ký tự và không có đối số định dạng [-Werror=format-security]
maildir.c:983:17: lỗi: định dạng không phải là chuỗi ký tự và không có đối số định dạng [-Werror=format-security]
maildir.c:986:17: lỗi: định dạng không phải là chuỗi ký tự và không có đối số định dạng [-Werror=format-security]
maildir.c: Trong hàm âsql2fileâ:
maildir.c:404:25: cảnh báo: bỏ qua giá trị trả về của âreadâ, được khai báo với thuộc tính warn_unused_result [-Wunused-result]
maildir.c:417:26: cảnh báo: bỏ qua giá trị trả về của âwriteâ, được khai báo với thuộc tính warn_unused_result [-Wunused-result]
cc1: một số cảnh báo được coi là lỗi
make: *** [maildir.o] Lỗi 1
make: Đang thoát khỏi thư mục `/usr/src/postfix-2.10.2/src/virtual'
make[1]: *** [update] Lỗi 1
make[1]: Đang thoát khỏi thư mục `/usr/src/postfix-2.10.2'
make: *** [build] Lỗi 2
dpkg-buildpackage: lỗi: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.10.2#
Bây giờ chúng ta có thể xây dựng các gói .deb Postfix mới:
Mã:
dpkg-buildpackage
Bây giờ chúng ta đi lên một thư mục, đó là nơi .deb đã được tạo:
Mã:
cd ..
Lệnh
Mã:
ls -l
hiển thị cho bạn các gói có sẵn:


Mã:
root@server1:/usr/src# ls -l
tổng cộng 7124
drwxr-xr-x 18 root root 4096 16/04 04:29 postfix-2.10.2
-rw-r--r-- 1 root root 48594 16/04 04:29 postfix-cdb_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 161974 16/04 04:29 postfix-dev_2.10.2-1_all.deb
-rw-r--r-- 1 root root 1094344 16/04 04:29 postfix-doc_2.10.2-1_all.deb
-rw-r--r-- 1 gốc gốc 57342 16 tháng 4 04:29 postfix-ldap_2.10.2-1_amd64.deb
-rw-r--r-- 1 gốc gốc 50554 16 tháng 4 04:29 postfix-mysql_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50804 16 tháng 4 04:29 postfix-pcre_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50756 16 tháng 4 04:29 postfix-pgsql_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 55701 7 tháng 6 năm 2013 postfix-vda-v13-2.10.0.patch
-rw-r--r-- 1 root root 282175 16 tháng 4 04:28 postfix_2.10.2-1.diff.gz
-rw-r--r-- 1 root root 1522 16 tháng 4 04:28 postfix_2.10.2-1.dsc
-rw-r--r-- 1 root root 3899 16 tháng 4 04:29 postfix_2.10.2-1_amd64.changes
-rw-r--r-- 1 root root 1542368 16/04 04:29 postfix_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 3828326 12/09/2013 postfix_2.10.2.orig.tar.gz
Chọn các gói postfix và postfix-mysql và cài đặt chúng như sau:
Mã:
dpkg -i postfix_2.10.2-1_amd64.deb postfix-mysql_2.10.2-1_amd64.deb

4 Tạo cơ sở dữ liệu MySQL cho Postfix/Courier​

Bây giờ chúng ta tạo một cơ sở dữ liệu có tên là mail:
Mã:
mysqladmin -u root -p create mail
Bạn sẽ được hỏi câu hỏi này:

Nhập mật khẩu: <-- yourrootsqlpassword

Tiếp theo, chúng ta vào MySQL shell:
Mã:
mysql -u root -p
Trên MySQL shell, chúng ta tạo người dùng mail_admin với mật khẩu mail_admin_password (thay thế bằng mật khẩu của riêng bạn) có các quyền SELECT,INSERT,UPDATE,DELETE trên cơ sở dữ liệu mail. Người dùng này sẽ được Postfix và Courier sử dụng để kết nối với cơ sở dữ liệu thư:
Mã:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;
Vẫn trên shell MySQL, chúng ta tạo các bảng cần thiết cho Postfix và Courier:
Mã:
USE mail;
Mã:
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain))
ENGINE=MyISAM;
Mã:
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;
Mã:
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) ENGINE=MyISAM;
Mã:
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;
Mã:
quit;
Như bạn có thể đã nhận thấy, với lệnh quit;, chúng ta đã thoát khỏi shell MySQL và quay lại shell Linux.

Bảng domains sẽ lưu trữ từng miền ảo mà Postfix sẽ nhận email (ví dụ: example.com).
domain
example.com
Bảng forwardings dùng để đặt bí danh cho một địa chỉ email thành một địa chỉ email khác, ví dụ: chuyển tiếp email cho [emailprotected] đến [emailprotected].
nguồnđích
[emailprotected][emailprotected]
Bảng người dùng lưu trữ tất cả người dùng ảo (tức là địa chỉ email, vì địa chỉ email và tên người dùng giống nhau) và mật khẩu (dưới dạng mã hóa!) và giá trị hạn ngạch cho mỗi hộp thư (trong ví dụ này, giá trị mặc định là 10485760 byte, nghĩa là 10MB).
emailmật khẩuquota
[emailprotected]No9.E4skNvGa. ("bí mật" ở dạng mã hóa)10485760
Bảng transport là tùy chọn, dành cho người dùng nâng cao. Bảng này cho phép chuyển tiếp thư cho người dùng đơn lẻ, toàn bộ miền hoặc tất cả thư đến máy chủ khác. Ví dụ,
tên miềnvận chuyển
example.comsmtp:[1.2.3.4]
sẽ chuyển tiếp tất cả email cho example.com qua giao thức smtp đến máy chủ có địa chỉ IP 1.2.3.4 (dấu ngoặc vuông [] có nghĩa là "không tra cứu bản ghi MX DNS" (điều này có ý nghĩa đối với địa chỉ IP...). Nếu bạn sử dụng tên miền đủ điều kiện (FQDN) thay thế, bạn sẽ không sử dụng dấu ngoặc vuông.).

BTW, (tôi Giả sử rằng địa chỉ IP của hệ thống máy chủ thư của bạn là 192.168.0.100) bạn có thể truy cập phpMyAdmin qua http://192.168.0.100/phpmyadmin/ trong trình duyệt và đăng nhập với tư cách mail_admin. Sau đó, bạn có thể xem cơ sở dữ liệu. Sau đó, bạn có thể sử dụng phpMyAdmin để quản lý máy chủ thư của mình.


5 Cấu hình Postfix​

Bây giờ chúng ta phải cho Postfix biết nơi nó có thể tìm thấy tất cả thông tin trong cơ sở dữ liệu. Do đó, chúng ta phải tạo sáu tệp văn bản. Bạn sẽ thấy rằng tôi yêu cầu Postfix kết nối với MySQL trên địa chỉ IP 127.0.0.1 thay vì localhost. Nguyên nhân là do Postfix đang chạy trong chroot jail và không có quyền truy cập vào socket MySQL mà nó sẽ cố gắng kết nối nếu tôi yêu cầu Postfix sử dụng localhost. Nếu tôi sử dụng 127.0.0.1, Postfix sử dụng mạng TCP để kết nối với MySQL, điều này không thành vấn đề ngay cả trong chroot jail (phương án thay thế là di chuyển socket MySQL vào chroot jail, điều này gây ra một số vấn đề khác).

Vui lòng đảm bảo rằng /etc/mysql/my.cnf chứa dòng sau:
Mã:
vi /etc/mysql/my.cnf
Mã:
[...]# Thay vì bỏ qua mạng, mặc định hiện chỉ lắng nghe trên# localhost, tương thích hơn và không kém an toàn.bind-address = 127.0.0.1[...]
Nếu bạn phải sửa đổi /etc/mysql/my.cnf, vui lòng khởi động lại MySQL ngay bây giờ:
Mã:
/etc/init.d/mysql restart
Chạy
Mã:
netstat -tap | grep mysql
để đảm bảo rằng MySQL đang lắng nghe trên 127.0.0.1 (localhost.localdomain):
Mã:
root@server1:~# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 24970/mysqld 
root@server1:~#
Bây giờ chúng ta hãy tạo sáu tệp văn bản.
Mã:
vi /etc/postfix/mysql-virtual_domains.cf
Mã:
user = mail_adminpassword = mail_admin_passworddbname = mailquery = SELECT domain AS virtual FROM domains WHERE domain='%s'hosts = 127.0.0.1
Mã:
vi /etc/postfix/mysql-virtual_forwardings.cf
Mã:
user = mail_adminpassword = mail_admin_passworddbname = mailquery = SELECT destination FROM forwardings WHERE source='%s'hosts = 127.0.0.1
Mã:
vi /etc/postfix/mysql-virtual_mailboxes.cf
Mã:
user = mail_adminpassword = mail_admin_passworddbname = mailquery = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'hosts = 127.0.0.1
Mã:
vi /etc/postfix/mysql-virtual_email2email.cf
Mã:
user = mail_adminpassword = mail_admin_passworddbname = mailquery = SELECT email FROM users WHERE email='%s'hosts = 127.0.0.1
Mã:
vi /etc/postfix/mysql-virtual_transports.cf
Mã:
user = mail_adminpassword = mail_admin_passworddbname = mailquery = SELECT transport FROM transport WHERE domain='%s'hosts = 127.0.0.1
Mã:
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
Mã:
user = mail_adminpassword = mail_admin_passworddbname = mailquery = SELECT quota FROM users WHERE email='%s'hosts = 127.0.0.1
Sau đó thay đổi quyền và nhóm của các tệp này:
Mã:
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
Bây giờ chúng ta tạo một người dùng và nhóm có tên là vmail với thư mục gốc /home/vmail. Đây là nơi lưu trữ tất cả các hộp thư.
Mã:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Tiếp theo chúng ta thực hiện một số cấu hình Postfix. Hãy đảm bảo rằng bạn thay thế server1.example.com bằng một FQDN hợp lệ, nếu không Postfix của bạn có thể không hoạt động bình thường!
Mã:
postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = tĩnh:5000'
postconf -e 'virtual_gid_maps = tĩnh:5000'
postconf -e 'smtpd_sasl_auth_enable = có'
postconf -e 'broken_sasl_auth_clients = có'
postconf -e 'smtpd_sasl_authenticated_header = có'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "Người dùng bạn đang cố gắng liên lạc đã vượt quá hạn ngạch."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
Sau đó, chúng tôi tạo chứng chỉ SSL cần thiết cho TLS:
Mã:
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
Tên quốc gia (mã 2 chữ cái) [AU]: <-- Nhập tên quốc gia của bạn (ví dụ: "DE").
Tên tiểu bang hoặc tỉnh (tên đầy đủ) [Some-State]: <-- Nhập tên tiểu bang hoặc tỉnh của bạn.
Tên địa phương (ví dụ: thành phố) []: <-- Nhập thành phố của bạn.
Tên tổ chức (ví dụ: công ty) [Internet Widgits Pty Ltd]: <-- Nhập Tên tổ chức của bạn (ví dụ: tên công ty của bạn).
Tên đơn vị tổ chức (ví dụ: section) []: <-- Nhập Tên đơn vị tổ chức của bạn (ví dụ: "Phòng CNTT").
Tên thông dụng (ví dụ: TÊN CỦA BẠN) []: <-- Nhập Tên miền đủ điều kiện của hệ thống (ví dụ: "server1.example.com").
Địa chỉ email []: <-- Nhập Địa chỉ email của bạn.

Sau đó thay đổi quyền của smtpd.key:
Mã:
chmod o= /etc/postfix/smtpd.key

6 Cấu hình Saslauthd​

Chạy lần đầu
Mã:
mkdir -p /var/spool/postfix/var/run/saslauthd
Sau đó chỉnh sửa /etc/default/saslauthd. Đặt START thành yes và thay đổi dòng OPTIONS="-c -m /var/run/saslauthd" thành OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r":
Mã:
vi /etc/default/saslauthd
Mã:
## Thiết lập cho daemon saslauthd# Vui lòng đọc /usr/share/doc/sasl2-bin/README.Debian để biết chi tiết.## Saslauthd có nên tự động chạy khi khởi động không? (mặc định: không)START=yes# Mô tả về phiên bản saslauthd này. Khuyến nghị.# (gợi ý: SASL Authentication Daemon)DESC="SASL Authentication Daemon"# Tên viết tắt của phiên bản saslauthd này. Khuyến nghị mạnh mẽ.# (gợi ý: saslauthd)NAME="saslauthd"# Saslauthd nên sử dụng cơ chế xác thực nào? (mặc định: pam)## Các tùy chọn có sẵn trong gói Debian này:# getpwent -- sử dụng hàm thư viện getpwent()# kerberos5 -- sử dụng Kerberos 5# pam -- sử dụng PAM# rimap -- sử dụng máy chủ IMAP từ xa# shadow -- sử dụng tệp mật khẩu shadow cục bộ# sasldb -- sử dụng tệp cơ sở dữ liệu sasldb cục bộ# ldap -- sử dụng LDAP (cấu hình nằm trong /etc/saslauthd.conf)## Chỉ có thể sử dụng một tùy chọn tại một thời điểm. Xem trang hướng dẫn saslauthd# để biết thêm thông tin.## Ví dụ: MECHANISMS="pam"MECHANISMS="pam"# Các tùy chọn bổ sung cho cơ chế này. (mặc định: không có)# Xem trang hướng dẫn saslauthd để biết thông tin về các tùy chọn dành riêng cho mech.MECH_OPTIONS=""# Chúng ta nên chạy bao nhiêu quy trình saslauthd? (mặc định: 5)# Giá trị 0 sẽ phân nhánh một tiến trình mới cho mỗi kết nối.THREADS=5# Các tùy chọn khác (mặc định: -c -m /var/run/saslauthd)# Lưu ý: BẠN PHẢI chỉ định tùy chọn -m nếu không saslauthd sẽ không chạy!## CẢNH BÁO: KHÔNG CHỈ ĐỊNH TÙY CHỌN -d.# Tùy chọn -d sẽ khiến saslauthd chạy ở chế độ nền thay vì# như một daemon. Điều này sẽ NGĂN CẢN HỆ THỐNG CỦA BẠN KHỞI ĐỘNG ĐÚNG CÁCH. Nếu bạn muốn# chạy saslauthd ở chế độ gỡ lỗi, vui lòng chạy thủ công để đảm bảo an toàn.## Xem /usr/share/doc/sasl2-bin/README.Debian để biết thông tin dành riêng cho Debian.# Xem trang hướng dẫn saslauthd và đầu ra của 'saslauthd -h' để biết thông tin chung# về các tùy chọn này.## Ví dụ cho người dùng Postfix chroot: "-c -m /var/spool/postfix/var/run/saslauthd"# Ví dụ cho người dùng Postfix không phải chroot: "-c -m /var/run/saslauthd"## Để biết Postfix của bạn có đang chạy chroot không, hãy kiểm tra /etc/postfix/master.cf.# Nếu có dòng "smtp inet n - y - - smtpd" hoặc "smtp inet n - - - - smtpd"# thì Postfix của bạn đang chạy trong chroot.# Nếu có dòng "smtp inet n - n - - smtpd" thì Postfix của bạn KHÔNG# đang chạy trong chroot.#OPTIONS="-c -m /var/run/saslauthd"OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Sau đó tạo tệp /etc/pam.d/smtp. Nó chỉ nên chứa hai dòng sau (hãy đảm bảo điền đúng thông tin cơ sở dữ liệu của bạn):
Mã:
vi /etc/pam.d/smtp
Mã:
auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1accountsufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
Tiếp theo tạo tệp /etc/postfix/sasl/smtpd.conf. Nó sẽ trông như thế này:
Mã:
vi /etc/postfix/sasl/smtpd.conf
Mã:
pwcheck_method: saslauthdmech_list: plain loginallow_plaintext: trueauxprop_plugin: sqlsql_engine: mysqlsql_hostnames: 127.0.0.1sql_user: mail_adminsql_passwd: mail_admin_passwordsql_database: mailsql_select: select password from users where email = '%u@%r'
Tiếp theo, thêm người dùng postfix vào sasl nhóm (điều này đảm bảo rằng Postfix có quyền truy cập saslauthd):
Mã:
adduser postfix sasl
Sau đó khởi động lại Postfix và Saslauthd:
Mã:
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

7 Cấu hình Courier​

Bây giờ chúng ta phải thông báo cho Courier rằng nó phải xác thực với cơ sở dữ liệu MySQL của chúng ta. Trước tiên, hãy chỉnh sửa /etc/courier/authdaemonrc và thay đổi giá trị của authmodulelist thành:
Mã:
vi /etc/courier/authdaemonrc
Mã:
[...]authmodulelist="authmysql"[...]
Sau đó, tạo bản sao lưu của /etc/courier/authmysqlrc và xóa tệp cũ:
Mã:
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc
Sau đó mở /etc/courier/authmysqlrc và nhập các dòng sau vào đó:
Mã:
vi /etc/courier/authmysqlrc
Mã:
MYSQL_SERVER localhostMYSQL_USERNAME mail_adminMYSQL_PASSWORD mail_admin_passwordMYSQL_PORT 0MYSQL_DATABASE mailMYSQL_USER_TABLE usersMYSQL_CRYPT_PWFIELD password#MYSQL_CLEAR_PWFIELD passwordMYSQL_UID_FIELD 5000MYSQL_GID_FIELD 5000MYSQL_LOGIN_FIELD emailMYSQL_HOME_FIELD "/home/vmail"MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')#MYSQL_NAME_FIELDMYSQL_QUOTA_FIELD quota
Trong quá trình cài đặt, các chứng chỉ SSL cho IMAP-SSL và POP3-SSL được tạo bằng tên máy chủ localhost. Để thay đổi thành tên máy chủ chính xác (server1.example.com trong hướng dẫn này), hãy xóa các chứng chỉ...
Mã:
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem
... và sửa đổi hai tệp sau; thay thế CN=localhost bằng CN=server1.example.com (bạn cũng có thể sửa đổi các giá trị khác, nếu cần):
Mã:
vi /etc/courier/imapd.cnf
Mã:
[...]CN=server1.example.com[...]
Mã:
vi /etc/courier/pop3d.cnf
Mã:
[...]CN=server1.example.com[...]
Sau đó tạo lại các chứng chỉ...
Mã:
mkimapdcert
mkpop3dcert
... và khởi động lại Courier:
Mã:
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart
Bằng cách chạy
Mã:
telnet localhost pop3
bạn có thể xem máy chủ POP3 của mình có hoạt động bình thường không. Nó sẽ trả về +OK Xin chào. (Nhập quit để quay lại shell Linux.)

root@server1:/etc/courier# telnet localhost pop3
Đang thử ::1...
Đã kết nối tới localhost.localdomain.
Ký tự thoát là '^]'.
+OK Xin chào.
<-- quit
+OK Chúc may mắn hơn vào lần sau.
Kết nối đã bị máy chủ nước ngoài đóng.
root@server1:/etc/courier#


8 Sửa đổi /etc/aliases​

Bây giờ chúng ta nên mở /etc/aliases. Đảm bảo rằng postmaster trỏ đến root và root trỏ đến tên người dùng hoặc địa chỉ email của bạn, ví dụ: như thế này:
Mã:
vi /etc/aliases
Mã:
[...]postmaster: rootroot: [emailprotected][...]
hoặc như thế này (nếu administrator là tên người dùng của bạn):
Mã:
[...]postmaster: rootroot: administrator[...]
Bất cứ khi nào bạn sửa đổi /etc/aliases, bạn phải chạy
Mã:
newaliases
sau đó và khởi động lại Postfix:
Mã:
/etc/init.d/postfix restart

9 Cài đặt amavisd-new, SpamAssassin và ClamAV​

Để cài đặt amavisd-new, spamassassin và clamav, hãy chạy lệnh sau:
Mã:
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax
Sau đó, chúng ta phải cấu hình amavisd-new. Cấu hình được chia thành nhiều tệp khác nhau nằm trong thư mục /etc/amavis/conf.d. Hãy xem từng tệp để làm quen với cấu hình. Hầu hết các cài đặt đều ổn, tuy nhiên chúng ta phải sửa đổi ba tệp:

Đầu tiên, chúng ta phải bật ClamAV và SpamAssassin trong /etc/amavis/conf.d/15-content_filter_mode bằng cách bỏ chú thích các dòng @bypass_virus_checks_maps và @bypass_spam_checks_maps:
Mã:
vi /etc/amavis/conf.d/15-content_filter_mode
Tệp sẽ trông như thế này:
Mã:
use strict;# Bạn có thể sửa đổi tệp này để bật lại chức năng kiểm tra SPAM thông qua spamassassin# và bật lại chức năng kiểm tra phần mềm diệt vi-rút.## Chế độ kiểm tra phần mềm diệt vi-rút mặc định# Xin lưu ý rằng chức năng kiểm tra phần mềm diệt vi-rút bị TẮT theo# mặc định.# Nếu bạn muốn bật chức năng này, vui lòng bỏ chú thích các dòng sau:@bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);## Chế độ kiểm tra SPAM mặc định# Xin lưu ý rằng chức năng kiểm tra phần mềm diệt vi-rút bị TẮT theo# mặc định.# Nếu bạn muốn bật tính năng này, vui lòng bỏ chú thích các dòng sau:@bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);1; # đảm bảo trả về được xác định
Sau đó, bạn nên xem qua các thiết lập thư rác và các hành động cho thư rác/vi-rút trong /etc/amavis/conf.d/20-debian_defaults. Không cần phải thay đổi bất cứ điều gì nếu các thiết lập mặc định phù hợp với bạn. Tệp chứa nhiều giải thích nên không cần giải thích các thiết lập ở đây:
Mã:
vi /etc/amavis/conf.d/20-debian_defaults
Mã:
[...]$QUARANTINEDIR = "$MYHOME/virusmails";$quarantine_subdir_levels = 1; # bật băm thư mục kiểm dịch$log_recip_templ = undef; # tắt mục nhật ký cấp độ 0 của người nhận$DO_SYSLOG = 1; # ghi nhật ký qua syslogd (ưu tiên)$syslog_ident = 'amavis'; # thẻ syslog ident, được thêm vào tất cả các tin nhắn$syslog_facility = 'mail';$syslog_priority = 'debug'; # chuyển sang info để bỏ đầu ra gỡ lỗi, v.v.$enable_db = 1; # cho phép sử dụng BerkeleyDB/libdb (SNMP và nanny)$enable_global_cache = 1; # cho phép sử dụng bộ đệm dựa trên libdb nếu $enable_db=1$inet_socket_port = 10024; # socket lắng nghe mặc định$sa_spam_subject_tag = '***SPAM*** ';$sa_tag_level_deflt = 2.0; # thêm tiêu đề thông tin thư rác nếu ở mức đó hoặc cao hơn$sa_tag2_level_deflt = 6.31; # thêm tiêu đề 'phát hiện thư rác' ở mức đó$sa_kill_level_deflt = 6.31; # kích hoạt hành động tránh thư rác$sa_dsn_cutoff_level = 10; # mức độ thư rác mà DSN không được gửi[...]$final_virus_destiny = D_DISCARD; # (dữ liệu không bị mất, xem cách ly vi-rút)$final_banned_destiny = D_BOUNCE; # D_REJECT khi MTA front-end$final_spam_destiny = D_BOUNCE;$final_bad_header_destiny = D_PASS; # Dễ bị dương tính giả (đối với thư rác)[...]
Cuối cùng, hãy chỉnh sửa /etc/amavis/conf.d/50-user và thêm dòng $pax='pax'; vào giữa:
Mã:
vi /etc/amavis/conf.d/50-user
Mã:
use strict;## Đặt các chỉ thị cấu hình của bạn tại đây. Chúng sẽ ghi đè các chỉ thị trong# các tệp trước đó.## Xem /usr/share/doc/amavisd-new/ để biết tài liệu và ví dụ về# các chỉ thị bạn có thể sử dụng trong tệp này#$pax='pax';#------------ Không sửa đổi bất cứ điều gì bên dưới dòng này -------------1; # đảm bảo trả về được xác định
Sau đó, chạy các lệnh này để thêm người dùng clamav vào nhóm amavis và khởi động lại amavisd-new và ClamAV:
Mã:
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/clamav-daemon restart
Bây giờ chúng ta phải cấu hình Postfix để chuyển email đến qua amavisd-new:
Mã:
postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'
Sau đó, thêm các dòng sau vào /etc/postfix/master.cf:
Mã:
vi /etc/postfix/master.cf
Mã:
[...]amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
Sau đó khởi động lại Postfix:
Mã:
/etc/init.d/postfix restart
Bây giờ hãy chạy
Mã:
netstat -tap
và bạn sẽ thấy Postfix (master) đang lắng nghe trên cổng 25 (smtp) và 10025, và amavisd-new trên cổng 10024:
Mã:
root@server1:/etc/courier#netstat-tap
Kết nối Internet đang hoạt động(máy chủ và được thiết lập)
ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Tên chương trình
tcp00*:http*:*LISTEN6134/apache2
tcp00*:ssh*:*LISTEN610/sshd
tcp00*:smtp*:*LISTEN23128/master
tcp00localhost.localdo:10024*:*LISTEN21937/amavisd-new(
tcp00localhost.localdo:10025*:*LISTEN23128/master
tcp00localhost.locald o:mysql*:*LISTEN4308/mysqld
tcp052server1.example.com:ssh192.168.0.206:57597ESTABLISHED976/0
tcp600[::]:ssh[::]:*LISTEN610/sshd
tcp600[::]:smtp[::]:*LISTEN23128/master
tcp600[::]:imaps[::]:*LIS TEN18191/couriertcpd
tcp600[::]:pop3s[::]:*LISTEN18259/couriertcpd
tcp600[::]:pop3[::]:*LISTEN18222/couriertcpd
tcp600[::]:imap2[::]:*LISTEN18154/couriertcpd
root@server1:/etc/courier#
Mã:

10 Cài đặt Razor, Pyzor và DCC và cấu hình SpamAssassin​

Razor, Pyzor và DCC là các bộ lọc thư rác sử dụng mạng lọc cộng tác. Để cài đặt Razor và Pyzor, hãy chạy
Mã:
apt-get install razor pyzor
DCC không có trong kho lưu trữ Ubuntu 13.10, vì vậy chúng ta cài đặt nó như sau:
Mã:
cd /tmp
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z 
tar xzvf dcc-dccproc.tar.Z
cd dcc-dccproc-1.3.1.154
./configure --with-uid=amavis
make
make install
chown -R amavis:amavis /var/dcc
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd
Bây giờ chúng ta phải yêu cầu SpamAssassin sử dụng ba chương trình này. Chỉnh sửa /etc/spamassassin/local.cf và thêm các dòng sau vào đó:
Mã:
vi /etc/spamassassin/local.cf
Mã:
[...]#dccuse_dcc 1dcc_path /usr/local/bin/dccproc#pyzoruse_pyzor 1pyzor_path /usr/bin/pyzor#razoruse_razor2 1razor_config /etc/razor/razor-agent.conf#bayesuse_bayes 1use_bayes_rules 1bayes_auto_learn 1
Sau đó, chúng ta phải kích hoạt plugin DCC trong SpamAssassin. Mở /etc/spamassassin/v310.pre và bỏ chú thích dòng loadplugin Mail::SpamAssassin::plugin::DCC:
Mã:
vi /etc/spamassassin/v310.pre
Mã:
[...]# DCC - thực hiện kiểm tra tin nhắn DCC.## DCC bị vô hiệu hóa ở đây vì không phải là mã nguồn mở. Xem giấy phép DCC# để biết thêm chi tiết.#loadplugin Mail::SpamAssassin::Plugin::DCC[...]
Bạn có thể kiểm tra cấu hình SpamAssassin của mình bằng cách thực thi:
Mã:
spamassassin --lint
Nó sẽ không hiển thị bất kỳ lỗi nào.

Khởi động lại amavisd-new sau đó:
Mã:
/etc/init.d/amavis restart
Bây giờ chúng ta cập nhật các bộ quy tắc SpamAssassin của mình như sau:
Mã:
sa-update --no-gpg
Chúng ta tạo một công việc cron để các bộ quy tắc sẽ được cập nhật thường xuyên. Chạy
Mã:
crontab -e
để mở trình chỉnh sửa công việc cron. Tạo công việc cron sau:
Mã:
23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null
Công việc này sẽ cập nhật bộ quy tắc cứ hai ngày một lần vào lúc 4.23 giờ.
 
Back
Bên trên