shell - 计数, 日志查询访问量高的IP, iptable查访问包数, 按时间实施iptables命令

本文主要是介绍shell - 计数, 日志查询访问量高的IP, iptable查访问包数, 按时间实施iptables命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

计数

  • 在需要实现一些独立的需要计数的功能时,可以以子程序的形式实现
  • 使用for循环加if语句实现
  • 下面的子程序实现,检测五次是否,成功启动,一次成功则回到主程序,如果5次都不成功就发出报警邮件并退出程序;
check_service ()
{n=0for i in `seq 1 5`doservice httpd restart 2> /tmp/apache.errif [ $? -ne 0 ]thenn=$[$n+1]elsebreakfidoneif [ $n -eq 5]thenpython mail.py "*@163.com" "httpd service down" `cat /tmp/apache.err`exitfi
}

日志查询访问量高的IP, iptable查访问包数, 按时间实施iptables命令

参考日志
127.0.0.1 - - [30/Oct/2019:22:09:03 +0800] "HEAD /bc.html HTTP/1.0" 200 0 "-" "curl/7.29.0" "127.0.0.1" 
127.0.0.1 - - [30/Oct/2019:22:09:16 +0800] "GET /bc.html HTTP/1.0" 200 18 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15" "192.168.87.1" 
127.0.0.1 - - [30/Oct/2019:22:10:12 +0800] "HEAD /bc.html HTTP/1.0" 200 0 "-" "curl/7.29.0" "127.0.0.1" 
127.0.0.1 - - [30/Oct/2019:22:10:44 +0800] "GET /bc.html HTTP/1.0" 200 18 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15" "192.168.87.1" 
192.168.87.1 - - [30/Oct/2019:22:11:57 +0800] "GET /bc.html HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15" "-" 
192.168.87.1 - - [30/Oct/2019:22:11:57 +0800] "GET /favicon.ico HTTP/1.1" 404 169 "http://192.168.87.133:8080/bc.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15" "-" 
127.0.0.1 - - [30/Oct/2019:22:12:48 +0800] "GET HTTP://127.0.0.1/bc.html HTTP/1.1" 200 18 "-" "curl/7.29.0" "-" 
127.0.0.1 - - [30/Oct/2019:22:14:52 +0800] "GET HTTP://www.test.com/bc.html HTTP/1.1" 200 18 "-" "curl/7.29.0" "-" 
127.0.0.1 - - [30/Oct/2019:22:26:17 +0800] "HEAD /bc.html HTTP/1.0" 200 0 "-" "curl/7.29.0" "127.0.0.1" 
127.0.0.1 - - [30/Oct/2019:22:26:22 +0800] "GET /bc.html HTTP/1.0" 200 18 "-" "curl/7.29.0" "127.0.0.1" 
[root@second ~]# grep "2019:22:" !$ |awk '{print $1}' |sort -n|uniq -c
grep "2019:22:" /data/logs/b.log |awk '{print $1}' |sort -n|uniq -c9 127.0.0.14 192.168.87.1
  • 使用时间可以区分出1分钟里的行数,或其他需要的时间;
  • 加长筛选项可避免把不相关的行加进来;
前一分钟的日志
date=`date -d "-1 minute" +%Y:%H:%M`
grep "$date" 
把访问次数高于某个数值的IP找出来
[root@second ~]# grep "2019:22:" /data/logs/b.log |awk '{print $1}' |sort -n|uniq -c | awk '$1>5 {print $2}'
127.0.0.1
封80端口的命令
/sbin/iptables -I INPUT -p tcp --dport 80 -s $IP -j REJECT
  • 对某个iptables操作的筛选
    下面是查找被封80访问的IP,访问正常后解封
[root@second ~]# iptables -I INPUT -p tcp --dport 80 -s 192.168.87.150 -j REJECT 
[root@second ~]# iptables -nvL   #有其他链的信息,需要进一步筛选;
Chain INPUT (policy ACCEPT 7 packets, 488 bytes)pkts bytes target     prot opt in     out     source               destination         0     0 REJECT     tcp  --  *      *       192.168.87.150       0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 9 packets, 784 bytes)pkts bytes target    a prot opt in     out     source               destination    
[root@second ~]# iptables -nvL INPUT --line-numbers   #可以查到需要信息,带编号;
Chain INPUT (policy ACCEPT 474 packets, 33552 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     tcp  --  *      *       192.168.87.150       0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable
[root@second ~]# iptables -nvL INPUT --line-numbers |grep "tcp dpt:80 reject"
1        0     0 REJECT     tcp  --  *      *       192.168.87.150       0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable
[root@second ~]# iptables -nvL INPUT --line-numbers |grep "tcp dpt:80 reject" |awk '$2<10 {print $1}'   #把规则的条数列出来;
1
[root@second ~]# iptables -nvL INPUT --line-numbers |grep "tcp dpt:80 reject" |awk '$2<10 {print $1}' | sort -nr   #如果多条规则要从最后开始删除,删除后规则编号不变;
1
删除的规则
/sbin/iptables -D INPUT $bianhao
/sbin/iptables -Z   #清除规则后重新计数,用于下一次统计;
每分钟根据日志访问量封IP,每半小时按iptables统计访问包数解放IP(任务计划,每分钟实施)min=`date +%M`
if [ $min == "00" ] || [ $min == "30" ];thenunblock  #子程序,要先解封;block    #子程序,如果先封IP,新封IP iptable统计包数很少,会被解封;elseblock
fi

这篇关于shell - 计数, 日志查询访问量高的IP, iptable查访问包数, 按时间实施iptables命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816224

相关文章

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n