CentOS7下利用自带防火墙+Nginx封堵高频访问的恶意IP

本文涉及的产品
云防火墙,500元 1000GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: CentOS7下利用自带防火墙+Nginx封堵高频访问的恶意IP


0x01 调整时间格式

首先:查看nginx的默认日志的时间格式

    [root@VM-0-13-centos ~]# more /var/log/nginx/access.log


    时间格式是:28/Jul/2021:03:36:02 +0800

    这个格式在写shell脚本的时候,date命令无法识别,所以我们需要更改nginx默认的日期格式。


    开始调整nginx的日志时间格式,找到nginx的配置文件:

      [root@VM-0-13-centos ~]# find / -name "nginx.conf"


      默认的日期格式如下:


      需要修改日期格式,修改如下

        log_format json '{"@timestamp":"$time_iso8601",'
                            '"clientip":"$remote_addr",'
                            '"request":"$request",'
                            '"http_user_agent":"$http_user_agent",'
                            '"size":"$body_bytes_sent",'
                            '"responsetime":"$request_time",'
                            '"upstreamtime":"$upstream_response_time",'
                            '"upstreamhost":"$upstream_addr",'
                            '"http_host":"$host",'
                            '"url":"$uri",'
                            '"domain":"$host",'
                            '"referer":"$http_referer",'
                            '"status":"$status"}';
            access_log  /var/log/nginx/access.log  json;


        重新加载nginx的配置文件,使配置生效:


        先查找可执行文件nginx的位置:

          [root@VM-0-13-centos nginx]# whereis nginx
          nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz


          测试配置文件是否正确:

            [root@VM-0-13-centos nginx]# /usr/sbin/nginx -t
            nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
            nginx: configuration file /etc/nginx/nginx.conf test is successful


            is ok  就表示配置文件没有问题。


            重载使配置文件生效:

              [root@VM-0-13-centos nginx]# /usr/sbin/nginx -s reload


              再次查看nginx日志:


              0x02 编写封堵脚本

                #!/bin/bash
                #脚本详解:查询出nginx日志中访问量异常的ip进行封禁
                #方法有很多可以利用nginx的deny方法,也可以采用iptables
                #我这里采用centos7自带的firewalld
                #nginx日志位置
                nginx_access_log=/var/log/nginx/access.log
                ip=/var/log/nginx/ip.txt
                #一分钟内ip访问量统计排序
                cat /var/log/nginx/access.log | grep `date -d "1 minutes ago" +"%Y-%m-%d"T"%H:%M"`|awk -F '"' '{ print $8 }'  |sort |uniq -c |sort -rn  > ip.txt
                for i in `awk '{print $1}' ip.txt`
                do
                  if [ $i -gt 300 ]; then #设置的阈值为一分钟300次,即平均每秒访问5次判定为黑客攻击,当然也可以按秒统计次数
                  denyip=`grep $i ip.txt | awk '{print $2}'`   # 找出IP
                  #iptables -I INPUT -s $denyip -j DROP    #利用iptables开始封堵
                firewall-cmd --permanent --add-rich-rule="rule family=ipv4 destination address=$denyip reject"
                #利用firewalld开始封堵
                firewall-cmd --reload    #重新加载防火墙的热配置文件,使策略生效
                  echo $denyip > denyip.txt  #记录封堵结果
                  fi
                done


                核心语句分析:

                  [root@VM-0-13-centos ~]# cat /var/log/nginx/access.log | grep `date -d "1 minutes ago" +"%Y-%m-%d"T"%H:%M"`|awk -F '"' '{ print $8 }'  |sort |uniq -c |sort -rn
                  1 150.223.27.195
                  1 114.118.7.124
                  


                  上面的执行结果分析:表示在执行脚本的前一分钟内,nginx日志的每个ip的访问次数,前面的数字就是访问次数,后面一列是访问的ip。


                  0x03 脚本放入计划任务

                    [root@VM-0-13-centos ~]# vim  /etc/crontab


                    每分钟执行一次脚本:

                    注意:这里的执行频率要与上面的日志统计时间间隔相对应。

                      */1 * * * *  root /root/fengduip.sh


                      0x04 测试脚本

                      通过循环的方式使127.0.0.1作为了异常访问的ip

                        [root@VM-0-13-centos nginx]# curl http://127.0.0.1

                        开始循环访问:

                          while true; do curl http://127.0.0.1; done

                          查看生成的日志:

                            [root@VM-0-13-centos nginx]# tail -20f /var/log/nginx/access.log

                            相关文章
                            |
                            2天前
                            |
                            负载均衡 Ubuntu 应用服务中间件
                            nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
                            通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
                            26 13
                            |
                            2月前
                            |
                            监控 网络协议 Shell
                            ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
                            这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
                            58 6
                            |
                            1月前
                            |
                            安全 Linux 网络安全
                            centos7中firewall防火墙的常用命令总结
                            以上命令集覆盖了 `firewalld`的基本操作,是维护CentOS 7系统安全不可或缺的工具。对于更高级的配置需求或遇到特定问题
                            35 3
                            |
                            2月前
                            |
                            应用服务中间件 Linux nginx
                            CentOS7安装Nginx
                            CentOS7安装Nginx
                            |
                            4月前
                            |
                            应用服务中间件 Linux 网络安全
                            2022年超详细在CentOS 7上安装Nginx方法(源码安装)
                            这篇文章提供了在CentOS 7系统上通过源码安装Nginx的详细步骤,包括从官网下载Nginx源码包、上传至虚拟机、解压、删除压缩包、编译安装前的配置、安装PCRE库(因为Nginx使用PCRE库解析正则表达式)、安装zlib和OpenSSL库(用于支持HTTPS协议)、重新编译Nginx、安装后启动Nginx服务、关闭服务、修改默认端口、以及重启服务测试等步骤。文章还提供了相关命令和操作截图,帮助用户更好地理解和执行安装过程。
                            2022年超详细在CentOS 7上安装Nginx方法(源码安装)
                            |
                            2月前
                            |
                            监控 应用服务中间件 nginx
                            详细解释容器以及虚拟机centos7.9容器化部署基础服务(容器化部署nginx)
                            容器是一种轻量级、可移植的软件打包和隔离技术,将应用程序及其依赖项打包,确保在任何环境中一致运行。容器共享主机操作系统内核,相比虚拟机更高效、轻量,具有快速启动和高资源利用率的特点。容器的关键技术包括命名空间(如 PID、NET 等)、控制组(cgroups)和联合文件系统(UnionFS)。使用容器可以提高开发和部署效率,简化管理,确保环境一致性。例如,在 CentOS 7.9 上部署 Nginx 时,可以通过 Docker 下载和运行 `nginx:1.20` 镜像,并通过端口映射使外部请求访问 Nginx 服务。此外,还可以将测试页面复制到容器中,进一步验证容器的功能。
                            |
                            4月前
                            |
                            应用服务中间件 Linux nginx
                            在CentOS上使用源码包安装Nginx、以及手动启动Nginx的步骤过程
                            这篇文章介绍了在CentOS系统上使用Nginx源码包进行安装和配置的详细步骤,包括源码包的获取、解压、配置、编译、安装、启动验证以及注意事项。
                            426 0
                            在CentOS上使用源码包安装Nginx、以及手动启动Nginx的步骤过程
                            |
                            4月前
                            |
                            应用服务中间件 Linux 网络安全
                            如何在 CentOS 6.5 上使用 Unicorn 和 Nginx 部署 Rails 应用
                            如何在 CentOS 6.5 上使用 Unicorn 和 Nginx 部署 Rails 应用
                            56 0
                            |
                            应用服务中间件 nginx
                            Nginx 服务器中设置禁止访问文件或目录的方法
                            Nginx 服务器中设置禁止访问文件或目录的方法
                            |
                            应用服务中间件 nginx
                            下一篇
                            DataWorks