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

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十