十四、监控脚本

server/2024/9/24 6:48:53/

14.1 Web服务器监控

应用场景:监控web服务器状态,异常时邮件报警。

脚本说明:通过wget(也可以用curl)监控服务器状态,如果不能正常访问,ping检测网

络,网络正常通知管理员检查服务,ping不通邮件通知管理员。

服务器列表使用数组,服务器状态函数使用返回值判断服务器是否异常。

[root@kittod ~]# cat server.sh
#!/bin/bash
#define var
RETVAL=0
FAILCOUNT=0
MAIL_USER="root@haha.com"
RED='\033[31m'
GREEN='\033[32m'
BLUE='\033[34m'
CLOSE='\033[0m'
#define server list
SERVER_ALL_LIST=(
192.168.91.128:80
192.168.91.129:80
192.168.91.130:80
)
SERVER_ALL_LEN=${#SERVER_ALL_LIST[*]}
#web detection function
LOG_FILE="/tmp/web_check.log"
function GetUrlStatus() {for ((j=1;j<=3;j++))dowget -T 10 --tries=1 --spider http://${1} > /dev/null 2>&1if [ $? -ne 0 ]thenlet FAILCOUNT+=1elseFAILCOUNT=0breakfidone[ $FAILCOUNT -gt 1 ] && RETVAL=1 || RETVAL=0return $RETVAL}function Send_Mail() {NowTime=$(date +"%Y-%m-%d %H:%M:%S")SC="http://${1} service is error,${NowTime}."mail -s "$SC" $MAIL_USER < ${LOG_FILE}}#service checki=0while [ $i -lt ${SERVER_ALL_LEN} ]doSERVER_IP=$(echo ${SERVER_ALL_LIST[$i]} | awk -F: '{print $1}')SERVER_PORT=$(echo ${SERVER_ALL_LIST[$i]} | awk -F: '{print $2}')echo -n -e "${BLUE} check ${SERVER_ALL_LIST[$i]}: ${CLOSE}" |tee
${LOG_FILE}if GetUrlStatus ${SERVER_ALL_LIST[$i]}thenecho -e "${GREEN} Server is working properly! ${CLOSE}"elif ping -c 1 $SERVER_IP > /dev/null 2>&1thenecho -e "${RED} ping ok,pls check service! ${CLOSE}" |tee
-a ${LOG_FILE}Send_Mail ${SERVER_ALL_LIST[$i]}elseecho -e "${RED} ping failure,pls Contact your administrator!
${CLOSE}" |tee -a ${LOG_FILE}Send_Mail ${SERVER_ALL_LIST[$i]}filet i++done#Delete temporary filesrm -f ${LOG_FILE}// 脚本执行及测试:{[root@kittod ~]# bash server.shcheck 192.168.91.128:80: ping ok, pls check service! check 192.168.91.129:80: Server is working properly!check 192.168.91.130:80: ping failure,pls Contact your
administrator邮件报警:(邮件中颜色无法显示)•[34m check 172.21.200.16:80: •[0m•[31m ping failure,pls Contact
your administrator! •[0m}// 其他检测方法:使用curl检测:function GetUrlStatus() {for ((j=1;j<=3;j++))doSERVER_STATUS_CODE=$(curl -o /dev/null -s -m 10 --connect-timeout-w %{http_code} "http://${1}")if [ ${SERVER_STATUS_CODE} -ne 200 ]thenlet FAILCOUNT+=1elseFAILCOUNT=0breakfidone[ $FAILCOUNT -gt 1 ] && RETVAL=1 || RETVAL=0return $RETVAL}使用nmap探测端口是否open判断服务是否异常:function GetUrlStatus() {for ((j=1;j<=3;j++))doSERVER_PORT_STATUS=$(nmap -P0 -p${SERVER_PORT} -sS -vv
${SERVER_IP} | grep ${SERVER_PORT} | tail -1 | awk '{print $2}')if [ "${SERVER_PORT_STATUS}" != "open" ]thenlet FAILCOUNT+=1elseFAILCOUNT=0breakfidone[ $FAILCOUNT -gt 1 ] && RETVAL=1 || RETVAL=0return $RETVAL}

14.2 安全脚本

自动化禁止恶意IP访问

应用场景:防止恶意IP尝试ssh登录。

脚本说明:将密码输入错误超过4次的IP地址通过iptables防火墙阻止访问。

分析:

1)首先,需要知道ssh远程访问记录在哪个文件中/var/log/secure

2)其次,模拟远程访问输错密码,查看日志文件

Dec 26 11:34:53 agent1 sshd[3060]: Failed password for root from 192.168.211.1

port 2075 ssh2

3)再次,通过日志可以看到关键信息“Failed password”表示密码错误

有可能是手误输错,所以就需要设定几次错误为恶意试探密码,建议设置为4

另一个关键信息是需要将密码错误的IP地址提取出来

对提取出来的IP地址进行统计次数

4)最后,需要明确怎么在脚本中通过iptables策略设置阻止恶意IP访问

策略添加到哪里合适

防火墙配置文件等


http://www.ppmy.cn/server/43038.html

相关文章

构造函数的用法

c 子类构造函数初始化及父类构造初始化_构造函数对父类进行初始化-CSDN博客

mac docker 安装mysql

在Mac上使用Docker安装MySQL的过程可以分为几个步骤&#xff0c;下面是详细的指南&#xff1a; 步骤1&#xff1a;安装Docker 确保你已经在Mac上安装了Docker。如果还没有安装&#xff0c;你可以访问Docker官网(https://www.docker.com/products/docker-desktop)下载Docker D…

JAVA面试题大全(十三)

1、Mybatis 中 #{}和 ${}的区别是什么&#xff1f; 在 MyBatis 中&#xff0c;#{} 和 ${} 是两种用于参数绑定的方式&#xff0c;它们之间的主要区别在于数据处理的方式和 SQL 注入的风险。 #{}&#xff1a;预编译处理 #{} 用于预编译处理&#xff0c;MyBatis 会为其生成 Prep…

C++实现的单例模式日志类

在实际生产中&#xff0c;日志是非常重要的调试工具&#xff0c;日志内容至少需要包括时间戳、日志级别、日志内容 推荐的日志库有&#xff1a; google/glog: C implementation of the Google logging module (github.com) Apache Log4cxx: Apache Log4cxx 自己实现的话&…

算法提高之线段树

算法提高之线段树 存储方式 线段树除了最后一层叶子节点以外是一个满二叉树类似堆的形式 因此可以用堆来存储线段树同时注意到 数组是可以模拟堆的 因此我们可以用一位数组来存储线段树 节点编号为u&#xff0c;对应左子树编号为2 * u&#xff0c;右子树编号为2 * u 1装逼一…

如何用 MoonBit 实现 diff?

你使用过 Unix 下的小工具 diff 吗&#xff1f; 没有也没关系&#xff0c;简而言之&#xff0c;它是一个比对两个文本文件之间有什么不同之处的工具。它的作用不止于此&#xff0c;Unix 下还有一个叫 patch 的小工具。 时至今日&#xff0c;很少有人手动为某个软件包打补丁了…

【全开源】答题考试系统源码(FastAdmin+ThinkPHP+Uniapp)

答题考试系统源码&#xff1a;构建高效、安全的在线考试平台 引言 在当今数字化时代&#xff0c;在线考试系统已成为教育机构和企业选拔人才的重要工具。一个稳定、高效、安全的答题考试系统源码是构建这样平台的核心。本文将深入探讨答题考试系统源码的关键要素&#xff0c;…

Golang | Leetcode Golang题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; func isSymmetric(root *TreeNode) bool {u, v : root, rootq : []*TreeNode{}q append(q, u)q append(q, v)for len(q) > 0 {u, v q[0], q[1]q q[2:]if u nil && v nil {continue}if u nil || v nil {return false}if …