APP下载

Linux系统下基于postfix垃圾邮件过滤方法

2018-10-20金京犬

新乡学院学报 2018年9期
关键词:垃圾邮件投递队列

金京犬

(安徽邮电职业技术学院 计算机系,安徽 合肥230031)

随着互联网的发展,电子邮件大大方便了人们生活和工作,但是也产生了一系列新的问题,如垃圾邮件。垃圾邮件中夹带的非法信息、病毒造成的商业机密泄密、个人财产丢失等问题,给人们的生活和工作带来许多困扰。因此,寻求一种安全稳定的垃圾邮件过滤系统是很有必要的。目前常用的方法主要是服务器和客户端的邮件过滤,包括邮件的内容过滤、关键字过滤以及身份验证。

1 postfix概述

postfix是一款邮件代理传输软件,相对于sendmail软件来讲,它更安全、更快、更灵活。它设计出来的主要目的就是解决sendmail存在的不安全和效率低的问题[1]。postfix安全原则特点如下:

1)能够让互联网用户访问的外部程序的权限比较低;

2)为已分离的形式不同的进程提供不同的功能;

3)外部进程是单进程方式运行的,不允许进程以SUID权限形式访问;

4)采用动态内存分配,解决缓冲区溢出的问题。

在Linux系统下,postfix应用程序有1个主进程master和21个子进程。下面将从接收邮件和投递邮件两个任务的角度来分析这些进程的工作。

(1)接收邮件

接收邮件的方法有两种:一是直接交给25号端口的smtpd进程接收邮件;二是通过sendmail把邮件放到mail drop的邮件投递代理队列中,再由pickup进程接收邮件。这两种方法都会先把邮件交给cleanup子进程,cleanup将会对收到的邮件进行基本检查、内容过滤(包括邮件头部检查),然后把邮件放入刚来的邮件队列中(incomingqueue),最终通过队列管理器(qmgr)管理[1-2]。

(2)投递邮件

邮件投递也有两种方法:一是本地投递程序投递到本地的邮箱中,二是smtp程序发送和转发到其他邮件服务器上。在进行邮件投递时,队列管理器qmgr会在incoming队列中查找活跃队列(active queue),邮件一旦被放入活跃队列,就会被投递出去。如果邮件临时不能被投递,那么它就会被放入延时队列(deferred queue)。如果邮件已经损坏不能被投递,那么邮件就会被放入到腐败队列(corrupt queue)。

2 配置postfix实现邮件过滤

2.1 邮件过滤框图

邮件过滤系统主要是检查邮件的头部、附件和内容等几个关键点[3-4],如果其中有符合特征信息的,则过滤该邮件。具体的邮件过滤框图如图1所示。

图1 邮件过滤框图

2.2 邮件过滤配置

Linux系统完成postfix应用软件的安装后,会产生两个重要文件:一个是/etc/postfix/main.cf主配置文件,另一个是/etc/postfix/master.cf进程管理文件。实现垃圾邮件过滤,主要就是对主配置文件进行修改配置。

procmail和spamassassin两款软件都支持垃圾邮件过滤,其中procmail是postfix的一个默认程序,是一个邮件投递单。本文使用procmail软件进行邮件过滤。具体的配置清单如表1所示。

表1 配置清单

在表1中,当body_checks文件内容为/Make Money Fast/REJECT"NO,I do not believe",表示出现“Make Money Fast”关键字,就拒绝投递邮件,并提示“NO,Ido not believe”信息。 当 header_checks文件内容为/^Subject:*ILOVEYOU*/REJECT GO Died your love,表示以“ILOVEYOU”为主题的邮件都拒绝,并提示“GO Died your love”信息。当 mime_header_checks文件内容为/.exe|.bat$/REJECT ’virus file’, 表示拒绝附件为exe或者bat格式的文件并提示“virus file”信息。

3 实验验证与分析

本次实验是在 centos Linux7.2,postfix-2.10.1,邮件服务器主机名为controller.example.com,测试主机名为compute.example.com的环境下进行的。没有配置邮件过滤时可以正常收发邮件,如图2显示的是发邮件信息,图3是显示收邮件信息。配置过滤邮件信息后,符合特征信息的邮件就被拒绝投递。图4所示是在命令窗口输入命令echo"jgjagjgla"|mail-v-s"ILOVEYOU"u1@controller.example.com进行测试("jgjagjgla"是任意邮件信息,-s指定主题)时所显示的邮件内容过滤。图5显示的是在命令窗口输入命令mutt u1@controller.example.com-a aa.exe-s"test"(-a表示添加附件,-s表示指定主题)进行测试时的邮件主题过滤信息。图6显示的是附件过滤信息。从实验结果可以看出procmail能够根据用户定制的规则过滤出垃圾邮件。

图2 无过滤机制发邮件

图3 无过滤机制收邮件

图4 邮件内容过滤

图5 邮件主题过滤

图6 邮件附件过滤

4 配置smtp+tls实现身份验证

仅利用postfix软件过滤邮件,功能是非常有限的,从上面的实验可以看出,客户端邮件发送者的身份没有进行验证,很容易导致邮件服务器被当成一个垃圾邮件中转站[5]。本文中设计的smtps机制需要验证客户端邮件发送者的身份,以有效防止服务器变成垃圾中转站的情况。具体的配置内容如表2和表3所示。该配置的具体步骤如下:

Step1:为postfix服务器生成私钥和证书。主要是利用opnssl genrsa命令生成私钥,openssl req命令生成证书请求文件,利用openssl ca命令为证书请求文件文件做签名。

Step2:修改主配置文件,启动smtps功能,具体的配置如表2所示。此步的作用除启动smtps功能实现加密通信外,主要是指定三个文件的位置,即服务器证书的文件、CA证书的文件和服务器私钥文件。

Step3:配置sasl验证,具体的配置如表3所示。其作用是客户端必须通过验证,才能通过本邮件服务器relay邮件。

Step4:测试验证。正确配置smtp+ssl(见表2和表3)后,在发送邮件的时候会启用sasl机制验证客户身份,如图7所示。验证的机制有四种,即CRAM-MD5、DIGEST-MD5、LOGIN和PLAIN。实验中采用LOGIN验证机制。用户名”dTE=”是通过perl命令中的函数encode_base64 ("u1")’所得,密码“cmVkaGF0”是通过perl命令中的函数encode_base64("redhat")所得。图7中显示:当用户名和密码输入正确后,才能通过验证,进行下一步的邮件投递工作。

图7 smtp+ssl验证客户身份

表2 smtps配置选项

表3 sasl配置选项

5 结束语

垃圾邮件占用网络资源,影响人们的生活、工作及财产安全等,研发一种反垃圾邮件系统势在必行。本文基于DNSBL反垃圾邮件研究的基础上对Linux系统下postfix垃圾邮件过滤方法进行深入研究,在此基础上设计了结合smtp和ssl机制验证客户端发送邮件人的身份。下一步研究工作的重点是基于企业级的邮件系统extmail,用以实现垃圾邮件和病毒邮件的过滤功能。

猜你喜欢

垃圾邮件投递队列
传统与文化的“投递”
从“scientist(科学家)”到“spam(垃圾邮件)”,英语单词的起源出人意料地有趣 精读
一种基于SMOTE和随机森林的垃圾邮件检测算法
队列里的小秘密
垃圾邮件会在2020年消失吗
基于多队列切换的SDN拥塞控制*
在队列里
丰田加速驶入自动驾驶队列
基于支持向量机与人工免疫系统的垃圾邮件过滤模型
大迷宫