免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1600 | 回复: 0
打印 上一主题 下一主题

鸟哥VBird编译安装Postfix(转) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-19 00:01 |只看该作者 |倒序浏览

使用 Tarball 安装完整的 Postfix + POP3 + SMTP + Procmail 适用任何版本的 Linux
 
以 Tarball 安装 Postfix 也不困难,比起 sendmail 来说,要简单的很多喔!我们这里选择的主要套件有:
cyrus-sasl-2.1.12.tar.gz
postfix-2.0.4.tar.gz
至于 procmail 与 imap 两个套件都使用 Linux distribution 提供的 RPM 版本就好了,不需要额外的改装啊!那么底下就来谈一谈怎么安装吧!(注: Cyrus SASL 与 Cyrus SASL2 这两个不同版本的 SASL 函式库放置的目录并不相同,所以你可以分别安装 cyrus version 1 与 version 2 喔!在鸟哥的案例当中,还不会发生问题就是了!另外,如果您是 Red Hat 9 的使用者,由于 Red Hat 9 已经提供了 Cyrus SASL version 2 了,所以您可以直接略过 Cyrus SASL 的安装部分,直接到 Postfix 2.xx 的安装呢!)

  安装 Cyrus SASL 2.xx 版本!
1. 首先将数据解压缩
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf cyrus-sasl-2.1.12.tar.gz
2. 再来就是设定你的 cyrus SASL 的参数以及编译啰!
[root@test src]# cd cyrus-sasl-2.1.12
[root@test cyrus-sasl-2.1.12]# ./configure   \
> --prefix=/usr/local/cyrus-sasl2 \
>--enable-login \
>--enable-plain \
>--enable-pwcheck \
>--with-saslauthd=/var/run  
# 注意上面的语法!!那个 \ 是跳脱字符喔!后面直接 Enter !
# 不要接任何空白或者是 tab 按键!若有问题,请到 Shell 看看!
# 至于那个 pwcheck 的项目,就是要用来做为密码确认的一个咚咚啰!
[root@test cyrus-sasl-2.1.12]# make clean   
[root@test cyrus-sasl-2.1.12]# make
[root@test cyrus-sasl-2.1.12]# make install

# 上面三个步骤会花去一些时间,请耐心等待~
# 而由于我们刚刚设定了 --prefix=/usr/local/cyrus-sasl2 这个参数,
# 所以, make install 之后,我们有用的函式库会在  
# /usr/local/cyrus-sasl2/lib/sasl2 这个路径当中,但是, cyrus 程序
# 会主动去找 /usr/lib/sasl2 这个目录!所以,我们必需要做连结档!
# 才可以让未来我们的 postfix 可以直接找的到我们所要的函式库喔!
# 因为/usr/lib/下存放的是系统用到时函数库。
[root@test cyrus-sasl-2.1.12]# cd /usr/lib
[root@test lib]# ln -s /usr/local/cyrus-sasl2/lib/* .
#(.代表当前目录)
# 这样就建立起连结档啰!很简单吧! ^_^不过要注意喔,
# 上面这一行最后面那个小数点『.』不要忘记加了!
3. 准备建立 Postfix 与 cyrus SASL 使用的简易设定档:
[root@test lib]# cd /usr/lib/sasl2
[root@test sasl2]# echo 'pwcheck_method: saslauthd' > smtpd.conf  
[root@test sasl2]# echo 'mech_list:plain login'  >>  smtpd.conf  
# 注意了!一般来说, Postfix 会使用 SASL 这个函式库里面相关的设定档,
# /usr/lib/sasl2/smtpd.conf 这个档案的设定就是 Postfix 的预设使用 SASL 的
# 参数档案,与 1.5.xx 版本不太相同的地方是, 2.xx 版本使用不同的机制:
auxprop :使用 sasldb2 这个共享数据库,同样需要使用共享密码档案喔!
     所以一般来说,单纯的 Postfix 比较少使用这种机制;
saslauthd:使用 saslauthd 这个 daemon 进行认证的工作,所以几乎
     不需要其它的设定值哪,指定 saslauthd 就好啦! ^_^
pwcheck :使用与 1.5 版相似的认证 daemon ,不过在 2.xx 版本里面这个模式 支持度比较没有这么好的啦,所以请爱用 saslauthd 啰!
# 我们使用 SASL 预设的 saslauthd 这支程序做为密码认证的 daemon。
# 至于 mech_list:plain login 是列出支持的认证机制的意思,我们使用的
# 是极为简单的 login 与 plain 两种机制而已!
4. 建立一些需要的参数:
[root@test sasl2]# vi /etc/man.config
# 新增底下这一行之后,未来我们就可以透过 man 这个工具来查询 sasl  
# 相关的指令的用法了!而不需要修改任何咚咚!不过要注意的是,
# 这个档案在每个 Linux distributions 当中不见得相同,例如 Open Linux  
# 檔名是 /etc/man.conf 呢!
MANPATH /usr/local/cyrus-sasl2/man
5. 检验 saslauthd 这支程序是否可行!
# 在 cyrus-sasl 的原始码里面提供了一支小程序用来判断 saslauthd 的认证机制
# 是否成功的启动了,这个小程序就是 testsaslauthd 啰!在刚刚原始码目录下,
# 所以你可以这样做:
[root@test sasl2]# /usr/local/cyrus-sasl2/sbin/saslauthd -a shadow
# 执行之后, saslauthd 的 PID 会被纪录到 /var/run/mux.pid 这个档案!
[root@test sasl2]# cd /usr/local/src/cyrus-sasl-2.1.12/saslauthd/
[root@test saslauthd]# make testsaslauthd
[root@test saslauthd]# ./testsaslauthd -u userID -p 'yours.passwd'
0: OK "Success."
# 若显示 OK 的话!那么就是成功啦!很好!我喜欢~
6. 设定开机时启动
[root @test saslauthd]# vi /etc/rc.d/rc.local
# 加入这一行:
/usr/local/cyrus-sasl2/sbin/saslauthd -a shadow

  安装 Postfix 2.xx 版本!
0. 先确认有没有这个档案存在!因为我们的 Postfix 会使用到很多数据库啊!
[root@test root]# locate pcre.h | grep include
/usr/include/pcre.h
# 这个档案也有可能存在于 /usr/include/pcre/pcre.h 里面!不要担心,存在就好了
# 如果没有存在的话,例如 Mandrake 9.0 预设状态可能并不会主动安装这个套件,
# 请自行拿出原版光盘,安装 MDK 的 libpcre0xxxx 档案,至于 redhat 等
# 其它版本,请自行安装 pcre 相关的套件吧!在 Red Hat 9 则是需要
# pcre-devel 这个套件喔! ( apt-get install pcre-devel)
1. 首先将数据解压缩(假设您将我们网站的档案捉到 /root 底下了!)
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /root/postfix-2.0.4.tar.gz
2. 清除规则并且建立新的使用 SMTP 的规则给 postfix
[root@test src]# cd /usr/local/src/postfix-2.0.4
[root@test postfix-2.0.4]# make tidy  # 清除规则
[root@test postfix-2.0.4]# make makefiles CCARGS="-DUSE_SASL_AUTH \
>  -I/usr/local/cyrus-sasl2/include/sasl/"  \
>  AUXLIBS="-L/usr/local/cyrus-sasl2/lib -lsasl2"

# 上面的动作在建立 Makefile 啰!其中那个 -CCARGS 后面接的 -DUSE_SASL_AUHT
# -I/usr/local/cyrus-sasl2/include/sasl 其中 -I 后面的路径就是 SASL2 的
# 函式库所在的目录喔!请依照您安装的 sasl2 目录所在而定!
[root@test postfix-2.0.4]# make
# 就是开始编译啦!过程有点久喔!如果有出现任何 Error 时,
# 请将 error 仔细的查看一下吧!通常最大的原因都是一些
# include 档案没有安装,也就是某些重要的套件没有安装之故,
# 例如 pcre.h 这个档案就是一个例子啰!
# 解决的方法就是将该缺乏的套件安装进去系统啦!
# 如果是 Red Hat 9 的话,可以这样下达指令:
# make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include/sasl" \
# AUXLIBS="-L/usr/lib/sasl2 -lsasl2"
# 因为 Red Hat 9 的 SASL2 路径在 /usr/include/sasl ,这里要特别的强调,
# 否则由于 Red Hed 9 同时提供 Cyrus SASL 1.5.x 以及 2.x.x 的版本,
# 可能会造成程序的误判,那么很可能会出现下列的错误喔:
# fatal: SASL per-connection security setup  
# 上面的错误讯息出现在 /var/log/maillog 中!
3. 安装前准备工作:
# 如果您的系统是由 sendmail 要改换到 Postfix 的话,你不需要移除 sendmail ,
# 不过却需要进行一些小手术喔!
[root@test postfix-2.0.4]# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
[root@test postfix-2.0.4]# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
[root@test postfix-2.0.4]# mv /usr/bin/mailq /usr/bin/mailq.OFF
[root@test postfix-2.0.4]# chmod 755 /usr/sbin/sendmail.OFF \
>  /usr/bin/newaliases.OFF /usr/bin/mailq.OFF
# 此外,还需要建立一个名为 postdrop 的群组与 postfix 的使用者喔!
[root@test postfix-2.0.4]# groupadd -r postdrop
[root@test postfix-2.0.4]# useradd -r -s /bin/false postfix
# 建立一个系统数据账号吶!
[root@test postfix-2.0.4]# echo 'postfix:  root' >> /etc/aliases
# 请注意,如果您之前安装过 sendmail 的话,那么不同版本的 sendmail 他的
aliases 放置的目录并不相同,所以上面这行指令请依您的主机来设定!
4. 开始安装 Postfix 到 /etc/postfix 这个目录下:
[root@test postfix-2.0.4]# make install
# 底下会出现一大堆的问题集,不管如何,几乎按下 enter 就对啦!
# 除了底下这两个问题(最后两个)可以选择将 readme 档案存下来喔!
Please specify the destination directory for the Postfix sample
configuration files.
sample_directory: [/etc/postfix] /etc/postfix/sample
Please specify the destination directory for the Postfix README
files. Specify "no" if you do not want to install these files.
readme_directory: [no] /etc/postfix/readme_files
# 这样就安装成功啦!接下来请开始查阅 主机的设定 那一节啰!


--------------------------------------------------------------------------------
主机的设定
安装完毕 postfix 之后,接着下来就是设定了!同样的,在设定主机之前,有几个东西是您必需先取得的喔:
 
具有合法的 hostname ,或者是经过授权的 DNS 主机来设定您自己的主机名称(hostname);
您的 hostname 最好拥有一个 MX 的纪录(record);
至少一定要了解到什么是 Relay 的问题,以及规划一下您所想要开放 relay 的网域;
 
你至少需要有这些数据才行吶!好了,我先假设一下我的案例好了:
 
我的 hostname 为 vbird.adsldns.org;
我的 hostname 还有个别名为
www.vbird.adsldns.org
,也就是说, vbird.adsldns.org 与
www.vbird.adsldns.org
都指向同一个 IP ;
我的 domain name 为 adsldns.org ;
我预计开放的 relay 网域为 vbird.org 这个网域,与内部的 192.168.1.0/24 这个网域,还要可以使用 access 这个档案的设定功能!
 
开始来了解 postfix 啰! ^_^
 
--------------------------------------------------------------------------------
Postfix 的结构
 
在主机的设定之前我们得先了解一下 postfix 的整体构造,以方便以后来处理我们的档案吶!所以底下我们会先针对 postfix 这个套件的结构做个简单的说明,然后再针对各个设定项目来进行说明啰!Postfix 的设定档几乎完全都在 /etc/postfix 里面,至于执行档则在 /usr/sbin 里面,我们分别来谈一谈几个主要的注意事项吧!
 
设定档:Postfix 的设定档都在 /etc/postfix 里面,主要的设定档有:
 
/etc/postfix/main.cf :这个就是最重要的 postfix 的设定档了!等一下我们谈到的设定都在这个档案里面进行修改的动作!基本上,他本身就是一个简单的说明文件档啦!不过,要注意的是,在你修改完成了 main.cf 之后,请记得『一定要重新 reload 或重新 restart postfix 才行!』
 
/etc/postfix/master.cf:这个档案是另外一个重要的 postfix 设定档!他主要是规定了 postfix 每个程序的运作参数!
 
/etc/postfix/access :这个档案与 sendmail 的 access 是相同的!都是用来做为 relay 或者是 deny 某些 IP 与 hostname 的档案!不过,要启用他还是得要修改 main.cf 才行!
 
/etc/postfix/aliases : 这个档案与 sendmail 的 aliases 也是相同的!同样的可以做为别名之用,所以您可以回头去翻一翻这个档案的用法喔!
 
/etc/postfix/pcre_table regexp_table relocated : 这几个档案可以做为邮件的过滤之用喔!可以使用正规表示法来进行邮件过滤(filter)的规则,呵呵!会使用这几个档案,或许连 procmail 也不需要使用了呢! ^_^
 
执行档:Postfix 的执行档可不少啊!约略提几个主要的执行档吧!
 
/usr/sbin/postfix:这就是 postfix 的主要执行档案啦!启动与简单的关闭 postfix 可以使用:
postfix check :检查 postfix 相关的档案、权限等是否正确!
postfix start :开始 postfix 的执行
postfix stop  :关闭 postfix
postfix flush :强制将目前正在邮件队列的邮件寄出!
postfix reload:重新读入设定档,也就是 /etc/postfix/main.cf
要注意的是,每次更动了 /etc/postfix/main.cf 之后,一定需要执行 postfix reload 喔!
 
/usr/sbin/postalias:这个指令是 sendmail 的 newaliases 啦!他可以用来将上面提到的设定档  aliases 制作成为 postfix 看的懂得『数据库』格式化档案!由于一般来说,我们都是使用 hash 这一种数据格式,所以啰,你可以简单的使用底下的指令方式来格式化。
postalias 数据库格式:檔名
postalias hash:/etc/postfix/aliases  ==>自动建立 /etc/postfix/aliases.db 这个数据库档案!
 
/usr/sbin/postcat :这个指令可以用来观察某个邮件队列里面档案的信息!postfix 的邮件队列放置在 /var/spool/postfix 里面,但是这个目录里面的档案格式是 postfix 看的懂得,我们人类看不懂~为了取得这些在邮件队列里面的档案信息,所以我们得使用 postcat 这个指令来读取出信息喔!假如有个档案放在 /var/spool/postfix/deferred,你可以这样看:
postcat /var/spool/postfix/deferred/filename

/usr/sbin/postconf :可以用来读取 main.cf 这个档案里面的设定数据的一个指令!用途多多啊!简单的来说,可以直接将你的 main.cf 里面的设定分门别类的显示给你看,可以帮助除错 (debug) 啦!不错的工具,鸟哥个人蛮喜欢加入 -n 这个参数来了解目前的主要规范文件放置在那个目录下!
postconf -n
显示的结果为:
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
.......
看到了吧!你想要知道的数据立刻一目了然,可以加快你的除错喔!不必每次都要进入 main.cf 里面找好久呢!
 
/usr/sbin/postmap:怪怪!这个指令的用法跟上面提到的 postalias 几乎完全一模一样啊! ^_^不过,他是用来取代 sendmail 的 makemap 的!用法是:
postmap hash:/etc/postfix/access ==>自动建立 /etc/postfix/access.db 这个数据库档案!
 
/usr/sbin/postqueue :这个是在观察邮件队列的一个指令啦!你可以使用 postqueue -p 来显示目前的邮件队列内容!这个:
postqueue -p 与 mailq 显示的内容会一模一样喔!

目录:同样的具有邮件队列与邮件信箱的放置目录啊!
 
/var/spool/mail :电子邮件信箱放置目录
/var/spool/postfix :邮件队列,里面还有很多次目录,都是一些其它功能的咚咚啊!
 
整体的架构大致是如此,好啦!了解的一定程度的架构之后,我们要开始来谈谈主机的最基础设定了吧!
 
--------------------------------------------------------------------------------
基础设定
 
终于要来搞定我们的设定档 /etc/postfix/main.cf 啦!先来搞定比较简单的几个部分喔!在 Postfix 安装完毕之初,他仅支持本机寄信而已,如果您想要开放外送邮件,那就必需要做一些手术啦!底下几个重要的项目先来观察一下啰!(注:请使用 vi 来编辑喔!)
  在 main.cf 这个档案当中,设定的项目都是以类似变量的设定方法来设定的,例如要设定 postfix 主机名称时,就以:
myhostname = vbird.adsldns.org
这样的方式来设定的,那么什么是『变量』呢?如果还不清楚,赶紧拿出『鸟哥的 Linux 私房菜 -- 基础学习篇』翻到『认识 BASH 』的章节,好好的瞧一瞧去吧!尤其变量的内容显示需要用 $ 来领头的用法,千万不可忘记!例如:
myorigin = $myhostname  ==> myorigin = vbird.adsldns.org
上面两个是一模一样的,只是藉由变量来让我们的设定更加的简单化!不过,与变量设定规则当中比较不同的,在 main.cf 当中的等号两边需要有空白!此外,如果有两个以上的设定呢?那你就必须要逗号『,』或者是空格符『』来做为分隔了!例如:
mydestination = $myhostname, $mydomain  
mydestination = $myhostname $mydomain
在底下的设定当中请特别留意这些设定喔!
 
主机名称的设定:myhostname 与 mydomain (极重要)
这个设定蛮重要的喔!就是在设定你的主机名称啰!请特别留意,这个『 myhostname 』的变数在 main.cf 设定档的后面会持续的被使用到,所以,不要写错了!至于 mydomain 则是你的网域啦!以鸟哥的 linux.vbird.org 为例,我的主机名称为 linux.vbird.org (用 FQDN 的方式来写),此时,我的 domain 就是 vbird.org 啦!在本章的例子当中,主机名称为 vbird.adsldns.org 网域名称为 adsldns.org ,所以你要这样设定: myhostname = vbird.adsldns.org   
方法三:使用档案型态
mydestination = /etc/postfix/local-host-names
上面的名称可以随便你取喔!然后在该档案内设定
[root@test root]# vi /etc/postfix/local-host-names
vbird.adsldns.org,
www.vbird.adsldns.org

一般来说,除非您对于 local-host-names 这个文件名称情有独锺,否则的话,鸟哥个人建议您直接在 mail.cf 里面直接设定好你的可接受的主机名称即可!特别留意的是,如果你的 DNS 里头的设定有 MX 的话,那么请将 MX 指向的那个主机名称一定要写在这个 mydestination 内!否则很容易出现错误讯息喔!特别的给他注意这一点!『一般来说,使用者最常发生错误的地方就在这个设定里头呢!需要搭配你的 DNS 设定喔!』
 
简易的 Relay 控制:inet_interfaces mynetworks_style mynetworks relay_domains (极重要)
这个项目在控制谁可以利用我们的主机来寄信呢?也就是在 sendmail 里面的 access 那个档案的咚咚啦!分别说明一下几个东西啰!
 
inet_interfaces:你的 Postfix 主机能被用来使用的接口,假如你的 Linux 主机有多个接口,例如多张网络卡或者是拨接之后又会产生的 ppp0 这些接口时,如果你不想要全部的接口都开放 postfix 功能,那么就可以在这里指定能用的接口啰 (注:指定的方式是以主机名称为主喔!) 一般预设只有自己的内部循环网络可以使用 (localhost) ,不过,如果要连上 Internet 的话,建议就要全部都开放啦! inet_interfaces = all
 
mynetworks_style:这是用来设定你所想要的 relay 的信任(trust)网域型态!一般来说,有三种主要的型态,分别是:
 
class :表示为 A/B/C 三种 class 其中之一,在拨接或者是 ADSL 的情况下,这种型态设定并不好!因为他会主动的去找你目前的 IP 所在的网域来进行 relay 的功能开放!举个例子来说,如果你是以中华电信的 ADSL 拨接情况,那么你的 IP 很可能会是 61.59.xxx.yyy ,那如果你设定为 A class 的话 ( postfix 会自动的判断,请至"网络基础"一文当中查看 A/B/C 三个 class 的说明 ) ,那么只要是 61 开头的 IP 都可以用你的 postfix 喔!很严重吧!这个设定通常只给内部私有网域来使用的啰!
 
subnet:这是 postfix 的默认值,使用 subnet 的型态来设定喔!意义是说,你的网络卡 IP 所在网域的任何一个 IP 都会被接受的意思!例如我的主机网卡私有 IP 为 192.168.1.2 那么所有我内部网域连接到这个网卡的 192.168.1.0/24 这个网域的所有 IP 都会被认为是『合法的』!而自动的提供其 Relay 的功能呢!
 
host :在这个设定时, postfix 仅会知道 localhost 设定为 trust (信任) 的网域而已!
 
基本上,这个设定值你可以指定为 mynetworks_style = subnet ,不过,也可以不要设定啦!直接以底下 mynetworks 来设定 relay 的网域即可!另外,如果您有设定 mynetworks_style 以及 mynetwork 时,那么 mynetworks 这个设定会取代掉 mynetworks_style 喔!因为如此,所以鸟哥个人是不设定 mynetworks_style 的,只设定 mynetworks 而已!
 
mynetworks :这个也是用来开放 Relay domain 的一个设定项目!一般来说,也可以设定成很多的方式,包括档案与变量或直接书写需要的 IP/netmask 类型!这里我们假设有 192.168.1.0/24, 127.0.0.0/8 以及 192.168.1.100 这几个咚咚要开放,所以我可以这样写:『mynetworks = 192.168.1.0/24, 127.0.0.0/8, 192.168.1.100/32』!如此一来,连 access 都不需要设定呢! ^_^ ( 注:请注意,如果你没有设定 mynetworks 的话,一定要将 mynetworks_style 设定为 host 喔!不然你的 IP 所在的子网域的 IP 会被自动的认为是『合法的』呢!)另外,如果你想要启用 /etc/postfix/access 这个档案的设定功能时,那就必需要再加以修改喔!例如:『mynetworks = 127.0.0.0/8, hash:/etc/postfix/access 』注意文件名称使用完整档名!
 
relay_domains:相对于 mynetworks 设定的专门针对『来源』的 IP 来设定,那么如果是以主机名称,或者是领域名称( domain )时,要如何设定呢?那就可以使用这个项目来设定啦! mynetworks 设定『信任网域的来源 IP 』而 relay_domains 则可以设定『信任网域的来源与目标之主机或领域名称』啦!举个例子来说,如果你的主机要开放 vbird.org 这个网域的主机的 Relay 功能,那么你将 vbird.org 写入 relay_domains 当中时,那么:
 
任何由 vbird.org 来的信件都会被认为是『信任』的,所以 postfix 主机会自动帮忙 relay ;
由任何地方来的信件,"并且"要往 vbird.org 这个网域去的信件,postfix 主机也会帮忙 Relay 的!
 
所以说,这个 relay_domains 可以设定『来源』与『目标』的主机或领域名称喔!一般来说,relay_domains 预设就是我们自己的主机啦!!
 
上面的设定项目当中,我们可以仅设定两个即可啦!其它的不用管也没有关系!不过,由于我预设还有启动 vbird.org 这个 relay domain ,所以说,整体架设如下: inet_interfaces = all
mynetworks = 192.168.1.0/24, 127.0.0.0/8, 192.168.1.100/32,  
       hash:/etc/postfix/access
relay_domains = vbird.org
设定完成之后还需要启动 access 喔!
1. 先手动修改完任何你想要的动作在 /etc/postfix/access 当中;
2. 完成数据库的建置:
[root@test root]# postmap hash:/etc/postfix/access

 
设定账号别名的数据库:aliases_maps (极重要)
还记得 aliases 这个账号别名的用途吧?!如果你是以 RPM 的方式来安装 Postfix ,那么这个设定值是没有问题的,但是,如果你是以 Tarball 来安装你的系统时,并且是由 sendmail 升级的,那么由于 sendmail 将 aliases 放置在 /etc/aliases (要视你的 Linux 版本而定!),不过,比较好的作法是将 aliases 放置在 /etc/postfix/aliases 里面,这样设定与目录之间的关系比较容易找啦!那要如何修改呢?首先,你可以将旧有的 aliases 移动到 /etc/postfix/aliases 里面,并且请特别注意,这个旧有的档案里面,一定要存在有『 postfix: root 』这一个设定才行喔!然后透过 /etc/postfix/main.cf 里面的 alias_maps 来修改,通常鸟哥个人喜欢改成这样: alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
改完之后还需要以 postalias 来建置成为 postfix 可以读取的数据库格式喔! [root@test root]# postalias hash:/etc/postfix/aliases

呵呵!设定完上面这几个重要的项目之后,基本上,你的 postfix 主机『已经准备好上路啦!』所以,这个时候请将他启动吧!或者是重新启动他吧!
  先确认设定档有没有错误:
[root@test root]# postfix check  
如果是 RPM 安装的情况:
[root@test root]# /etc/rc.d/init.d/postfix restart
如果是 Tarball 安装的情况:
[root@test root]# postfix start
检查是否正确的启动了呢?
[root@test root]# netstat -tl | grep smtp
tcp        0      0 *:smtp                  *:*                     LISTEN
设定开机的时候立刻启动:
[root@test root]# chkconfig --add postfix
--------------------------------------------------------------------------------
重要观念:Postfix 预设的 Relay 流程与收受信件流程:
 
在预设的情况下 ( 也就是说,在没有开放 SMTP 这个邮件认证时! ) Postfix 对于收信与寄信的流程是如何呢?!这里我们得分别来谈一谈几个主要的设定项目与邮件传输的动作喔!
 
帮助 Client 发送信件,也就是 Relay 的功能开放的需求项目:在开放哪些项目之后,你的 postfix 主机才会帮助『信任』的 Client 端 Relay 呢?
当 Client 来自信任的网域,也就是 IP 符合 $mynetworks 的设定值时;
当 Client 来自信任的机器,也就是主机名称符合 $relay_domains 的设定项目时;
当 Client 来自不信任的网域,但是去的目的地主机端符合 $relay_domains 的设定时。
当符合上面三点的任何一点时,那么 postfix 将对该信件进行 relay 的动作喔!
 
收信程序:在哪些情况之下,我们的 postfix 会将该封信件收下来呢?
收件者主机名称符合 $inet_interfaces 的设定;
收件者主机名称符合 $mydestination 的设定;
收件者主机名称符合 $virtual_maps 的设定。
符合上面三点的任何一项时,那么该封信件就会被我们的 postfix 收下来!所以,如果你的 postfix 能寄不能收,或者是能收不能寄,请仔细的观察一下上面的几个重大的设定项目,仔细的在你的 main.cf 重新设定一下,基本上,应该就不会有太大的问题啦!
 
--------------------------------------------------------------------------------
启动 smtp 邮件认证功能
 
谈完了 Relay 的功能之后,接下来自然就是重要的『SMTP』邮件认证的部分了!目前邮件认证的功能有相当多种类,请特别留意的是,鸟哥这里使用的是 SASL 释出的 pwcheck 与 saslauthd 这两个 daemons 提供的功能喔!这两个功能分别在 cyrus-sasl 1.5.xx(pwcheck) 里头与 2.xx(saslauthd) 里头设定的啦!但是 Red Hat 9 使用的是 saslauthd 喔!请回到前面的 Postfix 安装里面瞧一瞧 RPM 的 1.5.xx 与 Tarball 的 2.xx 好吗!你要作的动作有:
 
确定 cyrus-sasl 已经安装,并且同时必须要安装 libsasl 相关的 LOGIN 及 PLAIN 的函式库(这个在前面 Postfix 套件安装 当中已经说明了,分别参考 Tarball 与 RPM 的安装,请前往参考);
确定在 sasl 函式库内已经存在有 smtpd.conf 这个档案 (注意,cyrus-sasl 第一版函式库在 /usr/lib/sasl 而第二版则在 /usr/lib/sasl2 ,目录并不相同,请仔细察看一下您的 sasl 喔! ),这个档案的内容在 Postfix 套件安装里面已经说明了!并且 sasl 与 sasl2 设定并不相同,请自行参考;
确定已经使用 pwcheck(cyrus-sasl 1.5.xx) 或 saslauthd(cyrus-sasl 2.xx) 这两个 daemon 了,并且已经成功的启动 daemon 了!可以使用『ps -aux | grep pwcheck 』或『ps -aux | grep saslauthd 』察看是否有 process 存在;
修改 /etc/postfix/main.cf 这个档案的设定 (请参考底下的说明);
重新启动 postfix 。
 
基本上,大部分的内容我们在安装的时候已经搞定啦,就剩下需要设定 main.cf 这个档案而已,那么有哪些数据必须要设定的呢?
 
针对主机设定:
smtpd_sasl_auth_enable:『确定是否要针对 Client 启动 sasl 的认证呢?』预设是不启用,这里我们必须要将他给启用才行啊!所以要『smtpd_sasl_auth_enable = yes』
 
smtpd_sasl_local_domain:『确认已经经过认证的网域』,就是不需要身份认证也可以是『信任』的网域啰,在 1.5.xx 版的 cyrus 可以直接填写为 $myhostname 啦!不过,在 2.xx 版本时,就不能设定了!很重要喔!
 
smtpd_recipient_restrictions:『信件收件的限制规则』,既然已经启动了 sasl 的邮件认证,此时必须要规定一下,到底在什么条件之下,我们的 postfix 可以接受 Client 端的 Relay 的功能呢?主要有底下这几种限制的规则:
permit_mynetworks:在 mynetworks 这个项目设定的网域 IP 都可以被允许联机喔;
permit_authenticated:允许使用者经过 SASL 的认证方式寄信!
check_relay_domains:通过一些测试之后的主机可以进行 relay ,与刚刚前几节的 relay_domains 有点关系!不过,在 2.xx 版本下,需要变成底下的项目了!
reject_unauth_destination:这是在 2.xx 版本时的设定项目,取代了 check_relay_domains 的设定项目啰!
通常我们会设定上面这三个就差不多啦!
 
smtpd_client_restrictions:『针对 client 端的限制规则』,经过 mynetworks 这个信任网域的 IP 之后,那未经信任的 Client端 IP 来源你要限制他使用你的 postfix 时,这个项目就要启动 permit_sasl_authenticated 啰!
 
smtpd_sasl_security_options:『限制某些登入的方式』,在 Postfix 里面,预设是使用 Plaintext 的方式来认证的,所以自然不能取消掉这个认证啰(noplaintext)!但是我们可以取消掉匿名登入的型态喔(noanonymous)!可以这样做『smtpd_sasl_security_options = noanonymous』
 
针对 Client 设定:
smtp_sasl_auth_enable:上面是针对主机来设定的,这个项目则是针对 Client 来设定的,在预设的情况之下, Postfix 并不会对 client 提供认证的功能,也就是说, postfix 只会依据 mynetworks 之类的信任网域来提供 Relay 的功能,那么我们要启动对于 client 的身份认证功能时,这里就必需要设定为 yes 才行!不过,如果是在 2.xx 版本时,这个设定就不需要啦!
 
所以整个设定值就变成这样啦:
  [root@test root]# vi /etc/postfix/main.cf
1.5.xx 版本的 Cyrus SASL
底下请自行新增在这个档案的最后面:
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,  
     check_relay_domains
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
smtp_sasl_auth_enable = yes
2.xx 版本的 Cyrus SASL
底下请自行新增在这个档案的最后面:
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = ' '
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
     reject_unauth_destination
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
注:有网友来信告知,在 smtpd_sasl_local_domain 的部分,也可以修改成:
smtpd_sasl_local_domain=
即可!

 
另外,由于 RPM 版本的 Postfix 预设会使用 chroot jail 这个比较安全的动作,所以,如果是 RPM 安装时,你还必需要修改一个档案:
  [root@test root]# vi /etc/postfix/master.cf
找到底下的这一行:
smtp    inet    n       -       y       -       -       smtpd
将他改成为:
smtp    inet    n       -       n       -       -       smtpd
 
注:chroot jail 的功能在于『使用权限较低的一般身份使用者来进行 postfix 的工作程序,只有在需要的时候才可以进入 /var/spool/postfix 这个邮件队列目录!』,对于系统来说,是有一定程度的安全保障的!所以, Postfix 才会在预设的情况之下以 chroot 的功能来进行 postfix 的!不过,再加上了 SMTP 这个认证机制之后,由于他必需要以比较高等级的使用者来执行一些认证个功能,所以除非您额外的加入很多的函式库去到 chroot jail 目录下,否则的话,就不能使用 chroot 啦!所以,如果要启动 SMTP 的话,请务必将 master.cf 这个档案修改过喔! ^_^
 
这样就算设定完毕啦!然后重新启动 postfix 看看情况是如何:
  [root@test root]# /etc/rc.d/init.d/postfix restart
[root@test root]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
220 vbird.adsldns.org ESMTP Postfix (1.1.11) (Mandrake Linux)
ehlo localhost   
几个相关的档案说明
 
在 sendmail 当中有几个颇为重要的档案,例如 ~/.forward 等等的档案!在这里我们也必需说明一下这几个档案在 postfix 里面的应用情况:
 
/etc/mail/local-host-names:这个档案是用来书写你的 mail server 可以接收『目的 e-mail server』的名称的一个档案,这在先前的设定项目中已经提过了,就是 /etc/postfix/main.cf 里面的 mydestination 的设定内容啦!
 
/etc/mail/access :这个档案用来规定可以 Relay 或者需要 discard 的动作!在 postfix 当中预设是不开启这个档案的设定的,如果要启用的话,需要在 mynetworks 里面规定好文件名称喔!设定方法请参考前几节的说明!
 
~/.forward :这个档案在 sendmail 与 postfix 当中的设定是一模一样的,都是用来帮忙邮件的转递的,可以参考 sendmail 的设定项目!
 
/usr/sbin/mailq:这个执行档已经被更改过了!目前可以使用 postqueue -p 来显示出还在邮件队列的信件标题喔!
 
基本上,在 sendmail 当中可以使用的外部设定档案,在 postfix 底下几乎都能再被使用!所以,由 sendmail 升级到 postfix 真是相当的简便啊! ^_^

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/64038/showart_2125381.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP