黑帽联盟

 找回密码
 会员注册
查看: 1366|回复: 0
打印 上一主题 下一主题

[脚本语言] shell(python)防ftp暴力破解代码分享

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

      朋友的服务器搭建了ftp,这几天一直在被暴力破解,找到我要我帮忙解决这个问题,登录到他服务器上一看,是用的Pure-ftp搭建的ftp服务器,它日志文件跟系统日志文件绑定在一起:/var/log/messages,知道了这些后,专门从网上找了个脚本给他,让脚本去帮他挡攻击.
    脚本内容:
    1. #!/usr/bin/python
    2. #This script can deny anythings to all of ports
    3. import os,re

    4. #Find time today
    5. tm=os.popen('date').read()

    6. #Basic steup
    7. deny_port= '21'
    8. log_path = '/var/log/messages'
    9. ip_count= '30'
    10. aut_message = tm[4:10]+ '.*pure-ftpd.*failed.*'
    11. list_path='/shell/ip_list.txt'

    12. #The program run to decide
    13. 16
    14. class port:

    15.     def re_ip(self):
    16.         r_file=open(log_path,'r').read()
    17.         s_rule=re.compile(aut_message,re.I)
    18.         n_rule=s_rule.findall(r_file)
    19.         self.f_ip =re.findall('\d+\.\d+\.\d+\.\d+',''.join(n_rule))

    20.     def loop_list(self):
    21.         for ip in set(self.f_ip):
    22.             if not os.path.isfile(list_path):
    23.                 os.mknod(list_path)
    24.             self.ip_list=open(list_path,'rw+')
    25.             if re.search(ip,self.ip_list.read()) is None:
    26.                 if self.f_ip.count(ip) >= int(ip_count):
    27.                     self.ip_list.write(ip+'\n')
    28.                 self.ip_list.seek(0)
    29.             else:
    30.                 self.ip_list.seek(0)

    31.     def iptables(self):
    32.         for ip in self.ip_list.readlines():
    33.             iptables_list=os.popen('iptables --list --numeric').read()
    34.             if re.search(ip.strip('\n'),iptables_list) is None:
    35.                 if re.search('RH-Firewall-1-INPUT',iptables_list,re.I) is None:
    36.                     os.system("iptables -I INPUT 2 -m state --state NEW -s %s -m tcp -p tcp --dport %s -j DROP"%(ip.strip('\n'),deny_port))
    37.                 else:
    38.                     os.system("iptables -I RH-Firewall-1-INPUT 2 -m state --state NEW -s %s -m tcp -p tcp --dport %s -j DROP"%(ip.strip('\n'),deny_port))

    39. D=port()
    40. D.re_ip()
    41. D.loop_list()
    42. D.iptables()
    复制代码
    脚本实现的原理是:
    通过程序读取->带登录信息验证的日志文件->调用iptables直接进行封杀

    把脚本丢到系统的计划任务里实现自动抵御:
    chmod +x /root/soft_shell/deny_port.py
    vi /etc/crontab
    */3 * * * * root /root/soft_shell/deny_port.py
    好了,做完这些重启下系统的crond服务,等脚本自己去封杀ip.
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部