Lonely Hawk
Zone:
1G /
1G swap
3G / var mail is stored here, so set a relatively large
1G / TMP
1g / home
3G / USR
Left / DATA
2. User
Add a CNHAWK user, the password is further agreed, and the CNHAWK user needs to join the WHEEL group, and the root password is still agreed.
3. Packages installation
Select minimize installation
Choose
Select in the Custom Options
Compat3x
Compat4x
MAN
ports
4.rc.conf
set up:
Sendmail_enable = "none"
5. Install MySQL
A. Can be installed in Ports
CD / usr / ports / databases / mysql323-server
Make Install
The installed mysql version is mysql-3.23.58
B. The following is manually installing mysql-3.23.55
1) Add mysql user group and mysql user
Hawk # Pw GroupAdd MySQL
Hawk # pw useeradd mysql -g mysql -s / nonexistent
2) Configure installation
Hawk # tar zxvf mysql-3.23.55.tar.gz
Hawk # cd mysql-3.23.55
Hawk # ./configure --prefix = / usr / local / mysql --with-low-memory /
--with-charset = GB2312 --WITHOUT-Debug
Hawk # make
Hawk # make install
Hawk # scripts / mysql_install_db
Hawk # chown -r root / usr / local / mysql
Hawk # chown -r mysql / usr / local / mysql / var
Hawk # chgrp -r mysql / usr / local / mysql
Hawk # cp support-files / my-medium.cnf /etc/my.cnf
HAWK # ln -s / usr / local / mysql / bin / safe_mysqld / usr / local / bin / safe_mysqld
Hawk # ln -s / usr / local / mysql / bin / mysqladmin / usr / local / bin / mysqladmin
Hawk # ln -s / usr / local / mysql / bin / mysql / usr / local / bin / mysql
Hawk # ln -s / usr / local / mysql / lib / mysql / usr / local / lib / mysql
3) Edit User Database
The following is the statement of the establishment of the library
Use mysql;
# ====================== ============================== =========
INSERT INTO USER (Host, User, Password) Values ('localhost', 'postfix', '');
Update user set password = password ('hawk') where user = 'postfix'; flush privileges;
Grant All on mail. * To postfix @ localhost identified by "hawk";
# ====================== Courier ============================= =========
INSERT INTO USER (Host, User, Password) Values ('localhost', 'coier');
Update user set password = password ('hawk') where user = 'channel';
Flush privileges;
Grant SELECT, INSERT, UPDATE ON Mail. * To Courier
# ======================= ============================ ==========
#Create mail database
Create Database Mail;
Use mail;
#Create the aliases TABLE
CREATE TABLE Aliases
Alias varchar (255) Not null default ',
RCPT VARCHAR (255) Default NULL,
Primary Key (Alias)
) TYPE = MyISAM;
#Create the transport table
CREATE TABLE TRANSPORT
Domain char (128) Not null default ',
TRANSPORT Char (128) Not null default ',
UNIQUE Key Domain (Domain)
) TYPE = MyISAM;
#Create thevirtua_users Table
Create Table Virtual_Users
Unique_id int (32) Unsigned Not Null Auto_Increment,
ID char (128) Not null default '',
Password char (128) Default Null,
Uid Int (10) unsigned default '2003',
GID INT (10) unsigned default '2003',
Home char (255) Default Null, Maildir Char (255) Default Null,
Date_add Date Default NULL,
Time_add Time Default NULL,
Domain char (128) Default Null,
Name Char (255) Default Null,
Imapok Tinyint (3) Unsigned Default '1',
Quota char (255) Default '10485760',
Primary Key (ID),
Key Unique_ID (unique_id)
) TYPE = MyISAM;
#Create address Table / / This section is incremented by using IGENUS.
Create Table Address
ID INT (32) Unsigned Not Null Auto_Increment,
Unique_id int (32) Not Null Default '0',
Name Char (255) Not Null Default '',
Email char (255) Not null default '',
Primary Key (ID),
Key Unique_ID (unique_id)
) TYPE = MyISAM;
# ===================================================== =========
4) Set the self-start:
Hawk # edit /usr/local/etc/rc.d/mysqld.sh
Example: mysqld.sh
#! / bin / sh
Case "$ 1" in
START)
IF [-x / usr / local / mysql / bin / safe_mysqld]; then
/ usr / local / mysql / bin / safe_mysqld --user = mysql &> / dev / null && echo -n 'mysqld'
Fi
;
STOP)
/ usr / bin / killall mysqld> / dev / null 2> & 1 && echo -n 'mysqld'
;
*)
echo ""
echo "USAGE:` Basename $ 0` {start | stop} "
echo ""
EXIT 64
;
ESAC
Hawk # chmod 755 /usr/local/etc/rc.d/mysqld.sh
6. Install Cyrus-SASL
1) Install Cyrus-SASL-2.1.12
Hawk # tar -zxvf cyrus-sasl-2.1.12.tar.gz
Hawk # CD Cyrus-SASL-2.1.12
Hawk # ./configure --disable-sample --disable-pwcheck --disable-cram /
--Disable-Digest - Disable-KRB4 - Disable-gssapi --disable-anon / - with-saslauthd = / var / run / saslauthd --enable-plain --enable-login
Hawk # make
Hawk # make install
Hawk # ln -s / usr / local / lib / sasl2 / usr / lib / sasl2
2) Configure the LIB library of SASL
Hawk # edit /etc/defaults/rc.conf
(In ldconfig_paths = "/ usr / loca / lib) plus / usr / local / lib / sasl2")
Hawk # shutdown -r now (make it effective)
3) Run Saslauthd (if you use PAM direct authentication, this step can be omitted)
Example Saslauthd.sh
#! / bin / sh
Case "$ 1" in
START)
IF [-x / usr / local / sbin / saslauthd]; then
/ usr / local / sbin / saslauthd -a pam> / dev / null && echo -n 'saslauthd'
Fi
;
STOP)
/ usr / bin / killall saslauthd> / dev / null 2> & 1 && echo -n 'saslauthd'
;
*)
echo ""
echo "USAGE:` Basename $ 0` {start | stop} "
echo ""
EXIT 64
;
ESAC
Hawk # mkdir / var / run / saslautd
Hawk # edit /usr/local/etc/rc.d/saslauthd.sh
Hawk # chmod 755 /usr/local/etc/rc.d/saslauthd.sh
4) Prepare the Profile of PostFix authentication
A) Direct authentication using PAM:
Hawk # echo pwcheck_method: Pam> /usr/local/lib/sasl2/smtpd.conf
B) Call PAM certification using Saslauthd:
Hawk # echo pwcheck_method: saslauthd> /usr/lib/sasl2/smtpd.conf
7. Install PAM_MYSQL
Install PAM_MYSQL-0.5 (due to the use of source installation compile, use freebsd4.9 ports installation)
1) Installation
Hawk # pkg_add -r gmake (PAM_MYSQL requires gmake)
Hawk # CD / USR / PORTS / Security / PAM-MySQL /
Hawk # cp /usr/local/lib/pam_mysql.so / usr / lib /
2) Configure Pam.conf call mysql support SASL certification
Hawk # edit /etc/pam.conf Add the following code to add the POP3 and IMAP:
SMTP Auth Sufficient Pam_Mysql.so User = Postfix Passwd = Hawk Host = LocalHost DB = Mail Table = Virtual_Users UserColumn = ID PasswdColumn = Password Crypt = 1
smtp account required pam_mysql.so user = postfix passwd = hawk host = localhost db = mail table = virtual_users usercolumn = id passwdcolumn = password crypt = 1 (Note: crypt password encryption, if cleartext cyrpt = 0, if using password ( Encryption CRYPT = 2)
8. Install Postfix
1) Stop Sendmail
Hawk # mv / usr / bin / newaliases /usr/bin/newaliases.off
HAWK # mv / usr / bin / mailq /usr/bin/mailq.off
Hawk # mv / usr / sbin / sendmail /usr/sbin/sendmail.off
Hawk # mv /etc/rc.sendmail /etc/sendmail.off
Hawk # edit /etc/rc.conf (in Sendmail = "YES", add #)
2) Add postfix users
Hawk # pw groupadd postfix -g 2003
Hawk # pw groupadd posddrop -g 2004
Hawk # pw useeradd postfix -u 2003 -g 2003 -d / dev / null -s / nologin
3) Installation
Install postfix-2.0.10.tar.gz
Hawk # tar zxvf postfix-2.0.10.tar.gz
Hawk # cd postfix-2.0.10
If your mysql is the source code compile, use the following command.
Hawk # make -f makefile.init makefiles' ccargs = -duse_sasl_auth -dhas_mysql -i / usr / local / mysql / include / mysql -i / usr / local / include / sasl '' auxlibs = -L / usr / local / lib / -L / usr / local / mysql / lib / mysql -lmysqlclient -lsasl2 -lz -lm '
If your MySQL is Ports installed, please use the following command.
Hawk # make -f makefile.init makefiles' ccargs = -duse_sasl_auth -dhas_mysql -i / usr / local / include / mysql -i / usr / local / include / sasl '' auxlibs = -l / usr / local / lib / L / usr / local / lib / mysql -lmysqlclient -lsasl2 -lz -lm '
Hawk # make
Hawk # make install (for the first installation, use this command during installation, use / TMP when prompted to select TMP)
Hawk # make Upgrade (Upgrade Old Release Use this command)
4) Configuration
Hawk # echo 'Postfix: root' >> / etc / aliases
Hawk # / usr / bin / newaliases
(Note: If you prompt Postfix unable to open the OpieKeys file: #hawk chown postfix: postfix / etc / opiekey
A) Edit Modify /etc/posftix/main.cf Example: main.cf
# ======= Base =============== mHostname = hawk.the9.com
Mydomain = the9.com
Home_mailbox = maildir /
MyDestination = $ MyHostName, $ MyDomain, $ TRANSPORT_MAPS
Local_recipient_maps = is empty
Mailbox_command = / usr / lib / channela-imap / bin / deliverquota -w 90 ~ / maildir
# ======= mysql =============
TRANSPORT_MAPS = mysql: /etc/postfix/transport.cf
Virtual_gid_maps = mysql: /etc/postfix/gIDS.cf
Virtual_mailbox_base = / var / mail
Virtual_mailbox_maps = mysql: /etc/postfix/mysql_virtual.cf
Virtual_maps = mysql: /etc/postfix/mysql.aliases.cf
Virtual_UID_MAPS = mysql: /etc/postfix/uids.cf
# ======= quota =============
Message_size_limit = 2097152 // Limits 2MB of each email
Virtual_mailbox_limit_inbox = no
Virtual_mailbox_limit_maps = mysql: /etc/postfix/mailboxsize-mysql.cf
Virtual_mailbox_limit_override = yes
Virtual_mAildir_extended = YES
Virtual_create_maildirsize = yes
Virtual_mailbox_limit = 10485760 / / The size of the total mailbox 10MB
# ====== SASL ================================================================================================================================================================================
SMTPD_SASL_AUTH_ENABLE = YES
SMTPD_SASL_SECURITY_OPTIONS = Noanonymous
Broken_SASL_AUTH_CLIENTS = YES
SMTPD_RECIPIENT_RESTRICTIONS = permit_sasl_authenticated permit_auth_destinatio reject
#SMTPD_SASL_LOCAL_DOMAIN = $ MyDomain
SMTPD_CLIENT_RESTRICTIONS = permit_sasl_authenticated
B) Confirm that the configuration of /etc/postfix/master.cf is as follows
Virtual UNIX - N N - Virtual
C) Edit /etc/posftix/Transport.cf Example: Transport.cf
User = postfix
Password = hawk
DBNAME = MAIL
Table = Transport
SELECT_FIELD = TRANSPORT
Where_field = Domain
Hosts = localhost
D) Edit /etc/postfix/gids.cf
Example: gids.cf
User = postfix
Password = hawk
DBNAME = MAIL
Table = Virtual_Users
SELECT_FIELD = GID
Where_field = id
Hosts = localhost
E) edit /etc/postfix/uids.cf
Example: uids.cf
User = postfix
Password = hawk
DBNAME = MAIL
Table = Virtual_Users
SELECT_FIELD = UID
Where_field = id
Hosts = localhost
F) Edit /etc/posftix/mysql_virtual.cf
Example: mysql_virtual.cf
User = postfix
Password = hawk
DBNAME = MAIL
Table = Virtual_Users
SELECT_FIELD = MAILDIR
Where_field = id
Hosts = localhost
G) Edit /etc/postfix/mysql.aliases.cf Example: mysql.aliases.cf
User = postfix
Password = hawk
DBNAME = MAIL
Table = aliases
SELECT_FIELD = RCPT
Where_field = alias
Hosts = localhost
H) Edit /etc/postfix/mailboxxsize-mysql.cf Example: MailboxSize-mysql.cf
User = postfix
Password = hawk
DBNAME = MAIL
Table = Virtual_Users
SELECT_FIELD = quota
Where_field = id
Hosts = localhost
5) Set self-start
Hawk # edit /usr/local/etc/rc.d/postfix-server.sh
Example: postfix-server.sh
#! / bin / sh
Case "$ 1" in
START)
IF [-x / usr / sbin / postfix]; then
/ usr / sbin / postfix start && echo -n 'postfix'
Fi
;
STOP)
/ usr / sbin / postfix stop && echo -n 'postfix'
;
*)
echo ""
echo "USAGE:` Basename $ 0` {start | stop} "
echo ""
EXIT 64
;
ESAC
Hawk # chmod 755 /usr/local/tc/rc.d/postfix-server.sh9. Installing Expect.Tar.gz (NEED TCL)
Hawk # pkg_add TCL-8.3.5_2.tgz
Hawk # TAR ZXVF EXPECT-5.38.TAR.GZ
Hawk # CD Expect-5.38
Hawk # ./configure --enable-threads --with-tcl = / usr / local / lib / tcl 8.3 --with-tclinclude = / usr / local / include / TCL8.3
Hawk # make
Hawk # make install
10. Install Courier-IMAP-1.7.1 (NEED GMAKE, EXPECT)
1, installation
Hawk # pkg_add -r gmake remote installation package
Hawk # pw useradd CNHAWK -G Wheel (The Software Must Run The Configure Script As Normal User, Not root)
HAWK $ BUNZIP2 COURIER-IMAP-1.7.1.tar.bz2
Hawk $ TAR XVF Courier-IMAP-1.7.1.tar
HAWK $ CD Courier-IMAP-1.7.1
If your mysql is the source code compile, use the following command.
Hawk $ ./configure --without-ipv6 --enable-unicode /
--Nable-Workarounds-for-imap-client-bugs /
--with-mysql-libs = / usr / local / mysql / lib / mysql /
--with-mysql-incrudes = / usr / local / mysql / include / mysql
If your mysql is Ports installation, please use the following command.
Hawk $. / Configure --without-ipv6 --enable-unicode --enable-workrounds-for-imap-client-bugs --with-mysql-libs = / usr / local / lib / mysql --with-mysql- INCLUDES = / usr / local / include / mysql
HAWK $ GMAKE
Hawk # su root
Hawk # gmake install
Hawk # Gmake Install-Configure
2) Configuration
Sample example: Authmysqlrc
## Version: $ ID: Authmysqlrc, V 1.10 2002/04/02 23:41:41 MRSAM EXP $
#
# CopyRight 2000 Double Precision, Inc. See Copying for
# distribution information.
#
# Do not alter lines That Begin with ##, they is used by # @@ Upgrading
# this configuration.
#
# authmysqlrc create from authmysqlrc.dist by sysconftool
#
# Do not install this file with world read permissions. This file
# Might Contain The MySQL Admin Password!
#
# Each line in this file must follow the folload format:
#
# Field [Spaces | Tabs] Value
#
# That IS, The name of the field, Followed by Spaces or Tabs, Followed By # Field Value. Trailing Spaces Are Prohibited.
## Name: location: 0
#
# The Server Name, UserId, and password used to log in.
MySQL_Server Localhost
MySQL_USERNAME COURER
MySQL_Password Hawk
## Name: mysql_socket: 0
#
# Mysql_socket can be used with mysql version 3.22 or Later, IT Specifier the
# FileSystem Pipe Used for the connection
#
Mysql_socket /tmp/mysql.sock
## Name: MySQL_Port: 0
#
# MySQL_Port Can Be Used with MySQL Version 3.22 or Later To Specify A Port To
# Connect TO.
MySQL_Port 3306
## Name: mysql_opt: 0
#
# Leave mysql_opt as 0, unless you know what you're doing.
MySQL_OPT 0
## Name: MySQL_Database: 0
#
# The name of the mysql Database We will open:
MySQL_DATABASE MAIL
## Name: mysql_user_table: 0
#
# The name of the Table Containing your user data. See readme.authmysqlrc
# for the required fields in this table.
MySQL_USER_TABLE VIRTUAL_USERS
## Name: mysql_crypt_pwfield: 0
#
# Either mysql_crypt_pwfield or mysql_clear_pwfield must be defined. Both
# area ok Too. Crypted passwords Go Into mysql_crypt_pwfield, Cleartext
# Passwords Go INTO mysql_clear_pwfield. Cleartext Passwords Allow
# CRAM-MD5 Authentication to Be Implement.
MySQL_Crypt_PWFIELD PASSWORD
## Name: mysql_clear_pwfield: 0
#
#
# Mysql_clear_pwfield clear
## Name: MySQL_DEFAULT_DOMAIN: 0
#
# IF default_domain is defined, and someone Tries to log in as 'user',
# we will look up 'user @ default_domain' instead.
#
#
# Default_domain example.com
## Name: mysql_uid_field: 0
#
# Other Fields in The MySQL Table:
#
# Mysql_uid_field - Contains The nameical userid of the account
#
MySQL_UID_FIELD UID
## Name: mysql_gid_field: 0 #
# Numeric GroupID of the account
MySQL_GID_FIELD GID
## Name: mysql_login_field: 0
#
# The login id, default is id. Basically The Query IS:
#
# SELECT MySQL_UID_FIELD, MySQL_GID_FIELD, ... WHERE ID = 'loginid'
#
Mysql_login_field ID
## Name: mysql_home_field: 0
#
MySQL_HOME_FIELD HOME
## Name: mysql_name_field: 0
#
# The user's name (optional)
MySQL_NAME_FIELD NAME
## Name: mysql_maildir_field: 0
#
# This is an optional field, and can be used to specify an arbitrary
# location of the maildir for the account, Which Normal DEFAULTS TO
# $ Home / maildir (where $ home is read from mysql_home_field).
#
# You STILL NEED TO PROVIDE A MYSQL_HOME_FIELD, EVEN IF you uncomment this
# OUT.
#
MySQL_MAILDIR_FIELD MAILDIR
## Name: mysql_quota_field: 0
#
# Define mysql_quota_field to be the name of the field That Can OptionAlly
# Specify a maildir quota. See Readme.mailsairda for more information
#
MySQL_QUOTA_FIELD quota
## Name: mysql_where_clause: 0
#
# This is optional, mysql_where_clause can Be Basically set to an arbitrary
# fixed string this is appended to the where clause of uery
#
Mysql_where_clause iMapok = 1
## Name: mysql_select_clause: 0
#
# (Experimental)
# This isbotional, mysql_select_clause can be set when you have a database,
# Which is structural Different from proposed. The Fixed String Will
# be used to do a select operation on Database, Which SHOULD RETURN FIELDS
# in Order Specified Bellow:
#
# Username, Cryptpw, Uid, GID, Clearpw, Home, Maildir, Quota, Fullname
#
# Enabling this option causes ignorance of any other field-related
# Options, Excluding Default Domain.
#
# There is TWO Variables, Which You Can Use. Substitution Will Be Made # for the, so you can put entered UserName
# in The Right Place of Your Query. Thase Variables Are:
# $ (local_part) and $ (Domain)
#
# IF a $ (domain) IS Empty (Not Given By THE Remote User) The Default Domain
# Name is buy in its place.
#
# This esample is a little bit modified adaptation of vmail-sql
# Database Scheme:
#
# MySQL_SELECT_CLASE SELECT POPBOX.LOCAL_PART, /
# Concat ('{md5}', popbox.password_hash), /
# Popbox.clearpw, /
# domain.uid, /
# domain.gid, /
# Concat (domain.path, '/', popbox.mbox_name), /
# '', /
# domain.quota, /
# '', /
# From popbox, domain /
# Where popbox.local_part = '$ (local_part)' /
# And popbox.domain_name = '$ (domain)' /
# And popbox.domain_name = domain.domain_name
#
## Name: mysql_chpass_clause: 0
#
# (Experimental)
# This is optional, mysql_chpass_clause can be set when you have a database,
# Which is structural Different from proposed. The Fixed String Will
# be used to do an update Operation on Database. in Other Words, IS
# uED, WHEN Changing password.
#
# There Are Four Variables, Which You Can Use. Substitution Will Be Made
# for them, so you can put entered Username (Local Part) and domain name
# in The Right Place of Your Query. There Variables Are:
# $ (local_part), $ (Domain), $ (NewPass), $ (NewPass_crypt)
#
# IF a $ (domain) IS Empty (Not Given By THE Remote User) The Default Domain
# Name is buy in its place.
# $ (newpass) Contains Plain Password
# $ (newpass_crypt) Contains ITS Crypted Form
#
# Mysql_chpass_clause Update Popbox /
# Set clearpw = '$ (newpass)', /
# Password_hash = '$ (newpass_crypt)' /
# Where local_part = '$ (local_part)' /
# And domain_name = '$ (domain)'
#
Edit Modification / USR / LIB / COURIER-IMAP / ETC / Authdaemonrc
Version = "authdaemond.mysql"
3) Set self-start
Hawk # cd /usr/local/etc/rc.d
Hawk # ln -s /usr/lib/courier-imap/libexec/imapd.rc imapd.sh
Hawk # ln -s /usr/lib/courier-imap/libexec/pop3d.rc pop3d.sh
Hawk # chmod 755 iMapd.sh
Hawk # chmod 755 pop3d.sh
Start testing now:
1) Set the user:
Hawk # mysql
Mysql> Use mail;
You can see in the database
mysql> show tables;
--------------
| TABLES_IN_MAIL |
--------------
| aliases |
| TRANSPORT |
| Virtual_Users |
--------------
mysql> desc aliases;
------- -------------- ---- ----- ------- --- ----
| Field | TYPE | NULL | Key | Default | EXTRA |
------- -------------- ---- ----- ------- --- ----
| Alias | VARCHAR (255) | | PRI | | |
| RCPT | VARCHAR (255) | Yes | | NULL | |
------- -------------- ---- ----- ------- --- ----
MySQL> Insert Aliases Values ('PostMaster@the9.com ',' cnhawk@the9.com ");
MySQL> Insert Aliases Values ('PostMaster@freebsd.net ',' cnhawk@freebsd.net ');
mysql> Select * from aliases;
------------------------------------
| alias | RCPT |
------------------------------------
|
Postmaster@the9.com
|
CNHAWK@the9.com
|
|
Postmaster@freebsd.net
|
CNHAWK@freebse.net
|
------------------------------------
Mysql> desc transport;
--------- --------- ---- ----- -------- - ----- | Field | TYPE | NULL | Key | Default | Extra |
--------- --------- ---- ----- -------- - -----
Domain | Char (128) | | Pri | | |
| TRANSPORT | Char (128) | | | | |
--------- --------- ---- ----- -------- - -----
MySQL> Insert Transport Values ('T9.com', 'Virtual:');
Mysql> Insert Transport Values ('Freebsd.net'); 'Virtual:');
mysql> Select * from transport;
-------------- -----------
| Domain | Transport |
-------------- -----------
| nankai.edu.cn | Virtual: |
| FreeBSD.NET | Virtual: |
-------------- -----------
Mysql> desc Virtual_Users;
--------- -------------------- ------ ---- - -------- ----------------
| Field | TYPE | NULL | Key | Default | EXTRA |
--------- -------------------- ------ ---- - -------- ----------------
| Unique_ID | INT (32) Unsigned | | MUL | NULL | Auto_Increment |
| ID | Char (128) | | Pri | | |
| Password | char (128) | Yes | | Null | |
| UID | INT (10) Unsigned | Yes | | 104 | |
| GID | INT (10) Unsigned | Yes | | 104 |
Home | CHAR (255) | Yes | | NULL | |
MAILDIR | Char (255) | Yes | | NULL | |
| DATE_ADD | DATE | YES | | NULL | |
| TIME_ADD | TIME | YES | | NULL | |
Domain | Char (128) | Yes | | NULL | |
| Name | CHAR (255) | Yes | | NULL | |
| Imapok | Tinyint (3) Unsigned | Yes | | 1 | |
| Quota | Char (255) | Yes | | 10485760 |
--------- -------------------- ------ ---- - -------- ----------------
Mysql> Insert Into Virtual_Usersmysql> (ID, Home, Password, MAILDIR, DATE_ADD, TIME_ADD, DOMAIN, NAME
Mysql> VALUES ('cnhawk@the9.com', '/ var / mail / ", Encrypt (' cnhawk '),
MySQL> 'the9.com/cnhawk/mails'', '' 2003-04-23', '01:18:24', 'kethe9.com' ,'cnhawk');
MySQL> Insert Into Virtual_Users
MySQL> (ID, Home, Password, MAILDIR, DATE_ADD, TIME_ADD, DOMAIN, NAME
Mysql> Values ('hawk@freebsd.net', '/ var / mail /', encrypt ('hawk'),
MySQL> 'Freebsd.net/hawk/mails'', '2003-04-23', '01:18:24','freebsd.net' ,'Hawk');
Mysql> quit
2) Set the user's directory and permissions:
Hawk # mkdir -p /var/mail/the9.com/cnhawk
Hawk # mkdir -p /var/mail/freebsd.net/hawk
HAWK # CD / USR / lib / channel - imap / bin
Hawk # ./maildirmake /var/mail/the9.com/cnhawk/mAildir
Hawk # ./maildirmake /var/mail/freebsd.net/hawk/mAildir
Hawk # chmod -r 700 /var/mail/the9.com/
Hawk # chmod -r 700 /var/mail/freebsd.net/
Hawk # chown -r postfix: postfix / var/mail/the9.com
Hawk # chown -r postfix: postfix /var/mail/freebsd.net
When the user is set, only two virtual domains are used here, and they can set several virtual domains, such as mail.com.
3) User login test:
First use Perl's MOD to generate this Base64 encoding, install ports in / usr / ports / converters / p5-mime-base64 /
Get the Plain character first. In order to get a Plain string, you must use Base64 encoding
Hawk # perl -mmime :: base64 -e 'print encode_base64 ("cnhawk/@the9.com");'
In the previous addition, you can successfully get a string
Y25OYXDRQHROZTKUY29T
Hawk # perl -mmime :: base64 -e 'print encode_base64 ("cnhawk");'
Y25OYXDR
% Telnet 127.0.0.1 25
Trying 127.0.0.1 ...
Connected to 0.
Escape Character is '^]'.
220 hawk.the9.com Esmtp Postfix
Ehlo hawk
250-hawk.the9.com
250-Pipelining
250-Size 2097152
250-VRFY250-ETRN
250-auth login plain otp
250-auth = login plain OTP
250-xverp
250 8bitmime
Auth login
334 vxnlcm5hbwu6
Y25OYXDRQHROZTKUY29T (this is the user name ID: cnhawk@the9.com)
334 UGFZC3DVCMQ6
Y25OYXDR (this is the user password Password: cnhawk)
235 Authentication Successful
quit
221 BYE
Connection Closed by Foreign Host.
Hawk # telnet 127.0.0.1 110
Trying 127.0.0.1 ....
Connected to 0.
Escape Character is '^]'.
Ok hello there.
User
CNHAWK@the9.com
OK Password Required.
Pass cnhawk
OK Logged in. (OK, POP login success)
quit
OK BYE-BYE.
Connection Closed by Foreign Host.
You can also test any other mail client program, such as Foxmail, Outlook Express, and more.
Then install Webmail
Install IGENUS
1. Install:
Hawk # CD / USR / PORTS / WWW / APACHE2
Hawk # make install
HAWK # CD / USR / PORTS / WWW / MOD_PHP4
Hawk # make install
Hawk # CD / VAR / MAIL
Hawk # tar zxvf igenus_docn.tar.gz
Hawk # edit /usr/local/apache/conf/httpd.conf
2. Configuration:
1) Group Nody, User Nobody
Modify to: Group Postfix, User Postfix
2) DocumentRoot "/ usr / local / apache / htdocs"
Modified to: DocumentRoot "/ var / mail / webmail"
3) Find AddDefaultCharset ISO-8859-1
Change to AddDefaultCharset GB2312 # 中文 支持
Add AddType Application / X-httpd-php .php #PHP Support
4) Modify config_inc.php file
$ Cfg_basepath = "/ var / mail / webmail";
$ Cfg_mysql_host = 'localhost';
$ Cfg_mysql_user = 'postfix';
$ Cfg_mysql_pass = 'hawk'; (with the above password, you can modify yourself)
$ Cfg_mysql_db = 'mail';
5) Edit /usR/local/etc/php.ini, modify:
Cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
Register_globals = on
3. Use:
Finally, entries in the browser's URL:
http: // ip
Because there is no DNS with DNS, you can directly locate the domain name.
Modify /etc/php.ini
Max_execution_time = 30 # is changed to 60 (increasing the time limit for processing scripts)
Memory_limit = 8m # is changed to 40M (this can send 10M accessories)
Post_max_size = 2m # changed to 10m
UPLOAD_MAX_FILESIZE = 2M # change to 10m
2. Modify /etc/httpd/conf.d/php.conf
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288 # Transform 524288 to 10485760
Files>
The LImitRequestBody 524288 here is limited to 512K of the upload attachment, and it is changed to 10m.
3. Modify /etc/postfix/main.cf, add the following statement:
Message_size_limit = 14336000
The default value of Postfix is 10m, but this refers to the sum of the body and the number of attachments after the encoding. After Base64 encoding, the size of the attachment will increase by about 35%, so set the acceptable email size of 14m.
You can use the following command to view the relevant settings of Postfix:
/ usr / sbin / postconf | GREP SIZE
4. Rain from Apache and Postfix.
Anti-spam anti-virus mail part
1. Install McAfee uvscan
The latest version on the BSD is VBSD424E, although trial but can be upgraded, there is no functional limit.
The latest virus library version is DAT-4306.TAR = B4AF8AA33B670D15CC43EBF6F4967498
How to do the latest version of the virus library in your ports You can modify the file in the ports to download directly from www.nai.com.
Install McAfee AntiVirus
Hawk # CD / USR / PORTS / Security / VSCAN
Hawk # make install clean
2.Amavis installation
Amavis is a bridge between UVScan and Postfix, completes mail decoding, handed over UVScan, and then processes, forwarded operations.
2. Install in Ports
My version number is amavisd-new-20030616
Hawk # CD / USR / PORTS / Security / Amavisd-New /
# make install clean
HAWK # CD / USR / local / etc
Hawk # cp amavisd.conf-dist Amavisd.conf
Hawk # chown vscan amavisd.conf
Hawk # chmod 750 Amavisd.conf
Hawk # chown vscan / usr / local / sbin / Amavisd
Hawk # chmod 750 / usr / local / sbin / amavisd
Modify amavisd.conf
$ MyDomain = 'THE9.com'; (Modified to your own)
$ TEMPBASE = "/ TMP";
$ forward_method = 'SMTP: 127.0.0.1: 10025';
$ notify_method = $ forward_method;
The following can be set according to your server situation
$ virus_admin = "vscan / @ $ mydomain"
$ MailFrom_notify_admin = "vscan / @ $ mydomain";
$ MailFrom_notify_recip = "vscan / @ $ mydomain";
$ MailFrom_notify_spamadmin = "vscan / @ $ mydomain";
# $ Quarantinedir = '/var/virusmails' ;2.2 Modify Postfix
In /etc/postfix/master.cf
SMTP INET N - N - - SMTPD
Change to the following:
SMTP-AMAVIS UNIX - - N - 2 SMTP
-o SMTP_DATA_DONE_TIMEOUT = 1200
-o disable_dns_lookups = yes
127.0.0.1:10025 INET N - N - - SMTPD
-o content_filter =
Pay attention to the 127.0.0.1:10025 content_filter is blank, because in the main.cf of Postfix, the previously defined const_filter may cause the local message to be forwarded to yourself, if there is such a situation, The following information will appear "Error: Too Many HOPS" in the log log of PostFix.
test
Hawk # / usr / local / sbin / postfix stop
Hawk # / usr / local / sbin / postfix start
Hawk # su - vscan
Hawk # / usr / local / sbin / amavisd debug
Start another terminal:
Hawk # telnet 127.0.0.1 10024
Trying 127.0.0.1 ...
Connected to localhost.the9.com.
Escape Character is '^]'.
220 [127.0.0.1] ESMTP AMAVISD-New Service Ready
Mail from:
250 2.1.0 Sender
CNHAWK@the9.com
OK
RCPT TO:
250 2.1.5 Recipient
CNHAWK@the9.com
OK
Data
354 END DATA with
Subject: Test 2
X5O! P% @ AP [4 / PZX54 (P ^) 7cc) 7} $ EiCar-Standard-AntiVirus-Test-File! $ H H *
.
250 2.5.0 OK, ID = 00116-02, Bounce <- This indication system has recognized this message contains Virus
Quit
2.3 Installation Configuration Spamassassin
In the latest amavisd-new, the spamassassin feature has been combined, so as long as the Amavisd-Ne is installed with ports, the spamassassin has been installed.
Port: Amavisd-New-20030616.p5
PATH: / USR / PORTS / Security / Amavisd-New
Info: Performance-Enhanced Daemonized Version of Amavis-Perl
MAINT:
Blaz@si.freebsd.org
INDEX: Security
B-DEPS:
R-DEPS: ARC-5.21E.8_1 Freeze-2.5_1 LHA-1.14I_1 LZO-1.08_1 LZOP-1.01 P5-Archive-TAR-1.05 P5-Archive-Zip-1.06 P5-Authen-SASL-2.04 P5-compress ZLIB-1.22 P5-Convert-TNEF-0.17 P5-Convert-Uulib-0.213 P5-Digest-HMAC-1.01 P5-Digest-MD5-2.27 P5-Digest-NilsiMSA-0.06 P5-Digest-SHA1-2.04 P5-File-Spec -0.82 p5-HTML-PARSER-3.31 P5-HTML-TagSet-3.03 p5-IO-1.20 P5-IO-STRINGY-2.108 P5-MIME-BASE64-2.20 P5-MIME-TOOLS-5.411A_2 P5-Mail-spamassassin-2.55 P5-Mail-Tools-1.58 P5-Net-1.16, 1 P5-Net-DNS-0.40 P5-Net-Server-0.85 P5-P5-P5-P5-P5-P5-P5-P5-P5-P5-Harness-2.28 P5-Test-SIMPLE-0.47_1 P5- Time-Hires-1.50, 1 p5-uri-1.25 p5-unix-syslog-0.100 razor-agent-2.36 unarj-2.43_1 unRar-3.20, 2 ZOO-2.10.1 If the server does not need spamassassin's function that this step can be canceled .
Add needed users
Hawk # pw useeradd spam -c "spam bayes learner" -d / var / empty -s / sbin / nologin
Hawk # pw useeradd notspam -c "not spam bayes learner" -d / var / empty -s / sbin / nologin
Modify /usr/local/etc/mail/spamassassin/local.cf
Use_bayes 1
Bayes_path /var/amavis/.spamassassin/bayes
Auto_learn 1
Auto_LEARN_THRESHOLD_NONSPAM-2
Auto_LEARN_THRESHOLD_SPAM 15
Modify /usr/local/etc/amavisd.conf
$ MAX_SERVERS = 2;
$ MAX_REQUESTS = 10;
$ child_timeout = 5 * 60;
@BYPASS_VIRUS_CHECKS_ACL = QW (.);
@local_domains_acl = (". $ mydomain");
$ final_spam_destiny = d_pass;
Read_hash (/% WhiteList_sender, '/ var / amavis / white);
Read_hash (/% blacklist_sender, '/ var / amavis / blacklist');
Read_hash (/% spam_lovers, '/ var / amavis / spam_lovers);
# Spamassassin settings
# $ sa_local_tests_only = 1;
$ sa_auto_whiteList = 1;
$ SA_MAIL_BODY_SIZE_LIMIT = 64 * 1024;
$ SA_TAG_LEVEL_DEFLT = 4.0;
$ SA_TAG2_LEVEL_DEFLT = 6.3;
$ SA_KILL_LEVEL_DEFLT = $ SA_TAG2_LEVEL_DEFLT; $ sa_spam_subject_tag = '*** spam ***';
Establish the required documents
Hawk # touch / var / amavis / whitelist
Hawk # touch / var / amavis / blacklist
Hawk # touch / var / amavis / spam_lovers
Hawk # chown vscan / var / amavis / whitelist
Hawk # chown vscan / var / Amavis / BlackList
Hawk # chown vscan / var / amavis / spam_lovers
Hawk # echo
Spam@the9.com
>> / VAR / AMAVIS / SPAM_LOVERS
Hawk # echo
NOTSPAM@the9.com
>> / VAR / AMAVIS / SPAM_LOVERS
Modify /usr/local/etc/postfix/main.cf
Add to
Content_filter = SMTP-AMAVIS: [127.0.0.1]: 10024
Establish an automatic learning system
Bayesian Learning Script
Hawk # vi /usr/local/sbin/my-sa-learn.sh
#! / bin / sh
IF [-e / var / mail / spam]; then
/ usr / local / bin / sa-learn --spam -p /var/amavis/.spamassassin/user_prefs - MBOX / VAR / MAIL / SPAM
RM / VAR / MAIL / SPAM> / dev / null
Fi
IF [-e / var / mail / notspam]; then
/ usr / local / bin / sa-learn --ham -p /var/amavis/.spamassassin/user_prefs - MBOX / VAR / MAIL / NOTSPAM
RM / VAR / MAIL / NOTSPAM> / dev / null
Fi
Establish a Bayes learning knowledge base:
Hawk # / usr / bin / sa-learn --rebuild -p /var/amavis/.spamassassin/user_prefs
This will be automatically learned.
Hawk # chmod 700 /usr/local/sbin/my-sa-learn.sh
Hawk # crontab -e
5 0 * * / /usr/local/sbin/my-sa-learn.sh
The restart of the service is restarted to make the settings take effect.
Hawk # /usr/local/etc/rc.d/postfix.sh stop
Hawk # /usr/local/etc/rc.d/postfix.sh start
Hawk # /usr/local/etc/rc.d/amavisd.sh stop
Hawk # /usr/local/etc/rc.d/amavisd.sh start
If you use Spamassassin's spamd, you also need to restart.
When you start AMAVISD, please confirm if there is an anti-virus software.
Hawk # cat / var / log / maillog | grep nai
Dec 1 03:37:07 Hawk Amavis [112]: Found Primary av scanner nai mcafee antivirus (uvscan) AT / usr / local / bin / uvscan
DEC 1 15:36:00 Hawk Amavis [110]: Found Primary av scanner nai mcafee antivirus (uvscan) AT / usr / local / bin / uvscan
DEC 1 16:14:28 hawk amavis [110]: Found Primary av scanner nai mcafee antivirus (uvscan) AT / usr / local / bin / uvscan If there is such information description, anti-virus software has been found
Virus update script
Need WGET support
Install WGET first
Hawk # pkg_add -r wget
Installed
Hawk # vi /usr/local/libexec/uvscan/Update-dat.sh
Add below
#! / bin / sh
#
# update-dat.sh
#
CD / USR / LOCAL / LIBEXEC / UVSCAN /
Wget -q -o readme.txt
http://download.nai.com/p......................... x/NAI/Readme.txt
> / dev / null
Avver = `head -11 readme.txt | grep '4 [0-9] [0-9] [0-9]' | Head -1 | SED -E 'S /^.*/ (4 [0-9 ] * /). * $ // 1 / '`
IF [! -f dat- $ avver.tar]; then
For i in * .tar; do
MV $ I $ I.OLD
DONE
IF wget
http://download.nai.com/p......-4.x/nai/dat- $avver.tar
> / dev / null; then
For i in * .dat; do
CP -P $ I $ I.BAK
DONE
IF TAR XF DAT- $ avver.tar; then
RM -F * .OLD
Echo `Date` SuccessFully Updated AntiVirus Dat Files To $ avVer
Fi
Fi
Fi
Then you can automatically update the virus file automatically in the crontab timing.
After completing the mail interface, the virus warning message has been received, these titles can be modified in Amavisd.conf.