CentOS4.4下架设简单的邮件服务器笔记-阿里云开发者社区

开发者社区> 技术小牛人> 正文

CentOS4.4下架设简单的邮件服务器笔记

简介:
+关注继续查看
 
1.安装OS说明:
默认情况下安装的包选择:Mail,Gcc,Editor组件及可!如果安装的图形界面的话,要修改启动项,只要修改:
[root@extmail ~]# cd /etc
[root@extmail etc]# vi inittab
打开后找到:
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
将id后面的数值进行相应的修改即可!
要配置系统服务,在系统启动时自动启动,可使用:[root@extmail ~]# ntsysv
或者使用此命令:
# chkconfig saslauthd on  (类似此将SMTP-Auth设置为自启动)
如果要配置防火墙:[root@extmail ~]# setup进去后,选择配置比如自定义:tcp:110端口,可以写成:POP3:tcp即可!
 
 
 
 
2.POSTFIX SRC包安装,因为默认情况下,POSTFIX不支持SASL,需要编译进去即可!方法如下:
我们这里下载最新的postfix 2.3 的src rpm自己进行编译,postfix 2.3默认已经不支持sasl2验证了,所以我们要自己重新编译加入对sasl2的支持。下载并安装Postfix。
安装POSTFIX前,先删除sendmail
[root@localhost tmp]# rpm –e sendmail –nodeps
[root@localhost tmp]#useradd leeki.yan -s /sbin/nologin (增加一个用户,取消bash的权限,其它的用户可以依此添加)
cd /usr/local/src
wget [url]ftp://ftp.wl0.org/official/2.3/SRPMS/postfix-2.3.7-1.src.rpm[/url]
rpm -i postfix-2.3.7-1.src.rpm (做此操作时,会提示你某某用户组不存在,可不必理会)
cd /usr/src/redhat/SPECS
vi postfix.specs
搜索并找到下面几行修改如下:
%define with_cdb 0
%define with_ldap 0
%define with_mysql 0
%define with_mysql_redhat 0
%define with_pcre 0 
%define with_pgsql 0 
%define with_sasl 2 
%define with_spf 0 
%define with_dovecot 1 
%define with_tls 1 
%define with_tlsfix 2 
%define with_vda 0 
编译postfix rpm 
rpmbuild -ba postfix.sepc
编译完成后安装postfix:
cd ../RPMS/i386/
rpm -ivh postfix-2.3.7-1.rhel4.i386.rpm
配置Postfix及相关组件
 
 
 
 

3.修改:/etc/postfix/main.cf文件
# vi /etc/postfix/main.cf  // 编辑Postfix的配置文件
#myhostname = extmail.yanweihu.kmip.net  // 找到此行,将等号后面的部分改写为主机名
myhostname = yanweihu.kmip.net  // 变为此状态,设置系统的主机名
#mydomain = domain.tld  // 找到此行,将等号后面的部分改写为域名 
mydomain = cnprint.org  // 变为此状态,设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分)
#myorigin = $mydomain  // 找到此行,将行首的#去掉
myorigin = $mydomain  // 变为此状态,将发信地址“@”后面的部分设置为域名(非系统主机名)
#inet_interfaces = all  // 找到此行,将行首的#去掉
inet_interfaces = all  // 变为此状态,接受来自所有网络的请求
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  // 找到此行,将行首的#去掉
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  // 变为此状态,指定发给本地邮件的域名
#relay_domains = $mydestination  // 找到此行,将行首的#去掉
relay_domains = $mydestination  // 变为此状态,定义允许转发的域名
#mynetworks = 168.100.189.0/28, 127.0.0.0/8  // 找到此行,依照自己的内网情况修改
mynetworks = 10.0.0.0/8, 127.0.0.0/8  // 变为此状态,指定内网和本地的IP地址范围
#home_mailbox = Maildir/  // 找到这一行,去掉行首的#
home_mailbox = Maildir/  // 变为此状态,指定用户邮箱目录
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)  // 找到这一行,接此行添加如下行:
smtpd_banner = $myhostname ESMTP unknow  // 添加这一行,不显示SMTP服务器的相关信息
 
 
 
 
4.启用SMTP认证,在配置main.cf文件的结尾,添加如下行:
smtpd_sasl_auth_enable = yes  // 服务器使用SMTP认证
smtpd_sasl_local_domain = $myhostname  // 指定SMTP认证的本地域名(主机名)
smtpd_sasl_security_options = noanonymous   // 不允许匿名的方式认证
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, 
reject_unauth_destination message_size_limit = 15728640  // 规定邮件最大尺寸为15MB
 
 
 
 
5.SASL配置:(首先确定下面目录中有smtpd.conf文件,如没有,手工建:#touch smtpd.conf
[root@extmail lib]# cd /usr/lib/sasl2
[root@extmail sasl2]# ls
libanonymous.la         libdigestmd5.so         libplain.so.2
libanonymous.so         libdigestmd5.so.2       libplain.so.2.0.19
libanonymous.so.2       libdigestmd5.so.2.0.19  libsasldb.la
libanonymous.so.2.0.19  liblogin.la             libsasldb.so
libcrammd5.la           liblogin.so             libsasldb.so.2
libcrammd5.so           liblogin.so.2           libsasldb.so.2.0.19
libcrammd5.so.2         liblogin.so.2.0.19      smtpd.conf
libcrammd5.so.2.0.19    libplain.la
libdigestmd5.la         libplain.so
[root@extmail sasl2]#
确定其内容如下:
[root@extmail sasl2]# vi smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
启动saslauthd服务
[root@extmail sasl2]# service saslauthd start
[root@extmail sasl2]# service saslauthd status
saslauthd (pid 11815 11814 11813 11812 11806) is running...
 
 
 
 

6.POP3配置
[root@extmail sasl2]# vi /etc/dovecot.conf修改这个文件,加入下面的语句
protocols = imap imaps pop3 pop3s
[root@extmail sasl2]# service dovecot start 启动服务
[root@extmail sasl2]#chkconfig dovecot on   让系统启动进自动加载,若on改为OFF即不自动启动
 
 
 
 
解决收126或163邮箱发过来的信,收不到!根据日志解决办法如下:
a.修改/var/spool/postfix/Maildir文件夹权限
解决方法:
chown postfix /var/spool/postfix/Maildir
 
b.再次查看日志:测试从126的邮箱发过一封测试提示如下错误;
May 10 20:08:41 extmail postfix/smtpd[3935]: connect from m15-111.126.com[220.181.15.111]
May 10 20:08:41 extmail postfix/smtpd[3935]: warning: unknown smtpd restriction: "message_size_limit"
May 10 20:08:41 extmail postfix/smtpd[3935]: NOQUEUE: reject: RCPT from m15-111.126.com[220.181.15.111]: 451 4.3.5 Server configuration error; from=<[email]liuxiaoji456@126.com[/email]> to=<[email]leeki.yan@yanweihu.kmip.net[/email]> proto=SMTP helo=<m15-111.126.com>
解决方法:
修改main.cf里面的下面的参数
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination message_size_limit = 20480000
改成
message_size_limit = 20480000
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
即分成两行写!
 
目前测试:126发过来的信可以收到,说明是正常,也同时说明我们之前的说126根据IP要反解析域名,这个说法不是太确切!暂时还有待进一步测试!
 
 
 
8.让POSTFIX调用spamassassin
设定 SpamAssassin 设定档
SpamAssassin 的设定档是放在 /etc/mail/SpamAssassin/local.cf 里面,而且个档案里面定义了很多简查规则,以下,我把最简单的设定列出来。

CODE:
#多少分才判为 SPAM
required_hits 5
report_safe 1
#若为 SPAM,是否设修改主旨
rewrite_subject 1
#修改主旨为 (当 rewrite_subject 是 1 的时候才会有用)
rewrite_header Subject [SPAM]
# Encapsulate spam in an attachment
report_safe 1
# Use terse version of the spam report
use_terse_report 1
# Enable the Bayes system
use_bayes 1
# Enable Bayes auto-learning
auto_learn 1
# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
# - chinese english japanese
ok_languages zh en ja
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales en ja zh
 
这样做,就可以把基本的 SpamAssassin 设定起来。
新增一个 spamfilter 使用者
这个 spamfilter 主要是 spamd 会使用的,所以请建立起来,当然这个帐号是不允许从外面登入的:
CODE:
root # useradd -s /bin/false spamfilter 
[Copy to clipboard]

编写 filter script

CODE:
root # touch /usr/local/sbin/filter.sh
[Copy to clipboard]

CODE:
root # vi /usr/local/sbin/filter.sh
#!/bin/bash
exec /usr/bin/spamc -d 127.0.0.1 -f -p 783 -t 30 -e /usr/sbin/sendmail -i "$@"
exit $?
root # chmod 755 /usr/local/sbin/filter.sh
 
你可以 按这里 下载 filter.sh。
设定 postfix
再来,我们需要再设定 postfix 一下,让 postfix 在接收信件时,使用 SpamAssassin 来做信件过泸。其中会设定到最重要的 /etc/postfix/master.cf 档,所要请记得要特别小心!

CODE:
root # vi /etc/postfix/master.cf
修改下面如下:
CODE:
smtp inet n - n - - smtpd -o content_filter=postfixfilter
smtp unix - - n - - smtp -o content_filter=postfixfilter 
[Copy to clipboard]
CODE:
postfixfilter unix - n n - - pipe flags=Rq user=spamfilter
argv=/usr/local/sbin/filter.sh -f ${sender} -- ${recipient} 
root #
设定了 master.cf 之后,如果你在 main.cf 有设定其它的垃圾邮件规则的话,像是 header_checks 和 body_checks 的话,就请关闭吧,这种全文分析的工作可以让 SpamAssassin 来做就可以了。

CODE:
root # vi /etc/postfix/master.cf
#把 header_checks 和 body_checks 注解起来
#header_checks = regexp:/etc/postfix/header_checks
#body_checks = regxp:/etc/postfix/body_checks
root #
重新启动 postfix 和 SpamAssassin
CODE:
root # postfix stop; sleep 3; postfix start
root # service spamassassin start

如何测试呢看是否成功,如何成功会发一封MAIL。标题被插有SPAM信息(可以查找到下面的文件,将其内容复制进去发送一下,再进去maillog里查看分值,得分为5的被判为SPAM!
find / -name sample_spam.txt  查看sam*的所有文件
 
 
 
 
8.spamassassin增加白名单方法修改/etc/mail/spamassassin/local.cf文件:如下:
score   USER_IN_BLACKLIST   20.00   # From: address is in the user's black-list
score   USER_IN_WHITELIST   -80.0   # From: address is in the user's white-list
# Use white list
whitelist_from  *@yanweihu.kmip.net
whitelist_from  *@trinet.com.cn
 
 
 
 

9.修改系统时钟
比如将系统时间设定成2005年8月8日的命令如下。
#date -s 2005/08/08
将系统时间设定成下午8点12分0秒的命令如下。
#date -s 20:12:00
这是修改系统时钟,由于LINUX系统是间隔一段时间才重新写硬件时钟,
因此使用date -s修改完成之后,马上重新启动计算机,就有可能修改的系统
时间没有写入CMOSS中,所以最好
#clock -w 
这个命令强行写入CMOS。
 
 
 
10.利用cron服务进行自动校正时间与因特网上的时钟服务器进行调整
Cron服务配置详解 (注意:记得如果是crontab是侦对某个用户的!比如添加crontab -u root -e 要指定某个用户去执行!
参考链接:[url]http://www.linuxaid.com.cn/articles/3/8/387630123.shtml[/url]
摘要
Linux定时任务系统 Cron 入门(2005-03-10 09:30:10)
--------------------------------------------------------------------------------
By lanf, 出处:[url]www.xiaoxiang.net[/url]
作者:Fred Huang
刚做了一个备份的模块,后来师傅提示最好再加一个自动备份的功能,于是研究起来Cron这个服务来。Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务: /sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
 
你也可以将这个服务在系统启动的时候自动启动: 在/etc/rc.d/rc.local这个脚本的末尾加上:
/sbin/service crond start
 现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用: 
1.直接用crontab命令编辑 
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明: 
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 
crontab -l //列出某个用户cron服务的详细内容 
crontab -r //删除没个用户的cron服务 
crontab -e //编辑某个用户的cron服务 
比如说root查看自己的cron设置:crontab -u root -l 
再例如,root想删除fred的cron设置:crontab -u fred -r 
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e 
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt 
这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下: 
分钟 (0-59) 
小時 (0-23) 
日期 (1-31) 
月份 (1-12) 
星期 (0-6)//0代表星期天 
除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题: 
每天早上6点 
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。 
每两个小时 
0 */2 * * * echo "Have a break now." >> /tmp/test.txt 
晚上11点到早上8点之间每两个小时,早上八点 
0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt 
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
0 11 4 * 1-3 command line 
1月1日早上4点 
0 4 1 1 * command line 
每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。 
2.编辑/etc/crontab 文件配置cron 
cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是: 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/        //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。
 
 
 
11.spamassassin 配置文件参数介绍(包含当判定为垃圾邮件时处理)

Spamassassin   (/etc/mail/spamassassin/local.cf )
# SpamAssassin config file for version 3.x
# NOTE: NOT COMPATIBLE WITH VERSIONS 2.5 or 2.6
# See [url]http://www.yrex.com/spam/spamconfig25.php[/url] for earlier versions
# Generated by [url]http://www.yrex.com/spam/spamconfig.php[/url] (version 1.50)
# How many hits before a message is considered spam. 得分多少以上就会被判定为垃圾邮件。
required_hits       6.3
# Whether to change the subject of suspected spam. 在已判定的垃圾邮件之标题加上标记。( 如果是使用amaivsd来呼叫spamassass进行过滤的,请修改 Amavisd-new 的配置文件amavisd.conf 中的相应选项:$sa_spam_subject_tag = '***[ Junk Mail ]*** '; )
rewrite_header Subject ****SPAM(_SCORE_)****
# Encapsulate spam in an attachment.
# 要如何处理垃圾邮件。如果邮件还会经过防毒程序的扫描处理,所以必须设定为 0。
# 0:将信息写入邮件表头。
# 1:将垃圾邮件转为附件。
# 2:将垃圾邮件转为纯文字附件。 
report_safe         0
# Use terse version of the spam report. 用精简的方式来回复垃圾邮件信息给管理者
use_terse_report     0
# Enable the Bayes system. 使用贝叶斯学习系统 
use_bayes           1
# Enable Bayes auto-learning. 开启贝叶斯自动学习功能
auto_learn         1
# Enable or Disable network checks. 略过 RBLs 检查、使用 Razor version 2、使用 DCC (Distributed Checksum Clearinghouse)、使用 Pyzor
skip_rbl_checks       0
use_razor2         1
use_dcc           1
use_pyzor           1
# Blacklist. 黑名单,判定減 + 100 分
blacklist_from *@sohu.com *@mailfb.com
# Whitelist . 白名单,判定加 — 100 分 
whitelist_from *@yahoo.com.tw *@yahoo.com.hk *@yahoogroups.com.hk
whitelist_from [email]rika@rika.idv.tw[/email]
# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
# - chinese
ok_languages         zh en
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales         zh en
# Disabled scores. 防止中文主旨和中文收件者误判,建议再加上下列几行
score HEADER_8BITS 0
score HTML_COMMENT_8BITS 0
score SUBJ_FULL_OF_8BITS 0
score UPPERCASE_25_50 0
score UPPERCASE_50_75 0
score UPPERCASE_75_100 0
# local domain from but ip not match. 域名和 IP 不符合,疑为垃圾邮件
header __FROM_TEATIME Received =~ /from test.com.cn/i
header __FROM_TEATIME_IP Received =~ /\[12\.34\.56\.78\]/
meta FROM_TEATIME_BUT_IP_ERROR (__FROM_TEATIME)
describe FROM_TEATIME_BUT_IP_ERROR From test.com.cn but ip not match
score FROM_TEATIME_BUT_IP_ERROR 8
 

12.让chinese_rules.cf自动更新
修改:
/etc/crontab
增加
0   0 1 * * wget -N -P /usr/share/spamassassin [url]www.ccert.edu.cn/spam/sa/Chinese_rules.cf;service[/url] postfix restart;service spamassassin restart
表示每周自动更新且重新启动相关服务
 
 

13.Postfix + SpamAssassin 安裝手冊
SpamAssassin 是一套用來協助過濾 spam 的程式,用 perl 寫成,會針對信件中特定的 pattern 給予不同的分數,當分數超過指定的值後,就會被當作 spam,根據設定不同,會在信件 header 或 subject 的地方增加些東西。
這篇手冊將會教您如何讓 SpamAssassin 與 Postfix 配合,並自動在 Postfix 端把 spam 給過濾掉。
安裝
請先安裝 Postfix,請參考 PostfixInstall 的安裝說明,然後用 FreeBSD ports 將 SpamAssassin 安裝起來:
cd /usr/ports/mail/p5-Mail-SpamAssassin
make clean install clean
設定 Postfix 的部分
於 /usr/local/etc/postfix/master.cf 內修改 smtp 的設定:
smtp inet n - n - - smtpd -o content_filter=postfixfilter:
並於同一個檔案的最後面加上:
postfixfilter unix - n n - - pipe flags=Rq user=nobody
argv=/usr/local/sbin/filter.sh -f ${sender} -- ${recipient}
然後新增 /usr/local/sbin/filter.sh 這個檔案:
#!/bin/sh
exec /usr/local/bin/spamc -d 127.0.0.1 -f -p 783 -t 30 -e /usr/local/sbin/sendmail -i "$@"
接著請讓 /usr/local/sbin/filter.sh 變成可以執行:
chmod 755 /usr/local/sbin/filter.sh
設定 Postfix 過濾掉 Spam
在 /usr/local/etc/postfix/main.cf 內設定:
header_checks = pcre:/usr/local/etc/postfix/header-checks
然後新增 /usr/local/etc/postfix/header-checks 這個檔案:(如果已經有了,把這行加到最後面)
/^X-Spam-Status: Yes/ DISCARD Byebye Spam, we don't like you.
設定 SpamAssassin
各個詳細的設定請參考 Mail::SpamAssassin(3), Mail::SpamAssassin::Conf(3), spamd(1), spamc(1)。
將 /usr/local/etc/rc.d/spamd.sh-dist 複製一份到 /usr/local/etc/rc.d/spamd.sh:
cp /usr/local/etc/rc.d/spamd.sh-dist /usr/local/etc/rc.d/spamd.sh
再修改這個檔案裡面 spamd 的參數:
${PREFIX}/bin/spamd -a -d -L -m 32 -u nobody -V /usr/local/etc/spamassassin -x
然後新增 /usr/local/etc/spamassassin/default.prefs 這個檔案:(底下是很簡單的範例,請斟酌使用,超過 5.0 分會被當 spam,並在信件 subject 加上 *****SPAM***** 字樣)
# 超過多少分會被當 spam
required_hits 5.0
# CJK, from SpamAssassin's README
score HEADER_8BITS 0
score HTML_COMMENT_8BITS 0
score SUBJ_FULL_OF_8BITS 0
score UPPERCASE_25_50 0
score UPPERCASE_50_75 0
score UPPERCASE_75_100 0
ok_languages all
ok_locales all
# 一些自訂的 rule
header FOXMAIL X-Mailer =~ /FoxMail /
describe FOXMAIL Foxmail
score FOXMAIL 3.5
body UNSUBSCRIBE_ZH /取消.*訂閱\/
describe UNSUBSCRIBE_ZH Body contain unsubscribe msg in chinese
score UNSUBSCRIBE_ZH 0.5
body WINDOWOPEN /window\.open\(/i
describe WINDOWOPEN JavaScript: Windows.Open
score WINDOWOPEN 3.5
重新啟動
您需要讓 spamd 跑起來後,重新啟動 Postfix:
/usr/local/etc/rc.d/spamd.sh start
postfix reload
 
 
14.当判断为垃圾邮件的时候,如何自动删除?
修改/etc/postfix/main.cf,加上一句,即启用邮件头检查:
#header_checks = regexp:/etc/postfix/header_checks
header_checks = regexp:/etc/postfix/header_checks
修改/etc/postfix/header_checks文件增加!
/^X-Spam-Status: Yes/ DISCARD Byebye Spam, we don't like you
header checker设置规则,从网上找的资料参考如下:
在規則設定檔裡面 ( 就是 header_checks 與 body_checks ) 只要是 # 代表該行為註解,系統或直接略過;
所謂的過濾規則即是 Header 與 body 裡面的『關鍵字』,例如我不想讓 192.168.100.5 這個 IP 寄件到我的 mail server ,那麼這個 From:.* 192.168.100.5 就是一條規則了!那個 .* 代表什麼意思呢?他代表『沒有或多個任意字元』的意思~更詳細的說明請參考各個正規表示法的標準說明了!常見的正規表示法特殊字元與意義為:
『.』:代表任意字元
『\』:代表跳脫字元,可以讓後面接的一個字元變成一般字元;
『*』:代表重複零個或多個前一個 RE 的字元,例如『.*』則代表任意零個或多個字元的意思;
『^』:代表『這一行的第一個字元需要符合規則』的意思;
『$』:代表這一行的最後一個字元必須要符合這個字元的意思,
單一規則的設定方法為:
/規則/  動作  顯示在登錄檔裡面的訊息
請注意,要使用兩個『 / 』將規則包起來喔!舉個例子來說明:例如我想要 (1)抵擋掉標題為 A funny game 的信件,(2)並且在登錄檔裡面顯示 drop header deny,我可以這樣寫:
/^Subject:.*A funny game/  DISCARD drop header deny
在預設的規則當中,大小寫是視為相同的;
如果有兩條以上的規則,那麼就必須要使用 if 了,例如底下的案例:
if /^Content\-Type:.*audio.*x\-midi/
/^.*name\=.*\.scr/  DISCARD   drop the header inavalid
endif
上面的意思是,當一封郵件裡面同時包含『 Content-Type: audio.x-midi 』與『name=*.scr』時,該封信件就會被丟棄了!那麼如果有三條以上的規則時呢?呵呵!就是使用多個 if 來進行啦!
if /rule1/
if /rule2/
/rule3/  動作   顯示字眼
endif
endif
不過請特別留意,這個 if .... endif 的設定我僅在 2.x 版本上面試過,是沒有問題的,不過,已經有很多的朋友提出說,在 1.xx 版本上面執行時會有問題發生,所以如果您的 Postfix 不是 2.xx 版本,那麼底下鳥哥列出的兩個範例就參考看看即可,不可直接套用喔!
關於動作有底下幾個動作:
REJECT :將該封信件退回給原發信者;
WARN   :將信件收下來,但是將該封信的基本資料記錄在登錄檔內;
DISCARD:將該封信件丟棄,並不給予原發信者回應!
一般來說我是比較喜歡以 DISCARD 將信件直接丟棄的啦! ^_^
此外,請特別留意,在各主要 Linux distribution 釋出的 1.xx 版本中,並無法使用 DISCARD 的規則喔!所以您只能使用 REJECT 了!底下列出鳥哥的兩個範本:
 
 
15.squirrelmail小松鼠配置说明
[root@extmail squirrelmail]# cd /usr/share/squirrelmail/config
[root@extmail squirrelmail]# ./conf.pl
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages
D.  Set pre-defined settings for specific IMAP servers
C   Turn color off
S   Save data
Q   Quit
Command >>
主要修改1选项里面Server Settings
General
-------
1.  Domain                 : yanweihu.kmip.net
2.  Invert Time            : true
3.  Sendmail or SMTP       : SMTP
A.  Update IMAP Settings   : localhost:143 (uw)
B.  Update SMTP Settings   : localhost:25
R   Return to Main Menu
C   Turn color off
S   Save data
Q   Quit
及语言
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Language preferences
1.  Default Language       : en_US  改成zh_CN
2.  Default Charset        : iso-8859-1 改成gb2312
3.  Enable lossy encoding  : false
R   Return to Main Menu
C   Turn color off
S   Save data
Q   Quit
Command >>
在浏览器里直接输入域名就自动链接到小松鼠WEB页的地址,方法如下:
[root@extmail tmp]# cd /etc/httpd/conf
[root@extmail conf]# ls
httpd.conf  magic  Makefile  ssl.crl  ssl.crt  ssl.csr  ssl.key  ssl.prm
[root@extmail conf]# vi httpd.conf

AddDefaultCharset UTF-8
# AddDefaultCharset UTF-8
# DocumentRoot "/var/www/html"
DocumentRoot "/usr/share/squirrelmail"
 
 
16.squirrelmail附件大小的设置方法
今天终于把squirrelmail的附件大小限制搞定了。主要方法是:修改php.ini
cd  /etc
vi  /php.ini
max_execution_time=30      ;//改为600(增加处理脚本的时间限制)
max_input_time=600     ;//最大输出时间600s
memory_limit=8M      ;//改为100M(这样才能发送100M以下的附件)
register_global=on      ;//个人认为没必要打开
post_max_size=2M    ;//php可接收的post的大小
file_uploads=on    ;//允许上传文件
upload_max_filesize=2M   ;//改为100M
session_auto_start=1   ;//seession自动启动(我没改)
参考技术信息:
修改SquirrelMail 附件的大小到10M
如果您要修改SquirrelMail 附件的大小,需要直接修改 /etc/php.ini 文件:
memory_limit = 40M ; //改为40M (这样才能发10M的附件)
post_max_size = 10M ; //php可接受的 post 方法大小 10M
upload_max_filesize = 10M ; //最大上载文件10M
如果使用Postfix 作为后台邮件服务器,还需要修改main.cf
message_size_limit = 14336000    (附件大小,14M,实际为10M的文件)
virtual_mailbox_limit = 102400000  (邮箱空间100M)
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
 
 

17.解决小松鼠邮件内容长的时候,不能自动换行!
参考:[url]http://www.taoran.net/tech/squirrelmail.html[/url]
使用技巧一:让长的邮件内容自动换行
用SquirrelMail显示长的邮件内容时有一个缺陷,就是不会自动换行。查看源文件后,发现
问题有两点:一是在显示邮件内容时使用的是“pre”标识,二是表格TD都是不定长的。
要让长的邮件内容能自动换行,需要做如下改动:
方法:
vi /usr/share/squirrelmail/functions/mime.php
找到下面的内容:
$body = '<pre>' . implode("\n", $body_ary) . '</pre>';
修改为:
$body = implode("<BR>\n",$body_ary);
vi /usr/share/squirrelmail/src/read_body.php
找到下面的内容:(对于新版本来说的)
html_tag( 'td', '<br>'. $messagebody."\n", 'left')
修改为:
html_tag( 'td', '<br>'. $messagebody."\n", 'left','','width=580')
如果是老版本:
老版本:
找到" <TR><TD BGCOLOR=\"$color[4]\" WIDTH=\"100%\">\n"
修改为" <TR><TD BGCOLOR=\"$color[4]\" WIDTH=\"580\">\n"
 
 
18.问:用yum下载后的*.rpm都放在什么地方?安装完之后会不会自动删除? 
   
   答:不会,在/var/cache/yum里,命令看置顶,一般用yum clean all全清空
 
 
 
19.安装防病毒软件clamav
[root@extmail ~]# rpm --import [url]http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt[/url]
[root@extmail ~]# vi /etc/yum.repos.d/dag.repo 
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
includepkgs=clamd clamav*
[root@extmail ~]#rpm install clamav   //进行更新安装
 
 
 
20.squirrelmail+openldap安装备忘录(此资料为转载,原链接:[url]http://www.newbooks.com.cn/info/126587.html[/url])
原转载的目的就是因为附件文件名为中文时,下载时,文件名就乱码!
安装  squirrelmail 
    cd /home/pkg
    tar -xzvf squirrelmail-1.4.4.tar.bz
    cd squirrelmail-1.4.4
    cd plugins
    tar -xzf ../../quota_usage-1.3-1.2.7.tar.gz
    cp quota_usage/config.php.sample quota_usage/config.php
    cd ../
    ./configure
    # 你将要设置如下选项
    
    #选择 “2. Server Settings”=>“A. Update IMAP Settings”=>“8. Server software”改成“courier”;回到主菜单,选择“4.General
Options”=>“1. Data Directoryand”改成“/var/www/data/”;再退回主菜单,选择“8. Plugins”=>添加你希望用到的插件。
 
回到主菜单,选择“10. Languages”,将“ Default Language”改成“zh_TW”,“Default Charset”改成“utf-8”。保存退出。
    mv data /var/www/
    chown -R vpopmail.vchkpw /var/www/data
    cd ../
    mv squirrelmail-1.4.4 /var/www/html/squirrelmail
我在这里遇到几个问题:进入网页里,报错imap_server,可能是imap没启动,把所有关于QMAIL的服务都要启动,出现/data和apache不能结合
,是因为apache没权限写入/data目录
 出现402什么的字眼,可能是selinux把权限限制了,把selinux关了就行了(在/etc/selinux/config,设置为DISABLE就行了)
    
      这里要提一下squirrelmail汉化:
    小松鼠邮件系统汉化
小松鼠本身支持很多语言,可下载相应的语言包。可到其主页去下载
下载汉化包,这里给出现在的汉化包:
wget  [url]http://switch.dl.sourceforge.net/sourceforge/squirrelmail/zh_CN-1.4.4-20050308.tar.gz[/url]
8.3 汉化包安装
tar zxvf zh_CN-1.4.4-20050308.tar.gz
解压之后有locale目录,把locale下的文件移到squirrelmail目录下的locale目录下就行了    
 
 
   支持LDAP:
             进入/var/www/html/squirrelmail/config/下(根据自己安装的目录所定)
                     vi config.php
      ................................................................................................
..........................................................................................................
...........................................................................................................
  ..........................................................................................................
$theme[48]['NAME'] = 'Classic Blue 2';
$theme[49]['PATH'] = SM_PATH . 'themes/powder_blue.php';
$theme[49]['NAME'] = 'Powder Blue';
$theme[50]['PATH'] = SM_PATH . 'themes/techno_blue.php';
$theme[50]['NAME'] = 'Techno Blue';
$theme[51]['PATH'] = SM_PATH . 'themes/turquoise.php';
$theme[51]['NAME'] = 'Turquoise';
$default_use_javascript_addr_book = false;
$ldap_server[0] = array(
    'host' => '192.168.10.220',填上LDAP服务器的IP
    'base' => 'dc=webmail,dc=print68,dc=com',填上LDAP服务器的域名
    'name' => '192.168.10.220',填上LDAP服务器的名字
    'port' => 389,填上LDAP的端口,这是默认的
    'charset' => 'utf-8'语言
);
$abook_global_file = '';
$abook_global_file_writeable = false;
$abook_global_file_listing = true;
$abook_file_line_length = 2048;
  
  或者在/var/www/html/squirrelmail下
  执行./configure
   #选择 “6.  Address Books”=>“1.  Change LDAP Servers”=>然后自己按提示选择
    
               由于LDAP服务器版本是V3的,但squirrelmail支持的是V2,所以要在/usr/local/openldap/etc/openldap/sladp.conf 里
                      # Sample security restrictions
#       Require integrity protection (divvent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64
allow bind_v2    在这里加上这行,让他支持V2版本
# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
 
                     因為我們把 SquirrelMail 預設編碼設為 Big5 ,但 LDAP 的 LDIF 資訊皆為 UTF-8 編碼格式,前提是系统了装了PHP
-ICONV的包,如果没装,系统盘里有包
              所以我们要进/var/www/html/squirrelmail/functions/abook_ldap_server.php 里
           310         // $fullname = $this->charset_decode($row['cn'][0]);  //預設值
           311         $fullname = iconv("utf-8","big5",$row['cn'][0]);      //將 LDAP 查到的 utf-8 中文資訊轉換成 big5 在傳
給 SquirrelMail
#vi /usr/local/www/data/squirrelmail/functions/abook_ldap_server.php
 264         //$expr = $this->charset_encode($expr);   //预设值
 265         $expr =  iconv("big5","utf-8",$expr);     //输入搜寻条件为 big5 但转換成 utf-8 在去查 LDAP
使用 IE 登入 SquirrelMail 後收到中文檔名的附件按下 Download 後原來的中文檔名檔案下載後變成亂碼檔名
   #vi /usr/local/www/data/squirrelmail/src/download.php
 102 $filename = charset_encode($filename,$default_charset,false);  //加在這行下面
 103 $filename = iconv("big5","utf-8",$filename);                   //加入此行

让长的邮件内容自动换行
用SquirrelMail显示长的邮件内容时有一个缺陷,就是不会自动换行。查看源文件后,发现
问题有两点:一是在显示邮件内容时使用的是“div”标识,二是表格TD都是不定长的。
要让长的邮件内容能自动换行,需要做如下改动:
1、不再使用“div”标识显示邮件内容:
vi functions/mime.php
--    $body = '<div>' . implode("\n", $body_ary) . '</div>';
++    $body = implode("<BR>\n",$body_ary);
 
2、找到显示“$messagebody”的TD语句,将TD改成定长:
vi src/read_body.php
老版本:
--    "   <TR><TD BGCOLOR=\"$color[4]\" WIDTH=\"100%\">\n"
++    "   <TR><TD BGCOLOR=\"$color[4]\" WIDTH=\"580\">\n"
新版本:
--    html_tag( 'td', '<br>'. $messagebody."\n", 'left')
++    html_tag( 'td', '<br>'. $messagebody."\n", 'left','','width=580')


本文转自 godoha 51CTO博客,原文链接:http://blog.51cto.com/godoha/31942 ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10062 0
Elasticsearch学习笔记之CentOS6.5搭建Kibana6.2.2服务(Dean)
本文主要讲解 Kibana6.2.2的安装过程。 1.检查Java版本,目前版本 6.9 的可安装版需要Java 8 [ home]$ java -version openjdk version "1.
484 0
Jenkins 设置构建失败发送邮件(学习笔记二十一)
本文是jenkins应用系统文章的一部分,大部分来自工作和学习中的实践,部分内容来自官方文档和网友的文章,引用的文章会在“参考资料”部分附上原始链接,如无意中侵犯您的权利,请联系QQ:46106962,如需要进一步的交流请加入QQ群: (Jenkins学习交流)469536515。
2803 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7361 0
5723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载