zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

Shell脚本防攻击一例

攻击shell 脚本 一例
2023-09-11 14:20:55 时间

不知道得罪了哪路神仙,收到nagios报警,发现有个网站有CC攻击。看样子,量还不小,把服务器的负载都弄到40+了,虽然网站还能打开,但打开也是非常的缓慢。如果不是配置高点,估计服务器早就挂掉了。看来又是不一个不眠之夜了。

迅速查看一下nginx的访问日志

#tail -f access.log

貌似全是像这样的状态。

我先紧急手动封了几个访问量比较大的Ip。


#iptables -A INPUT -s 83.187.133.58 -j DROP  #iptables -A INPUT -s 80.171.24.172 -j DROP  ......

紧急封了几个ip后,负载降了一些了,网站访问速度有所提升了,但是不一会,又来了一批新的Ip, 受不了了,看来要出绝招了。写了shell脚本,让他逮着了,就封。发现他攻击的状态都相同,每一个攻击ip后面都有 HTTP/1.1" 499 0 "-" "Opera/9.02 (Windows NT 5.1; U; ru) 的字段,那我们就来搜这个字段。


sleep 1  x=`tail -500 access.log |grep HTTP/1.1" 499 0 "-" "Opera/9.02|awk {print $1}|sort -n|uniq`  if [ -z "$x" ];then  echo "kong"  /dev/null  else  for ip in `echo $x`  real=`grep -l ^$ip$ all`  if [ $? -eq 1 ];then  echo iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP  iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP  echo $ip  all  done 

脚本写好了。如图

我们来运行一下,运行几分钟后,如下图所示

经过半个小时的观察,服务器负载也降到0.几了,脚本也不断在封一些CC攻击的ip。

一直让他运行着,晚上应该能睡个好觉了。

下来我们来对脚本进行解释一下。


Touch all    #建立all文件,后面有用到  for i in `seq 1 32400` #循环32400次,预计到早上9点的时间  sleep 1  x=`tail -500 access.log |grep HTTP/1.1" 499 0 "-" "Opera /9.02|awk {print $1}|sort -n|uniq` #查看最后500行的访问日志,取出包含 HTTP /1.1" 499 0 "-" "Opera/9.02 的行的ip并排序,去重复  if [ -z "$x" ];then  echo "kong"  /dev/null #如果$x是空值的话,就不执行操作,说明500行内,没有带 HTTP/1.1" 499 0 "-" "Opera/9.02 的行  else  for ip in `echo $x` #如果有的话,我们就遍历这些ip  real=`grep -l ^$ip$ all` #查看all文件里有没有这个ip,因为每封一次,后面都会把这个ip写入all文件,如果all文件里面有这个ip的话,说明防火墙已经封过了。  if [ $? -eq 1 ];then #如果上面执行不成功的话,也就是在all文件里没找到,就用下面的防火墙语句把ip封掉,并把ip写入all文件  echo iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP  iptables -A INPUT -s $ip -p tcp --dport 80 -j DROP  echo $ip  all  done 


====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/


shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份 在基于 `k8s` 平台的容器化部署环境中,有时候需要快速的实现部署文件的迁移备份,当 `k8s` 平台部署一个 `app` 时,都会相应的产生一堆 `yaml` 文件,如果 `yaml` 文件数量较少,我们可以人工手动的方式进行拷贝,但是当 `yaml` 文件数量多,并且该 `k8s` 平台部署了多个 `app` 时,如果在采用...
《Shell 脚本速查手册》电子版地址 编写Bash脚本耗时长?不稳定?有妙招!阿里云开发者社区和linux中国开源社区联手推出《Shell脚本速查手册》,为运维工程师提供一个快速、便捷的查询手册,以共开发者查询自己日常工作中常用的命令和脚本。
使用Shell脚本进行语句循环 除了上一篇文章介绍的if条件语句之外,(本文不再介绍if条件语句,感兴趣的小伙伴可以参考上一章介绍的​ ​使用Shell脚本进行条件测试​​)作为一种脚本编程语言,Shell同样包含循环,分支等其他程序控制结构,从而能够轻松完成更加复杂,强大的功能。本文将介绍for、while、case语句的具体应用。
使用Shell脚本进行条件测试 ⭐本文介绍⭐ 在简单的Shell程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程,然而,单一的顺序结构使得脚本过于机械化,不够 智能 ,难以处理更加灵活得系统任务。本文将学习如何进行条件测试,并通过正确使用if语句,使Shell脚本具有一定得 判断 能力,以根据不同得的条件来完成不同的管理任务。
使用Shell脚本安装MySQL(二) ⭐本文介绍⭐ 随着Linux系统在企业中的应用越来越多,服务器的自动化管理也变得越来越重要。在Linux服务器的自动化维护工作中,除了计划任务的设置以外,Shell脚本的应用也是非常重要的一部分。本文将主要介绍Shell脚本的基础,变量使用等知识。
Shell 脚本的编写总结 这篇文章主要是为了记录一下Shell脚本的使用语法,前几天写了一个shell脚本,其中,也遇到了一些语法不清楚的情况,在此记录一下已备后续使用