近期用 postfix + dovecot 搭建了一个邮件server, 被人当做垃圾邮件转发器,经过配置postfix 的黑白名单, postfix 提示成功的 REJECT 了垃圾邮件, 只是还是有无数的IP地址, 连接过来要进行发送邮件, 尽管垃圾邮件被拒绝了,可是未知连接太多,造成 maillog 日志越变越大, 拖慢 postfix 的执行速度,  总得想个办法解决。要是能把这些没用的IP地址直接用防火墙拒绝就好了。 思路有了,我们就着手处理吧。

这些垃圾IP地址所有是

  • 本站主数据:台湾省 中华电信股份有限公司
  • 參考数据一:台湾

tail    -f    /var/log/maillog   查看日志例如以下所看到的:

这日志还是非常有规律的, 是不是 ?

Aug 20 12:11:40 www postfix/smtpd[18033]: NOQUEUE: reject: RCPT from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]: 554 5.7.1 <ykrt@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vpjcmwqinpnpg@anet.net.tw> to=<ykrt@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:41 www postfix/smtpd[18033]: NOQUEUE: reject: RCPT from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]: 554 5.7.1 <yanghabi@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vpjcmwqinpnpg@anet.net.tw> to=<yanghabi@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:41 www postfix/smtpd[18026]: NOQUEUE: reject: RCPT from 36-224-135-60.dynamic-ip.hinet.net[36.224.135.60]: 554 5.7.1 <dygui@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vqjpdghrcnaf@163.com> to=<dygui@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:42 www postfix/smtpd[18023]: NOQUEUE: reject: RCPT from 114-45-29-112.dynamic.hinet.net[114.45.29.112]: 554 5.1.8 <ekiczlqpkuezc@yahoo.com.jp>: Sender address rejected: Domain not found; from=<ekiczlqpkuezc@yahoo.com.jp> to=<fet77111@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:43 www postfix/smtpd[18033]: NOQUEUE: reject: RCPT from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]: 554 5.7.1 <zen19762001@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vpjcmwqinpnpg@anet.net.tw> to=<zen19762001@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:43 www postfix/smtpd[18026]: NOQUEUE: reject: RCPT from 36-224-135-60.dynamic-ip.hinet.net[36.224.135.60]: 554 5.7.1 <to1477889900@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vqjpdghrcnaf@163.com> to=<to1477889900@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:44 www postfix/smtpd[18033]: NOQUEUE: reject: RCPT from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]: 554 5.7.1 <x19781024@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vpjcmwqinpnpg@anet.net.tw> to=<x19781024@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:44 www postfix/smtpd[18023]: NOQUEUE: reject: RCPT from 114-45-29-112.dynamic.hinet.net[114.45.29.112]: 554 5.1.8 <ekiczlqpkuezc@yahoo.com.jp>: Sender address rejected: Domain not found; from=<ekiczlqpkuezc@yahoo.com.jp> to=<jay791028@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:45 www postfix/smtpd[18033]: NOQUEUE: reject: RCPT from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]: 554 5.7.1 <juliessy@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vpjcmwqinpnpg@anet.net.tw> to=<juliessy@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:45 www postfix/smtpd[18026]: too many errors after RCPT from 36-224-135-60.dynamic-ip.hinet.net[36.224.135.60]
Aug 20 12:11:45 www postfix/smtpd[18026]: disconnect from 36-224-135-60.dynamic-ip.hinet.net[36.224.135.60]
Aug 20 12:11:46 www postfix/smtpd[18023]: too many errors after RCPT from 114-45-29-112.dynamic.hinet.net[114.45.29.112]
Aug 20 12:11:46 www postfix/smtpd[18023]: disconnect from 114-45-29-112.dynamic.hinet.net[114.45.29.112]
Aug 20 12:11:47 www postfix/smtpd[18033]: NOQUEUE: reject: RCPT from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]: 554 5.7.1 <xsip@yahoo.com.tw>: Recipient address rejected: Access denied; from=<vpjcmwqinpnpg@anet.net.tw> to=<xsip@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:11:49 www postfix/smtpd[18033]: too many errors after RCPT from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]
Aug 20 12:11:49 www postfix/smtpd[18033]: disconnect from 36-224-133-61.dynamic-ip.hinet.net[36.224.133.61]
Aug 20 12:14:10 www postfix/smtpd[18097]: connect from 36-224-136-82.dynamic-ip.hinet.net[36.224.136.82]
Aug 20 12:14:11 www postfix/smtpd[18097]: NOQUEUE: reject: RCPT from 36-224-136-82.dynamic-ip.hinet.net[36.224.136.82]: 554 5.7.1 <rzxijhkiefau@yahoo.com.tw>: Sender address rejected: Access denied; from=<rzxijhkiefau@yahoo.com.tw> to=<ina12350@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>
Aug 20 12:14:11 www postfix/smtpd[18097]: NOQUEUE: reject: RCPT from 36-224-136-82.dynamic-ip.hinet.net[36.224.136.82]: 554 5.7.1 <rzxijhkiefau@yahoo.com.tw>: Sender address rejected: Access denied; from=<rzxijhkiefau@yahoo.com.tw> to=<ilovemyself414@yahoo.com.tw> proto=SMTP helo=<115.28.81.191>

我们能够动态分析日志, 把  

too many errors after RCPT from
后面的IP地址获取, 动态添�到防火墙进行拒绝即可。

思路有了, 我就写个小程序来分析日志吧,我写的是C的,  只是用perl 或者 shell 脚本可能更简单。

反正用自己最熟悉的语言即可。

dyn.c 源码文件的内容例如以下 :

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define BUF_LEN   4096
#define DATA_LEN  4096*10 int  main (int argc, char** argv)
{
    //too many errors after RCPT from 36-224-128-99.dynamic-ip.hinet.net[36.224.128.99]
    //too many errors after RCPT from 118-169-22-28.dynamic.hinet.net[118.169.22.28]
    //too many errors after AUTH from unknown[79.125.161.236]         char buf[BUF_LEN] = {0};
    const char* sep = "too many errors after";
    
    while (1)
    {
        memset (buf, 0, sizeof(buf));
        char* tp = fgets (buf, sizeof(buf)-1, stdin);
        if (tp != NULL)
        {
            int buflen = strlen(tp);
            char* p = strstr(buf, sep);
            if (p != NULL)
            {
                char* p1 = p + strlen(sep) + 1;
                char* ps = NULL;
                char* pe = NULL;
                while (*p1 != '\0' && *p1 != '\n')
                {
                    if (*p1 == '[')
                        ps = p1+1;
                    if (*p1 == ']')
                        pe = p1;
                    p1++;
                }
                
                if (ps != NULL && pe != NULL)
                {
                    char ipbuf[64]={0};
                    memcpy (ipbuf, ps, pe-ps);
                    char ebuf[512] = {0};
                    snprintf(ebuf, sizeof(ebuf)-1, "iptables -I INPUT -s %s -j DROP", ipbuf);
                    system (ebuf);
                    printf ("%s\n", ebuf);
                }             }
        }     }
    
    return 0;
}

用  gcc   -g -o dyn  dyn.c    , 编译后生成了可运行文件   dyn

我的dyn可运行文件在  /root 文件夹, 所以用 命令:

nohup   tail  -f   /var/log/maillog  |  /root/dyn  &

让它自己跑吧。

过一段时间后, 我们再看maillog日志,  已经基本没有 不认识的IP地址再连接过来打算发邮件了。

动态分析maillog日志,把恶意链接直接用防火墙禁止的更多相关文章

  1. linux下 tomcat 日志乱码/中文链接404

    1 日志乱码: JDK引用的设置 Java引用参数添加”-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8” 将上面参数添加到Catalina.sh中JAVA ...

  2. 开启aix SFTP日志 是否和链接SFTP有关呢

    1.修改SSH配置 vi /etc/ssh/sshd_config 在sftp配置处添加-l INFO -f AUTH Subsystem sftp /usr/lib64/ssh/sftp-serve ...

  3. oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 --------关闭防火墙试试

    oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 但是使用sqlplus可以连接 ping 本机127.0.0.1 显示一般故障 后关闭防火墙,问题解决. ps:登录时使用@ ...

  4. redhat 防火墙禁止允许的IP链接指定的端口

    编辑:iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.4.3 --dport 80 -j A ...

  5. 发送垃圾邮件的僵尸网络——药物(多)、赌博、股票债券等广告+钓鱼邮件、恶意下载链接、勒索软件+推广加密货币、垃圾股票、色情网站(带宏的office文件、pdf等附件)

    卡巴斯基实验室<2017年Q2垃圾邮件与网络钓鱼分析报告> 米雪儿 2017-09-07 from:http://www.freebuf.com/articles/network/1465 ...

  6. Linux下重要日志文件及查看方式

    http://os.51cto.com/art/201108/282184_all.htm   1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的 ...

  7. Kworkerd恶意挖矿分析

    转自:https://www.360zhijia.com/anquan/417114.html 0x01 快速特征排查 TOP显示CPU占用高,但是没有高占用的进程 存在与未知服务器13531端口建立 ...

  8. Linux下重要日志及查看方式

    1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息,如图1所示: 图1 /var/log/boot. ...

  9. linux下的系统服务管理及日志管理

    1.ntsysv服务配置工具 用来配置哪些服务开启或关闭,图形界面,使用键盘来操作. 安装ntsysv服务的命令:yum install -y ntsysv 直接运行命令ntsysv 弹出配置界面: ...

随机推荐

  1. How to install vim on linux

    前几日了解到 vim 文本编辑器,据说很强大,使用起来效率很高,今天怀着很好奇的心理,学习了一下vim编辑器的下载安装方法,在此详细介绍一下安装vim编辑器的几种常用方法: 第一种方法就是在 Ubun ...

  2. 如何捕获winform程序全局异常?

    1.在C#中我们如何处理异常? 上面的问题学过C#的问题大家可能都能回答处理,用try-catch-finally具体如下: try { //可能出错的语句 } catch (Exception) { ...

  3. tomcat下部署activemq(转)

    转自:http://marshal.easymorse.com/archives/1414 activemq可以单独部署和执行,比如类似ActiveMQ的最简单应用中提到的安装和执行方式.但是有时候需 ...

  4. 基于visual Studio2013解决C语言竞赛题之1017次数

         题目 解决代码及点评 /* 功能:有人说在400, 401, 402, ...499这些数中4这个数字共出现112次,请编程序判定这 种说法是否正确.若正确请打印出'YE ...

  5. JS将秒换成时分秒

    function formatSeconds(value) {    var theTime = parseInt(value);// 秒    var theTime1 = 0;// 分    va ...

  6. hdu4725 The Shortest Path in Nya Graph

    这道题看了下很多人都是把每一层拆成两个点然后建图做的. 我的思路很直接,也不用建图,直接在更新每个点时更新他相邻的边和相邻的层,当然前提是每个点只更新一次,每个层也只更新一次,这样才能确保时间复杂度. ...

  7. poj3617Best Cow Line

    题意大概是这样,给你一个字符串,你能够进行的操作是这种, 每次拿走这个串的第一个字母,或者最后一个字母,然后放到 一个新串的末尾(当然啦,新串一開始是为空的),当把旧串 里的全部字母拿掉,这个时候就形 ...

  8. Java内部类——成员内部类

    成员内部类的意思就是,一个外层类里面包含着一个非static的class,举例如下: class OuterClass { //变量,函数定义... class InnerClass { //变量,函 ...

  9. 程序员必须知道的几个Git代码托管平台(转)

    上一篇博客中2015继续任性——不会Git命令,照样玩转Git我们简单的介绍了在VS2013中使用Git,和GitHub客户端的使用.那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平 ...

  10. phpcms 列表页中,如何调用其下的所有子栏目(或特定的子栏目)?

    {pc:get sql="select * from phpcms_category where catid in(你的子栏目ID)" return="data" ...