解决方法:根据邮件日志提取出恶意攻击的ip进行过滤
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#crotabRun /usr/bin/python ipfilter.py >/dev/null 2>&1
import sys
import re
import os
import logging
import time
now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
day = time.strftime('%Y-%m-%d',time.localtime(time.time()))
os.system("grep 'authentication failure' /var/log/maillog > 1.txt")
f = open("iplist.txt") # 返回一个文件对象
line = f.readline() # 调用文件的 readline()方法
ipOldList = []
while line:
if line:
ipOldList.append(line.strip('\n'))
# print(line, end = '') # 在 Python 3中使用
line = f.readline()
f.close()
f = open("1.txt")
line = f.readline()
ip_list = []
while line:
ip = re.findall(r'\d+.\d+.\d+.\d+', line)
if (len(ip) == 2):
if ip[1] not in ipOldList:
ip_list.append(ip[1])
line = f.readline()
f.close()
logging.basicConfig(filename = os.path.join(os.getcwd(), 'log.txt'), level = logging.DEBUG)
if ip_list:
#ip白名单
whiteList = ['27.54.226.101','27.54.226.99','27.54.226.104','27.54.226.100','27.54.226.102','27.54.226.103','58.211.116.10']
#去除数组中重复的值
def unique(L):
return [x for x in L if x not in locals()['_[1]']]
update = 0
if ip_list:
ipdrop = open('ipdrop.sh','a')
iplist = open('iplist.txt','a')
try:
for ip in unique(ip_list):
if ip not in whiteList:
update = 1
rule = "\n/sbin/iptables -I INPUT -s %s -j DROP" %(ip)
ipdrop.write(rule)
iplist.write("\n"+ip)
if update == 0:
logging.debug(now + ' 文件不需要更新~~')
finally:
ipdrop.close()
iplist.close()
else:
logging.debug(now + ' 无ip需要过滤~~')
if update == 1:
os.system('/sbin/service iptables restart')
os.system("/bin/bash "+os.path.join(os.getcwd(), 'ipdrop.sh'))
logging.debug(now + ' 更新iptables成功~~')
os.system("cp /var/log/maillog /var/log/maillog_"+day)
os.system("echo '' > /var/log/maillog")
else:
logging.debug(now + ' 没有恶意攻击的IP~~')