grep+sed+awk

1、防火墙知识回顾

第一次握手是以SYN置为1来执行的,故限制SYN扫描

3389 windows里远程服务端口

iptable的state来防御(作业):

原理:

state的状态,第一次连接是new的状态,第二次是es状态,本机要访问别的时候必须开启es,别人访问的时候是new的状态,故有效隔绝。

拓展:

state模块的描述下有四种,分别是ESTABLISHED、NEW、RELATED及INVALID,这两个分类是两个不相干的定义。例如在TCP/IP标准描述下UDP及ICMP数据包是没有连接状态的,但在state模块的描述下,任何数据包都有连接状态。

1、ESTABLISHED
(1)与TCP数据包的关系:首先在防火墙主机上执行SSH Client,并且对网络上的SSH服务器提出服务请求,而这时送出的第一个数据包就是服务请求的数据包,如果这个数据包能够成功的穿越防火墙,那么接下来SSH Server与SSH Client之间的所有SSH数据包的状态都会是ESTABLISHED。

(2)与UDP数据包的关系:假设我们在防火墙主机上用firefox应用程序来浏览网页(通过域名方式),而浏览网页的动作需要DNS服务器的帮助才能完成,因此firefox会送出一个UDP数据包给DNS Server,以请求名称解析服务,如果这个数据包能够成功的穿越防火墙,那么接下来DNS Server与firefox之间的所有数据包的状态都会是ESTABLISHED。
(3)与ICMP数据包的关系:假设我们在防火墙主机ping指令来检测网络上的其他主机时,ping指令所送出的第一个ICMP数据包如果能够成功的穿越防火墙,那么接下来刚才ping的那个主机与防火墙主机之间的所有ICMP数据包的状态都会是ESTABLISHED。
由以上的解释可知,只要数据包能够成功的穿越防火墙,那么之后的所有数据包(包含反向的所有数据包)状态都会是ESTABLISHED。

2、NEW
首先我们知道,NEW与协议无关,其所指的是每一条连接中的第一个数据包,假如我们使用SSH client连接SSH server时,这条连接中的第一个数据包的状态就是NEW。

3、RELATED

RELATED状态的数据包是指被动产生的数据包。而且这个连接是不属于现在任何连接的。RELATED状态的数据包与协议无关,只要回应回来的数据包是因为本机送出一个数据包导致另一个连接的产生,而这一条新连接上的所有数据包都是属于RELATED状态的数据包。

4、INVALID

INVALID状态是指状态不明的数据包,也就是不属于以上三种状态的封包。凡是属于INVALID状态的数据包都视为恶意的数据包,因此所有INVALID状态的数据包都应丢弃掉,匹配INVALID状态的数据包的方法如下:
iptables -A INPUT -p all -m state INVALID -j DROP
我们应将INVALID状态的数据包放在第一条。

2、针对linux的日志分析

文本处理的编程语言:awk -------Linux自带的

1、grep

常用字符串的分解

1.1命令参数(了解)

在kaili的test.txt随便写东西

grep -A2 b test.txt ---------A2匹配完并把后面的显示出来

A1匹配几行,做数据清洗的时候,找关键字,把后面的拿出来

保证独一无二。

B1:往后

A1:往前

C1:前后

c:统计行数

e:多行的匹配

in :忽略大小写显示行号

-v:取反 相当于正则表达式的[^]

-W:匹配整个单词

https://regex101.com

o:仅显示匹配的字符串

-E:扩展正则表达式

.:除了空行

2、正则表达式

2.1、什么是正则表达式

独立成型的语言 状态机有NFA、DFA(不要求掌握),可以进行回溯,匹配不上往前走,实在匹配不上在结束

用于数据清洗、爬虫。

用途:

1、检测号码的合法性

2、检测邮箱的合法性

3、把文本指定的单词替换为两一个单词

可以用input表单来检测

2.2、(案例分析)

import re
f = re.findall('javascpript',a)
print(f)
result = re.findall('[^0-9]',a)
result1 = re.findall('\d+',a)
print(result.result1)

d:元字符

[abc]或a,b,c

[^cf]取反,非c或f的关系

[c-f]范围

a[^c-f]c ,s   abc,agc   cdef   加s后把cf 排除掉了

\n\r 换行和回车

\t垂直制表符

.除了/n以外对的所有字符

\d:数字

\D:非数字

\w:匹配非单词字符\n\t\r

\s:不包括空白字符

.:除了换行符的所有字符

\s:全部匹配除了空格

单词的开头和结束都是有结束符的(单词的边界)

贪婪和非贪婪的匹配规则:

默认贪婪匹配

非贪婪匹配后加?

+:一次到多次

*:0次到多次

?:n出现0次或1次

边界

r = re.findall('^\d{4,8}')    //匹配到8位结束

^:开头

$:结尾

.*:其中的任意字符

2.3匹配模式

没有re.i是匹配不上的,忽略大小写

re.S是点可以匹配换行符

re.M 不使用在一行中进行匹配,加上当作元字符,就可以匹配上了

(把他当作一整个整体)

2.4分组

.*:贪婪匹配直到完

.*?:

group(0)整体的匹配值

group(1)匹配里面的东西,括号里的东西第一句

group(2)第二句

2.5断言

断言有很多种叫法,比如环视,巡视,断言一共又分为四种:

x(?=y) 匹配’x’后面仅仅跟着’y’叫先行肯定断言

(?<=y)x 匹配’x’前面仅仅跟着’y’叫后行肯定断言

x(?!y) 当x后面不是y的时候匹配x叫先行否定断言

(?<!y)x当x前面不是y的时候匹配x叫后行否定断言

捕获的东西要进行存储

先行后行会匹配中间

result = re.search('(?<=(href=")).{1,200}(?=(">))',a)

只匹配href=后,>前

2.6扩展正则表达式

分组向后引用

grep "\(H.\{4\}\) world \1" reg8  括号里是第一个分组,第二个是正则所匹配的结构

2、sed

流编辑器,匹配到后会在输出一次

先放入模式空间

3.1常用的options选项

d:删除

p:先把匹配值输出,在输出原文

sed "/aaa/p"   test.txt
sed -n "/aaa/p"   test.txt     只匹配值输出

-e:多点编辑 :A替换a -g全替换

sed -e "s/aa/A"  -e "s/b/B"  test.txt   

-f:先把规则写道文件里在通过文件进行匹配

-i:原始文件就被修改了

3.2地址界定演示

sed "2s/B/b/g"   test.txt    把B替换成小b,全替换
sed -n "/AA,/BB/p"  test.txt
sed "1~2s/[aA]/E/g"   demo   将奇数

3.3编辑命令command演示

a:在指定行后面追加文本,支持使用\n实现多行追加

i:在行前面插入文本,支持使用\n实现多行追加

c:替换行为单行或多行文本,支持使用\n实现多行追加

w:保存模式匹配的行至指定文件

r:读取指定文件的文本至模式空间中匹配到的行后

\u:把replacement字母转换成大写,直到\L或\E出现。

倒序

seq 9 | sort -nr

3.4sed的高级指令

h:把模式空间中的内容覆盖至保持空间中

g:保持空间追加到模式空间

d:模式空间的值删除

sed 9 | sed -n "n;p"     打印偶数

vmstat 监控命令空间

显示奇数行

grep sed awk

作业:

cat test.txt
sed -n "/AA/,/cc/p" test.txt
sed -n "/AA/,/DD/p" test.txt
sed -n "/AA/,/BB/p" test.txt 没有匹配到下一行

原因,因为p是以BB结尾的当出现第一次BB时候该命令已经终止了。

3、awk

awk -F: ‘{print $1}’ /etc/passwd 第一行

4.3内置变量

$NF:切片

awk -F:’{print NF-1}’ 倒数第二列

4.4自定义变量

awk -v name="along" -F:'{print name":"}'    没写完

4.5

cat /etc/passwd | awk -F:’!(/base$/)’{print $1}

条件表达式

4.6 for循环

显示每个单词的长度

awk -F:’{for(i=1;i<=NF;i++){print i , l e n g t h ( i,length( i,length(i)}}’ awkdemo

5、日志分析

cat  access_log | awk'{print $1}' | sort -nr | uniq =c

日志分割

cat  access_log | awk'{print $1}' | sort -nr | uniq =c | head -10

排名前十的

下载文件

$11是

$9状态码

cat access_log | awk '{counts[$(9)]+-1}; END{for(code in counts) print code,counts[code]}'     打印状态码和命名次数
netatat -nat | awk '{print $5,$6}' | sort| uniq -c | sort -rn  查看三次握手

4、防御脚本

作业:作业写一个定时

#!/bin/bash
# 日志文件路径
logfile=/var/log/httpd/
last_minutes=1 
# 开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
start_time=`date -d"$last_minutes minutes ago" +"%d/%m/%Y:%H:%M:%S"`
echo $start_time
# 结束时间现在
stop_time=`date +"%d/%m/%Y:%H:%M:%S"`
echo $stop_time
cur_date="`date +%d/%m/%Y`"
echo $cur_date
# 过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径
tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,2);if(t>=st && t<=et){print $1}}' |sort | uniq -c | sort -nr > $logfile/log_ip_top10
#ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
# 出现横杠使用sed去掉第一行
#sed -i '1d' $logfile/log_ip_top10    
# 单位时间[1分钟]内单ip访问次数超过200次的ip记录入black.txt
ip=`cat $logfile/log_ip_top10 | awk '{if($1 > 100)print $2}'`
for line in $ip
do
echo $line >> $logfile/getip.txt
echo $line
iptables -I INPUT -p tcp  -m multiport --dport 80,443 -s $line -j DROP
done

防止ssh扫描

cat /var/log/secure | awk ‘/Failed password/{print$11}’

登录失败统计出来超过五次以上立刻放进防火墙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值