CentOS7 下一个利用安全日志和防火墙防止暴力破解的SHELL脚本
#!/bin/bash
#第一次运行创建记录文件
-f 1.txt || touch 1.txt
while :
do
#查看日志中登陆失败的ip次数超过10次的用户ip
fip=<code>awk '/Failed/{ip[$11]++;}END{for (i in ip){if (ip[i]>10){print i}}}' /var/log/secure</code>
#循环取出登陆失败超过十次的ip进行处理
for i in $fip
do
#查看处理记录文件如果该ip没有存在处理记录中说明是没有处理过该ip
a=<code>awk -F: -v i=$i '$2==i{print}' 1.txt | wc -l</code>
#如果有查到结果则说明已经处理过该ip
if [ "$a" -ne 0 ]
then
echo "服务器安全"
else
#将新的***ip加入防火墙阻止(方入drop的区域则该ip发送的数据包会立刻丢弃不做回应)区域
firewall-cmd --zone=drop --add-source=$i && echo "成功将:$i:加入防火墙block区域" >> 1.txt
fi
done
#120s执行一次
sleep 120
done
CentOS7开放端口脚本
#!/bin/bash
systemctl status firewalld > /dev/null;
echo "input port:$1"
if [ $? -eq 0 ] # 判断上条命令执行结果是否为0()
then
echo "now open port :"
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --query-port=$1/tcp > /dev/null #查看端口号是否存在,存在返回yes,不存在返回no
if [ $? -ne 0 ] # 判断上一条命令执行状态不为0,即:端口未开放。(上一条执行输出yes时.端口打开.执行状态为0)
then
firewall-cmd --zone=public --add-port=$1/tcp --permanent > /dev/null
firewall-cmd --reload > /dev/null
echo "new open port :"
firewall-cmd --zone=public --list-ports
else
echo "port $1 is alread opened!"
fi
fi
ping脚本
#ping
for IP in <code>cat IP.txt</code>
do
ping -c 1 -i 0.2 -W 1 $IP &> /dev/nall
#-c 设定尝试的次数,-i 每个数据发送的间隔,-W 超时等待的时间,/dev/nall是将结果存入黑洞中。
if [ $? -eq 0 ]
#判断上面的结果是否为正确,正确为0,错误为1。
then
echo "$IP yes "
echo $IP &>> yes.txt
else
echo "$IP no "
echo $IP &>> no.txt
fi
done
获取打印多个日志文件内的首位的时间,比对分割多个日志的时间内容
for i in a.txt b.txt c.txt ; do echo $1 && sed -n '1p' $i |awk -F '[-#,]' '{printf strtime("%Y%m%d-%H%M",substr($3,0,10))}" "' && do tail -n 1 $i |awk -F '[-#,]' '{print strtime("%Y%m%d-%H%M",substr($3,0,10))}' ;done
#写成一行,方便随时使用
#-#,为多个分隔符 awk支持用多个分隔符
#获取首尾或其他行 使用 sed head tail (如果首尾有几行不是正文的,用sed指定行)
#substr 是awk内部命令 ,将毫秒unix时间的后三位去掉(转秒),再用strtime转格式化
for循环多次执行任务
for i in {1..100} ;do ls ;done