热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用ip_conntrack表实现封ip的shell脚本

文章标题:利用ip_conntrack表实现封ip的shell脚本。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

   基本原理:

  通过过滤ip_conntrack表得到ESTABLISHED状态过多的ip, 然后用iptabels封掉一段时间,同时用hping工具将这些ip从表中清理掉,最后将被封的ip和一些其他信息写到一个html页中,做简单的发布

  关于hping:

  下载: http://www.hping.org/download.html
  安装: ./configure;make;make install
  相关联接: http://chinaunix.net/jh/4/367999.html

  默认功能:

  1, 当一个ip在ip_conntrack表中的ESTABLISHED状态在30-50之间时, 此ip被封10分钟,同时在ip_conntrack表中的记录被清除;50-100之间封15分钟,同时清表;100以上封30分钟,同时清表,

  2, 然后生成web页
  /var/www/html/wwy/drop/index.html --- 显示被封的ip, 和cpu状态等信息
  /var/www/html/wwy/all/index.html --- 每一个ip的连接情况

  3, 生成简单的日志
  /tmp/killip/tmp.log.txt

  使用方法:
  1, 需要安装hping

  2, 建议将脚本放到计划任务中

  3,
建议安装并开启apache, 为支持简单的web发布,默认为 http://127.0.0.1/l/wwy/drop/index.htm

  4,
如果表的大小大于20mb请慎用

====================================================


  代码:

#!/bin/bash # #--------------------------------------------------------------------------------------- #Scrip name: killip, base on ip_conntrack, write by wwy. #--------------------------------------------------------------------------------------- cpu=`sar -u 1 1 | awk '{print $7}' | tail -1`% # while [ "`pidof sleep`" ];do echo "she is running, sorry" exit 1 done if [ ! "`lsmod | grep ip_conntrack`" ]; then modprobe ip_conntrack fi #################################### ##---------------------- functions -----------------------------## #################################### function make_clr { while read clr33;do cat /tmp/tmp111.txt | grep $clr33 >> /tmp/tmp33-3-clr.txt done > /tmp/tmp33-2-clr.txt done > /tmp/tmp33-1-clr.txt done /dev/null 2>/dev/null & } function kill() { SLEEP_TIME=$1 CLR_LIST=$2 BLACK_LIST=$3 while read blackip;do iptables -I FORWARD 2 -i eth0 -s $blackip/32 -j DROP done <$BLACK_LIST sleep $SLEEP_TIME #-----------------------------------# while read clr3;do clr_conns $clr3 done <$CLR_LIST #-----------------------------------# sleep 1 while read reblackip;do iptables -D FORWARD -i eth0 -s $reblackip/32 -j DROP done <$BLACK_LIST } ##################################### ##--------------- To make a "black list" ----------------------## ##################################### echo > /tmp/tmp11.txt echo > /tmp/tmp111.txt echo > /tmp/ip_conntrack.tmp echo > /tmp/tmp33-3-clr.txt echo > /tmp/tmp33-2-clr.txt echo > /tmp/tmp33-1-clr.txt echo > /tmp/tmp22-3.txt echo > /tmp/tmp22-2.txt echo > /tmp/tmp22-1.txt echo > /tmp/tmp33-3.txt echo > /tmp/tmp33-2.txt echo > /tmp/tmp33-1.txt if [ ! -e /var/www/html/wwy/index.html ];then mkdir /var/www/html/wwy/ mkdir /var/www/html/wwy/all mkdir /var/www/html/wwy/drop 5B touch /var/www/html/wwy/index.html fi #----------------------------------------------------------------------------# echo -e "cp /proc/net/ip_conntrack /tmp/ip_conntrack.tmp ......\c" cp /proc/net/ip_conntrack /tmp/ip_conntrack.tmp echo -e "done!\n" sleep 1 #----------------------------------------------------------------------------# wc=`cat /tmp/ip_conntrack.tmp|grep ESTABLISHED|awk -F= '{print $2,$3,$4,$5}'|grep ^172. |sort|awk '{print $1,$3,$5,$7}'|tee /tmp/tmp111.txt|awk '{print $1}'|uniq -c|tee /tmp/tmp11.txt|wc -l` date=`date '+%m/%d %H:%M'` cpu2=`sar -u 1 1 | awk '{print $7}' | tail -1`% date2=`date '+%H'` #----------------------------------------------------------------------------# sleep 1 #----------------------------------------------------------------------------# #if [ "$wc" -gt 2500 ] && [ "$date2" -gt 10 ] if [ "$wc" -ge 0 ] then #------------------------------ awk '{$1}{if ($1>30 && $1<50) print $2}' /tmp/tmp11.txt > /tmp/tmp22-1.txt awk '{$1}{if ($1>=50 && $1<100) print $2}' /tmp/tmp11.txt > /tmp/tmp22-2.txt awk '{$1}{if ($1>=100) print $2}' /tmp/tmp11.txt > /tmp/tmp22-3.txt cut -c1-15 /tmp/tmp22-1.txt > /tmp/tmp33-1.txt cut -c1-15 /tmp/tmp22-2.txt > /tmp/tmp33-2.txt cut -c1-15 /tmp/tmp22-3.txt > /tmp/tmp33-3.txt wcblackip1=`cat /tmp/tmp33-1.txt | wc -l` wcblackip2=`cat /tmp/tmp33-2.txt | wc -l` wcblackip3=`cat /tmp/tmp33-3.txt | wc -l` ###################################### ##---------------- To make a index.html -----------------------## ###################################### echo "If the total IPs >2500 (total $wc at $date) AND if:" > /var/www/html/wwy/drop/index.html echo "

you connect \">100\", you ip will be killed in 30min.

" >>/var/www/html/wwy/drop/index.html echo "

you connect \"50-100\", you ip will be killed in 15min.

" >>/var/www/html/wwy/drop/index.html echo "

you connect \"30-50\", you ip will be killed in 10min.

" >>/var/www/html/wwy/drop/index.html echo "
" >> /var/www/html/wwy/drop/index.html echo "

These IPs (total $wcblackip3 + $wcblackip2 + $wcblackip1) were killed, at $date (look-up all IPs)

" >> /var/www/html/wwy/drop/index.html awk '{$1}{if ($1>=100) print $1, $2}' /tmp/tmp11.txt|sort -nr|awk '{print "

"""$1"""\t",""$2"""\t""kill 30min""

"}' >> /var/www/html/wwy/drop/index.html awk '{$1}{if ($1>=50 && $1<100) print $1, $2}' /tmp/tmp11.txt|sort -nr|awk '{print "

"$1"\t",""$2"""\t""kill 15min""

"}' >> /var/www/html/wwy/drop/index.html awk '{$1}{if ($1>30 && $1<50) print $1, $2}' /tmp/tmp11.txt|sort -nr|awk '{print "

"$1"\t",""$2"""\t""kill 10min""

"}' >> /var/www/html/wwy/drop/index.html echo "

You can \"ctrl + F\" to find your ip's connects.(total $wc IPs at $date)

" > /var/www/html/wwy/all/index.html echo "

<-- back

" >> /var/www/html/wwy/all/index.html cat /tmp/tmp11.txt | sort -nr | awk '{print "

"$1"\t",$2"\t""

"}' >> /var/www/html/wwy/all/index.html ##################################### ##----------------- Use iptables to DROP ---------------------## ##################################### make_clr if [ -s /tmp/tmp33-3.txt ];then kill 30m /tmp/tmp33-3-clr.txt /tmp/tmp33-3.txt & sleep 1s fi if [ -s /tmp/tmp33-2.txt ];then kill 15m /tmp/tmp33-2-clr.txt /tmp/tmp33-2.txt & sleep 1s fi if [ -s /tmp/tmp33-1.txt ];then kill 10m /tmp/tmp33-1-clr.txt /tmp/tmp33-1.txt & sleep 1s fi #------------------------------- elif [ "$date2" -lt 5 ] && [ "$date2" -gt 3 ] then while read clrall;do clr_conns $clrall done > /tmp/killip/tmp.log.txt fi ##################################### ##------------------- make system log ------------------------## ##################################### if [ ! -e /tmp/killip/tmp.log.txt ]; then mkdir /tmp/killip touch /tmp/killip/tmp.log.txt fi echo "$wc $date $cpu $cpu2 $wcblackip3 + $wcblackip2 + $wcblackip1" >> /tmp/killip/tmp.log.txt

推荐阅读
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
author-avatar
diuhunpo_813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有