每周一坑-生产环境出口流量报警排查

每周一坑-生产环境出口流量报警排查
  今天加班到7点,颇坑的,老板应该想把我弄死(这女的粗心,专业能力好菜,还不会分析问题,想问题不够全面),一路上他一直引导我如何挖掘问题本质,是个好老板,只能怪自己思考不周,下面是我总结好的经验,希望运维同胞们,别像我犯傻,然后要细心。幸好系统刚上线没造成什么影响。
  这个是我手写总结下来的:

 

   然后梳理如下:

  在17点26分快下班的时候,收到入口出口流量报警,老板叫我查下是什么情况,我第一反应是一并告诉电信WAF技术,看看是不是有攻击IP,后来WAF那边确实查到有两个IP是访问比较多

WAF技术查到的:

 

 

 

   老板第一件事想了解清楚服务器端口究竟开了什么,开的情况又是怎么样的,这些过来的IP是否都是从WAF上转过来的。

  怎么测试呢,在浏览器上输入这个报警服务器的公网IP,是否能访问到。当时测试的时候是可以的,现象是输入IP,IP会跳转到域名,虽然域名已经接入了WAF。当时我排查的时候,给安全组规则老板看,说80、443端口只开了WAF白名单,不应该会这样。

  这个问题会导致,很难判断出,攻击IP究竟是直接从WAF那边过来攻击的,还是直接对这个服务器公网IP进行攻击(虽然ping这个域名返回的是WAF的IP,但是很难说人家通过别的手段还是知道了服务器)。正常情况下,公网IP访问是不行的,如下图:

   后来从该服务器上查看iptables规则,下面这两条规则忘记注释(之前waf那边有问题,协助他们排查的时候临时给他们开,用完忘记关),以至于浏览器打开服务器公网IP,直接跳转到域名。

iptables,这两条忘记注释了

 正常来说应该只能是:

-A INPUT -s 【WAF白名单IP段】 -p tcp -d 【服务器内网IP地址】 --dport 80 -j ACCEPT

-A INPUT -s 【WAF白名单IP段】 -p tcp -d 【服务器内网IP地址】 --dport 443 -j ACCEPT

  说到这里必须提下,在天翼云上,只需要在安全组或者服务器iptables,两者选其一,去设置就能达到效果,但阿里的服务器就比较严格了,控制台的安全组和服务器iptables都要设置才能生效,开其一,就会全开放。

  没说两个公有云设置哪个更好,阿里的容易忘记改回来,毕竟两个同时禁止才生效,而天翼方便,但不够严格安全。

        另外排查过程中,不应该开ping,所以iptables加条这样的规则:

从系统默认的:-A INPUT -p icmp -j ACCEPT 改成

-A INPUT -p icmp -j DROP

  第二个问题,这些访问高的IP过来访问什么了?

  这个就要分析nginx日志了,先贴个nginx日志格式,用这个日志格式是因为能导入到elk5.2.1上,进而放到granfa分析日志

  log_format elk_logs
       '{"@timestamp":"$time_iso8601",'
    '"host":"$hostname",'
    '"server_ip":"$server_addr",'
    '"client_ip":"$remote_addr",'
    '"xff":"$http_x_forwarded_for",'
    '"real_remote_addr":"$real_remote_addr",'
    '"domain":"$host",'
    '"url":"$uri",'
    '"referer":"$http_referer",'
    '"upstreamtime":"$upstream_response_time",'
    '"responsetime":"$request_time",'
    '"status":"$status",'
    '"size":"$body_bytes_sent",'
    '"protocol":"$server_protocol",'
    '"upstreamhost":"$upstream_addr",'
    '"file_dir":"$request_filename",'
    '"http_user_agent":"$http_user_agent"'
    '}';

  这个是查报警时间段内,IP的数量

cat 日志名.log |  sed -n '/2022-10-11T17:00:18+08:00/, /2022-10-11T17:30:29+08:00/p' | cut -d '"' -f 20 | sort -nr |uniq -c |sort -nr

  特意说下时间段必须要精确,也就是说起始时间(2022-10-11T17:00:18+08:00),结束时间(2022-10-11T17:30:29+08:00)在nginx日志里,是能查到日志记录的,千万不要写成人为自以为有的但日志没有的,例如,2022-10-11T17:00:00+08:00和2022-10-11T17:30:00+08:00,我当时就是这样写,半天没有返回

 

   然后找WAF给来的两个访问特别高的IP,在这段时间访问了什么url,这个时候就有问题了,

cat Nginx日志 |  sed -n '/2022-10-11T17:00:18+08:00/, /2022-10-11T17:30:29+08:00/p' |grep  113.110.75.94 |cut -d '"' -f 32 |sort |uniq -c | sort -nr 

 

   然后老板就疑惑,WAF技术给来的IP访问的数量那么多,这里查不应该那么少,实际上是我后端nginx日志没开,只开了前端,我的锅

  为啥老板会想到查后端应用服务器的nginx日志,因为云监控看到这台服务器内网流量很高,这台服务器是没有公网ip的,出口是通过报警那台服务器出的,所以有可能是这个应用服务器做了什么,但由于当时我后端nginx日志没有配置,查不出什么,所以,嗯,怪我

   最后提醒下,nginx日志分析的那些命令,最好做个针对设置的nginx日志格式模板,这样拿来就用,我当时是直接数字段位置(通过双引号,人眼看在第几段),所以给老板看的时候挺慢的,而且忘记了时间要精确匹配,老板一度怀疑我是不会写命令的,问我是不是目录上没有这个文件(o(╯□╰)o  。。。 囧)

   另外我们外面还有个云防火墙,老板觉得在那里设置80,443白名单也有必要,明天问问阿里技术

洗洗睡,经一事长一智 = =

 

posted @ 2022-10-11 23:16  windysai  阅读(48)  评论(0编辑  收藏  举报