用Shell脚本动态分析maillog日志,把恶意IP用防火墙禁止

用Shell脚本动态分析maillog日志,把恶意IP用防火墙禁止

系统环境:Centos 6.5 x64

Postfix邮件系统装好后,发现maillog中太多“SASL LOGIN authentication failed”垃圾IP地址。此脚本用于定期自动的将垃圾IP加入到防火墙中,直接拒绝掉。maillog部分信息如下

用户可以根据自己日志文件中的关键字,灵活的来调整要加入到防火墙当中的IP地址。

Jun 11 03:58:36 host postfix/smtpd[11783]: warning: static-200-105-200-14.acelerate.net[200.105.200.14]: SASL LOGIN authentication failed: authentication failure

Jun 11 03:58:36 host postfix/smtpd[11783]: disconnect from static-200-105-200-14.acelerate.net[200.105.200.14]

Jun 11 04:01:56 host postfix/anvil[11785]: statistics: max connection rate 1/60s for (smtp:200.105.200.14) at Jun 11 03:58:33

Jun 11 04:01:56 host postfix/anvil[11785]: statistics: max connection count 1 for (smtp:200.105.200.14) at Jun 11 03:58:33

Jun 11 04:01:56 host postfix/anvil[11785]: statistics: max cache size 1 at Jun 11 03:58:33

Jun 11 04:07:13 host postfix/smtpd[11811]: warning: 191.8.183.187: hostname 191-8-183-187.user.vivozap.com.br verification failed: Name or service not known

Jun 11 04:07:13 host postfix/smtpd[11811]: connect from unknown[191.8.183.187]

Jun 11 04:07:15 host postfix/smtpd[11811]: warning: unknown[191.8.183.187]: SASL LOGIN authentication failed: authentication failure

Jun 11 04:07:16 host postfix/smtpd[11811]: disconnect from unknown[191.8.183.187]

Jun 11 04:10:00 host postfix/smtpd[11817]: connect from unknown[186.179.219.145]

Jun 11 04:10:01 host postfix/smtpd[11817]: warning: unknown[186.179.219.145]: SASL LOGIN authentication failed: authentication failure

Jun 11 04:10:02 host postfix/smtpd[11817]: disconnect from unknown[186.179.219.145]

Jun 11 04:12:53 host postfix/smtpd[11822]: connect from 187-162-93-226.static.axtel.net[187.162.93.226]

Jun 11 04:12:54 host postfix/smtpd[11822]: warning: 187-162-93-226.static.axtel.net[187.162.93.226]: SASL LOGIN authentication failed: authentication failure

Jun 11 04:12:54 host postfix/smtpd[11822]: disconnect from 187-162-93-226.static.axtel.net[187.162.93.226]

Jun 11 04:15:42 host postfix/smtpd[11827]: warning: 191.8.183.187: hostname 191-8-183-187.user.vivozap.com.br verification failed: Name or service not known

Jun 11 04:15:42 host postfix/smtpd[11827]: connect from unknown[191.8.183.187]

Jun 11 04:15:44 host postfix/smtpd[11827]: warning: unknown[191.8.183.187]: SASL LOGIN authentication failed: authentication failure

Jun 11 04:15:45 host postfix/smtpd[11827]: disconnect from unknown[191.8.183.187]

Jun 11 04:17:13 host postfix/anvil[11813]: statistics: max cache size 1 at Jun 11 04:07:13

Jun 11 04:21:27 host postfix/smtpd[11842]: warning: 201.20.89.190: hostname 201-20-89-190.baydenet.com.br verification failed: Name or service not known

Jun 11 04:21:27 host postfix/smtpd[11842]: connect from unknown[201.20.89.190]

Jun 11 04:21:29 host postfix/smtpd[11842]: warning: unknown[201.20.89.190]: SASL LOGIN authentication failed: authentication failure

[[email protected] ] cd /etc/postfix/

[[email protected] postfix]# vi ipadd

#!/bin/bash

# Block maillog SASL LOGIN authentication failed IP address and  add to iptables

# written by evan.li 2017.06.13

IPTABLES=/sbin/iptables

EGREP=/bin/egrep

COUNTRY="cn"

iptables -F

iptables -X

ip_regex="[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"

grep -r "SASL LOGIN authentication failed" /var/log/maillog > /var/log/sasl-failed.txt

find /var/log/ -name "sasl-failed.txt" -type f -print | xargs cat | egrep -o $ip_regex | sort | uniq > /var/log/ipfailed.txt

for c in $COUNTRY

do

country_file=/var/log/ipfailed.txt

IPS=$($EGREP -v "^#|^$" $country_file)

for ip in $IPS

do

echo "blocking $ip"

$IPTABLES -A INPUT -s $ip -j DROP

done

done

/etc/sysconfig/customrules

/etc/rc.d/init.d/iptables save

service iptables restart

exit 0

shell脚本说明

一、先生成带用“SASL LOGIN authentication failed”关键字的文件/var/log/sasl-failed.txt

二、根据sasl-failed.txt,从中提取出垃圾IP,生成纯IP文件/var/log/ipfailed.txt

三、用脚本将纯IP文件导入进防火墙中,重起服务生效。

customrules文件为防火墙自定义规则,需事先按照你原有防火墙规则,手动编写好。

此脚本执行后,会清除原有iptables规则内容,所以事先一定要备份iptabels文件,以防万一。

以下,为我公司原有防火墙规则文件。

[[email protected] postfix]# vi /etc/sysconfig/customrules

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p icmp -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -m multiport --dports 25,47,80,82,110,143,443,1723,1935 -j ACCEPT

iptables -A INPUT -p tcp -m multiport --dports 3306,8081,8181,22110,13128,13389 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 23300:23308 -j ACCEPT

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited


添加可执行权限

[[email protected] postfix]# chmod +x /etc/sysconfig/customrules

[[email protected] postfix]# chmod +x /etc/postfix/ipadd

添加到排程任务,每1小时执行一次

[[email protected] postfix]# vi /etc/crontab

0 */1 * * * root /etc/postfix/ipadd 

http://down.51cto.com/data/2316790

ipadd脚本下载地址

以上Shell脚本,测试成功于2017.6.13日

时间: 2024-10-07 08:02:39

用Shell脚本动态分析maillog日志,把恶意IP用防火墙禁止的相关文章

Linux下添加shell脚本使得nginx日志每天定时切割压缩

Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常时查日志,还是使用"GoAccess"等工具对日志进行分析都将会变得非常麻烦.因此,每天定时对nginx日志进行切割压缩就非常有必要了 二 实现 我的实现思路是每天晚上接近12点时定时执行脚本.其脚本内容就是将当前的nginx日志先按照当天日期进行重命名接着进行压缩,最后是新建空白的ngi

shell脚本分析apache日志状态码

一.首先将apache日志按天切割 vi /etc/httpd/conf/httpd.confErrorLog "|rotatelogs /var/log/httpd/%Y%m%derror_log 86400 480″CustomLog "|rotatelogs /var/log/httpd/%Y%m%daccess_log 86400 480″ combined 二.重启apache服 service httpd restart ##################apahce日志

动态分析maillog日志,把恶意链接直接用防火墙禁止

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

[linux] shell脚本编程-统计日志文件中的设备号发通知邮件

1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|grep 关键字 |grep -oP "deviceid=[^=]+"|uniq|sort -u > /tmp/20190815.log date 格式化出年月等信息,拼接成路径 wc -l /tmp/20190815.log , 获取到行数 php /xxxxx/sendmail.ph

Shell脚本实现 tomcat 日志定时切割

日志切割的意义: 在生产环境中,当我们使用tomcat服务时,如果用户量过多,有没有日志切割,将会产生很大的日志,一天的日志都能有好几个G大小.当我们需要查看日志记录时,非常麻烦.因此,日志切割是很有必要的! 1.编写shell脚本 vim fengelog.sh #脚本声明 #!/bin/bash . /etc/profile . ~/.bash_profile #定义日志文件目录 applog_path=/usr/local/apache-tomcat-app/logs sapplog_pa

shell脚本切割tomcat日志文件

转自:http://www.cnblogs.com/lishun1005/p/6054816.html 鉴于在调试logback和log4j的文件切割一直无法成功,随性用shell写个脚本用来切割tomcat下的日志文件(大家如果有在logback或log4j使用文件切割成功的话,可以留下使用方式,先谢谢了) 1:废话少说,直接贴上脚本: #!/bin/sh log_dir=/var/log/tomcat monitor_file=$1 #tomcat目录下的catalina.out文件的绝对路

shell 脚本分析Nginx 日志

本脚本分析Nginx 负载均衡器的日志: #!/bin/bash if [ $# -eq 0 ]; then     echo "Error:please specify logfile."     exit 0 else     LOG=$1 fi if [ ! -f $1 ]; then     echo "Sorry,sir. I cat't find this apache log file, pls try again!"     exit 0 fi ##

shell脚本中自定义日志记录到文件

自定义日志函数和前期变量 # adirname - return absolute dirname of given file adirname() { odir=`pwd`; cd `dirname $1`; pwd; cd "${odir}"; } MYNAM=`basename "$0"` MYDIR=`adirname "$0"` MYHOME="/home/shell/script" MYLOG_PATH="

shell脚本分析nginx日志

第一版,比较粗糙,仅限于能用 正在写入的文件不能用tar进行压缩 --------压缩日志---------------------- 94 access.log 95 tar: access.log: file changed as we read it 96 #### 压缩日志失败 #### #!/bin/sh #分析nginx日志 DATE=`date '+%Y%m%d-%H%M'` ARCHIVE=/usr/log_bak/nginx_$DATE.tar.gz MESSAGE=/usr/