shell习题第14题:
【题目要求】
需求,根据web服务器的访问日志,把一些请求高的ip给拒绝掉,并且每隔半小时把不再发起请求或者请求量很小的ip给解封
假设:
1. 一分钟内请求量高于100次的ip视为不正常的请求
2. 访问日志路径为/data/logs/access_log
取线上的Nginx日志作为练习
【核心要点】
统计ip访问次数,排序
如何标记每隔半个小时
iptables计数器是一个重要的判断标准
函数(封ip,解封ip)
【脚本】
block_ip()
{
t1=`date -d "-1 min" +%Y:%H:%M`
log=/data/logs/access_log egrep "$t1:[0-9]+" $log > /tmp/tmp_last_min.log
awk '{print $1}' /tmp/tmp_last_min.log | sort -n | uniq -c | sort -n | awk '$1>100 {pr
int $}' > /tmp/bad_ip.list
n=`wc -l /tmp/bad_ip.list | awk '{print $1}'`
if [ $n -ne ]; then
for ip in `cat /tmp/bad_ip.list`
do
iptables -I INPUT -s $ip -j REJECT
done
fi
} unblock_ip()
{
iptables -nvL INPUT | sed '1d' | awk '$1<5 {print $8}' > /tmp/good_ip.list
n=`wc -l /tmp/good_ip.list | awk '{print $1}'`
if [ $n -ne ];then
for ip in `cat /tmp/good_ip.list`
do
iptables -D INPUT -s $ip -j REJECT
done fi
iptables -Z
} t=`date +%M`
if [ $t == "" ] || [ $t == "" ];then
unblock_ip
block_ip
else
block_ip
fi
shell习题第14题:的更多相关文章
- shell习题第10题:打印每个单词的字数
[题目要求] 用shell打印下面这句话中字母数小于6的单词. Bash also interprets a number of multi-character options. [核心要点] for ...
- shell习题第7题:备份数据库
[题目要求] 设计一个shell脚本用来备份数据库,首先在本地服务器上保存一份数据,然后再远程拷贝一份,本地保存一周的数据,远程保存一个月 假设我们知道mysql root账号的密码,要备份的库为da ...
- shell习题第27题:带选项的增删用户脚本
[题目要求] 写一个支持选项的增加或删除用户的shell脚本 #!/bin/bash ]; then echo "Wrong, use bash $0 --add username, or ...
- shell习题第18题:检查新文件
[题目要求] 有一台服务器作为web应用,有一个目录(/data/web/attachment)不定时会被用户上传新的文件,但是不知道什么时候会被上传.所以,需要我们每5分钟做一次检测是否有新文件生成 ...
- shell习题第17题:检测磁盘
[题目要求] 写一个shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时候,发邮件提醒 [核心要点] df d ...
- shell习题第16题:查用户
[题目要求] 写个shell,看看你的Linux系统中是否有自定义的用户(普通用户),如有有的话统计个数 [核心要点] CentOS6,uid>=500 CentOS7,uid>=1000 ...
- shell习题第15题:看数字找规律
[题目要求] 请仔细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字 10 31 53 77 105 141... ... [核心要点] 计算两个数值之间的差值 [脚本] #!/bin/ ...
- shell习题第12题:批量创建用户
[题目要求] 用shell脚本实现如下需求 添加user_00 -- user_09 10个用户,并且给他们设置一个随机密码,密码要求10位包含大小写字母及数字,注意要把每个用户的密码记录到一个日志文 ...
- shell习题第11题:输入数字执行命令
[题目要求] 写一个脚本实现如下功能:输入一个数字,然后运行对应的一个命令 显示命令如下: *cmd menu* 1--data 2--ls 3--who 4--pwd 输入1时,会运行data [ ...
随机推荐
- spring-boot 定时任务需要注意的地方
spring-boot 跑定时任务非常容易 启动类上添加两个注解基本OK @EnableScheduling @EnableAsync 当然要记录的肯定不是这里的问题了 首先, fixedDelayf ...
- TCP/IP协议入门
TCP/IP协议入门 1. 简介 Transmission Control Protocol/Internet Protocol的简写,即传输控制协议/因特网互联协议.它是网络通信的一套协议集合. 先 ...
- APP界面架构设计
作为PM,信息架构和页面流的设计想必烂熟于心,当确定好产品战略层和范围层即为何种目标用户提供何种服务后,就要着手搭建功能架构,将目标功能通过良好的用户体验传递给用户,目的是高效解决用户痛点,从而实现价 ...
- Mac OS xshell xftp 替代工具-finalshell
安装步骤: 1,打开Mac 终端: 2,输入: curl -L -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_instal ...
- WinCE 开发问题:不支持 Open Generic 方法的 GetParameters。
WinCE中用的是Newtonsoft.Json.Compact.dll序列化Json的, 今天用Json解析类的时候, 提示异常:不支持 Open Generic 方法的 GetParameters ...
- 如何在国内使用google
而Google却一直坚持“机器算法”至上,让信息以公正的排序结果呈现,对于IT人员来说国内不能用google进行搜索是很痛苦的. 公司邮件介绍了一些方法,mark一下还是很有用的. http://ww ...
- Flask之加载静态资源
Flask之加载静态资源 1.加载css样式 <link rel="stylesheet" href="{{ url_for('static',filename=' ...
- C#中用委托实现C++的回调函数
C++中抓图回调函数 void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight, ...
- 生产订单BADI实例
转自:https://blog.csdn.net/wbin9752/article/details/7951390 以生产订单收货为例: 1.BADI的查找方法: SE38在程序中搜索关键字CL_EX ...
- cached占比过高
Linux手动释放缓存的方法Linux释放内存的命令:syncecho 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同的含义 ...