假设有一家数千名员工的公司,该公司通过租用专线上网。现在公司决定通过postfix来配置自己的邮件系统。在这里我们假设该公司的域为some.com, 邮件服务器的域名mail.some.com,地址为202.200.180.2,DNS服务器的域名为dns.some.com,地址为202.200.180.1。
1. 配置DNS服务器,配置MX记录指向mail.some.com。相关的配置文件为/var/named/some.com(假设其zone文件就叫some.com)的内容如下:
@ IN SOA dns.some.com. root.dns.some.com
(
2000011307 ; serial
28800 ; refresh, seconds
14400 ; retry, seconds
3600000 ; expire, seconds
86400 ; minimum, seconds
)
@ IN NS dns.some.com.
@ IN A 202.200.180.1
@ IN MX 10 mail.some.com.
localhost IN A 127.0.0.1
dns IN A 202.200.180.1
mail IN A 202.200.180.2
host1 IN A 202.200.180.3
host2 IN A 202.200.180.4
2. 配置postfix,其配置文件及相关的解释如下:
#配置一般的路径信息
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_spool_directory = /var/spool/mail
#配置邮件及邮件队列的所有者为postfix
mail_owner = postfix
#配置邮件服务器的主机名
myhostname = mail.some.com
#配置mydomain、myorigin和mydomain参数
mydomain = some.com
myorigin =$mydomain
mydestination = $mydomain
#配置postfix服务监听的端口
inet_interfaces = all
#配置本地收件人的用户名查询手段,缺省是查询/etc/passwd文件
#和别名数据库
local_recipient_maps = $alias_maps unix:passwd.byname
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#配置最终的本地投递代理程序,在这里我们使用流行的procmail
mailbox_command = /usr/bin/procmail
#配置该值为$mydomain以便客户端的连接
relay_domains = $mydomain
mynetworks = 202.200.180.0/24
#配置向用户显示的主机名和版本信息
smtpd_banner = $myhostname ESMTP $mail_name
#对于并发进程的限制,保持系统缺省值就可以满足要求了。
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
#如果你不知道你在做什么,***不要改变下面的配置
debug_peer_level = 2
debugger_command =
PATH=/usr/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
3. 在RedHat中我们通常使用imap作为pop3服务器,可以通过rpm -q imap
命令查看系统有没有安装imap。如果没有安装则插入linux光盘,用rpm -ivh imap-4.5-4.rpm 进行安装。
4. 缺省地,pop3服务器是由inet 启动的,所以必须去掉/etc/inetd.conf文
件中有关pop3的一行注释。如下所示:
pop-3 stream tcp nowait root /usr/sbin/ipop3d ipop3d
5. 重新启动inet服务器,启动postfix:
#/etc/rc.d/init.d/inet restart
#postfix start
在防火墙内部配置postfix
假设一公司通过租用专线上网,公司内部使用192.168.0.0的私有ip, 然后通过防火墙(双宿主主机)的ip欺骗上网,公司的邮件服务器(mail.some.com)也在内部网中,也使用私有ip。我们假设在防火墙上进行了端口转发,可以将Internet对防火墙25端口的请求包转发到内部的邮件服务器上,并且运行DNS服务的防火墙的MX记录指向防火墙本身。
在这个例子中,我想着重说明的是有关映射文件的用法。main.cf配置文件和相关的解释如下所示:
#表明自己的身份
myhostname = mail.some.com
mydomain = some.com
mydestination = $mydomain, $myhostname, localhost.$mydomain
myorigin = $mydomain
#让postfix监听所有接口
inet_interfaces = all
#通过mynetworks参数接受内部网用户的SMTP连接请求
mynetworks = 192.168.0.0/8
#向postfix管理员报告的信息量
notify_classes = resource, software, bounce, policy
#如果客户端的ip地址符合$maps_rbl_domains参数中列出的则拒绝之
maps_rbl_domains = rbl.maps.vix.com, dul.maps.vix.com
#对可以连接的客户端进行严格的限制
smtpd_client_restrictions =
#客户端ip符合$mynetworks定义的范围则接受连接
permit_mynetworks,
#根据access的查询结果判断客户端连接的合法性
check_client_access hash:/etc/postfix/access,
#拒绝ip符合$maps_rbl_domains定义范围的连接
reject_maps_rbl,
#如果客户端在DNS中没有记录则拒绝连接,要慎用
reject_unknown_hostname
#通过发件人的地址进行限制
smtpd_sender_restrictions =
permit_mynetworks,
check_sender_access hash:/etc/postfix/access
#配置虚拟主机数据库,别忘了执行"postmap virtual"进行格式转换
virtual_maps = hash:/etc/postfix/virtual
#对无系统帐号的邮件进行转发配置,如离开公司的员工
relocated_maps = hash:/etc/postfix/relocated
#配置别名数据库
alias_maps = hash:/etc/postfix/aliases
# 我们使用smtp投递代理
default_transport = smtp
# 一些常规配置
mail_owner = postfix
default_privs = nobody
#配置路径信息
queue_directory = /var/spool/postfix
program_directory = /usr/libexec/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_spool_directory = /var/spool/mail
mailbox_command = /usr/bin/procmail
#并发连接配置
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
然后,我们执行以下命令:
#进入postfix配置目录
cd /etc/postfix
#用newaliases初始化别名数据库
newaliases
#用postmap分别建立virtual、access和relocated查询数据库
postmap virtual
postmap access
postmap relocated
#启动postfix
/etc/rc.d/init.d/postfix start
现在我们来看看virtual、access和reloacted几个查询文件的格式,下面是这几个文件的示例和注释:
#virtual文件示例
#假设在这个例子中我们有个虚拟域为other.com
other.com
#access 文件示例
#如果符合前面的条件则进行后面操作,可以有三种操作:
#1. [45]XX $messag:拒绝接受并且向客户端显示预定义的信息
#2. REJECT:拒绝接受,不显示信息
#3. OK允许连接
ispy99@noman.com.cn 550 Go away
friend.com OK
202.192 REJECT
#relocated 文件示例
#该文件主要是将发给无系统帐号的邮件进行转发
who@some.com onetwo@newone.com
【编辑推荐】