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-AUTH và TLS và quota (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, SpamAssassin và ClamAV để 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!
Đảm bảo rằng bạn đã đăng nhập với tư cách là root (nhập
để 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...
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:
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
(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
Đầu ra sẽ trông như thế này:
Tiếp theo mở debian/rules và thay đổi DEB_BUILD_HARDENING từ 1 thành 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:
Bây giờ chúng ta có thể xây dựng các gói .deb Postfix mới:
Bây giờ chúng ta đi lên một thư mục, đó là nơi .deb đã được tạo:
Lệnh
hiển thị cho bạn các gói có sẵn:
Chọn các gói postfix và postfix-mysql và cài đặt chúng như sau:
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:
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ư:
Vẫn trên shell MySQL, chúng ta tạo các bảng cần thiết cho Postfix và Courier:
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).
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].
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).
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ụ,
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.
Vui lòng đảm bảo rằng /etc/mysql/my.cnf chứa dòng sau:
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ờ:
Chạy
để đảm bảo rằng MySQL đang lắng nghe trên 127.0.0.1 (localhost.localdomain):
Bây giờ chúng ta hãy tạo sáu tệp văn bản.
Sau đó thay đổi quyền và nhóm của các tệp này:
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ư.
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!
Sau đó, chúng tôi tạo chứng chỉ SSL cần thiết cho TLS:
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:
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":
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):
Tiếp theo tạo tệp /etc/postfix/sasl/smtpd.conf. Nó sẽ trông như thế này:
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):
Sau đó khởi động lại Postfix và Saslauthd:
Sau đó, tạo bản sao lưu của /etc/courier/authmysqlrc và xóa tệp cũ:
Sau đó mở /etc/courier/authmysqlrc và nhập các dòng sau vào đó:
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ỉ...
... 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):
Sau đó tạo lại các chứng chỉ...
... và khởi động lại Courier:
Bằng cách chạy
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#
hoặc như thế này (nếu administrator là tên người dùng của bạn):
Bất cứ khi nào bạn sửa đổi /etc/aliases, bạn phải chạy
sau đó và khởi động lại Postfix:
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:
Tệp sẽ trông như thế này:
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:
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:
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:
Bây giờ chúng ta phải cấu hình Postfix để chuyển email đến qua amavisd-new:
Sau đó, thêm các dòng sau vào /etc/postfix/master.cf:
Sau đó khởi động lại Postfix:
Bây giờ hãy chạy
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:
DCC không có trong kho lưu trữ Ubuntu 13.10, vì vậy chúng ta cài đặt nó như sau:
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 đó:
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:
lugin:
CC:
Bạn có thể kiểm tra cấu hình SpamAssassin của mình bằng cách thực thi:
Nó sẽ không hiển thị bất kỳ lỗi nào.
Khởi động lại amavisd-new sau đó:
Bây giờ chúng ta cập nhật các bộ quy tắc SpamAssassin của mình như sau:
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ở trình chỉnh sửa công việc cron. Tạo công việc cron sau:
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ờ.
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-AUTH và TLS và quota (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, SpamAssassin và ClamAV để 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
Đ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
... 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
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
Mã:
postconf -d | grep mail_version
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
Mã:
vi debian/rules
Mã:
|
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#
Mã:
dpkg-buildpackage
Mã:
cd ..
Mã:
ls -l
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
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
Nhập mật khẩu: <-- yourrootsqlpassword
Tiếp theo, chúng ta vào MySQL shell:
Mã:
mysql -u root -p
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;
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;
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 |
nguồn | đích |
[emailprotected] | [emailprotected] |
mật khẩu | quota | |
[emailprotected] | No9.E4skNvGa. ("bí mật" ở dạng mã hóa) | 10485760 |
tên miền | vận chuyển |
example.com | smtp:[1.2.3.4] |
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ã:
|
Mã:
/etc/init.d/mysql restart
Mã:
netstat -tap | grep mysql
Mã:
root@server1:~# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 24970/mysqld
root@server1:~#
Mã:
vi /etc/postfix/mysql-virtual_domains.cf
Mã:
|
Mã:
vi /etc/postfix/mysql-virtual_forwardings.cf
Mã:
|
Mã:
vi /etc/postfix/mysql-virtual_mailboxes.cf
Mã:
|
Mã:
vi /etc/postfix/mysql-virtual_email2email.cf
Mã:
|
Mã:
vi /etc/postfix/mysql-virtual_transports.cf
Mã:
|
Mã:
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
Mã:
|
Mã:
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
Mã:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
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'
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 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
Mã:
vi /etc/default/saslauthd
Mã:
|
Mã:
vi /etc/pam.d/smtp
Mã:
|
Mã:
vi /etc/postfix/sasl/smtpd.conf
Mã:
|
Mã:
adduser postfix sasl
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ã:
|
Mã:
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc
Mã:
vi /etc/courier/authmysqlrc
Mã:
|
Mã:
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem
Mã:
vi /etc/courier/imapd.cnf
Mã:
|
Mã:
vi /etc/courier/pop3d.cnf
Mã:
|
Mã:
mkimapdcert
mkpop3dcert
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
Mã:
telnet localhost pop3
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ã:
|
Mã:
|
Mã:
newaliases
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
Đầ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
Mã:
|
Mã:
vi /etc/amavis/conf.d/20-debian_defaults
Mã:
|
Mã:
vi /etc/amavis/conf.d/50-user
Mã:
|
Mã:
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/clamav-daemon restart
Mã:
postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'
Mã:
vi /etc/postfix/master.cf
Mã:
|
Mã:
/etc/init.d/postfix restart
Mã:
netstat -tap
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
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
Mã:
vi /etc/spamassassin/local.cf
Mã:
|
Mã:
vi /etc/spamassassin/v310.pre
Mã:
|
Mã:
spamassassin --lint
Khởi động lại amavisd-new sau đó:
Mã:
/etc/init.d/amavis restart
Mã:
sa-update --no-gpg
Mã:
crontab -e
Mã:
|