UNIX服务器监控系统设置文件说明及配置方法作如下假设,我有四台服务器:
服务器A,IP为A.A.A.A,操作系统为Solris8 for x86。
服务器B,IP为B.B.B.B,操作系统为Solaris8 for Sparc。
服务器C,IP为C.C.C.C,操作系统为FreeBSD 4.2-RELEASE。
服务器D,IP为D.D.D.D,操作系统为FreeBSD 4.2-RELEASE。
现在想用服务器A监控服务器B,每隔5分钟采集数据一次。用服务器C监控服务器B,每隔10分钟采集数据一次。同时用服务器C监控服务器B,每个15分钟采集数据一次
在服务器A上安装monitor-2.01.solaris.x86。安装在/home/svrA/monitor路径下
在服务器B上安装miner-2.0.solaris.sparc。安装在/home/svrB/miner路径下
在服务器C上安装monitor-2.01.freebsd。安装在/home/svrC/monitor路径下
在服务器D上安装miner-2.0.freebsd。安装在/home/svrD/miner路径下
服务器B上的miner.cfg应作如下设置
# This is server B’s miner.cfg
ALLOW=A.A.A.A,C.C.C.C
# server B’s miner.cfg end
服务器D上的miner.cfg作如下设置
# This is server D’s miner.cfg
ALLOW=C.C.C.C
# server D’s miner.cfg end
服务器A上的main.cfg应作如下设置
# This is monitor A ‘s main.cfg
<GROUP>
ID=1
NAME=groupB
CONFIG=conf/groupB.cfg
TIME=5
</GROUP>
# monitor A’s main.cfg end
服务器A上的/home/svrA/monitor/conf/groupB.cfg作如下配置
# This is groupB.cfg
<GLOBAL>
EMAIL= your email
</GLOBAL>
<HOST>
MACHINEID= [1]
IP= [B.B.B.B]
CMD_UPTIME= [alarm:le:30]
CMD_TIME= [watch]
CMD_LOAD1M= [watch]
CMD_LOAD5M= [alarm:GE:3]
CMD_LOAD15M= [watch]
CMD_IDLE= [watch]
CMD_USER= [alarm:gt:50%]
CMD_KERNEL= [alarm:gt:50%]
CMD_IO= [watch]
CMD_SWAP= [alarm:gt:30%]
CMD_MEMRATIO= [watch]
CMD_SWAPRATIO= [alarm:GT:70%]
CMD_TOTALPROC= [alarm:GE:300]
CMD_NET= [alarm:gt:10000]
CMD_ESTAB= [alarm:gt:100]
CMD_SYNC= [watch]
CMD_PCPU= [alarm:GT:30%:java][alarm:GT:10%:httpd][alarm:GT:10%:mysqld]
CMD_PSIZE= [alarm:GT:100000:java][alarm:gt:5000:httpd][alarm:gt:50000:mysqld]
CMD_NPROC= [alarm:gt:500:httpd][alarm:ne:1:mysqld]
CMD_DISK= [alarm:gt:70%:/home]
CMD_INODE= [alarm:gt:70%:/home]
CMD_PORT= [telnet:23][ftp:21][http:80][mysql:3306]
#CMD_USER0= [alarm:ne:0]
#CMD_USER1= [watch]
#CMD_USER2= [watch]
#CMD_USER3= [watch]
#CMD_USER4= [alarm:ne:0]
</HOST>
# groupB.cfg end
服务器C上的main.cfg应作如下设置
# This is monitor C ‘s main.cfg
<GROUP>
ID=1
NAME=groupB
CONFIG=conf/groupB.cfg
TIME=10
</GROUP>
<GROUP>
ID=2
NAME=groupD
CONFIG=conf/groupD.cfg
TIME=15
</GROUP>
# monitor C ‘s main.cfg end
服务器C上的/home/svrC/monitor/conf/groupB.cfg作如下配置
# This is groupB.cfg
<GLOBAL>
EMAIL= your email
</GLOBAL>
<HOST>
MACHINEID= [1]
IP= [C.C.C.C]
CMD…
CMD…
CMD…
.
.
.
.
.
.
</HOST>
# groupB.cfg end
服务器C上的/home/svrC/monitor/conf/groupD.cfg作如下配置
# This is groupD.cfg
<GLOBAL>
EMAIL= your email
</GLOBAL>
<HOST>
MACHINEID= [1]
IP= [C.C.C.C]
CMD…
CMD…
CMD…
.
.
.
.
.
.
</HOST>
# groupD.cfg end
监控系统安装说明
被监控服务器的安装和启动:
将miner-2.0.tar ftp到要被监控的服务器上。
在/home下解开miner-2.0.tar
进入miner-2.0修改conf/miner.cfg文件
su到root用户
执行/home/miner-2.0/miner -start 启动
使用ps -ef | grep miner命令观察,如发现有两个/home/miner-2.0/miner -start进程,说明启动成功。
停掉该进程使用/home/miner-2.0/miner -stop
主监控服务器安装启动过程
自动扫描
将monitor-2.0.tar ftp到主监控服务器
在/home下解开
进入/home/monitor-2.0/conf,修改main.cfg,正确设置组配置
正确编写组配置文件。
su到root用户
执行/home/monitor-2.0/monitor启动
使用ps -ef | grep monitor命令观察,如发现monitor进程的数目为组的数目+1,则启动正常。(如,在main.cfg中一共设置了4个组,则monitor的数目为4+1=5)
手动扫描
使用doscan命令手动扫描,命令参数为
doscan -f [-s -m -a -g -k -p -d]
-f :指定某一组的配置文件(必须要有)
-s 扫描类型
none: 不扫描任何指标
all: 定义指标+基本指标
base: 基本指标
normal: 定义 指标
缺省值为normal
-m 报警信息类型
short: 紧凑型报警信息
debug: 详细型报警信息
缺省值为short
-a 是否报警
none: 不发送报警信息
email: 邮件报警
mobile: 手机短信报警
all: 邮件+手机短信报警
缺省值为all
-g 组名称
-d debug方式运行
true: 以debug方式运行,将结果大印到屏幕
false: 不打印结果到屏幕
缺省值为false
-k 匹配关键字
-p 匹配IP
监控系统自定义模块的配置方法:
Server A,IP为1.1.1.1 上面安装了monitor,安装路径为/home/monitor
Server B,IP为2.2.2.2 上面安装了miner,安装路径为/home/miner
假设服务器B放在ServerB.cfg这个组的配置文件中
现在B上有一个自定义模块,使用perl编写的一个程序
myproc.pl
#!/usr/local/bin/perl
print "0";
该程序存放在Server B的/home/miner/user下
并且保证奇权限为 -rwxr-xr-x
在Server B上的/home/miner/conf/miner.cfg应如下配置
ALLOW=1.1.1.1 设置IP允许
CMD_USER0= user/myproc.pl 定义自定义模块位置
在Server A上的/home/monitor/conf/ServerB.cfg如下
<GLOBAL>
email=xxxx@xxx.com
</GLOBAL>
<HOST>
IP= 2.2.2.2
.
.
.
.
CMD_USER0= [alarm:eq:0] 自定义模块0如果输出的结果为0则报警
</HOST>
solaris安装SMTP Server
从软件磁带中,得到sendmail-8.8.8-for-solaris2.5.1.tar.Z软件包,放到/tmp下。
#zcat sendmail-8.8.8-for-solaris2.5.1.tar.Z | tar xvf -
#cd sendmail-8.8.8 ; ./install
#rm /tmp/sendmail-8.8.8-for-solaris2.5.1.tar.Z
注:有时根据情况,需要修改/etc/mail/sendmail.cf文件内容。在配置更改后,必须杀死系统中所有的sendmail进程,重新启动sendmail。
# ps -ef | grep sendmail | awk ‘{print $2}’ | xargs -l kill -9
# /usr/lib/sendmail -q1h -bd
测试sendmail
#telnet 0 25 (server正常可以看到sendmail的信息)
#mailx -v root@localhost < /etc/hosts (root应收到内容为hosts文件的mail)
附:限制接收MAIL的几种方式
1、对主机进行限制:使用TCP_WRAPPER对指定主机的MAIL进行限制,同时SENDMAIL进程必须由INETD来控制,加入一行
smtp stream tcp nowait root /usr/local/security/tcp_wrapper/bin/tcpd
/usr/lib/sendmail -bs
同时,单独启动下面进程:
# /usr/lib/sendmail -q1h
修改/etc/rc2.d/S88sendmail文件禁止主机启动时以后台方式启动sendmail进程,将其改为/usr/lib/sendmail -q1h
对SUBJECT或FROM进行限制:A、修改sendmail原程序,在sendmail进程会话期间,根据SUBJECT内容来决定是否收MAIL;B、通个在后台运行SHELL程序,对用户的MAIL BOX进行分析,删除不需要的邮件。
3、通过TIS来实现对MAIL的限制:首先修改/etc/inetd.conf文件,增加一行:
smtp stream tcp nowait root /usr/local/tis/etc/netacl smap
然后在/etc/rc3.d/S99local文件中加入
#cd /var/spool/mqueue; rm -f nf* lf*
#/usr/local/tis/etc/smapd &
#/usr/local/tis/etc/mqueue &
#/usr/local/tis/etc/smap -daemon &(在Standalone方式时使用这一条命令)
在/var/spool目录下创建目录smap,权限由配置文件/usr/local/tis/etc/netperm-table来决定,修改/etc/rc2.d/S88sendmail文件禁止主机启动时启动sendmail进程。
sendmail服务器配置(red Hat)
首先你要安装sendmail,如果你在安装Linux时选择全部安装的话,sendmail就已经在你的系统里了。如果不是的话就要安装了。
其次就是你的DNS一定要配置正确,完整,否则sendmail服务可能运行不正常。
如果你的系统是按照上面所述的安装好的话,那么sendmail服务的配置可以说是非常简单了,想知道有关DNS的详细配置请看本站的有关DNS的文章。
二、配置过程
1、修改/etc/mail/access 文件
象下面这样: domain.com RELAY //“domain.com”是你的域的名字
192.168.0 RELAY //允许 192.168.0.*的机器通过你的机器发信
然后输入下面这个命令进行转化:
makemap hash access.db < access
2、修改或创建文件:/etc/mail/relay-domains 内容如下:
192.168.0
这样就可以了。可能你这配置时要许多的问题。以上是我经过十几次的安装和配置linux总结出来的最简单的方法了,希望对你有帮助。注意了,你的DNS一定要是没有问题的,否则sendmail是不会好用的。
3、sendmail常用命令及测试和相关文件
A、相关文件
/etc/sendmail.cf
/etc/sendmil.cw
/etc/inetd.conf
在/etc/mail目录下有以下文件
access.db access
mailertable.db mailertable
aliases.db aliases
B、命令
1。重新启动sendmail服务
有这个目录下 /etc/rc.d/init.d 有文件sendmail,输入如下命令:
./sendmail restart
2。检查POP3端口是否打开
命令: netstat -a |grep pop
如有下面的信息,则POP3端口就打开了:
tcp 0 0 *: pop3 *.* LISTEN
3。确定sendmail服务是否启动
ps -axuw | grep sendmail
如启动了,则会有一些提示信息。
让Linux成为DNS服务器----------操作系统:RedHat 6.2
1、在安装Linux时你要选择安装DNS服务,并且要在Linux启动时同时也启动DNS。
2、可能用到的文件
文件名 所在目录
named.boot /etc/ "系统自带"
named.conf /etc/ "系统自带"
named.local /var/named/ "系统自带"
name2ip (正向解析) /var/named/ "创建或生成"
ip2name (反向解析) /var/named/ "创建或生成"
说明:如果你在安装完成LINXU后在配置网络时同时也配置了DNS选项话,你可能只要做很少的工作就能完 成DNS服务的安装。详细说明如下:
假设你的IP为局域网的内部IP:192.168.0.88 域名为:mydomain.com
则在控制台下键入:netconf后输入详细的DNS信息后,即在此选项:Domain Name Server (DNS)里配置DNS的相关信息后,再在控制台下输入命令:ndc restart 后就会在"/var/named"目录下自动生成“正向解析”和“反向解析”的2个文件,文件名应该是:“192.168.0”和“mydomain.com",你只需按照下面的格式添写就可以完成DNS的配置了。你也可以任意给这两个文件起名,只要你能看得懂就可以,但一定要在文件named.conf中对应上。
三、上述5个文件的内容如下:
1、named.boot
;
;a caching only nameserver config
directory /var/named (告诉LinuxDNS配置文件存放的位置)
chace named.ca
primary 0.0.127.in-addr.arpa named.local
primary mydomain.com mydomain.com
primary 0.168.192.in-addr.arpa 192.168.0
#下面这两行的功能是把本地解析不了的域名就送到外部去解析,主要用于局域网中的主机
forwardes mydomain.com
options forward-only
2、named.conf
;
options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "mydomain.com" {
type master;
file "mydomain.com";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "192.168.0";
};
3、named.local
@ IN SOA localhost.root. localhost (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
4、正向解析文件:mydomain.com
@ IN SOA myname.mydomain.com root.myname.mydomain.com (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
NS myname.mydomain.com.
MX 10 myname.mydomain.com.
;
localhost IN A 127.0.0.1
myname IN A 192.168.0.88
www IN A 192.168.0.88
mail IN A 192.168.0.88
ftp IN A 192.168.0.88
;
myname CNAME myname.mydomain.com.
www CNAME myname.mydomain.com.
mail CNAME myname.mydomain.com.
ftp CNAME myname.mydomain.com.
5、反向解析文件:192.168.0
@ IN SOA myname.mydomain.com root.myname.mydomain.com (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
NS myname.mydomain.com.
88 IN PTR myname.mydomain.com.
至此,已经完成DNS的配置,还有几个相关的文件,你可以参考一下:
/etc/host.conf
order host,
bind
multi on
/etc/HOST
myname
/etc/host
127.0.0.1 myname.mydomain.com myname localhost.localhostdomain localhost
192.168.0.88 myname.mydomain.com myname
至此,DNS的配置已经完成,现在要进行测试,在控制台下输入以下命令:
ndc restart
nslookup
会出现一个提示符“>”,你可以输入你的主机名myname,及mail,ftp,www,机器将会解析成具体的信息,相信你会成功的。
带SMTP认证功能的sendmail配置
出自:中国Linux论坛 2002年04月04日 17:55
环境: Redhat linux 6.0(内核2.2.14) sendmail-8.10.2 cyrus-sasl-1.5.21 Outlook express 5.0 一、准备工作 1.首先要下载sasl库,该函数库提供了安全认证所需函数,下载地址是 (ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/ ),版本1.5.21。 2.下载sendmail(http://www.sendmail.org),版本在8.10.0以上的sendmail才支持 SMTP认证功能。 3.注意选择客户端电子邮件软件。并不是所有的客户端电子邮件软件都支持SMTP认证功 能,几种常见的 版本要求是这样的: Netscape Messenger 的版本要4.6以上 Outlook和Outlook Express要5.0版本以上 Eudora pro的版本要在4.3以上 Foxmail目前还不支持这个功能。 每一种软件的认证方法是不一样的,编译sasl库的时候和配置sendmail略有不同。 我就大家最常见的 Outlook Express 5.0的设置方法介绍如下。 二、安装sasl库 1.解压cyrus-sasl-1.5.21.tar.gz到你选定的目录 2.cd cyrus-sasl-1.5.21 3 ./configure --enable-login --with-pwcheck Outlook Expresss使用LOGIN的认证方法,sasl库缺省并不支持这种方式,所以要在生 成配置文件时特别加入,另外,Outlook的口令验证方式也不是缺省的方式,所以也需要 加入--with-pwcheck的选项。 下面就可以编译和安装sasl库了。 make make install 4.缺省情况下,所有的库函数安装到/usr/local/lib目录下,但sendmail使用的库函数 是在目录/usr/lib下的,所以需要做一些调整。 cd /usr/lib ln /usr/local/lib/sasl/ ./sasl -s cp /usr/local/lib/libsa* . 也可以避开这一步,在第3步时候运行configure脚本前,修改其中的缺省路径就可以了。 打开configure文件找到这一行ac_default_prefix=/usr/local(在文件前几行),改为 ac_default_prefix=/usr 就可以了,这样更方便一些。 5.新建目录/var/pwcheck,供pwcheck命令使用,该命令是一个后台程序,负责检查用户 的输入口令, 以root权限件使用shadow口令文件。 6.在/usr/lib/sasl目录下建立文件Sendmail.conf,加入如下一行 pwcheck_method:pwcheck 这样sasl库函数的安装就完成了。 三、编译和配置sendmail 1.解压sendmail软件到你希望的目录,进入sendmail-8.10.2目录。 在devtools/Site/目录下创建config.site.m4文件,加入如下两行文字,把SMTP认证 功能编译到sendmail中。 APPENDDEF(`confENVDEF', `-DSASL') APPENDDEF(`conf_sendmail_LIBS', `-lsasl') 2.回到sendmail-8.10.2目录,再进入sendmail目录,开始编译sendmail。 ./Build -c(如果不是第一次编译,需要加入-c选项,清除以前的配置) 编译成功后,运行./Build install安装软件。 3.下一步需要改写Sendmail的配置文件。回到上一级目录,再进入cf/cf目录,找到合适 的.mc文件(具体做法 参见其他文章,这些不在本文讨论范围中)。按照你的要求适当修改,加入如下几行: TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5') define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5') dnl define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info') FEATURE(`no_default_msa') DAEMON_OPTIONS(`Port=25, Name=MSA, M=Ea') 说明:"TRUST_AUTH_MECH"的作用是使sendmail不管access文件中如何设置,都能 relay那些通过LOGIN,PLAIN或DIGEST-MD5方式验证的邮件。 "confAUTH_MECHANISMS"的作用是确定系统的认证方式。 "confDEF_AUTH_INFO"的作用是当你的计算机作为客户机时,向另外一台有smtp认 证功能的主机进行认证,用户和密码存放在auth-info文件中,在这个例子中并不需要这 个功能,所以注释掉了。 4.编译生成/etc/mail/sendmail.cf文件 m4 xxxx.mc >/etc/mail/sendmail.cf,不过记住一定要备份旧的sendmail.cf文件, 否则就可能麻烦了。 5.现在基本上可以了,启动sendmail让我们来测试一下吧 sendmail -bd -0m 运行下面命令 telnet localhost 25 ehlo localhost 注意有没有以下的信息出现. 250-xxxxxxxx 250-xxxxxxx 250-AUTH LOGIN PLAIN DIGEST-MD5 250-xxxxxx 可能会略有不同,不过你选定的认证方式一定要有的。 如果显示没有问题,恭喜你!服务器端的配置你已经成功了。如果没有出现上面的信息, 请运行 sendmail -O loglevel=14 -bs 仔细检查问题所在。 在结束服务器端的配置之前,我们还要做一件事,运行pwcheck这个daemon程序,这样才 能完成用户认证功能。 pwcheck & 四、Outlook Express 5.0 的配置 1.打开你的Outlook Express,修改你的账号属性,在服务器选项,选取我的smtp服务 器需要认证选项,然后进入配置。 2.不要选取安全口令认证,sendmail并不支持这个选项。是选取使用pop3同样的口令 还是选择另外输入用户和密码,这就看你的爱好和设置了,这不是关键。如果你在 服务器上有一个真实账号,不妨选取使用同样的口令,如果没有账号,选用其他的 用户口令同样可以.
一个在Solaris下配置SMTP(sendmail)+POP3(qpopper)的例子
出自:www.unixaid.net 斯汀 2002年04月03日 17:54
A. 我们的机器环境:
1.Solaris 8 sparc
2.Sendmail 8.9.3+Sun (Solaris系统捆绑)
3.qpopper 3.0.1 (www.sunfreeware.com下载)
B.sendmail的基本配置非常的简单,一般系统自己已经做了大量相关的
设置,你所需要做的是定义一些自己的本地信息,以及一些安全/控制
信息,在Solaris下一般的配置文件在/etc/mail下
1.修改:69 line:
Cwlocalhost solaris8.abc.com abc.com
2.修改:73 line: 一般不需要修改,除非你的系统不能自动找到你的domain
# my official domain name
# ... define this only if sendmail cannot automatically determine your domain
#Dj$w.Foo.COM
3.修改: 80 line: 我们清空这个定义
# "Smart" relay host (may be null)
#DSmailhost.$m
DS
4.修改:120 line:
# who I masquerade as (null for no masquerading) (see also $=M)
DMabc.com
C.目前为止,基本的设置结束,保存修改,reboot sendmail进程
bash-2.03$ ps -ef |grep sendmail
root 261 1 0 17:35:48 ? 0:00 /usr/lib/sendmail -bd -q15m
bash-2.03# kill -HUP 261
D.qpopper的安装也非常的简单:
1.建立一个临时目录 ./tmp
#gzip qpopper-3.0.1-sol8-sparc-local.gz
#pkgadd -d ./qpopper-3.0.1-sol8-sparc-local
2.编辑在/etc/inetd.conf文件 ,在最后加入:
pop3 stream tcp nowait root /usr/local/lib/popper qpopper -s
3.reboot inetd进程
bash-2.03$ ps -ef |grep inetd
root 191 1 0 17:35:43 ? 0:00 /usr/sbin/inetd -s
#kill -HUP 191
E.测试
1.
bash-2.03$ telnet solaris8.abc.com 25
Trying 132.254.254.76...
Connected to solaris8.abc.com.
Escape character is '^]'.
220 solaris8.abc.com ESMTP Sendmail 8.9.3+Sun/8.9.3; Thu, 2 Nov 2000 10:26:05 +)
help
214-This is Sendmail version 8.9.3+Sun
214-Topics:
214- HELO EHLO MAIL RCPT DATA
214- RSET NOOP QUIT HELP VRFY
214- EXPN VERB ETRN DSN
214-For more info use "HELP ".
214-To report bugs in the implementation contact Sun Microsystems
214-Technical Support.
214-For local information send email to Postmaster at your site.
214 End of HELP info
quit
221 solaris8.abc.com closing connection
Connection closed by foreign host.
bash-2.03$
2.
bash-2.03$ telnet solaris8.abc.com 110
Trying 132.254.254.76...
Connected to solaris8.abc.com.
Escape character is '^]'.
+OK QPOP (version 3.0.1) at solaris8.abc.com starting.
quit
+OK Pop server at solaris8.abc.com signing off.
Connection closed by foreign host.
bash-2.03$
3.还可以通过MUA软件[Foxmail(win9x)/Pine(unix)]测试我们的邮件环境.
SMTP安全手册—Sendmail服务器安全
出自:http://www.ccidnet.com/ ideal 2002年04月04日 17:56
Sendmail是在Unix环境下使用最广泛的实现邮件发送/接受的邮件传输代理程序。 由于Sendmail邮件服务器的特点是功能强大而复杂,因此为保证Sendmail的安全性,需要作以下一些工作。
1、设置Sendmail使用"smrsh"
smrsh程序的目的是作为在mailer中为sendmail定义的"/bin/sh"的替代shell。smrsh是一种受限shell工具,它通过"/etc/smrsh"目录来明确指定可执行文件的列表。简而言之smrsh限制了攻击者可以执行的程序集。当它与sendmail程序一起使用的时候,smrsh有效的将sendmail可以执行的程序的范围限制在smrsh目录之下。
第一步:
决定smrsh可以允许sendmail运行的命令列表。缺省情况下应当包含以下命令,但不局限于这些命令:
"/bin/mail" (如果在你的系统中安装了的话)
"/usr/bin/procmail" (如果在你的系统中安装了的话)
注意:不可在命令列表里包括命令解释程序,例如sh(1),csh(1),perl(1),uudecode(1)及流编辑器sed(1)。
第二步:
在"/etc/smrsh"目录中创建允许sendmail运行的程序的符号连接。
使用以下命令允许mail程序"/bin/mail"运行:
[root@deep]# cd /etc/smrsh
[root@deep]# ln -s /bin/mail mail
用以下命令允许procmail程序"/usr/bin/procmail"运行:
[root@deep]# cd /etc/smrsh
[root@deep]# ln -s /usr/bin/procmail procmail
这将允许位于".forward"和"aliases"中的用户采用"|program"语法来运行mail及procmail程序。
第三步
配置sendmail使之使用受限shell。mailer程序在sendmail的配置文件"/etc/sendmail.cf"中仅有一行。必须修改"sendmail.cf"文件中"Mprog"定义的那一行。将"/bin/sh"替换为"/usr/sbin/smrsh"。
编辑"sendmail.cf"文件(vi /etc/sendmail.cf)并改动下面这一行:
例如:
Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
应该被改为:
Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
现在用以下命令手工重起sendmail进程:
[root@deep]# /etc/rc.d/init.d/sendmail restart
2、"/etc/aliases"文件
如果没有加以正确和严格的管理的话,别名文件被用来获取特权。例如,很多发行版本在别名文件中带有"decode"别名。现在这种情况越来越少了。
这样做的目的是为用户提供一个通过mail传输二进制文件的方便的方式。在邮件的发送地,用户把二进制文件用"uuencode"转换成ASCII格式,并把结果邮递给接收地"decode"别名。那个别名通过管道把邮件消息发送到"/usr/bin/uuencode"程序,由这个程序来完成从ASCII转回到原始的二进制文件的工作。
删除"decode"别名。类似的,对于所有用于执行没有被放在smrsh目录下的程序的别名,你都要仔细的检查,可能它们都值得怀疑并应当删除它们。要想使你的改变生效,需要运行:
[root@deep]# /usr/bin/newaliases
编辑别名文件(vi /etc/aliases)并删除以下各行:
# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
games: root?? 删除这一行
ingres: root ?? 删除这一行
nobody: root
system: root ?? 删除这一行
toor: root?? 删除这一行
uucp: root ?? 删除这一行
# Well-known aliases.
manager: root ?? 删除这一行
dumper: root ?? 删除这一行
operator: root ?? 删除这一行
# trap decode to catch security attacks
decode: root ?? 删除这一行
# Person who should get root's mail
#root: marc
最后应该运行"/usr/bin/newaliases"程序使改动生效
3、避免你的Sendmail被未授权的用户滥用
最新版本的Sendmail (8.9.3)加入了很强的防止欺骗的特性。它们可以防止你的邮件服务器被未授权的用户滥用。编辑你的"/etc/sendmail.cf"文件,修改一下这个配置文件,使你的邮件服务器能够挡住欺骗邮件。
编辑"sendmail.cf"文件(vi /etc/sendmail.cf)并更改下面一行:
O PrivacyOptions=authwarnings
改为:
O PrivacyOptions=authwarnings,noexpn,novrfy
设置"noexpn"使sendmail禁止所有SMTP的"EXPN"命令,它也使sendmail拒绝所有SMTP的"VERB"命令。设置"novrfy"使sendmail禁止所有SMTP的"VRFY "命令。这种更改可以防止欺骗者使用"EXPN"和"VRFY"命令,而这些命令恰恰被那些不守规矩的人所滥用。
4、SMTP的问候信息
当 sendmail接受一个SMTP连接的时候,它会向那台机器发送一个问候信息,这些信息作为本台主机的标识,而且它所做的第一件事就是告诉对方它已经准备好了。
编辑"sendmail.cf"文件(vi /etc/sendmail.cf)并更改下面一行:
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
改为:
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b NO UCE C=xx L=xx
现在手工重起一下sendmail进程,使刚才所做的更改生效:
[root@deep]# /etc/rc.d/init.d/sendmail restart
以上的更改将影响到Sendmail在接收一个连接时所显示的标志信息。你应该把"`C=xx L=xx"条目中的"xx"换成你所在的国家和地区代码。后面的更改其实不会影响任何东西。但这是"news.admin.net-abuse.email"新闻组的伙伴们推荐的合法做法。
5、限制可以审核邮件队列内容的人员
通常情况下,任何人都可以使用"mailq"命令来查看邮件队列的内容。为了限制可以审核邮件队列内容的人员,只需要在"/etc/sendmail.cf"文件中指定"restrictmailq"选项即可。在这种情况下,sendmail只允许与这个队列所在目录的组属主相同的用户可以查看它的内容。这将允许权限为0700的邮件队列目录被完全保护起来,而我们限定的合法用户仍然可以看到它的内容。
编辑"sendmail.cf"文件(vi /etc/sendmail.cf)并更改下面一行:
O PrivacyOptions=authwarnings,noexpn,novrfy
改为:
O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
现在我们更改邮件队列目录的权限使它被完全保护起来:
[root@deep]# chmod 0700 /var/spool/mqueue
注意:我们已经在sendmail.cf中的"PrivacyOptions="行中添加了"noexpn"和"novrfy"选项,现在在这一行中我们接着添加"restrictmailq"选项。
任何一个没有特权的用户如果试图查看邮件队列的内容会收到下面的信息:
[user@deep]$ /usr/bin/mailq
You are not permitted to see the queue
6、限制处理邮件队列的权限为"root"
通常,任何人都可以使用"-q"开关来处理邮件队列,为限制只允许root处理邮件队列,需要在"/etc/sendmail.cf"文件中指定"restrictqrun"。
编辑"sendmail.cf"文件(vi /etc/sendmail.cf)并更改下面一行:
O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
改为:
O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq,restrictqrun
任何一个没有特权的用户如果试图处理邮件队列的内容会收到下面的信息:
[user@deep]$ /usr/sbin/sendmail -q
You do not have permission to process the queue
7、在重要的sendmail文件上设置不可更改位
可以通过使用"chattr"命令而使重要的Sendmail文件不会被擅自更改,可以提高系统的安全性。具有"+i"属性的文件不能被修改:它不能被删除和改名,不能创建到这个文件的链接,不能向这个文件写入数据。只有超级用户才能设置和清除这个属性。
为"sendmail.cf"文件设置不可更改位:
[root@deep]# chattr +i /etc/sendmail.cf
为"sendmail.cw"文件设置不可更改位:
[root@deep]# chattr +i /etc/sendmail.cw
为"sendmail.mc"文件设置不可更改位:
[root@deep]# chattr +i /etc/sendmail.mc
为"null.mc"文件设置不可更改位:
[root@deep]# chattr +i /etc/null.mc
为"aliases"文件设置不可更改位:
[root@deep]# chattr +i /etc/aliases
为"access"文件设置不可更改位:
[root@deep]# chattr +i /etc/mail/access
8、Sendmail环境下的防止邮件relay
从8.9版本开始,缺省的是不允许邮件转发(mail relay)的。最简单的允许邮件转发的方法是在文件/etc/mail/relay-domains中进行设置。该文件中列出的域名内的信件都允许通过本地服务器进行邮件转发。
为了更精确的设置,可以在sendmail.mc中添加如下几个参数允许被用来设置邮件转发:
· FEATURE(relay_hosts_only). 通常情况下,在文件/etc/mail/relay-domains中列出的域名的主机都允许通过本地机转发,而该设置指示指定必须罗列出每个允许通过本机转发邮件的主机。
· FEATURE(relay_entire_domain). 该参数指示允许所有本地域通过本机进行邮件转发。
· FEATURE(access_db). 该参数指定利用哈希数据库/etc/mail/access来决定是否允许某个主机通过本地进行邮件转发。
· FEATURE(blacklist_recipients).若该参数被设置,则在决定是否允许某个主机转发邮件时同时察看邮件发送着地址和邮件接受者地址。
· FEATURE(rbl).允许基于maps.vix.com由黑名单(Realtime Blackhole List)进行邮件拒绝,以防范垃圾邮件。
· FEATURE(accept_unqualified_senders).允许接受发送者地址不包括域名的邮件,例如user,而不是user@B.NET。
· FEATURE(accept_unresolvable_domains).通常来讲,sendmail拒绝接受发送者邮件地址指定的主机通过DNS不能解析的邮件,而该参数允许接收这种邮件。
· FEATURE(relay_based_on_MX).该参数允许转发邮件接受者地址的MX记录指向本地的的邮件,例如,本地接收到一个发送目的地址为user@b.com的邮件,而b.com域名的MX记录指向了本地机器,则本地机器就允许转发该邮件。
下面几个特性可能会有安全漏洞,一般当邮件服务器位于防火墙后时才应该使用,因为这些参数可能导致你的系统易于被垃圾邮件发送者利用。
· FEATURE(relay_local_from). 该参数指定若消息自称源于本地域,则允许转发该邮件。
· FEATURE(promiscuous_relay). 打开对所有的邮件的转发。
宏配置文件"sendmail.mc"设置成功以后,可以用下面的命令创建sendmail的配置文件:
[root@deep]# cd /var/tmp/sendmail-version/cf/cf/
[root@deep]# m4 ../m4/cf.m4 /etc/sendmail.mc > /etc/sendmail.cf
注意:这里"../m4/cf.m4"告诉m4程序的缺省配置文件路径
搞定Sendmail邮件权限控制
出自:LINUX伊甸园 2002年04月04日 17:55
在当今网络的应用中,安全是越来越显出它的重要性了。而E-mail服务是网络世界的一项十分有价值的应用,同样它受到的安全上的威胁也越来越大。从邮件中,黑客们可以采取各种各样的方式来寻找你网络系统上的安全漏洞并实施攻击。比如说,通过在短时间内连续发送大量的垃圾邮件,可以导致你的邮件服务器系统崩溃;另外有些邮件发送者可以利用你的邮件服务器作他们的代理转发系统,这也可能让你系统“蒙受不白之冤”。还有一种情况是,有些站点发来的邮件是不可靠或者非法的,这也需要得到有效的控制。那么怎样能够实现这些对邮件的控制呢? 一、Sendmail出场 这里我们就来探讨怎样在Linux平台上用Sendmail邮件程序来完成这项功能。由于篇幅所限,现在我们只可能就其很小的一部分功能作一些简要介绍。 我们假定你有一台服务器,并且已经安装好了Sendmail软件(推荐为8.9.x以上的版本),可以实现收发邮件的功能。子网内部机器都可以通过而且必须通过该服务器的邮件代理来发送和接收Internet上的邮件。我们以Sendmail的标准配置为参照,看看如何实现对SMTP邮件的中继转发控制。在安装完Sendmail后,我们在/etc/mail(这是默认目录)下,可以找到几个用来控制的数据库及其编辑文件,包括mailer、deny、access等。其中access库即是我们本文讨论的重点。当我们用vi access查看该文件时,可以看到如下一些默认行(注:这里示例的sendmail版本是8.9.3): localhost.localdomain RELAY localhost RELAY 这些默认行说明对你的本域内机器可以实现转发,我们下面的工作就是要对该文件进行加工编辑,以实现对邮件传输的权限控制,从而保证一定的系统安全性。 二、走进邮件数据库 我们仍旧以vi access命令来实施对文件的编辑。首先简单说明一下access数据库的作用及基本形式。access库允许系统管理者按照自己的策略决定是否允许其它域的邮件服务器或邮件地址访问。这个数据库中的每条记录包括一个域名(或者网络名、子网名以及直接的邮箱地址等)作为关键字,以及一项针对该关键字的行动值(即对关键字表示的地址采取什么样的控制方法),它们以TAB键分隔。在默认行中,我们看到的localhost localdomain、localhost都是关键字,而relay则是相应的行动值。 关键字可为多种形式,如完全或部分域名、直接的邮箱地址、IP地址等,例如: host.subdomain.domain.com,subdomain.domain.com或domain.com都是符合要求的关键字,同样,user@host.domain,@host.domain,205.199.2.250,205.199.2,205.199也都是合法的关键字。 由此可见,关键字的匹配项很多,这就大大提高了程序对邮件的控制功能。范围或大或小,都可以由我们灵活控制,确实不错!以下我们便可根据自己系统的需要分别对这些关键字作权限控制,具体来说,行动值有四类:其中的relay,我们已经在文件的默认值中见过了,它表示允许通过你的邮件服务器对邮件作中继转发。其它的三类分别为ok、reject和discard。别小看就这么几项,但实现的功能可不小哦。ok是用来允许用户的任意访问,它会覆盖任何其它已建立的检查(实际设置中,最好别设这项,除非你对该用户是绝对信任的);reject可以实现对来访地址的拒绝,它根本就不容许该地址与你的邮件服务器进行连接通信;如果你想对来访地址耍一个小花招,那么选择discard就再合适不过了,它的作用是在接收到传输的邮件消息后,偷偷地把它丢弃掉(在发送者看来,他的邮件的确是接收了,但他并不知道,发送的目的地址根本不可能接收到他的邮件,服务器巧妙地欺骗了他,这就叫以其人之道还治其人之身!)。除了以上介绍的这四类以外,还可以通过传递出错端口标志和出错信息来拒绝接收邮件。 三、动手做实例 我们下面就来看一看几个例子: cyber.com reject sendmail.org relay my@sendmail.org ok spam@buyme.com discard 202.103.109.35 reject 202.103 relay @buyme.com 550 You don't see the whole world! (注:四个行动值不区分大小写。) 你可以根据你的需要加入合适项以实现邮件权限的设置。为了给大家一个整体的概念,让我们再看一个完整的access文件(已经作了各种限制的): # Check the /usr/doc/sendmail-8.9.3/README.cf file for a description # of the format of this file. (search for access_db in that file) # The /usr/doc/sendmail-8.9.3/README.cf is part of the sendmail-doc # package. # # by default we allow relaying from localhost... localhost.localdomain RELAY localhost RELAY # #other control measures to your email system spamer@playboy.com reject webmaster@sendmail.org ok 202.103.109.8 relay @bad.com 550 You are a bad user! Dis.xq.com discard 完成了对access文件的编辑之后,可千万不要以为就万事大吉了。还有一个非常重要的步骤,那就是把修改的内容写到access数据库中去以使之生效。具体的实现方法是:在命令符下,输入makemap -v hash /etc/mail/access〈 /etc/mail/access,然后系统会给出相应的响应信息,如果结果类似以下这个样子: key=′localhost.localdomain′, val=′RELAY′ key=′localhost′, val=′RELAY′ key=′spamer@playboy.com′, val=′reject′ key=′webmaster@sendmail.org′, val=′ok′ key=′202.103.109.8′, val=′relay′ key=′@bad.com′, val=′550 You are a bad user!′ key=′dis.xq.com′, val=′discard′ 那就表示一切正常!最后请重新启动Sendmail服务,剩下你要做的就是好好享受一下你的工作成果了! 附记:本篇文章完成之际,正值Sendmail 8.10.0全新推出,该版本据说功能较以前有大幅提升。对于本文所涉及的access控制,新的Sendmail版本已经可以实现对邮件收取和发送分别作不同的控制,如下: To:file.example.net RELAY From:file.example.net RELAY 第一条记录允许对去向file.example.net域的邮件作转发,但不允许对来自此域的邮件作转发;而第二条记录则正好相反