Tạo lập mail server trên hệ thống GNU/Linux (Phần 2)

Bài này là phần tiếp theo của bài sau đây

Database - MySQL

Cài đặt

sudo apt-get install mysql-client mysql-server

Config này sẽ yêu cầu bạn cài đặt root password, hãy thiết lập và ghi nhớ password này! Mục đích của phần này là chúng ta sẽ thiết lập rootPASSWORD

Thiết lập

Bây giờ ta sẽ cần tạo các bảng cho các lookups. Đầu tiên bạn cần tạo một user MySQL để dùng riêng cho mail. Sau đó bạn cần tạo một database, hãy ghi nhớ mail username và password mà bạn đã chọn. Bạn sẽ cần đến password của bạn trong quá trình cài đặt MySQL package.

# If not already done (in package installation)...
mysqladmin -u root -p password new_password
# log in as root
mysql -u root -p
# then enter password for the root account when prompted
Enter password:
# then we create the mail database
create database maildb;
# then we create a new user: "mail"
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON maildb.* TO 'mail'@'localhost' IDENTIFIED by 'mailPASSWORD';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON maildb.* TO 'mail'@'%' IDENTIFIED by 'mailPASSWORD';
exit;

Tất nhiên, hãy thay thế mailPASSWORD ở trên bằng password mà bạn đã chọn.

Sau đó, bạn cần tạo các bảng sau đây:

  • alias
  • domains
  • users

Chúng ta sẽ tạo thêm các bảng khác để phục vụ cho việc mở rộng thêm, tuy nhiên hiện tại chỉ cần các bảng vừa tạo là đủ.

Login vào mysql với mail user mới.

mysql -u mail -p maildb
# enter the newly created password
Enter password:

Sau đó hãy chạy các command sau đây để tạo các bảng:

CREATE TABLE `aliases` (
`pkid` smallint(3) NOT NULL auto_increment,
`mail` varchar(120) NOT NULL default '',
`destination` varchar(120) NOT NULL default '',
`enabled` tinyint(1) NOT NULL default '1',
PRIMARY KEY  (`pkid`),
UNIQUE KEY `mail` (`mail`)
) ;
CREATE TABLE `domains` (
`pkid` smallint(6) NOT NULL auto_increment,
`domain` varchar(120) NOT NULL default '',
`transport` varchar(120) NOT NULL default 'virtual:',
`enabled` tinyint(1) NOT NULL default '1',
PRIMARY KEY  (`pkid`)
) ;
CREATE TABLE `users` (
`id` varchar(128) NOT NULL default '',
`name` varchar(128) NOT NULL default '',
`uid` smallint(5) unsigned NOT NULL default '5000',
`gid` smallint(5) unsigned NOT NULL default '5000',
`home` varchar(255) NOT NULL default '/var/spool/mail/virtual',
`maildir` varchar(255) NOT NULL default 'blah/',
`enabled` tinyint(1) NOT NULL default '1',
`change_password` tinyint(1) NOT NULL default '1',
`clear` varchar(128) NOT NULL default 'ChangeMe',
`crypt` varchar(128) NOT NULL default 'sdtrusfX0Jj66',
`quota` varchar(255) NOT NULL default '',
PRIMARY KEY  (`id`),
UNIQUE KEY `id` (`id`)
) ;
# Để kiểm tra các bảng được tạo ra:
describe aliases; describe domains; describe users;
# sau đó hãy tắt mysql
exit;

Tiếp theo, ta sẽ edit file my.cnf của MySQL. Trong Ubuntu/debian, file này được mặc định tạo ra. Trong Mandrake, chúng ta cần phải tạo tay một file rỗng bên trong thư mục /etc. Nhưng ta sẽ cần phải thiết lập lại nó, vì vậy:

sudo vi /etc/mysql/my.cnf

Trong version cũ, bạn cần comment dòng này lại:

#skip-networking

Tuy nhiên, với version mới thì file này được mặc định bind vào địa chỉ của localhost nên ta không cần làm gì cả:

bind-address = 127.0.0.1

Sẽ rất tiện lợi nếu ta thực hiện log lại các câu lệnh được gọi đến MySQL ngay từ đâu. Vì vậy, hãy enable các dòng sau:

general_log_file = /var/log/mysql/mysql.log
general_log = 1

Ta sẽ comment dòng này lại sau khi mọi thứ đã hoạt động ổn định, bởi việc lưu log sẽ làm chậm tốc độ của mysql. Restart MySQL để chắc rằng mọi thiết lập mới sẽ được lưu lại và thực hiện.

sudo /etc/init.d/mysql restart

MTA - Postfix

Cài đặt

sudo apt-get install postfix postfix-mysql

Nhập câu lệnh này, bạn sẽ được yêu cầu chọn loại email server. Hãy chọn Internet site, nó sẽ đưa ra một tên server gợi ý cho bạn. Sửa lại nếu cần thiết.

Thiết lập

Bạn cần đặt tên server của mình trong file sau đây

sudo vi /etc/mailname

Tên server có thể có dang như là smtp.domain.name, tất nhiên tên domain của bạn sẽ được thay thế vào đây.

Bây giờ hãy mở file config main postfix:

sudo vi /etc/postfix/main.cf

Debian và Ubuntu đã đưa vào file một số giá trị mặc định. Bạn có thể sẽ cần comment lại một số nếu bạn muốn thiết lập các giá trị đó.

Đầu tiên, thiết lập tên server của bạn:

# This is already done in /etc/mailname
#myhostname= mail.example.com

Tiếp theo là nguồn mà domain gắn với email từ máy hiện tại, đây có thể là tên đầy đủ của server hoặc domain name.

# myorigin=/etc/mailname
myorigin=example.com

Tiếp theo, hãy quyết định greeting text. Vừa đủ để có thể vừa tiện lợi nhưng lại không tiết lộ quá nhiều thông tin nhạy cảm cho các hacker.

smtpd_banner = $myhostname ESMTP $mail_name

Tiếp theo, bạn cần quyết định việc gửi mail ra ngoài sẽ sử dụng một server SMTP khác hay là bạn tự mình gửi. Nếu bạn tự mình gửi, bạn sẽ không phải thông qua bên thứ ba nhưng bạn có thể sẽ gặp rủi ro khi server của bạn mở đối với thế giới bên ngoài, và bạn có thể vô tình bị block bởi các spam blockers. Và sẽ có nhiều việc hơn cho server của bạn. Hơn nữa có nhiều server block những dynamic dns host, vì vậy server của bạn có thể bị reject. Tuy nhiên, hãy cứ chọn cách nào mà bạn cảm thấy thoải mái khi sử dụng.

# để trống nếu bạn tự gửi
relayhost =

Tiếp theo là chi tiết về netwwork. Bạn sẽ chấp nhận kết nối tự mọi nơi và bạn chỉ tin tưởng máy hiện tại.

inet_interfaces = all
mynetworks_style = host

Hiện tại tôi giới hạn server của mình cho ip4 và tránh ip6 ở thời điểm thiện tại.

inet_protocols=ipv4

Tiếp theo, bạn có thể đặt mặt nạ cho một số địa chỉ gửi ra ngoài. Ví dụ tên máy của bạn là mail.domain.com. Bạn có thể không muốn outgoing mail đến từ [email protected]. Bạn cũng có thể chỉ định domain nào không cần phải đặt mặt nạ. Ví dụ: nếu bạn sử dụng một service dns động, server address của bạn sẽ trở thành một subdomain. Bạn cũng có thể chỉ định user nào không cần thiết lập mặt nạ.

masquerade_domains = mail.example.com www.example.com !sub.dyndomain.com
masquerade_exceptions = root