当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > Redhat6.2+qmail+smtpd认证防止垃圾邮件发送者滥用你的服务器

Linux服务器
linux下用cron定时执行任务的方法
.htaccess绑定域名到子目录的方法
linux apache下虚拟主机配置方法
apache 局域网访问配置方案
linux Apache服务器系统安全设置与优化
linux中mac地址绑定方法
linux托盘不断闪烁之解决方法
Apache配置 虚拟转向实例
Apache No space left on device的解决办法
Apache rewrite的重写相关的参数说明
LINUX入门级常用命令20条整理
Ubuntu设置开机自动挂载所有格式硬盘分区
5个可能被你忽略的Linux安全设置方法
学习Apache的mod rewrite、access写法
改版时保留原链接,创建新的URL的方法
rsync中文手册之使用rsync实现网站镜像和备份linux
rsync 数据同步使用详解
linux URL的301重定向代码分析
eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置数据库连接池
Apache服务器二级域名的完美实现

Linux服务器 中的 Redhat6.2+qmail+smtpd认证防止垃圾邮件发送者滥用你的服务器


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 77 ::
收藏到网摘: n/a


作者:北极星

软件环境:
redhat6.2qmail1.3
邮件服务器服务于内部和外部,利用ADSL上网,域名解析利用dns2go.com的服务。单网卡,路由器为Linksys.

背景:
我已经利用一般的方法安装了qmail服务器,工作稳定,DNS也进行了设置,不设置DNS会出现下列情况:在外网断了的情况下,内网的邮件服务器不能登陆收取邮件。另外,我的服务器最近被利用发送大量的垃圾邮件(我也不知道我的服务器地址怎么被人家发现的),因此现在想在原有的基础上给smtpd加验证功能。

我使用的是ideal撰写文章(http://www.ccidnet.com/tech/network/2001/04/04/58_1931.html)中的第三种方法,(推荐使用此种方法)

防止mailrelay被滥用的方法三
对于有漫游用户的邮件系统来说,防止其relay功能被滥用的另外一个方法就是在发送邮件时要求用户认证,就象用户收信是需要认证一样。这里假设系统已经安装成功qmail-1.03和vpopmail,并且原有系统运行正常。

1、下载程序:

qmail-smtp补丁:http://members.elysium.pl/brush/qmail-smtpd-auth/

密码检验补丁:http://members.elysium.pl/brush/cmd5checkpw/

从这两个地址下载得到qmail-smtpd-auth-0.31.tar.gz(最新版本)及cmd5checkpw-0.22.tar.gz。

2、编译安装qmail-smtpd

将qmail-smtpd-auth-0.31.tar.gz解压缩:

[root@wwwsrc]#tarxvfzqmail-smtpd-auth-0.31.tar.gz

[root@wwwsrc]#cdqmail-smtpd-auth-0.31

[[email protected]]#ls

CHANGESREADME.authauth.patchbase64.cbase64.h

[[email protected]]#cpREADME.authbase64.cbase64.h../qmail-1.03/

[[email protected]]#patch–d../qmail-1.03
最好先将原文件备份。单独编译qmail-smtpd:

[[email protected]]#cd/var/qmail/bin

[root@wwwbin]#cpqmail-smtpdqmail-smtpd.old

[root@wwwbin]#cd/usr/src/qmail-1.03

[[email protected]]#makeqmail-smtpd

./loadqmail-smtpdrcpthosts.ocommands.otimeoutread.o

timeoutwrite.oip.oipme.oipalloc.ocontrol.oconstmap.o

received.odate822fmt.onow.oqmail.ocdb.afd.await.a

datetime.agetln.aopen.asig.acase.aenv.astralloc.a

alloc.asubstdio.aerror.astr.afs.aauto_qmail.o`cat

socket.lib`

将新生成的qmail-smtpd拷贝到/var/qmail/bin目录下

3、编译安装cmd5checkpw-0.22.tar.gz

解压缩,编译安装:

[root@wwwsrc]#tarxvfzcmd5checkpw-0.22.tar.gz

[root@wwwsrc]#cdcmd5checkpw-0.22

[[email protected]]#make;makeinstall

4、设置relay规则。

relay的意思是:服务器接受客户端的smtp请求,将客户端发往第三方的邮件进行转发。qmail下控制relay很简单,只要客户端接入的smtp进程的环境变量里包含(RELAYCLIENT="")就允许relay,否则拒收。实现方法是在/etc/tcp.smtp里对需要relay的IP逐条设置(RELAYCLIENT=""),然后用tcprules生成规则表。因为本文要实现SMTP认证后的relay,不需要对任何IP进行预先设定,所以默认规则设置成"只对本服务器relay"。/etc/tcp.smtp内容应该为:

127.0.0.1:allow,RELAYCLIENT=""

:allow

重新生成新的tcp.smtp.cdb文件:

/usr/local/bin/tcprules/etc/tcp.smtp.cdb/etc/tcp.smtp.tmp4、设置/home/vpopmail/bin/vchkpw的SetUID和SetGID。

这点很重要,否则认证无法通过。这是因为smtpd的进程是由qmaild执行的。而密码验证程序原来只使用于pop3进程,分别由root或vpopmail执行,为的是读shadow或数据库中的密码,并取出用户的邮件目录。这些操作qmaild都没有权限去做。如果smtp进程要调用密码验证程序,则必须要使用setuid和setgid。其实这点大可放心,这两个密码验证程序都是带源代码的,本身非常安全,只需要放在安全的目录里就可以了(设置其他用户除qmaild可执行外都没有权限执行;其实如果没有其他SHELL帐户,也就不用这么麻烦了)。

chmodu+s/home/vpopmail/bin/vchkpw

chmodg+s/home/vpopmail/bin/vchkpw

5、修改smtpd启动命令行
我的qmail是放在/etc/rc.d/init.d下自动启动执行的,所以修改这个文件,将qmail-smtpd部分改成下面的参数形式:

/usr/local/bin/tcpserver-H-R-l0-t1-v-p-x/etc/tcp.smtp.cdb-uqmaild-gnofiles0smtp/var/qmail/bin/qmail-smtpd/home/vpopmail/bin/vchkpw/bin/true/bin/cmd5checkpw/bin/true2>&1/var/qmal/bin/sploggersmtpd3&

6、其他一些设置:

设置vpopmail的用户目录直到/目录都被任何用户可以读取;

7、重新启动qmail

/etc/rc.d/init.d/qmailstop

/etc/rc.d/init.d/qmailstart

8、客户端测试

在客户端上使用OutlookExpress和foxmail等邮件软件进行检验。