Ảo hóa người dùng và tên miền với Postfix, Courier, MySQL và
SquirrelMail
Quản Trị Mạng - Postfix là một MTA (Mail Transport Agent), được viết bởi
Wietse Venema khi ông đang làm việc ở trung tâm nghiên cứu T. J. Watson của
IBM. Đặc điểm của Postfix: dễ quản lý, nhanh, an toàn. Chỉ cần một server với
hardware thông thường, Postfix có thể chuyển giao hàng triệu email một ngày.
Trong bài viết sau chúng tôi sẽ hướng dẫn các bạn cách cài đặt một mail server
Postfix cơ bản trên user và domain ảo (tức là user và domain được lưu trong cơ sở
dữ liệu MySQL).
>>> Chạy SquirrelMail trên Nginx (LEMP) trong Debian Squeeze/Ubuntu 11.04
Ngoài ra, bài viết sẽ thể hiện quá trình cài đặt và cấu hình Courier (Courier-POP3,
Courier-IMAP), từ đó Courier có thể xác thực cơ sở dữ liệu MySQL mà Postfix sử
dụng. Kết quả là máy chủ Postfix có khả năng xác thực SMTP-AUTH, TLS và
quota (quota không được xây dựng trong Postfix theo mặc định, chúng ta sẽ vá
Postfix một cách thích hợp). Những mật khẩu sẽ được lưu trữ trong form encrypted
của database. Đồng thời chúng tôi sẽ trình bày tới các bạn cách cài đặt Amavisd,
SpamAssassin và ClamAV để các email này được quét và kiểm tra spam, virus.
Cuối cùng chúng ta sẽ tiến hành cài đặt giao diện webmail SquirrelMail để các user
có thể đọc và gửi mail, thay đổi password.
Tổng quan
Ưu điểm của một thiết lập “ảo” (user và domain ảo trong MySQL database) là nó
làm tăng rất nhiều hiệu suất so với một thiết lập cơ bản dựa trên user hệ thống
“real”. Với thiết lập ảo, mail server của bạn có thể xử lý hàng ngàn domain và user.
Bên cạnh đó, việc quản trị cũng trở nên dễ dàng hơn bởi bạn chỉ cần xử lý với
MySQL database khi thêm user/domain mới hoặc chỉnh sửa những tài khoảng hiện
có. Không cần những lệnh postmap để tạo file db, không cần tải lại Postfix việc
quản lý MySQL database có thể thông qua công cụ web như phpMyAdmin (sẽ
được cài đặt trong hướng dẫn này). Ưu điểm thứ ba là người dùng sẽ có một địa
chỉ email chính là tên user thay vì một username và một email gây phiền phức.
1. Một số lưu ý
Ở đây chúng tôi sử dụng hệ thống Fedora 15 x86_64, có địa chỉ IP tĩnh
192.168.0.100 và hostname server1.example.com. Bạn cần chắc chắn rằng tường
lửa và SELinux đều được vô hiệu hóa.
2. Một số phần mềm cần thiết
Trước tiên chúng ta cần cập nhập các gói có sẵn trên hệ thống:
yum update
Sau đó cài đặt một số phần mềm cần thiết:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
3. Cài đặt Apache, MySQL, phpMyAdmin
Bộ phần mềm này có thể được cài cùng lúc qua một dòng lệnh sau (bao gồm các
gói cần xây dựng cho Courier-IMAP):
yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc
mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel
phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-
devel openldap-servers libtool gdbm-devel pam-devel gamin-devel libidn-
devel
4. Cài đặt Courier-IMAP, Courier-Authlib, And Maildrop
Thật không may vì gói rpm không được tích hợp sẵn cho Courier-IMAP, Courier-
Authlib, và Maildrop. Do đó chúng ta cần xây dựng nó để sử dụng. Các gói rpm
không nên xây dựng với quyền là root, courier-imap sẽ từ chối biên dịch nếu phát
hiện gói này chạy ở root. Vì vậy chúng tôi sẽ tạo một tài khoản bình thường (ví dụ
quantrimang) và gán cho nó một mật khẩu:
useradd -m -s /bin/bash quantrimang
passwd quantrimang
Sau đó chúng ta sử dụng lệnh sudo để quantrimang có thể biên dịch và cài đặt các
gói rpm. Nhưng trước tiên cần cho phép quantrimang chạy tất cả các lệnh sử dụng
sudo:
visudo
Trong tập tin được mở, tại dòng root ALL=(ALL) ALL thêm một dòng tương tự
dành cho quantrimang bên dưới:
[ ]
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
quantrimang ALL=(ALL) ALL
[ ]
Bây giờ là lúc xây dựng gói rpm. Đầu tiên trở thành quantrimang:
su quantrimang
Tiếp theo tạo môi trường xây dựng:
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/BUILDROOT
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
Tạo thư mục downloads và tải về tập tin nguồn tại đây:
mkdir $HOME/downloads
cd $HOME/downloads
wget />authlib-0.63.0.tar.bz2/download
wget />4.9.3.tar.bz2/download
wget />2.5.4.tar.bz2/download
Vẫn ở trong $HOME/downloads, chúng ta xây dựng courier-authlib:
sudo rpmbuild -ta courier-authlib-0.63.0.tar.bz2
Sau khi hoàn thành, gói rpm có thể được tìm thấy trong
/root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 nếu bạn đang chạy hệ
thống i386):
sudo ls -l /root/rpmbuild/RPMS/x86_64
Các gói có sẵn của rpm hiển thị như sau:
[quantrimang@server1 downloads]$ sudo ls -
l /root/rpmbuild/RPMS/x86_64
total 520
-rw-r r 1 root root 123448 May 25 18:06 courier-
authlib-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 265144 May 25 18:06 courier-
authlib-debuginfo-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 34876 May 25 18:06 courier-
authlib-devel-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 17448 May 25 18:06 courier-
authlib-ldap-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 13808 May 25 18:06 courier-
authlib-mysql-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 13020 May 25 18:06 courier-
authlib-pgsql-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 8276 May 25 18:06 courier-
authlib-pipe-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 34108 May 25 18:06 courier-
authlib-userdb-0.63.0-1.fc15.x86_64.rpm
[quantrimang@server1 downloads]$
Chọn một gói bạn muốn, sau đó cài đặt nó tương tự dưới đây:
sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.63.0-
1.fc15.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-
0.63.0-1.fc15.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-
0.63.0-1.fc15.x86_64.rpm
Quay trở lại thư mục downloads:
cd $HOME/downloads
Chạy các lệnh sau đây để tạo các thư mục tiếp nhận yêu cầu/cho phép thay đổi
(nếu không quá trình xây dựng Courier-Imap sẽ thất bại):
sudo mkdir /var/cache/ccache/tmp
sudo chmod o+rwx /var/cache/ccache/
sudo chmod 777 /var/cache/ccache/tmp
Bây giờ chạy lệnh rpmbuild lần nữa, lưu ý rằng không thông qua sudo bởi trình
biên dịch không cho phép nó chạy như là root.
rpmbuild -ta courier-imap-4.9.3.tar.bz2
Sau đó gói rpm sẽ được tìm thấy trong $HOME/rpm/RPMS/x86_64
($HOME/rpm/RPMS/i386 nếu là hệ thống i386):
cd $HOME/rpm/RPMS/x86_64
Chạy lệnh sau:
ls -l
Bạn sẽ nhận được các gói rpm có sẵn:
[quantrimang@server1 x86_64]$ ls -l
total 1040
-rw-rw-r 1 quantrimang quantrimang 315872 May 25 18:33 courier-imap-
4.9.3-1.15.x86_64.rpm
-rw-rw-r 1 quantrimang quantrimang 743200 May 25 18:33 courier-imap-
debuginfo-4.9.3-1.15.x86_64.rpm
[quantrimang@server1 x86_64]$
Cài đặt courier-imap bằng lệnh sau:
sudo rpm -ivh courier-imap-4.9.3-1.15.x86_64.rpm
Quay trở lại thư mục downloads:
cd $HOME/downloads
Chạy lệnh rpmbuild để xây dựng gói maildrop:
sudo rpmbuild -ta maildrop-2.5.4.tar.bz2
Sau đó gói rpm có thể tìm thấy tại /root/rpmbuild/RPMS/x86_64
(/root/rpmbuild/RPMS/i386 với hệ thống i386).
sudo ls -l /root/rpmbuild/RPMS/x86_64
Các gói rpm có sẵn được liệt kê:
[quantrimang@server1 downloads]$ sudo ls -
l /root/rpmbuild/RPMS/x86_64
total 1628
-rw-r r 1 root root 123448 May 25 18:06 courier-
authlib-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 265144 May 25 18:06 courier-
authlib-debuginfo-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 34876 May 25 18:06 courier-
authlib-devel-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 17448 May 25 18:06 courier-
authlib-ldap-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 13808 May 25 18:06 courier-
authlib-mysql-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 13020 May 25 18:06 courier-
authlib-pgsql-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 8276 May 25 18:06 courier-
authlib-pipe-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 34108 May 25 18:06 courier-
authlib-userdb-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 278520 May 25 18:50 maildrop-
2.5.4-1.15.x86_64.rpm
-rw-r r 1 root root 685672 May 25 18:50 maildrop-
debuginfo-2.5.4-1.15.x86_64.rpm
-rw-r r 1 root root 99924 May 25 18:50 maildrop-
devel-2.5.4-1.15.x86_64.rpm
-rw-r r 1 root root 63968 May 25 18:50 maildrop-
man-2.5.4-1.15.x86_64.rpm
[quantrimang@server1 downloads]$
Cài đặt maildrop bằng lệnh sau:
sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.5.4-
1.15.x86_64.rpm
Sau khi biên dịch và cài đặt thành công các gói cần thiết, bạn có thể trở lại root
bằng lệnh:
exit
5. Áp dụng bản vá Quota Patch cho Postfix
Chúng ta phải lấy các nguồn Postfix rpm, vá nó với bản vá quota, xây dựng một
gói Postfix rpm mới và cài đặt nó:
cd /usr/src
wget -
esslingen.de/pub/Mirrors/fedora/linux/releases/15/Everything/source/SRPMS/p
ostfix-2.8.2-2.fc15.src.rpm
rpm -ivh postfix-2.8.2-2.fc15.src.rpm
Các cảnh báo sau hiện ra, bạn có thể bỏ qua nó:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
cd /root/rpmbuild/SOURCES
wget
cd /root/rpmbuild/SPECS/
Chúng ta cần sửa lại tập tin postfix.spec:
vi postfix.spec
Và thêm Patch0: postfix-vda-v10-2.8.2.patch vào đoạn # Patches, thêm %patch0 -
p1 -b .vda-v10 vào đoạn %setup -q như sau:
[ ]
# Patches
Patch0: postfix-vda-v10-2.8.2.patch
Patch1: postfix-2.7.0-config.patch
Patch2: postfix-2.6.1-files.patch
Patch3: postfix-alternatives.patch
Patch8: postfix-large-fs.patch
Patch9: pflogsumm-1.1.3-datecalc.patch
[ ]
%prep
%setup -q
# Apply obligatory patches
%patch0 -p1 -b .vda-v10
%patch1 -p1 -b .config
%patch2 -p1 -b .files
%patch3 -p1 -b .alternatives
%patch8 -p1 -b .large-fs
[ ]
Sau đó xây dựng gói Postfix rpm mới với quota và hỗ trợ MySQL:
rpmbuild -ba postfix.spec
Vào thư mục chứa postfix rpm trong /root/rpmbuild/RPMS/x86_64
(/root/rpmbuild/RPMS/i386 nếu là hệ thống i386):
cd /root/rpmbuild/RPMS/x86_64
Chạy lệnh:
ls -l
Bạn sẽ nhận được các gói có sẵn:
[root@server1 x86_64]# ls -l
total 8308
-rw-r r 1 root root 123528 Jun 20 16:33 courier-
authlib-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 265100 Jun 20 16:33 courier-
authlib-debuginfo-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 34876 Jun 20 16:33 courier-
authlib-devel-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 17452 Jun 20 16:33 courier-
authlib-ldap-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 13812 Jun 20 16:33 courier-
authlib-mysql-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 13040 Jun 20 16:33 courier-
authlib-pgsql-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 8280 Jun 20 16:33 courier-
authlib-pipe-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 34144 Jun 20 16:33 courier-
authlib-userdb-0.63.0-1.fc15.x86_64.rpm
-rw-r r 1 root root 278628 Jun 20 18:29 maildrop-
2.5.4-1.15.x86_64.rpm
-rw-r r 1 root root 685320 Jun 20 18:29 maildrop-
debuginfo-2.5.4-1.15.x86_64.rpm
-rw-r r 1 root root 99920 Jun 20 18:29 maildrop-
devel-2.5.4-1.15.x86_64.rpm
-rw-r r 1 root root 63964 Jun 20 18:29 maildrop-
man-2.5.4-1.15.x86_64.rpm
-rw-r r 1 root root 2170848 Jun 20 18:40 postfix-
2.8.2-2.fc15.x86_64.rpm
-rw-r r 1 root root 4599208 Jun 20 18:40 postfix-
debuginfo-2.8.2-2.fc15.x86_64.rpm
-rw-r r 1 root root 63536 Jun 20 18:40 postfix-
perl-scripts-2.8.2-2.fc15.x86_64.rpm
[root@server1 x86_64]#
Chọn một gói bạn muốn và cài đặt như dưới đây:
rpm -ivh postfix-2.8.2-2.fc15.x86_64.rpm