ITPub博客

首页 > Linux操作系统 > Linux操作系统 > postfix 配置(3)

postfix 配置(3)

原创 Linux操作系统 作者:bontonpan 时间:2009-02-16 12:18:10 0 删除 编辑
五、 postfix的配置实例

   5.1为拨号用户配置postfix
  假设有一个小公司使用拨号上网,公司通过ISP的SMTP服务器(假设其域名为mail.isp.com,ip地址为201.110.1.100)发送邮件;公司内部的员工通过公司的SMTP服务器(运行postfix)收发邮件,下面我们一起来配置公司内部的SMTP服务器。

  1. 因为没有自己的固定ip和域名,所以必须指定ISP的SMTP服务器作
  为邮件网关(智能主机)。可以用如下的参数指定:
     relayhost = [201.110.1.100]
  注意:relayhost的值可以是domain、host、host:port、[address]或[address:port]。

  2. 当接收到新邮件时,postfix就会尝试投递该邮件。如果将该公司内部的
  SMTP服务器设置为按需拨号,也就是一有程序请求外联就拨号,则会增加上网的费用。这时我们可以通过postfix的defer_transports参数推迟投递新邮件直到postfix提出明确的要求,如指定:
      defer_transports = smtp
  这时如果我们在ppp的脚本(如/etc/ppp/ip-up.local)加上如下命令,则postfix只在拨号成功后投递新邮件:
  /usr/sbin/sendmail

  3. 因为我们是将邮件转发到邮件网关(201.110.1.100)而不是自己进行投
  递,所以我们没有必要使用DNS,因此我们通过如下的参数取消DNS查询:
  disable_dns_lookups = yes

  4. 为了保证我们能收到回信,我们必须进行域伪装。
  masquerade_domains = isp.com

  下面就是我们的配置文件mail.cf:

  #指定邮件网关
  relayhost =  [201.110.1.100]
  # 在拨号成功后才投递邮件
  defer_transports = smtp
  #取消DNS查询
  disable_dns_lookups = yes
  #一般常规配置
  queue_directory = /var/spool/postfix
  program_directory = /usr/libexec/postfix
  command_directory = /usr/sbin
  daemon_directory = /usr/libexec/postfix
  mail_owner = postfix
  default_privs = nobody
  mail_spool_directory = /var/spool/mail
  mailbox_command = /usr/bin/procmail
  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
      # 假设本地网络为192.168.1.1/24
  mynetworks = 192.168.1.1/24
  # host specific information
  myhostname = yourhost.isp.com
  mydomain = local.isp.com
  myorigin = $mydomain
  where do we receive mail and who do we accept/receive mail for?
  inet_interfaces = all
  mydestination = $myhostname, localhost.$mydomain, $mydomain
  default_transport = smtp
  masquerade_domains = isp.com

  需要注意的是:这里的$mydomain、$myorigin、$mydestination不能为isp.com, 因为你如果设定为isp.com,内部SMTP服务器就会认为你的邮件是转发给它的,故而在本地尝试投递邮件,结果只会返回“unknown user”的错误。其次,该配置只实现了将邮件通过SMTP发送到ISP的SMTP服务器的手段,缺乏从ISP的邮件服务器取信的方法,这一点就只能通过 如outlook或foxmail等的mail客户端软件来实现了。

  5.2为中小型企业用户配置postfix
   假设有一家数千名员工的公司,该公司通过租用专线上网。现在公司决定
  通过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, 有关DNS配置的内容请参看本书的相关章节)的内容如下:

  @       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

  5.3在防火墙内部配置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















1 2 3 4
有问必答

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11754813/viewspace-553418/,如需转载,请注明出处,否则将追究法律责任。

上一篇: postfix 配置(2)
下一篇: postfix 配置(4)
请登录后发表评论 登录
全部评论

注册时间:2009-01-30

  • 博文量
    51
  • 访问量
    36848