linux 字符串截取_第13篇:Linux防火墙的日志基本审计
整个Linux日志管理,大体上就分为三个管理区块:日志的采集以及分析、轮转
- rsyslog是一个系统的守护进程,绝大部分和操作系统有关的日志,例如系统安全、认证,计划任务等等都由该进程完成。
- 还有一些第三方的日志管理,例如nginx,httpd、mysql这些常用的网络服务有自己的日志记录方式,跟rsyslog没有半点关系。
当然本文主要讨论有关rsyslog的日志分析方法。
查看日志的常用命令
tail /var/log/iptables.log //动态查看日志
tail -20 /var/log/iptables.log //查看日志的尾部20行
cat /var/log/messages //静态查看日志
例如:需要找到前10个多次恶意扫描我服务器的恶意ip,可能你会想到是使用
grep 'tcp_traffic_deny' /var/log/iptables.log | grep enp3s0
但事实上,这条指令并不符合我们的期望
根据上图的指示,我们要查找的是源ip地址,即每条抽取日记记录中SRC=紧接的ip地址字符串,此时,可以想到有两种方法。一种方案是 awk命令,另外一种是grep配合正则表达式。
方法1:grep 过滤出tcp_traffic_deny相关的条目,并通过管道传送到awk命令,{print $9}表示仅打印第9列的记录。
grep 'tcp_traffic_deny' /var/log/iptables.log | grep enp3s0 | awk '{print $10}'
嗯,这下有些靠谱列,但仍然有些不完美,因为我们必须将SRC=这段字符去掉。
要实现这个目标,awk命令内部有一个substr用于截取字符串的。那么上面的命令可以
grep 'tcp_traffic_deny' /var/log/iptables.log | grep enp3s0 | awk '{print substr($10,5)}'
这里出现已经经过awk的过滤,我们得到打印的ip地址列表,
但这里的ip地址很可能出现重复的。因此,我们可以对上面的命令追加 sort | uniq -c | sort -k1 -n -r ,追加的命令是什么意思呢?
- 首先 sort对上面打印的ip地址列表进行排序(按照ip地址第一个字符数字执行升序排列)
- 然后uniq -c命令对sort排列后的ip地址列表统计每个ip地址重复的次数。例如下图中的ip地址列表的第一列就是每个ip地址的重复出现的次数,这样间接去重并统计。
- 最后对上图的ip地址列表,通过sort -k1 -n -r命令执行排序,但需要注意的是排序的依据是通过第一列计数列执行排序(命令选项 -k1就干这事),-n选项表示垂直按列排序,-r表示降序排列
那么整个完整命令如下所示
grep 'tcp_traffic_deny' /var/log/iptables.log | grep enp3s0 |
awk '{print substr($10,5)}'| sort | uniq -c | sort -k1 -n -r
那么最终的效果,如下图所示,这里很容易就让Linux管理员知道,119.92.188.101这个ip地址尝试37次恶意连接我的Linux主机,其次就是49.232.243.119有16次干了这事。
当然我们最终的想要的结果是要前10个的统计结果,追加 head -10命令即可。
还有另外一种方法就是使用正则表达式,我们只需匹配ip地址表达式,能将上面的代码大大简化,这个留给读者自行去思考。
同理,我们对来自udp异常的流量日志进行分析,可以使用类似的命令
grep 'udp_traffic_deny' /var/log/iptables.log | grep enp3s0 | awk '{print substr($10,5)}' | sort | uniq -c | sort -k1 -nr | head -20
来自公网接口enp3s0的udp异常请求,通常是一些随机端口的臭探数据包。
小结:
由于笔者的Linux主机作为一台纯粹防火墙使用,因此Linux主机本身并不对外公开所有端口,作为一台防火墙一定要明确它的定位就是转发或过滤不安全的数据包。在笔者的所在单位仅开放80、443、123、53这些源端口让内网的所有计算机访问外网。还有一些大于1024的非标准端口经过安全审计也会有条件地放行。对于一些来历不明的外部IP地址多次连接请求,笔者一律采取丢弃并拉入黑名单处理。而要得到这些IP地址的黑名单就需要上面介绍到的日志分析方法了。
linux 字符串截取_第13篇:Linux防火墙的日志基本审计相关推荐
- linux编程基础_第1篇 Linux系统编程 -多线程基础
进程 在理解线程之前,首先需要了解UNIX/Linux进程. 进程是由操作系统创建的,需要相当数量的"开销". 进程包含有关程序资源和程序执行状态的信息,包括:它是一个在随机访问内 ...
- Linux 字符串截取命令
Linux 字符串截取,一般用在 shell 脚本中,本篇写几个简单的 demo 跟大家分享一下 首先,定义一个变量 demo=https://blog.csdn.net/ 1.使用 # 号截取,删除 ...
- Linux字符串截取
Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 复制代码代码如下: echo ...
- linux 内存管理_真香!Linux 原来是这么管理内存的
这是 Linux 系列第三篇文章,前两篇文章如下 程序员cxuan:初识 Linux 系统,就这一篇了!zhuanlan.zhihu.com 程序员cxuan:Linux 进程必知必会zhuanl ...
- linux查看内存_盘点腾讯linux C++后台开发面试题
鹅厂是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言,之前面试Java的公司侧重还是在数据结构.网络.框架.数据库和分布式.所以O ...
- linux man手册_读书笔记:Linux命令行与shell脚本编程大全 第一章~第五章
第一章 初识Linux shell 1.系统内存管理 在Linux中使用的是请求分页的管理方式. 2.软件程序管理 Linux内核创建了第一个进程(init进程)来启动系统上所有其他进程. 3.硬件设 ...
- linux磁盘扩容_超详尽!Linux云服务器存储扩容实操
导语 | 随着业务的发展,业务数据不停的增长,原有的磁盘空间可能会出现磁盘空间不够用的情况,因此,需要对磁盘空间进行扩容,以满足业务数据增长的需求.本文总结了Linux环境下云服务器存储扩容的三种方式 ...
- mysql 截取字符串部分值,Mysql字符串截取_获取指定字符串中的数据
搜索热词 前言:本人遇到一个需求,需要在MysqL的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index('ww ...
- linux 字符串截取_linux下可执行文件分析
一 背景 也许大家都遇到过这种场景,就是有二进制代码,比如深度分析下此文件到底是什么格式的图片等,这篇文章就记录我分析下二进制可执行文件的过程,已经自己读写二进制文件的一些坑.分析的二进制执行文件为l ...
最新文章
- Android常用知识点回顾
- 51Nod-1046 A^B Mod C【快速模幂】
- Vue Iview Tree插件的无限层
- android 使用AIDL实现进程间通讯
- java的沙盒安全模式_Java沙箱机制
- python爬去百度百科词条_python简单爬虫爬取百度百科python词条网页
- 边缘AI计算新时代,人工神经网络秒变脉冲神经网络
- BZOJ3653 洛谷3899:谈笑风生——题解
- 设计模式之观察者模式
- 基于log4net的支持动态文件名、按日期和大小自动分割文件的日志组件
- 基于Spring Boot 的统一错误处理
- 将php中stat()得到的文件权限转成Linux形式
- Genotype陨石的秘密
- 关于ramp texture的使用
- 半同步/半异步模式,半同步半反应堆reactor模式
- 迁移公众号和个人博客
- 移动端网页的基础制作
- PMbok 全书串讲
- WindowsForm 入门
- 2022陕西清北录取人数排名,西工大附中遥遥领先,高新一中40人
热门文章
- Swift开发实例:苹果Swift编程语言新手教程中文版+FlappyBird,2048游戏源代码
- js 解析url中search时存在中文乱码问题解决方案
- 关于WS-PSNR、S-PSNR、CPP-PSNR
- 第八周PLC编程练习
- VB.Command()的参数
- 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)...
- 10-11-根据文章标题搜索文章
- python tensorflow教程_TensorFlow入门教程
- file.delete删除不了文件_巧用磁盘清理,彻底清除Windows系统垃圾文件
- java jstat结果分析_JVM调优总结 + jstat 分析