首页 > 代码库 > 强大的邮件系统和简单的后台管理
强大的邮件系统和简单的后台管理
强大的邮件系统和简单的后台管理 环境: CentOS 6.0 软件:PostFix Dovecot 描述:Postfix是收发信全球最快的邮件服务器,而且安全免费,无论是从成本还是稳定/安全考虑 都是企业最好的选择。服务器运维技术一直都是朝着高效,稳定,安全,易管理的方向发展。 本邮件服务器有各种安全机制和一条命令可完成管理员所有的任务。规范,易于操作,而且管 理界面简洁,全中文,就是一个不懂linux和英文的IT管理员都能完成所有邮件后台工作。 环境配置 设置主机名 [root@mail sbin]# hostname mail.davistest.com 设置网络主机名 vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=mail.davistest.com 设置本机解析(这里就不架域名服务器了,如感兴趣你可以本站其它地方去了解)DNS查询顺序HOST-ETH-NETWORK-RESOLV.CONF vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.109 mail.davistest.com 如果是Centos 7 的话,还要把主机名加在/etc/hostname文件里,要不然重启后又回到解放前了。 网卡配置 (LAN IP能出外网的哦)(如果有WAN IP,可以再配一个网卡,域名在WAN上有MX解析的话就能接收外部邮件) vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=08:00:27:2a:6c:9d NM_CONTROLLED=yes ONBOOT=yes IPADDR=192.168.1.109 BOOTPROTO=none NETMASK=255.255.255.0 TYPE=Ethernet GATEWAY=192.168.1.1 IPV6INIT=no USERCTL=no DNS1=192.168.1.1 关闭Selinux [root@mail ~]# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled #这里设成禁用disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted #一定要关了它,要不然会出现Maildir权限问题。 搞个防火墙规则,有点粗口,还是叫建个防火墙规则吧。这样更安全,除了指定的端口开放,其它的端口都进不了服务器。 vi /usr/local/sbin/startmailf #!/bin/bash #create: 15-Nov-2014 #Creater: Davis Dai service network restart #重启网络 service postfix restart #重启postfix service dovecot restart #重启dovecot service saslauthd restart #重启ASAL授权 iptables -F #清空防火墙 iptables -I INPUT -j DROP #拒绝所有输入端口 iptables -I INPUT -p tcp --dport 110 -j ACCEPT #允许邮件收信110端口,POP3的IP入口 iptables -I INPUT -p udp --dport 110 -j ACCEPT #允许邮件收信110端口,POP3的带数据包入口 iptables -I INPUT -p tcp --dport 25 -j ACCEPT #允许邮件发信25端口,IP入口 iptables -I INPUT -p udp --dport 25 -j ACCEPT #允许邮件发信25端口,带数据包入口 iptables -I INPUT -p udp --dport 143 -j ACCEPT #允许邮件收信143端口,IMAP的IP入口 iptables -I INPUT -p tcp --dport 143 -j ACCEPT #允许邮件收信143端口,IMAP的带数据包入口 iptables -I INPUT -p udp --dport 22 -j ACCEPT #开放PUTTY和WINSCP 22号端口,方便管理员进入 iptables -I INPUT -p tcp --dport 22 -j ACCEPT #开放PUTTY和WINSCP 22号端口,方便管理员进入 iptables -I INPUT -p tcp --dport 53 -j ACCEPT #开放DNS查询端口,这样能解析到邮件服务器 iptables -I INPUT -p udp --dport 53 -j ACCEPT #开放DNS查询端口,这样能解析到邮件服务器 #当然你也可以再加456,1925,587等邮件SSL/TLS端口,80网页管理端口,根据你的邮件服务器而定。 建好了防火墙规则,现把它加为开机启动,让它自动化,省得开机后来要打那该死的命令。 vi /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don‘t # want to do the full Sys V style init stuff. touch /var/lock/subsys/local sh /usr/local/sbin/startmailf #把你的防火墙规则加在这里启动 软件安装 在安装之前你可以先更新一下您的yum源: 下载软件仓库 [root@mail ~]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo [root@mail ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 备份原有源 [root@mail ~]# cd /etc/yum.repos.d/ [root@mail yum.repos.d]# mkdir backup [root@mail yum.repos.d]# mv CentOS-* backup/ 更新源 [root@mail ~]# cp CentOS6-Base-163.repo /etc/yum.repos.d/ [root@mail ~]# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 以上repo和rpm包的版本号要实时上网查询,现在不一定为个是最新版的了哦 用CentOS提供在线安装的功能。 Yum –y install postfix* Yum –y install dovecot* 还要用到Pam.但这都是系统默认有的,如果没有,要安装 Yum -y install pam-devel 邮件服务器配置 邮件服务器是怎么工作的 花上几分钟了解它的工作流程,绝对对下面的学习有用,这就可能是传说中的洗脑吧。 Postfix是干嘛的呀,大道理很难懂,也很难讲,通俗一点,打个比喻,它就是一个快递公司,客户要寄一件东西出去,首先 客户会电话或其它方式联系快递公司,打好包(客户端(outlook,foxmail...)配置好与服务器的连结,也就是我们平常 说的客户端邮件配置,客户端的必须要POSTFIX服务器提供的用户和密码,服务器地址等,也就是说客户寄快递要先找到快递 公司的电话或联系方式,设置完客户端的后,我们就要写邮件了,可以理解为寄件者先准备和打包好包裹),客户一切都准备 好后(邮寄地址,邮编.....),就转交给快递公司代理递送业务,快递公司收到后会给这个这个包裹一个运单号,供客户查询 快递情况(就是说我们的POSTFIX服务器会给每一封邮件一个MESSAGE ID号,这个ID号在是不变的,一直到递送完成,对于管 理员来说一定要知道怎么去找这个ID号,便于你追踪邮件的去向,)快递公司有的时候可能是因为业务员不够或双十一节日快递 爆棚,处理不过来,所以来的包裹要先来后到顺序排队,(就是说POSTFIX服务器会排先来后到来处理你的邮件,我们可以用 mailq来查询有哪些在排队未处理的),快递公司首先会对包裹进行检查,是否符合国家法律,如果是***,枪支,违禁品危险品 等直接扣下,不给邮寄,(POSTFIX 会对邮件进行检查,是否带病毒,地址是否正确等等,POSTFIX 有spam过滤所有的邮件, 如果不合格直接丢弃,并返回信息给客户端说明为什么),如果合格包裹快递公司会按地方进行分类,该装 船的装船,该空运的空运,送行目的城市的代理点,让他们再去派送,本地的就叫业务员直接送过去(postfix也是一样,先分 出哪些是本地域的,哪些是外域的,本地的址接放入目地邮箱,外域的送住目的域的邮件服务器,让它们去分发下去),同时快递 公司也接收其它城市的快件,接到后同样一样的检查,有些直接拒收,有些地址不祥,退回,等等(postfix 收到从各个域发来 的快件经检查该退回的退回,该投递到本地邮箱的投递到本地邮箱),整个工作流程大致就是这样,当然我们今天开的这个快递公司 未经注册,别人查不到有这个快递公司,外地的快递是送不过来的,但我们的快递还是可以送到外地,因为我们能知道外地的注册过 的快递公司在哪,可以送达,除非人家拒收我们这种无证公司的快件。(我们的域名没注册,在WAN上没有MX记录,WAN上邮件不知怎 么发给我们,这也是WAN的规矩,如果每个外部IP都可以收邮件,那就天下大乱了,因为我们能上网,不管是动态的还是静态的,都 个有个WAN IP,有WAN IP我们就能找到WAN的域,就可以发给他们,但有很多邮件服务器处于安全考虑拒收没经注册的域邮件,同样 我们也可以在我们的服务器上做这种设置)。 废话少说,马上开配。 /etc/postfix/目录有两个主配置文件main.cf和master.cf,我们主要设置main.cf,master.cf基本保持默认就行。 其它文件都是些参数呀,表呀....,打个比方说,main.cf 是个人,其它的都是这个人的手机,衣服呀,手表呀,钱包呀。 postfix有100多个参数,但我们可以根据自己的要求去改少量的参数,其它保持默认就可。 我们要养成个良好的习惯,在修改任何文件之前必须把原文件备份。 cp /etc/postfix/main.cf /etc/postfix/main.cf.bak vi /etc/postfix/main.cf alias_database = hash:/etc/aliases #用户别名数据文件,默认,可根据自己的要求可改成SQL,LDAP,VIRTUAL alias_maps = hash:/etc/aliases #用户别名配置文件,默认,可根据自己的要求可改成SQL,LDAP,VIRTUAL broken_sasl_auth_clients = yes #设定 SASL 支持非标准 E-mail Client 的认证动作,自己添加 command_directory = /usr/sbin #命令目录 默认 config_directory = /etc/postfix #配置文件目录 默认 daemon_directory = /usr/libexec/postfix #守护进程目录 默认 data_directory = /var/lib/postfix #数据目录 默认 debug_peer_level = 2 #排错管理级别 默认 home_mailbox = Maildir/ #主目录存储格式,你也可以设成另外的格式mbox, html_directory = no #是否支持网页格式管理 inet_interfaces = all #参数指定postfix系统监听的网络接口 inet_protocols = all #只支持IPv4协议,还是IPv4 IPv6都支持,还是主机,ip mail_owner = postfix #邮件及邮件队列的所有者 #mail_spool_directory = /vbox #指定UNIX风格的邮箱保存的目录。默认设置取决于系统类型。 mailq_path = /usr/bin/mailq.postfix #指定查看邮件队列命令MAILQ的路径 manpage_directory = /usr/share/man #Postfix的在线手册页的位置 mydestination = $myhostname,... #参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件 mydomain = davistest.com #参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值 myhostname = mail.davistest.com #参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名 mynetworks = 192.168.1.0/24 #参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的 myorigin = $mydomain #参数用来指明发件人所在的域名 newaliases_path = /usr/bin/newaliases.postfix #刷新别名命令newaliases路径 queue_directory = /var/spool/postfix #指定队列的位置 readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES #帮助文档位置 sample_directory = /usr/share/doc/postfix-2.6.6/samples #模板文件位置 sendmail_path = /usr/sbin/sendmail.postfix #发送邮件命令的位置 setgid_group = postdrop #这个组是提交邮件和对列管理命令 message_size_limit = 10240000 #限制发送人单个邮件的大小,单位是Byte smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination #信件收件的限制 smtpd_sasl_security_options = noanonymous #拒绝匿名登入 smtpd_sasl_auth_enable = yes #Postfix SMTP server支援SASL验证 smtpd_sasl_path = private/auth #postfix与dovecot通讯程序文件路径 smtpd_sasl_type = dovecot #指定sasl验证程序 unknown_local_recipient_reject_code = 550 #拒绝不存在的本地帐户/「不明使用者」(unknown user) #如果收信地址的人名部份,在任何对照表、别名表、系统帐户都查不出来, #这个人会被视为「不明使用者」(unknown user),系统会拒收。 #如果希望蒐集这类信件,使用下列设定,并指定集中收集的信箱 #以上的mydestination一定要有本机主机名,要不然会收不到信 伟大的postfix也自带很多反垃圾设置,可根据实际情况以及自己的需要进行调整。 smtpd_helo_required = yes #握手要求 smtpd_delay_reject = yes #中继要求 smtpd_client_restrictions = check_client_access hash:/etc/postfix/client_access #客户端访问控制列表 smtpd_helo_restrictions= reject_invalid_hostname,check_helo_access hash:/usr/local/etc/postfix/helo_access#主机和握手控制列表 smtpd_sender_restrictions = #客户端发送人控制列表 reject_non_fqdn_sender, #拒收没有注册域名的发送者 reject_unknown_sender_domain, #拒收不知发件人域的发送者 check_sender_access hash:/usr/local/etc/postfix/sender_access #发件人控制列表 smtpd_recipient_restrictions= #收件控制 permit_mynetworks, #允许我的网络定义的客户端收信 permit_sasl_authenticated, #允许simple authenticated security layer 授权的客户端。 reject_non_fqdn_hostname, #拒收没有注册的主机 reject_non_fqdn_sender, #拒收没有注册的发送人 reject_non_fqdn_recipient, #拒收没注册的接收者 reject_unauth_destination, #拒收没授权的目的主机 reject_invalid_hostname, #拒收不可用的主机 #还有很多,就不写了 smtpd_data_restrictions = reject_unauth_pipelining #拒绝没有授权的通道 header_checks = regexp:/postfix/head_checks #绝对路径邮件头(主题,附件名等)控制列表 body_checks = regexp:/etc/postfix/body_checks ##绝对路径邮件内容控制列表 创建刚才指定的文件就不一一写出来了,照这个方法就行了 touch /usr/local/etc/postfix/head_checks touch /usr/local/etc/postfix/body_checks postmap /usr/local/etc/postfix/head_checks postmap /usr/local/etc/postfix/body_checks 还是例举一下吧,要不然想了解的都不知文档怎么写。 假如/etc/postfix/mail.cf 下有如下反垃圾设置: smtpd_client_restrictions = check_client_access hash:/etc/postfix/access_client smtpd_helo_restrictions = check_client_access hash:/etc/postfix/helo_client smtpd_sender_restrictions = check_client_access hash:/etc/postfix/sender_client smtpd_recipient_restrictions = check_client_access hash:/etc/postfix/recipient_client header_checks = regexp:/etc/postfix/header_check body_checks = regexp:/etc/postfix/body_check 那么我们在access_client/helo_client/sender_client/recipient_client 文件的语法如下: 列表分三项,第一项是规则内容,第二项是对满足规则时所采取的行动,第三项是返回给客户端的信息 客户端域名/ip 550/REJECT/OK.. 你不可以通过我们的服务器发邮件!access_client 客户端域名/ip 550/REJECT/OK.. 禁止davis通过本服务器发送邮件 sender_client 客户端域名/ip 550/REJECT/OK.. 服务器拒收来自davis的邮件. recipient_client 客户端IP/域名 550/REJECT/OK.. 服务器拒绝你的连接. helo_client 不详说了,知道它是怎么工作的就行了,现在有很多软件,比如Mailscanner..功能强大,易管理。 配完之后,你可以用postconf -n main.cf去查看没有注释的内容。 我们用pam去调用连接系统用户为邮件用户验证saslauthd,当然也可以用LDAP,MYSQL等,或SYRUS的shadow.后面我们会讲到。 # Directory in which to place saslauthd‘s listening socket, pid file, and so # on. This directory must already exist. SOCKETDIR=/var/run/saslauthd # Mechanism to use when checking passwords. Run "saslauthd -v" to get a list # of which mechanism your installation was compiled with the ablity to use. MECH=pam #这行MECH设成pam # Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line. # DAEMONOPTS=--user saslauth # Additional flags to pass to saslauthd on the command line. See saslauthd(8) # for the list of accepted flags. FLAGS= 我们用的是dovecot给客户端验证收信,所以我们先确定pam下的dovecot授权如下。 Vi /etc/pam.d/dovecot #%PAM-1.0 auth required pam_nologin.so auth include password-auth account include password-auth session include password-auth 下面我们来弄一下dovecot收信。没文化,又说粗口了,应该说来配置一下dovecot收信。 protocols = imap pop3 lmtp #开放IMAP POP3 等协议 路径/etc/dovecot/dovecot.conf auth_mechanisms = plain login #授权机制,如果我们用POSTADMIN网页管理,也可用什么MD5等等 #路径/etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = no #允许用明文认证登陆,路径/etc/dovecot/conf.d/10-auth.conf listen = * #我们只监听IPV4端口。路径/etc/dovecot/dovecot.conf mail_location = maildir:/vbox/%u/Maildir #邮件目录,%u表示用户名。路径/etc/dovecot/conf.d/10-mail.conf mbox_write_locks = fcntl #邮箱锁的方法。路径/etc/dovecot/conf.d/10-mail.conf passdb { #帐户授权 args = dovecot #就是/etc/pam.d/下的dovecot文件 driver = pam #帐户授权数据提供商 } # 路径/etc/dovecot/conf.d/auth-system.conf.ext service auth { #服务授权 unix_listener /var/spool/postfix/private/auth { #UNIX监听的授权文件 group = postfix #指定监听授权文件的属组为POSTFIX mode = 0666 #指定监听授权文件组权限为666 user = postfix #指定监听授权文件的属主为postfix } #路径 /etc/dovecot/conf.d/auth-system.conf.ext } userdb { #用户数据 driver = passwd #共用系统密码驱动 } 建立邮件存放目录邮件备份目录 mkdir /vbox #建立邮件MAILDIR目录 chmod 755 /vbox #给权限 mkdir /backup #删除用户的备份目录 chmod 755 /backup #备份目录权限 mkdir /etc/postfix/Mail_Group #邮件组软链目录,以后做管理面版脚本要用 启动服务 service postfix start service dovecot start service saslauthd start 设置服务开机自动启动 chkconfig postfix on chkconfig dovecot on chkconfig saslauthd on 脚本编写 管理员控制面版 vi /usr/local/sbin/main #!/bin/bash #create: 15-Nov-2014 #Creater: Davis Dai echo "1 新建邮件帐号" #在屏幕上输出菜单 echo "2 查看邮件帐号" echo "3 删除邮件帐号" echo "4 新建邮件组" echo "5 删除邮件组" echo "6 查看邮件组" echo "7 添加用户到组" echo "8 从组里删除用户" echo "0 退出邮件管理" order="" #设参数为你要先择的菜单 echo "请选择任务代码:" read order echo $order >/tmp/order.txt if [ "$order" == "1" ];then #设条件根据你的选择跳到相应的管理模块 mailacounts; elif [ "$order" == "2" ];then viewusers; elif [ "$order" == "3" ];then dusers; elif [ "$order" == "4" ];then groupacounts; elif [ "$order" == "5" ];then dgroup; elif [ "$order" == "6" ];then viewgroup; elif [ "$order" == "7" ];then AMFG; elif [ "$order" == "8" ];then RMFG; elif [ "$order" == "0" ];then exit 0; else #如果你的选择不是以上菜单,提示错误并返回控制面版。 echo "任务代码错误,请重新输入!" main fi 新建邮件模块 vi /usr/local/sbin/mailacounts home="/vbox/" #没置目录参数 useraccount="" #设置用户参数 echo "请给新用户名字:" read useraccount echo $useraccount > /tmp/user.txt #给用户参数赋值 userpass="" #设置密码参数 echo "请输入用户密码:" read userpass echo $userpass > /tmp/pass.txt #给密码参数赋值 useradd -d $home/$useraccount $useraccount #添加用户并指定邮件主目录 echo $userpass |passwd --stdin $useraccount #设置邮箱密码 mkdir -p $home/$useraccount/Maildir/{cur,new,tmp} #建邮件目录和文件 mkdir -p $home/$useraccount/Maildir/.Drafts/{cur,new,tmp} mkdir -p $home/$useraccount/Maildir/.Sent/{cur,new,tmp} mkdir -p $home/$useraccount/Maildir/.Trash/{cur,new,tmp} chown -R $useraccount $home/$useraccount/* #设置属主-R是做个递归,也就是说文件夹下所以有子文件夹和文件 chmod 700 -R $home/$useraccount/* #设置属主有完全权限,其它人没任何权限。 main #回到管理员控制面版 新建邮件组模块 vim /usr/local/sbin/groupacounts #/bin/bash #Create: 14-Nov-2014 #Creater: Davis Dai ls /etc/postfix/Mail_Group/ #显示现有组 home="/vbox/" #没置目录参数 groupaccount="" #设置邮件组参数 echo "请输入新邮件组名:" read groupaccount echo $groupaccount > /tmp/group.txt #给组邮箱参数赋值 grouppass="" #设置密码参数 echo "请输入新邮件组密码:" read grouppass echo $grouppass > /tmp/pass.txt #给密码参数赋值 useradd -d $home/$groupaccount $groupaccount #添加组邮箱并指定邮件主目录 echo $grouppass |passwd --stdin $groupaccount #设置组邮箱密码 mkdir -p $home/$groupraccount/Maildir/{cur,new,tmp} #建组邮件目录和文件 mkdir -p $home/$groupaccount/Maildir/.Drafts/{cur,new,tmp} mkdir -p $home/$groupaccount/Maildir/.Sent/{cur,new,tmp} mkdir -p $home/$groupaccount/Maildir/.Trash/{cur,new,tmp} chown -R $groupaccount $home/$groupaccount/* #设置属主权限-R是做个递归,也就是说文件夹下所以有子文件夹和文件 chmod 700 -R $home/$groupaccount/* #设置属主有完全权限,其它人没任何权限。 touch $home/$groupaccount/.forward #建组邮件名单表 chown root $home/$groupaccount/.forward #设置权限给名单表 chmod 755 $home/$groupaccount/.forward ln -s $home/$groupaccount/.forward /etc/postfix/Mail_Group/$groupaccount #做一个软连结,便于查找 main #回到管理员控制面版 添加邮箱到指定邮箱组模块 vim /usr/local/sbin/AMFG #!/bin/bash #Create Date: 15-Nov-2014 #Creater: Davis Dai ls /etc/postfix/Mail_Group Groupname="" echo "请输入你要加入的组全称:" read Groupname echo $Groupname >/tmp/Groupname.txt cat -n /vbox/$Groupname/.forward usermail="" echo "请输入你要加组的用户邮件地址:" read usermail echo $usermail >/tmp/usermail.txt echo $usermail >> /vbox/$Groupname/.forward main 删除邮箱帐号模块 vim /usr/local/sbin/dusers #!/bin/bash #create: 15-Nov-2014 #Creater: Davis Dai ls /vbox/ deluser="" echo "请键入你要删除的用户:" read deluser echo $deluser > /tmp/deluser.txt cp -R -u -i /vbox/$deluser /backup/ userdel $deluser rm -rf /vbox/$deluser main 删除邮箱组模块 vim /usr/local/sbin/dgroup #!/bin/bash #create: 15-Nov-2014 #Creater: Davis Dai ls /etc/postfix/Mail_Group/ degroup="" echo "请键入你要删除的邮件组:" read degroup echo $degroup > /tmp/degroup.txt cp -R -u -i /vbox/$degroup /backup/ userdel $degroup rm -rf /vbox/$degroup main 查找邮箱用户模块 vim /usr/local/sbin/viewusers #!/bin/bash #create: 15-Nov-2014 #Creater: Davis Dai ls /vbox/ >/tmp/userview.txt cat -n /tmp/userview.txt svuser="" echo "请输入你要查找的用户名:" read svuser echo $svuser > /tmp/svuser.txt if grep -q $svuser /tmp/userview.txt; then echo "用户$svuser已经存在!"; else echo "用户$svuser不存在!"; fi grep -n $svuser /tmp/userview.txt main 查找用户组模块 vim /usr/local/sbin/viewgroup #!/bin/bash #create: 15-Nov-2014 #Creater: Davis Dai ls /etc/postfix/Mail_Group/ >/tmp/groupview.txt cat -n /tmp/groupview.txt svgroup="" echo "请输入你要查找的邮件组:" read svgroup echo $svuser > /tmp/svgroup.txt if grep -q $svgroup /tmp/groupview.txt; then echo "邮件组$svgroup已经存在!"; else echo "邮件组$group不存在!"; fi grep -n $svgroup /tmp/groupview.txt main 从邮箱组里删除用户模块 vi /usr/local/sbin/RMFG #!/bin/bash #create: 15-Nov-2014 #Creater: Davis Dai ls /etc/postfix/Mail_Group >/tmp/groupview.txt cat -n /tmp/groupview.txt sgroup="" echo "请键入你要删除的用户属组名称:" read sgroup echo $scgoup >/tmp/sgroup.txt cat -n /vbox/$sgroup/.forward rguser="" echo "请键入你要删除的用户编号:" read rguser echo $rguser >/tmp/rguser.txt sed -i ‘‘$rguser‘d‘ /vbox/$sgroup/.forward #按编号删除 #sed -i “/$rguser/d” /vbox/$sgroup/.forward #按地址删除 main 管理员手册 进入服务器,输入邮件管理命令main,管理所有的任务 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 新建邮件帐号 [root@mail ~]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 1 请给新用户名字: john 请输入用户密码: 123456 Changing password for user john. passwd: all authentication tokens updated successfully. 新建邮件组 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 4 admin hr it price 请输入新邮件组名: development 请输入新邮件组密码: 123456 Creating mailbox file: File exists Changing password for user development. passwd: all authentication tokens updated successfully. 添加用户到组 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 7 admin development hr it price 请选择你要加入的组: development 请输入你要加组的用户邮件地址: john@davistest.com 查看邮件帐号/备份邮件数据(备份到/backup/)/删除邮件目录 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 3 4 admin Computer davis development hr john Maildir price qq 请键入你要删除的用户: qq 删除邮件组/备份邮件组数据(备份到/backup/)/删除邮件组目录 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 5 admin development hr it price 请键入你要删除的邮件组: it cp: overwrite `/backup/it/.forward‘? y 查看邮件帐号是否存在 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 2 1 4 2 admin 3 Computer 4 davis 5 development 6 hr 7 john 8 price 请输入你要查找的用户名: john 用户john已经存在! 查看邮件组是否存在 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 6 1 admin 2 development 3 hr 4 price 请输入你要查找的邮件组: fjdajkldajf 邮件组不存在! 从邮件组里删除用户 [root@mail sbin]# main 1 新建邮件帐号 2 查看邮件帐号 3 删除邮件帐号 4 新建邮件组 5 删除邮件组 6 查看邮件组 7 添加用户到组 8 从组里删除用户 0 退出邮件管理 请选择任务代码: 8 1 admin 2 development 3 hr 4 price 请键入你要删除的用户属组名称: admin 1 davis@davistest.com 2 4@davistest.com 请键入你要删除的用户编号: 2 客户端测试 只测试收发信,其它组呀,安全呀的,懒得去写了,本人保证做过测试,全部通过! 微软OUTLOOK配置 发送一个邮件给外部邮箱同时抄送内部邮箱(就自己了呀,这样同时可以测试内部收信) 自己邮箱也收到了,测试内部成功。 外部邮箱收到,测试成功.(域名没在INTERNET上注册,所以收不到外部发来的邮件,等我中了500万去注册一个,哈哈) PostfixAdmin网页管理界面 PostfixAdmin软件和依赖包的安装 依赖包的安装 yum install -y mysql-server php php-mysql php-imap php-mbstring PostfixAdmin软件安装 点击这里进入源安装包下载网站下载最新的.tar.gz格式的文件。 下载后解压改名,放在你想放的位置,并设置权限。 [root@mail ~]# tar -xzvf postfixadmin-2.92.tar.gz #解压 [root@mail ~]# mv postfixadmin-2.92 /postfixadmin #改名放到指定位置 [root@mail ~]# chmod 777 /postfixadmin/ -R 修改PostfixAdmin网页主配置文件 vim /postfixadmin/config.inc.php $CONF[‘configured‘] = true; $CONF[‘postfix_admin_url‘] = ‘/postfixadmin‘; $CONF[‘database_type‘] = ‘mysqli‘; $CONF[‘database_host‘] = ‘localhost‘; $CONF[‘database_user‘] = ‘vmail‘; $CONF[‘database_password‘] = ‘vmail‘; $CONF[‘database_name‘] = ‘vmail‘; $CONF[‘domain_path‘] = ‘YES‘; $CONF[‘domain_in_mailbox‘] = ‘NO‘; $CONF[‘encrypt‘] = ‘dovecot:CRAM-MD5‘; $CONF[‘emailcheck_resolve_domain] = ‘NO‘; $CONF[‘dovecotpw‘] = "/usr/bin/doveadm pw"; 新建PostfixAdmin数据库 启动MySql服务 service mysqld start 进入MySql命令工具,默认的MySql用户root的密码是空的 mysql -u root -p mysql> CREATE DATABASE vmail; mysql> GRANT ALL PRIVILEGES ON vmail.* TO ‘vmail‘@‘localhost‘ IDENTIFIED BY ‘vmail‘; mysql> flush privileges; mysql> \q touch /postfixadmin/DATABASE_MYSQL.TXT mysql -uvmail -p vmail < /postfixadmin/DATABASE_MYSQL.TXT 如果显示ACCESS DENIY, mysql -u vmail -p vmail mysql> set password = password (‘newpassword‘) 配置PostfixAdmin网页管理应用 安装网页程序apache, 默认是已安装的,所以这你可以省了,你可以先查看一下,是否有安装,再决定。 rpm -qa|grep httpd #查看是否安装 yum install httpd -y #安装 新建网页索引文件 vim /etc/httpd/conf.d/postfixadmin.conf Alias /postfixadmin /postfixadmin 启动Apache服务 service httpd start POSTFIX的虚拟用户MYSQL设置和sasl设置 建立邮件目录和管理用户 useradd -u 1000 -d /vmail -s /sbin/nologin vmail mkdir /vmail chmod 770 /vmail/ chown vmail:vmail /vmail/ vim /etc/postfix/main.cf 加入如下设置。 ######################Virtual Settings########################## virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_mailbox_base = /vmail virtual_minimum_uid = 1000 virtual_uid_maps = static:1000 virtual_gid_maps = static:1000 virtual_transport = dovecot #####################SASL Settings############################### smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_unauth_destination, reject_invalid_hostname ###################Mail Quota Settings############################### message_size_limit = 204800000 maximal_queue_lifetime = 1d bounce_queue_lifetime = 1d vim /etc/postfix/master.cf 最后行加入,flages 前一定要有两个空格哦 dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient} [root@mail ~]# vim /etc/postfix/mysql_virtual_domains_maps.cf user = vmail password = vmail hosts = localhost dbname =vmail table = domain select_field = domain where_field = domain additional_conditions = and backupmx = ‘0‘ and active = ‘1‘ [root@mail ~]# vim /etc/postfix/mysql_virtual_alias_maps.cf user = vmail password = vmail hosts = localhost dbname = vmail table = alias select_field = goto where_field = address additonal_conditions = and active = ‘1‘ [root@mail ~]# vim /etc/postfix/mysql_virtual_mailbox_maps.cf user = vmail password = vmail hosts =localhost dbname = vmail table = mailbox select_field = CONCAT(domain,‘/‘,maildir) where_field =username additional_conditions = and active = ‘1‘ vim /etc/postfix/mysql_virtual_mailbox_limit_maps.cf user = vmail password vmail hosts = localhost dbname= vmail table = mailbox select_field = quota where_field = username additional_conditions = and active =‘1‘ DOVECOT收信和SMTPD认证 [root@mail ~]# vim /etc/dovecot/dovecot.conf 修改如下选项 protocols = imap pop3 lmtp listen = * base_dir = /var/run/dovecot/ #first_valid_uid = 89 #last_valid_uid = 89 #maildir_copy_with_hardlinks = yes [root@mail ~]# vim /etc/dovecot/conf.d/10-auth.conf 修改如下选项 disable_plaintext_auth = no auth_mechanisms = plain login cram-md5 !include auth-sql.conf.ext [root@mail ~]# vim /etc/dovecot/conf.d/10-master.conf 修改如下选项 unix_listener /var/spool/postfix/private/auth { mode = 0666 user = vmail group = vmail } [root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf 修改如下选项 mail_location = maildir:/vmail/%u/Maildir [root@mail ~]# vim /etc/dovecot/conf.d/15-lda.conf 修改如下选项 protocol lda { postmaster_address = postmaster@dggd.com sendmail_path = /usr/lib/sendmail auth_socket_path = /var/run/dovecot/auth-master } [root@mail ~]# vim /etc/dovecot/conf.d/20-pop3.conf 修改如下选项 pop3_uidl_format = %08Xu%08Xv [root@mail ~]# vim /etc/dovecot/conf.d/auth-sql.conf.ext 修改如下选项 passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } [root@mail ~]# vim /etc/dovecot/dovecot-sql.conf.ext driver = mysql connect = host=localhost dbname=vmail user=vmail password=vmail default_pass_scheme = PLAIN-MD5 password_query = SELECT username as user, password, ‘/vmail/%d/%n‘ as userdb_home, ‘maildir:/vmail/%d/%n/Maildir‘ as userdb_mail, 1000 as userdb_uid, 1000 as userdb_gid FROM mailbox WHERE username = ‘%u‘ AND active = ‘1‘ user_query = SELECT ‘/vmail/%d/%n‘ as home, ‘maildir:/vmail/%d/%n/Maildir‘ as mail, 1000 AS uid, 1000 AS gid, concat(‘dirsize:storage=‘, quota) AS quota FROM mailbox WHERE username = ‘%u‘ AND active = ‘1‘ 改文件权限 [root@mail ~]# chmod 600 /etc/dovecot/* -R [root@mail ~]# chown vmail /etc/dovecot/* -R [root@mail ~]# chomd 777 /var/run/dovecot/auth-master 打开PostfixAdmin管理界面 http://localhost/postfixadmin/setup.php 填写安装密码。 复制产生出来的安装密码写入到主配置文件/postfixadmin/config.inc.php的$CONF[‘setup_password‘] =‘‘; 然后设置超级管理员和密码 现在你就可以成功的登陆PostfixAdmin管理你的邮件帐户了。 你登陆后就什么都会了 客户端测试全部通过,不再上图了。 RoundCube网页访问客户端 下载解压改名,放入网页引导路径。 下载 wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.0.3/roundcubemail-1.0.3.tar.gz/download 解压 tar -zxvf roundcubemail-1.0.3.tar.gz 放入网页引导路径 cp roundcubemail-1.0.3 /var/www/html/ -R 改名 mv /var/www/html/roundcubemail-1.0.3 /var/www/html/usermail Apache添加php模块 vim /etc/httpd/conf/httpd.conf 添加下面两行 AddType application/x-httpd-php .php PHPIniDir "/etc/php.ini" 添加PHP模块时间区域 vim /etc/php.ini 添加下面一行 date.timezone = Asia/Shanghai 修改权限 chmod 777 /var/www/html/usermail/temp chmod 777 /var/www/html/usermail/logs chmod 777 /var/www/html/usermail/config -R chmod 777 /var/lib/php/session -R 配置CONFIG文件与postfixadmin连接同一个数据库。 启用CONFIG文件 cp /var/www/html/usermail/config/config.inc.php.sample /var/www/html/usermail/config/config.inc.php 改写MYSQL数据查询与POSTFIXADMIN一样 vim /var/www/html/usermail/config/config.inc.php 修改下面一行。 $config[‘db_dsnw‘] = ‘mysql://vmail:vmail@localhost/vmail‘; $config[‘enable_installer‘] = true; 安装PHP-DOM yum install php53-dom yum -y install php-dom 网页配置 1: http://域名或IP/usermail/installer 打开IE,点击NEXT(下一步). 2: Create config,设置你的配置文件,显示/服务器名/网络/数据库连接(与postfixadmin相同数据)..等等。自己揣摸。 3: TEST CONFIG 出现如下NOT OK.数据库没有初始化 Check DB config DSN (write): OK DB Schema: NOT OK(Database not initialized) 点击 Initialize Database, 初始化数据,它会返回结果OK. Check DB config DSN (write): OK DB Schema: OK DB Write: OK DB Time: OK 输入POSTFIXADMIN建的邮件地址测试SMTP和IMAP.会返回结果OK. 完成了,http://域名或IP/usermail 文章来自 http://www.davis-wiki.com
本文出自 “永远的C” 博客,谢绝转载!
强大的邮件系统和简单的后台管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。