云计算第二阶段:----监控与服务安全SECURITY

本模块内容,主要讲述 服务器的安全防护与配置软件相关知识。分为网络防护软件介绍、配置与使用用,网络安全相关知识浅度解析。

涉及软件有prometheus ,graphna,zabbix。

网络安全方面涉及基于debian linux系统的kali版本liunx的介绍与简单使用。


SECURITY DAY1

环境准备:

主机名 地址
zabbixserver 192.168.88.5/24
web1 192.168.88.100/24
web2 192.168.88.200/24

一、zabbix基础配置

监控概述

  • 对服务的管理,不能仅限于可用性。

  • 还需要服务可以安全、稳定、高效地运行。

  • 监控的目的:早发现、早治疗。

  • 被监控的资源类型:

    • 公开数据:对外开放的,不需要认证即可获取的数据
    • 私有数据:对外不开放,需要认证、权限才能获得的数据

zabbix

  • 实施监控的几个方面:

    • 数据采集:使用agent(可安装软件的系统上)、SNMP(简单网络管理协议,用于网络设备的数据采集)
    • 数据存储:使用mysql数据库
    • 数据展示:通过web页面
  • zabbix通过在远程主机上安装agent进行数据采集,存储到mysql数据库,通过web页面进行展示。

安装zabbix 6.0

1. 拷贝zabbix软件包到pubserver 目录的 /var/ftp/rpms 位置

2. 更新yum仓库配置

[root@pubserver ~]# createrepo -v /var/ftp/rpms/

3. 在pubserver上创建ansible工作环境

[root@pubserver ~]# mkdir -p zabbix/files

[root@pubserver ~]# cd zabbix/

[root@pubserver zabbix]# vim ansible.cfg

[defaults]

inventory = inventory

host_key_checking = false

[root@pubserver zabbix]# vim inventory

[zabbix]

zabbixserver ansible_host=192.168.88.5

[webservers]

web1 ansible_host=192.168.88.100

web2 ansible_host=192.168.88.200

[all:vars]

ansible_ssh_user=root

ansible_ssh_pass=a

4. 为各台主机配置yum

[root@pubserver zabbix]# vim files/local88.repo

[BaseOS]

name = BaseOS

baseurl = ftp://192.168.88.240/dvd/BaseOS

enabled = 1

gpgcheck = 0

[AppStream]

name = AppStream

baseurl = ftp://192.168.88.240/dvd/AppStream

enabled = 1

gpgcheck = 0

[rpms]

name = rpms

baseurl = ftp://192.168.88.240/rpms

enabled = 1

gpgcheck = 0

[root@pubserver zabbix]# vim 01-upload-repo.yml


  • name: config repos.d

hosts: all

tasks:

  • name: delete repos.d

file:

path: /etc/yum.repos.d

state: absent

  • name: create repos.d

file:

path: /etc/yum.repos.d

state: directory

mode: '0755'

  • name: upload local88

copy:

src: files/local88.repo

dest: /etc/yum.repos.d/

[root@pubserver zabbix]# ansible-playbook 01-upload-repo.yml

5. 在zabbixserver上安装相应软件包

[root@pubserver zabbix]# vim 02-inst-zabbix.yml


  • name: install zabbix

hosts: zabbix

tasks:

  • name: install zabbix # 安装软件包

yum:

name:

  • zabbix-server-mysql

  • zabbix-web-mysql

  • zabbix-nginx-conf

  • zabbix-sql-scripts

  • zabbix-selinux-policy

  • zabbix-agent

  • mysql-server

  • langpacks-zh_CN

state: present

[root@pubserver zabbix]# ansible-playbook 02-inst-zabbix.yml

6. 启动mysqld服务

[root@pubserver zabbix]# vim 03-start-mysqld.yml


  • name: config mysqld

hosts: zabbix

tasks:

  • name: start mysqld # 启动mysqld服务

service:

name: mysqld

state: started

enabled: yes

[root@pubserver zabbix]# ansible-playbook 03-start-mysqld.yml

7. 在zabbix上创建连接数据库的用户

[root@zabbixserver ~]# mysql

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;

在binlog日志开启的情况下,打开函数生成器

mysql> set global log_bin_trust_function_creators = 1;

mysql> create user zabbix@localhost identified by 'zabbix';

mysql> grant all privileges on zabbix.* to zabbix@localhost;

mysql> quit;

8. 验证数据库配置,如果登陆不到数据库表示上一步配置不正确

[root@zabbixserver ~]# mysql -uzabbix -pzabbix -hlocalhost zabbix

9. 在数据库中创建表并导入数据

[root@zabbixserver ~]# cp /usr/share/zabbix-sql-scripts/mysql/server.sql.gz .

[root@zabbixserver ~]# gzip -d server.sql.gz

[root@zabbixserver ~]# mysql -uzabbix -pzabbix zabbix < server.sql

10. 配置zabbix_server

[root@zabbixserver ~]# vim +129 /etc/zabbix/zabbix_server.conf

DBPassword=zabbix

11. 配置zabbix_agent

[root@zabbixserver ~]# vim /etc/zabbix/zabbix_agentd.conf

182 Hostname=zabbixserver

12. 配置nginx展示zabbix

[root@zabbixserver ~]# vim /etc/nginx/conf.d/zabbix.conf

打开第2、3行的注释,结果如下所示:

server {

listen 8080;

server_name example.com;

...以下省略...

13. 启动相关服务

[root@pubserver zabbix]# vim 04-start-zabbix.yml


  • name: config zabbix

hosts: zabbix

tasks:

  • name: start service # 循环启动多个服务

service:

name: "{{item}}"

state: started

enabled: yes

loop:

  • zabbix-server

  • zabbix-agent

  • nginx

  • php-fpm

[root@pubserver zabbix]# ansible-playbook 04-start-zabbix.yml

访问zabbixserver的8080端口,进行初始化

密码也是:zabbix

这个用户和密码是zabbix网页的。

二、zabbix 监控服务使用

在web1上安装agent

1. 安装agent

[root@pubserver zabbix]# vim 05-inst-agent.yml


  • name: install agent

hosts: webservers

tasks:

  • name: install agent # 安装agent

yum:

name: zabbix-agent

state: present

[root@pubserver zabbix]# ansible-playbook 05-inst-agent.yml

2. 修改web1配置文件

[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf

117 Server=127.0.0.1,192.168.88.5

182 Hostname=web1

3. 起动服务

[root@pubserver zabbix]# vim 06-start-agent.yml


  • name: config agent

hosts: web1

tasks:

  • name: start agent # 启动服务

service:

name: zabbix-agent

state: started

enabled: yes

[root@pubserver zabbix]# ansible-playbook 06-start-agent.yml

在web页面中添加对web1的监控

主机:安装了agent,被监控的主机

主机组:根据需求,将多台主机加入到一个主机组中,方便管理。系统默认已经创建了一些主机组。

模板:是监控项的集合。将模板应用到主机,主机就可以直接拥有模板中的所有监控项。系统中默认已经创建了一些模板。

常用监控指标

Space utilization:以百分比显示的磁盘利用率

Used space:已用磁盘空间

Available memory:可用内存

CPU idle time:CPU空闲时间。不宜过低。

Load average (1m avg)、Load average (5m avg)、Load average (15m avg):CPU1分钟、5分钟、15分钟的平均负载。这个值不应长期大于核心数。

Interface eth0: Bits received:网卡接收到的数据量

Interface eth0: Bits sent:网卡发送的数据量

Number of processes:系统运行的进程数

Number of logged in users:已登陆的用户数
自定义监控项

实现监控web1用户数量的监控项

在被控端创建key。被控端被监控的内容叫作key,可以理解为它就是一个变量名,具体的名字自己决定。

在web页面中创建监控项。监控项对应key值。

在被控端创建key

语法
++UserParameter=自定义key值,命令++

命令的执行结果,是key的value

创建自定义配置文件。文件名自定义。

[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/usercnt.conf

UserParameter=usercnt,sed -n '$=' /etc/passwd

[root@web1 ~]# systemctl restart zabbix-agent.service

验证自定义监控项

1. 安装zabbix-get

[root@zabbixserver ~]# yum install -y zabbix-get

[root@web1 ~]# yum install -y zabbix-get

2. 获取监控项的值

[root@web1 ~]# zabbix_get -s 127.0.0.1 -k usercnt

46

[root@zabbixserver ~]# zabbix_get -s 192.168.88.100 -k usercnt

创建模版

  • 创建监控项
  • 应用模板到主机
  • 查看结果

三、总结

zabbix配置时,需要注意配置主机的监控项和触发器。

新建动作时,类型分为Trigger 触发器类型,autoregistration 自动注册,internal 内部触发。

抽象来说:好比一个3D动画捕捉演员。


SECURITY DAY2

一、zabbix报警机制

配置告警

  • 默认情况下,监控项不会自动发送告警消息
  • 需要配置触发器与告警,并且通过通知方式发送信息给联系人
  • 触发器:设置条件,当条件达到时,将会执行某个动作
  • 动作:触发器条件达到之后要采取的行为,比如发邮件或执行命令

用户数超过50,发送告警邮件

  • 当web1的用户数超过50时,认为这是一个问题(Problem)
  • 当出现问题时,将会执行动作。
  • 执行的动作是给管理员发邮件。
  • 给管理员发邮件,还要配置邮件服务器的地址,以及管理员的email地址
实施
  • 创建触发器规则

  • 创建邮件类型的报警媒介

验证告警配置

在zabbixserver上配置邮件服务

配置postfix邮件服务和mailx邮件客户端

[root@pubserver zabbix]# vim 07-config-mail.yml


  • name: config mail

hosts: zabbix

tasks:

  • name: install mail # 安装postfix和mailx

yum:

name: postfix,mailx

state: present

  • name: start postfix # 启动邮件服务postfix

service:

name: postfix

state: started

enabled: yes

[root@pubserver zabbix]# ansible-playbook 07-config-mail.yml

在web1创建用户,使总用户数超过50

[root@web1 ~]# for user in user{1..5}

> do

> useradd $user

> done

在zabbix web页面中查看

在zabbixserver上查看邮件

[root@zabbixserver ~]# mail # 查看邮件

Heirloom Mail version 12.5 7/5/10. Type ? for help.

"/var/spool/mail/root": 2 messages 2 new

>N 1 zzg@tedu.cn Sat Dec 31 16:47 21/932 "Problem: usercnt_gt_50"

N 2 zzg@tedu.cn Sat Dec 31 16:48 21/932 "Problem: usercnt_gt_50"

& 1 # 查看1号邮件

Message 1:

From zzg@tedu.cn Sat Dec 31 16:47:59 2022

Return-Path: <zzg@xixi.cn>

X-Original-To: root@localhost.localdomain

Delivered-To: root@localhost.localdomain

From: <zzg@xixi.cn>

To: <root@localhost.localdomain>

Date: Sat, 31 Dec 2022 16:47:59 +0800

Subject: Problem: usercnt_gt_50

Content-Type: text/plain; charset="UTF-8"

Status: R

Problem started at 16:47:56 on 2022.12.31

Problem name: usercnt_gt_50

Host: web1

Severity: Warning

Operational data: 51

Original problem ID: 102

& q # 输入q退出

二、zabbix 进阶操作

配置自动发现

  • 在web2上配置agent
复制代码
[root@web2 ~]# vim /etc/zabbix/zabbix_agentd.conf 
复制代码
117 Server=127.0.0.1,192.168.88.5
复制代码
182 Hostname=web2
复制代码
[root@web2 ~]# systemctl enable zabbix-agent.service --now

主动监控

默认zabbix使用的是被动监控,主被动监控都是针对被监控主机而言的。

被动监控:Server向Agent发起请求,索取监控数据。此种模式常用

主动监控:Agent向Server发起连接,向Server汇报

配置web2使用主动监控

修改配置文件,只使用主动监控

[root@web2 ~]# vim /etc/zabbix/zabbix_agentd.conf

117 # Server=127.0.0.1,192.168.88.5

142 StartAgents=0

171 ServerActive=192.168.88.5

242 RefreshActiveChecks=120

重启服务

[root@web2 ~]# systemctl restart zabbix-agent.service

[root@web2 ~]# ss -tlnp | grep :10050 # 端口号消失

三、监控案例解析

配置钉钉机器人告警

创建钉钉机器人

机器人名称自己写一个,提示关键词为warn

注意上面的Webhook地址,不要泄露,谁拥有此地址,谁就可以控制机器人说话。

编写脚本并测试

安装钉钉机器人脚本需要用到的模块

[root@zabbixserver ~]# yum install -y python3-requests

#windows运行不了,直接就下 python-3。说明依赖软件不太够。

编写钉钉机器人脚本

[root@zabbixserver ~]# vim /usr/lib/zabbix/alertscripts/dingalert.py

#!/usr/bin/env python3

import json

import requests

import sys

def send_msg(url, remiders, msg):

headers = {'Content-Type': 'application/json; charset=utf-8'}

data = {

"msgtype": "text",

"at": {

"atMobiles": remiders,

"isAtAll": False,

},

"text": {

"content": msg,

}

}

r = requests.post(url, data=json.dumps(data), headers=headers)

return r.text

if name == 'main':

msg = sys.argv[1]

remiders = []

url = '++钉钉机器人Webhook地址++ ' # 注意此处需输入机器人的webhook地址

print(send_msg(url, remiders, msg))

[root@zabbixserver ~]# chmod +x /usr/lib/zabbix/alertscripts/dingalert.py

[root@zabbixserver ~]# /usr/lib/zabbix/alertscripts/dingalert.py 'warn: 测试消息' # 注意消息中要包含关键字warn

{"errcode":0,"errmsg":"ok"}

验证

创建用户,使用户数超过55 ,太大了就把条件设小点。

[root@web1 ~]# for user in user{6..10}; do useradd $user; done

[root@web1 ~]# zabbix_get -s 127.0.0.1 -k usercnt

56

添加报警媒介类型

监控Nginx

stub_status模块

用于实时监控nginx的网络连接,这个模块是nginx官方提供的一个模块。

配置nginx

[root@pubserver zabbix]# vim 08-config-nginx.yml


  • name: config nginx

hosts: webservers

tasks:

  • name: install nginx # 安装nginx

yum:

name: nginx

state: present

  • name: start nginx # 启动nginx

service:

name: nginx

state: started

enabled: yes

[root@pubserver zabbix]# ansible-playbook 08-config-nginx.yml

修改配置文件,启用stub_status功能

[root@web1 ~]# vim /etc/nginx/nginx.conf

...略...

47 location / {

48 }

49

50 location /status { # 在此处添加3行

51 stub_status on;

52 }

53

54 error_page 404 /404.html;

55 location = /40x.html {

56 }

...略...

[root@web1 ~]# systemctl restart nginx

访问监控页面

[root@zabbixserver ~]# curl http://192.168.88.100/status

Active connections: 1

server accepts handled requests

2 2 2

Reading: 0 Writing: 1 Waiting: 0

Active connections:当前客户端与nginx之间的连接数。它等于下面Reading / Writing / Waiting之和

accepts:自nginx启动之后,客户端访问的总量

handled:自nginx启动之后,处理过的客户端连接总数,通常等于accepts的值。

requests:自nginx启动之后,处理过的客户端请求总数。

Reading:正在读取客户端的连接总数。

Writing:正在向客户端发送响应的连接总数。

Waiting:空闲连接。

使用工具向服务器发起多个请求

[root@zabbixserver ~]# yum install -y httpd-tools

一共发1000个请求,每次并发数200

[root@zabbixserver ~]# ab -n1000 -c200 http://192.168.88.100/

[root@zabbixserver ~]# curl http://192.168.88.100/status

Active connections: 1

server accepts handled requests

1097 1097 1003

Reading: 0 Writing: 1 Waiting: 0

编写脚本,用于获取各项数据

[root@web1 ~]# vim /usr/local/bin/nginx_status.sh

#!/bin/bash

case $1 in

active)

curl -s http://192.168.88.100/status | awk '/Active/{print $NF}';;

waiting)

curl -s http://192.168.88.100/status | awk '/Waiting/{print $NF}';;

accepts)

curl -s http://192.168.88.100/status | awk 'NR==3{print $1}';;

esac

[root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh

[root@web1 ~]# nginx_status.sh active

1

[root@web1 ~]# nginx_status.sh accepts

1099

[root@web1 ~]# nginx_status.sh waiting

0

创建zabbix用到的key,获取各项数据

key的语法格式

UserParameter=key[*],<command> $1

key[*]中的*是参数,将会传给后面的位置变量$1

创建声明key的文件

[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf

UserParameter=nginx_status[*],/usr/local/bin/nginx_status.sh $1

测试

[root@web1 ~]# systemctl restart zabbix-agent.service

[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[active]

1

[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[waiting]

0

[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[accepts]

1103

四、总结

监控的目的是:报告系统的运行情况,提前发现问题。O(∩_∩)O

监控类别:

公有:FTP,WEB,数据库,SSH远程连接服务等

私有:机器的CPU、内存、磁盘、网卡流量、用户、进程运行信息等

zabbix基于分布式监控。cacti 基于snmp协议。 nagios 基于agent。


相关推荐
鸭梨山大。11 分钟前
Jenkins 任意文件读取(CVE-2024-23897)修复及复现
安全·中间件·jenkins
企业管理8MSaaS12 分钟前
如何选择适合Scrum团队的项目管理系统?
云计算·scrum
企业管理8MSaaS15 分钟前
如何在 Scrum 管理中化解团队冲突?
云计算·scrum
黑客老陈1 小时前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss
无泡汽水4 小时前
漏洞检测工具:Swagger UI敏感信息泄露
python·web安全
代码改变世界ctw7 小时前
如何学习Trustzone
安全·trustzone·atf·optee·tee·armv8·armv9
正在走向自律9 小时前
阿里云ESC服务器一次性全部迁移到另一个ESC
服务器·阿里云·云计算
WTT001110 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
OkeyProxy11 小时前
HTTP、HTTPS和SOCKS5代理協議
网络协议·https·云计算·代理服务器·海外ip代理
群联云防护小杜12 小时前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡