分享
 
 
 

在Fedora上建立自己的邮件服务器

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

在Fedora上建立自己的邮件服务器

Postfix + Mysql + Sasl + Courier-imap

/////飘飘于2003.11.20 barcelona////

一,软件的准备

A. 检查你的系统是否已安装了以下软件,

1. pam

2. pam-devel

3. mysql

4. mysql-servel

5. mysql-devel

6. imap-devel

7. sharutils

B. 下载以下软件

1. metamail*.i386.rpm

2. pam-mysql

3. cyrus-sasl-2.1.15

4. postfix-2.0.16

5. courier-imap

C.说明

mysql-devel在第3个盘。我忘了装,结果pam-mysql和postfix的编译过不了。metamail和sharutils是取验证码用的。

二,mysql数据库和表的建立。

A. [root@localhost root]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 3 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use mysql

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> INSERT INTO db (Host,Db,User,Select_priv)VALUES('localhost','postfix','postfix','Y');

Query OK, 1 row affected (0.00 sec)

mysql> CREATE DATABASE postfix;

Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL ON postfix.* TO postfix@localhost

-> IDENTIFIED BY "postfix";

Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

mysql> quit

Bye

B. 把下列文字复制存为postfix.sql

########potfix_sql########bigin##################

CREATE TABLE alias (

username varchar(255) NOT NULL default'',

goto text NOT NULL,

domain varchar(255) NOT NULL default'',

PRIMARY KEY (username)

) TYPE=MyISAM;

CREATE TABLE domain (

domain varchar(255) NOT NULL default'',

description varchar(255) NOT NULL default'',

PRIMARY KEY (domain)

) TYPE=MyISAM;

CREATE TABLE mailbox (

userid char(20) binary NOT NULL default'',

username varchar(255) NOT NULL default'',

password varchar(255) NOT NULL default'',

home varchar(255) NOT NULL default'',

maildir varchar(255) NOT NULL default'',

name varchar(255) NOT NULL default'',

uid smallint(5) unsigned NOT NULL default'12345',

gid smallint(5) unsigned NOT NULL default'12345',

quota varchar(255) NOT NULL default'',

domain varchar(255) NOT NULL default'',

create_date date NOT NULL default'0000-00-00',

create_time time NOT NULL default'00:00:00',

change_date date NOT NULL default'0000-00-00',

change_time time NOT NULL default'00:00:00',

last_access int(10) unsigned NOT NULL default'0',

passwd_lastchanged int(10) unsigned NOT NULL default'0',

status tinyint(4) NOT NULL default'1',

PRIMARY KEY (username),

KEY status (status)

) TYPE=MyISAM;

#####################end########################

[root@localhost root]# mysql postfix < /work/postfix.sql

C. 对表的内容的一些说明.

mysql> use postfix

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+-------------------+

| Tables_in_postfix |

+-------------------+

| alias |

| domain |

| mailbox |

+-------------------+

3 rows in set (0.00 sec)

mysql> desc alias;

+----------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+-------+

| username | varchar(255) | | PRI | | |

| goto | text | | | | |

| domain | varchar(255) | | | | |

+----------+--------------+------+-----+---------+-------+

3 rows in set (0.00 sec)

mysql> desc domain;

+-------------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------------+--------------+------+-----+---------+-------+

| domain | varchar(255) | | PRI | | |

| description | varchar(255) | | | | |

+-------------+--------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

mysql> desc mailbox;

+--------------------+----------------------+------+-----+------------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------------------+----------------------+------+-----+------------+-------+

| userid | varchar(20) binary | | | | |

| username | varchar(255) | | PRI | | |

| password | varchar(255) | | | | |

| home | varchar(255) | | | | |

| maildir | varchar(255) | | | | |

| name | varchar(255) | | | | |

| uid | smallint(5) unsigned | | | 12345 | |

| gid | smallint(5) unsigned | | | 12345 | |

| quota | varchar(255) | | | | |

| domain | varchar(255) | | | | |

| create_date | date | | | 0000-00-00 | |

| create_time | time | | | 00:00:00 | |

| change_date | date | | | 0000-00-00 | |

| change_time | time | | | 00:00:00 | |

| last_access | int(10) unsigned | | | 0 | |

| passwd_lastchanged | int(10) unsigned | | | 0 | |

| status | tinyint(4) | | MUL | 1 | |

+--------------------+----------------------+------+-----+------------+-------+

17 rows in set (0.00 sec)

mysql>

domain表的解释:

domain 任意的domain.

description 通常是2种 "local:" 用于本地的 or "virtual:" 用于是虚拟的.

alias表的解释:

username 是虚拟的邮箱address@domain.tld ,将被转发到goto下的联结中.

goto 可以用简单的名字,如果是本地用户名,如(root, postmaster, etc.), 或者是整个的邮箱名字,user@domain.tld。

Mailbox表的内容:

Userid 使用者编码

username 可以是user.domain.tld 或 user@domain.tld

password 在mysql中用encrypt('password') 输入.

name 使用着的真实姓名。

uid 虚拟用户身份uid

gid 组的gid

home "/usr/local/virtual/". Maildirs必须在此目录下。

domain 这栏可以不要,但有些软件需要他。

maildir 是整个地址,必须带”/”结尾。

Quota 邮箱的空间或信息量的限制。

status 0 为禁止。"MYSQL_WHERE_CLAUSE= status" .

三,pam-mysql的编译

tar pam-mysql-5.0.tar.gz

make cp pam_mysql.so /lib/security

四,修改pam.

[root@localhost pam_mysql]# cd /etc/pam.d

[root@localhost pam.d]# cp /work/postfix postfix

[root@localhost pam.d]#

postfix的内容如下:

##########/etc/pam.d/postfix##################

echo auth sufficient pam_mysql.so user=postfix passwd=postfix host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1

echo account required pam_mysql.so user=postfix passwd=postfix host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1

echo auth sufficient pam_unix_auth.so

echo account sufficient pam_unix_acct.so

[root@localhost pam.d]# [ -f imap ] && mv imap imap.orig

[root@localhost pam.d]# [ -f pop ] && mv pop pop.orig

[root@localhost pam.d]# [ -f smtp ] && mv smtp smtp.orig

[root@localhost pam.d]# n -s postfix imap

bash: n: command not found

[root@localhost pam.d]# ln -s postfix imap

[root@localhost pam.d]# ln -s postfix pop

[root@localhost pam.d]# ln -s postfix smtp

[root@localhost pam.d]# cp postfix sieve

[root@localhost pam.d]# cd ..

五,cyrus-sasl的安装配置

我本不想重新编译cyrus-sasl的,可是fedora自带的在我测试的时候出问题,还是重编译吧,虽然fedora带的也是2.1.15版本。

[root@localhost etc]# cd /ruanjian

[root@localhost ruanjian]# cd cyrus-sasl-2.1.15

[root@localhost cyrus-sasl-2.1.15]# ./configure --disable-sample > --disable-pwcheck --disable-gssapi --disable-cram > --disable-digest --disable-krb4 --disable-anon > --with-saslauthd=/var/run/saslauthd > --enable-plain --enable-login

[root@localhost cyrus-sasl-2.1.15]# [ -d /usr/lib/sasl2 ] && mv /usr/lib/sasl2 /usr/lib/sasl2.orig

[root@localhost cyrus-sasl-2.1.15]# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

[root@localhost cyrus-sasl-2.1.15]# echo /usr/local/lib >> /etc/ld.so.conf

[root@localhost cyrus-sasl-2.1.15]# echo /usr/local/lib/sasl2 >> /etc/ld.so.conf

[root@localhost cyrus-sasl-2.1.15]# ldconfig

[root@localhost cyrus-sasl-2.1.15]#

[root@localhost cyrus-sasl-2.1.15]# echo pwcheck_method: saslauthd > /usr/lib/sasl2/smtpd.conf

[root@localhost cyrus-sasl-2.1.15]# /usr/local/sbin/saslauthd -a pam

[root@localhost cyrus-sasl-2.1.15]#

六,postfix的安装和配置。

A.先停止sendmail.fedora已经默认安装了sendmail,去掉它。

[root@localhost rua~jian]# /etc/init.d/sendmail stop

关闭 sendmail: [失败]

[root@localhost ruanjian]# mv /usr/bin/newaliases /usr/bin/newaliases.orig

[root@localhost ruanjian]# mv /usr/bin/mailq /usr/bin/mailq.orig

[root@localhost ruanjian]# mv /usr/sbin/sendmail /usr/sbin/sendmail.orig

B.添加用户和组

[root@localhost ruanjian]# groupadd -g 12345 postfix

[root@localhost ruanjian]# groupadd -g 12346 postdrop

[root@localhost ruanjian]# useradd -u 12345 -g 12345 -c postfix -d /dev/null -s /nologin postfix

C.编译postfix

[root@mail ruanjian]# cd postfix-2.0.16

[root@mail postfix-2.0.16]# make -f Makefile.init makefiles > 'CCARGS=-DUSE_SASL_AUTH -DHAS_MYSQL -I/usr/include/mysql -I/usr/include/sasl' > 'AUXLIBS=-L/usr/lib/mysql -L/usr/local/lib/sasl2 -lmysqlclient -lsasl2 -lz -lm'

[root@mail postfix-2.0.16]# make install

[root@localhost postfix-2.0.16]# cd /etc

[root@localhost etc]# mv aliases aliases.orig

[root@localhost etc]# ln -s postfix/aliases aliases

[root@localhost etc]# cd postfix

[root@localhost postfix]# echo 'root: tester' >> /etc/postfix/aliases

[root@localhost postfix]# postalias /etc/postfix/aliases

[root@localhost postfix]#

D.配置postfix.

1. 主要是main.cf的配置。

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

virtual_gid_maps = static:12345

virtual_mailbox_base = /usr/local/virtual

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

virtual_mailbox_limit = 51200000

virtual_minimum_uid = 12345

virtual_transport = virtual

virtual_uid_maps = static:12345

smtpd_sasl_auth_enable = yes

#smtpd_sasl_local_domain = $myhostname

smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated permit_auth_destination reject

smtpd_sasl_security_options = noanonymous

smtpd_client_restrictions = permit_sasl_authenticated

broken_sasl_auth_clients = yes

2. mysql_virtual_alias_maps.cf 如下

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = alias

select_field = goto

where_field = username

3. mysql_virtual_domains_maps.cf 如下

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = domain

select_field = description

where_field = domain

4. mysql_virtual_mailbox_maps.cf 如下

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = mailbox

select_field = maildir

where_field = username

E.建立

[root@localhost root]# mkdir /usr/local/virtual

[root@localhost root]# chown -R postfix:postfix /usr/local/virtual

[root@localhost root]# chmod -R 751 /usr/local/virtual

七.测试端口25

A. mysql> use postfix

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+-------------------+

| Tables_in_postfix |

+-------------------+

| alias |

| domain |

| mailbox |

+-------------------+

3 rows in set (0.00 sec)

mysql> INSERT INTO alias (username,goto) VALUES ('postmaster@lansemail.com','tester@lansemail.com');

Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO domain (domain,description) VALUES ('lansemail.com','local:'); Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO mailbox (username,password,home,maildir,name,domain,create_date,create_time) VALUES('tester','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/','/usr/local/virtual/','tester@lansemail.com/','tester','lansemail.com','2003-11-19','21:24:00'); Query OK, 1 row affected (0.03 sec)

mysql> select * from mailbox

-> ;

+--------+----------+------------------------------------+---------------------+-----------------------+--------+-------+-------+-------+---------------+-------------+-------------+-------------+-------------+-------------+--------------------+--------+

| userid | username | password | home | maildir | name | uid | gid | quota | domain | create_date | create_time | change_date | change_time | last_access | passwd_lastchanged | status |

+--------+----------+------------------------------------+---------------------+-----------------------+--------+-------+-------+-------+---------------+-------------+-------------+-------------+-------------+-------------+--------------------+--------+

| | tester | $1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/ | /usr/local/virtual/ | tester@lansemail.com/ | tester | 12345 | 12345 | | lansemail.com | 2003-11-19 | 21:24:00 | 0000-00-00 | 00:00:00 | 0 | 0 | 1 |

+--------+----------+------------------------------------+---------------------+-----------------------+--------+-------+-------+-------+---------------+-------------+-------------+-------------+-------------+-------------+--------------------+--------+

1 row in set (0.11 sec)

mysql>

这里用的username为tester,只是用来测试端口用的,正式使用一定要用全名tester@lansemail.com.

否则信件收不到,信息如下

无法到达以下收件人:

'tester@lansemail.com',时间为 21/11/2003 13:05

450 <tester@lansemail.com>: User unknown in local recipient table

B.[root@localhost postfix]# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 localhost.localdomain ESMTP Postfix

ehlo local host

250-localhost.localdomain

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH LOGIN PLAIN OTP

250-AUTH=LOGIN PLAIN OTP

250-XVERP

250 8BITMIME

auth plain dGVzdGVyAHRlc3RlcgB0ZXN0cHc=

235 Authentication successful

quit

221 Bye

Connection closed by foreign host.

[root@localhost postfix]# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 localhost.localdomain ESMTP Postfix

ehlo localhost

250-localhost.localdomain

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH LOGIN PLAIN OTP

250-AUTH=LOGIN PLAIN OTP

250-XVERP

250 8BITMIME

auth login

334 VXNlcm5hbWU6

dGVzdGVy ---->username: tester(用printf 'tester' | mmencode取得。)

334 UGFzc3dvcmQ6

dGVzdHB3 ---->password: testpw

235 Authentication successful

quit

221 Bye

Connection closed by foreign host.

[root@localhost postfix]#

八,Courier-IMAP Install

A. 先在普通用户下

#./configure --without-authpwd --without-authpam --without-authuserdb --without-authshadow

--without-cram --without-chkpw --without-ldap --without-pgsql --without-authdaemon

--without-authcustom --with-authmysql

#make

#make check

#su root

#make install

#make install-configure

B.修改authmysqlrc,这里是简单的

#DEFAULT_DOMAIN domain.tld

MYSQL_CRYPT_PWFIELD password

MYSQL_DATABASE postfix

MYSQL_GID_FIELD '12345'

MYSQL_HOME_FIELD '/usr/local/virtual'

MYSQL_LOGIN_FIELD username

MYSQL_MAILDIR_FIELD maildir

MYSQL_NAME_FIELD name

MYSQL_OPT 0

MYSQL_PASSWORD postfix

#MYSQL_PORT 3306

#MYSQL_QUOTA_FIELD quota

MYSQL_SERVER localhost

MYSQL_SOCKET /var/lib/mysql/mysql.sock

MYSQL_UID_FIELD '12345'

MYSQL_USERNAME postfix

MYSQL_USER_TABLE mailbox

#MYSQL_WHERE_CLAUSE status

C. [root@localhost root]# /usr/lib/courier-imap/bin/maildirmake /usr/local/virtual/tester@lansemail.com

[root@localhost root]# chmod -R 700 /usr/local/virtual/tester@lansemail.com

[root@localhost root]# chown -R postfix:postfix /usr/local/virtual/tester@lansemail.com

D. 启动courier-imap

[root@localhost root]# /usr/lib/courier-imap/libexec/pop3d.rc start

[root@localhost root]# /usr/lib/courier-imap/libexec/imapd.rc start

[root@localhost root]# pstree | grep courier

|-2*[courierlogger]

|-2*[couriertcpd]

[root@localhost root]# netstat -an | grep LISTEN

tcp 0 0 0.0.0.0:32770 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:32771 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN

tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN

九,测试端口110

[root@localhost root]# telnet localhost 110 Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

+OK Hello there.

user tester

+OK Password required.

pass testpw

+OK logged in.

list

+OK POP3 clients that break here, they violate STD53.

.

quit

+OK Bye-bye.

Connection closed by foreign host.

[root@localhost root]#

十,一切ok了,用你的outlook试试。。记住,添加用户邮箱,一定要用全名。再去找个webmail吧。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有