Electronic Mail Server

邮件系统,从理论上说有4构成:
1.)让用户阅读和撰写邮件的邮件用户代理(MUA)
2.)在机器间发送消息的邮件传输代理(MTA)
3.)把消息放到本地消息库的投递代理;它有时叫做本地投递代理(LDA)
4.)可有可无的访问代理,它可以把用户代理连接到消息库


邮件别名:
别名能够让系统管理员或单个用户重新发送邮件。他们可以定义邮递列表、在机器之间转发邮件,或者允许用多个名字制定一个用户。别名处理是递归的,所以一个别名指向其他目的地也可以是别名。
sendmail支持的别名机制:
1.)各种有间路由数据库
2.)用户和系统管理员很容易建立的各种纯文件映射,例如/etc/aliaes
3.)厂商主推的老式文件发布系统,例如Sun的NIS和NIS+,以及苹果公司的NetInfo
4.)LDAP轻量级目录访问协议
别名修改,在文件/etc/aliases内添加语句:
admin:                        redhat
以上语句表示凡是发给admin的邮件斗转发给redhat,由redhat接收。
除了用户列表,别名还可以指:
1.)一个包含地址列表的文件
2.)一个应该把消息附加到其后的文件
3.)一条应该报消息作为输入的命令

定义sendmail的用户反访问列表,对sendmail的配置文件/etc/mail/access添加语句:
Connect:spamRus.net            REJECT                             链接spamRus.net域的都粗暴拒绝
Connect:192.168.0                  RELAY                                链接192.168.0.0/24网络的都中继出去
Form:virtual.com                     OK                                      来自于virtual.com域的都接收
To:[email protected]       DISCARD                            转到[email protected]的都先接收后丢弃
Connect:10.0                          ERROR:550                        链接10.0.0.0/24网络的都拒绝,但可返回错误信息


定义接收邮件的域,配置文件/etc/mail/local_host_names:
stationx.example.com                             转发接收来自本地主机的邮件
example.com                                          此邮件服务可接收和转发来自example.com域的邮件


sendmail的查看信息命令:
mail -v user                   用于发邮件时查看交互信息
mailq                             用于查看邮件交互队列
sendmail -q                   重新对邮件队列处理
tail -f /var/log/maillog     邮件服务日志

邮件协议端口类型:
STMP          TCP            25
POP3          TCP            110
POP3s        TCP            995
IMAP            TCP            143
IMAPs          TCP            993
 
配置使imaps对所有区域用户活动:
1.)为imaps服务创建证书:
  cd /etc/pki/tls/certs
  make  dovecot.pem

2.)修改dovecot的配置文件:
  vim /etc/dovecot.conf
  #protocols = imaps
  #ssl_cert_file = /etc/pki/tls/certs/dovecot.pem
  #ssl_key_file = /etc/pki/tls/certs/dovecot.pem

3.)重启dovecot服务:
  `service dovecot restart`

4.)测试imaps服务是否可用:
  openssl s_client -connect stationX.example.com:993

5.)使用mutt命令来使用imaps服务:
  mutt -f imaps://user@server[:port]

                                                                                       PAM

PAM,即Pluggable Authentication Modules (可插入式身份验证模块) 最初由SUN公司发明,SUN把它作为一种验证用户身份的灵活方法。
PAM模块是通过在/etc/pam.d目录下的文件来进行配置的。这个目录下针对每种服务的文件所包含的配置项多有如下形式:module-type  control-flag module-path arguments
1.)module-type字段可取值:
  auth                确定用户是谁,还可能确定他是哪一个组的
  account          实行不基于身份验证的决策
  password       控制密码的改变
  session          提供给用户的前后需要完成的任务
2.)control-flag字段可取值:
  required        为了程序继续执行模块必须取得成功(一票否决),若有不通过的,还要检查后面的需求
  requisite       为了程序继续执行模块取得成功(一票否决),若不通过则直接返回结果
  sufficient      只要满足条件就通过(一票通过)
  optional        模式取得成功与否没有关系
  include         包含其他文件的实现
  substac       用户自定义设置
此外,control-flag还可以是[ value1=action1 action2 action3 ]这种形式,其中action的值有:
  ok                这个模块通过,继续进行其他检查
  done           这个模块通过,则返回值
  bad             这个模块未通过,继续进行其他检查
  die              这个模块未通过,则返回值
  ignore         这个结果不影响其他值
  reset           若有值时,则忽略这个值;若没有值时,则使用这个值
3.)module-path表示调用模块的路径,它可以是相对路径,其目录位于/lib/security下;它也可以是绝对路径。
4.)arguments表示动态加载模块对象的参数,常见的动态加载模块及参数有:
   pam_cracklib.so
               retry=N                  设定能输入几次密码
               difok=N                  与上一个密码之间不能有N个相同的字符
               difignore=N            与上一个密码之间有N个不同字符
               minlen=N               密码最短不能少于多少位
               dcredit=N               N>0,最多能出现几个数字;N<0,最少出现几个数字
               minclass=N           至少包含几类字符
   pam_unix.so
               nullok                     是否允许密码为空
               try_first_pass        若之前提供过密码,则使用改密码

pam_limit.so执行资源限制,它使用配置文件为 '/etc/security/limits.conf',配置文件格式为:
                
其中domain可以是:a username  (redhat)                                   用户名
                  a groupname (mygrp)                                          用户组名
    type可以是:   soft                                                             软限制
                  hard                                                               硬限制
                  -                                                              soft,hard两者一起用
    item可以是:   core                                            内核核心文件大小
                  data                                                     文件最大的数据大小
                  nofile                                                   某用户用户组最多打开多少文件
                  cpu                                                      所使用cpu的时间
                  nproc                                                  用户用户组同时打开的最大进程数
另外,可以使用ulimit命令临时改变限制用户的打开文件数目。