SECURITY

day01

  • 对服务的管理,不能仅限于可用性。
  • 还需要服务可以安全、稳定、高效地运行。
  • 监控的目的:早发现、早治疗。
  • 被监控的资源类型:
    • 公开数据:对外开放的,不需要认证即可获取的数据
    • 私有数据:对外不开放,需要认证、权限才能获得的数据

监控命令

# uptime可以查看系统已经运行了多久。最后的3个数字分别是CPU最近1分钟、5分钟、15分钟的平均负载。平均负载的值,不应该大于总核心数。
[root@zzgrhel8 ~]# uptime 
 09:28:25 up 53 days, 27 min,  0 users,  load average: 0.09, 0.08, 0.03

[root@zzgrhel8 ~]# free -h      # 主要用于查看内存
[root@zzgrhel8 ~]# swapon -s    # 查看swap空间
[root@zzgrhel8 ~]# df -h        # 查看硬盘使用情况
[root@zzgrhel8 ~]# ping -c2 www.baidu.com   # 发2个包,测试网络

zabbix

  • 实施监控的几个方面:

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

安装zabbix

  • 中文手册:https://www.zabbix.com/documentation/3.4/zh/manual
主机名地址
zabbixserver192.168.88.5/24
web1192.168.88.100/24
web2192.168.88.200/24
# 准备3台主机。按上表配置主机名和IP地址
[root@zzgrhel8 ~]# vm clone zabbixserver web1 web2 
  • 安装zabbix
# 1. 关闭SELINUX和防火墙

# 2. 配置yum。千万注意:只保留系统yum,删除mysql和pxc。
[root@zabbixserver ~]# cat /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.88.240/dvd
enabled=1
gpgcheck=0

# 3. 配置nginx,用于展示zabbix的web页面
# 3.1 安装nginx的依赖包
[root@zabbixserver ~]# yum install -y gcc pcre-devel openssl-devel
# 3.2 安装nginx
[root@zzgrhel8 ~]# scp /linux-soft/2/lnmp_soft.tar.gz 192.168.88.5:/root/
[root@zabbixserver ~]# tar xf lnmp_soft.tar.gz 
[root@zabbixserver ~]# cd lnmp_soft/
[root@zabbixserver lnmp_soft]# tar xf nginx-1.12.2.tar.gz 
[root@zabbixserver lnmp_soft]# cd nginx-1.12.2/
[root@zabbixserver nginx-1.12.2]# ./configure --with-http_ssl_module    # 配置nginx支持https
[root@zabbixserver nginx-1.12.2]# make && make install

# 4. 配置nginx支持php。配置php可以连接mysql
[root@zabbixserver ~]# yum install -y php php-fpm php-mysql mariadb-server mariadb-devel

# 5. 根据zabbix手册,修改nginx参数
[root@zabbixserver ~]# vim /usr/local/nginx/conf/nginx.conf
 34     fastcgi_buffers 8 16k;     #缓存php生成的页面内容,8个16k
 35     fastcgi_buffer_size 32k;   #缓存php生产的头部信息,32k
 36     fastcgi_connect_timeout 300;  #连接PHP的超时时间,300秒
 37     fastcgi_send_timeout 300;     #发送请求的超时时间,300秒
 38     fastcgi_read_timeout 300;     #读取请求的超时时间,300秒
 70         location ~ \.php$ {
 71             root           html;
 72             fastcgi_pass   127.0.0.1:9000;
 73             fastcgi_index  index.php;
 74         #    fastcgi_param  SCRIPT_FILENAME  /script    s$fastcgi_script_name;
 75             include        fastcgi.conf;  # 注意改成fastcgi.conf
 76         }

# 6. 启动相关服务
[root@zabbixserver ~]# systemctl enable mariadb --now
[root@zabbixserver ~]# systemctl enable php-fpm --now
[root@zabbixserver ~]# ss -tlnp |grep :9000
LISTEN     0      128    127.0.0.1:9000
[root@zabbixserver ~]# /usr/local/nginx/sbin/nginx   -t      // -t:检查语法
[root@zabbixserver ~]# ss -tlnp | grep :80
LISTEN     0      128          *:80
# 写入到rc.local中的命令,开机时自动执行
[root@zabbixserver ~]# echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.d/rc.local 
[root@zabbixserver ~]# chmod +x /etc/rc.d/rc.local


# 7. 编译安装zabbix
# 7.1 安装zabbix的依赖包
[root@zabbixserver lnmp_soft]# yum install -y net-snmp-devel curl-devel autoconf libevent-devel
# 7.2 编译安装
[root@zabbixserver ~]# cd lnmp_soft/
[root@zabbixserver lnmp_soft]# ls zabbix-3.4.4.tar.gz 
zabbix-3.4.4.tar.gz
[root@zabbixserver lnmp_soft]# tar xf zabbix-3.4.4.tar.gz 
[root@zabbixserver lnmp_soft]# cd zabbix-3.4.4/
[root@zabbixserver zabbix-3.4.4]# ./configure --enable-server --enable-agent --with-mysql=/usr/bin/mysql_config  --with-net-snmp --with-libcurl
# --enable-server: 安装服务器端
# --enable-agent: 安装被控端
# --with-mysql: 指定mysql数据库配置程序
# --with-net-snmp: 配置可以通过snmp收集数据
# --with-libcurl: 启用curl库,以便zabbix可以通过curl连接web服务
[root@zabbixserver zabbix-3.4.4]# make && make install
  • 初始化
# 1. 创建zabbix存储数据的数据库。创建名为zabbix的数据库,使用的字符集是utf8
[root@zabbixserver ~]# mysql
MariaDB [(none)]> create database zabbix default charset utf8;

# 2. 创建名为zabbix的用户,密码也是zabbix,可以对zabbix数据库拥有全部权限。zabbix@'%'格式是:zabbix@客户端地址
# 在mysql中,%表示0到多个任意字符
MariaDB [(none)]> grant all on zabbix.* to zabbix@'%' identified by 'zabbix';
# 授权zabbix用户可以在本机登陆
MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by 'zabbix';
# 查看所有数据库
MariaDB [(none)]> show databases;
# 切换到数据库
MariaDB [(none)]> use zabbix;
# 查看库中有哪些表
MariaDB [(none)]> show tables;
# 查看表中内容
MariaDB [(none)]> desc users;    # users是表格名称
MariaDB [(none)]> exit

# 3. 导入zabbix表结构,3个sql文件按顺序导入
[root@zabbixserver ~]# cd lnmp_soft/zabbix-3.4.4/database/mysql/
[root@zabbixserver mysql]# ls
data.sql  images.sql  schema.sql
# -u指定用户名,-p指定密码,第3个zabbix是数据库
[root@zabbixserver mysql]# mysql -uzabbix -pzabbix zabbix < schema.sql 
[root@zabbixserver mysql]# mysql -uzabbix -pzabbix zabbix < images.sql 
[root@zabbixserver mysql]# mysql -uzabbix -pzabbix zabbix < data.sql 

# 4. 配置zabbix_server服务
[root@zabbixserver ~]# vim /usr/local/etc/zabbix_server.conf
 12 # ListenPort=10051    # 不用改,了解端口号
 38 LogFile=/tmp/zabbix_server.log   # 不用改,日志文件位置
 85 DBHost=localhost      # 数据库服务器地址
 95 DBName=zabbix         # 不用改,数据库名
111 DBUser=zabbix         # 不用改,连接数据库的用户
119 DBPassword=zabbix     # 连接数据库的密码

# 5. 创建用于运行zabbix的用户
# -s /sbin/nologin: 用户不能登陆系统
[root@zabbixserver ~]# useradd -s /sbin/nologin zabbix

# 6. 创建用于管理zabbix的service文件
# service文件格式参考:https://www.cnblogs.com/gongxianjin/p/15673132.html
[root@zabbixserver ~]# vim /usr/lib/systemd/system/zabbix_server.service
[Unit]
Description=zabbix server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/tmp/zabbix_server.pid
ExecStart=/usr/local/sbin/zabbix_server
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

# 7. 启动服务
# 新建service文件,一般需要执行systemctl daemon-reload,否则有可能识别不到
[root@zabbixserver ~]# systemctl daemon-reload 
[root@zabbixserver ~]# systemctl enable zabbix_server.service 
[root@zabbixserver ~]# systemctl start zabbix_server.service 
[root@zabbixserver ~]# ss -tlnp | grep :10051
LISTEN     0      128          *:10051

# 8. 配置agent,自己被监控
[root@zabbixserver ~]# vim /usr/local/etc/zabbix_agentd.conf
 30 LogFile=/tmp/zabbix_agentd.log   # 不用改,日志位置
 93 Server=127.0.0.1,192.168.88.5     # 指定接受哪些服务器监控
101 # ListenPort=10050               # 不用改,指定端口号
134 ServerActive=127.0.0.1,192.168.88.5  # 主动汇报信息给哪些服务器
145 Hostname=zabbixserver           # 本机的主机名
280 UnsafeUserParameters=1           # 允许用户自定义监控项

# 9. 配置agent服务的service文件
[root@zabbixserver ~]# vim /usr/lib/systemd/system/zabbix_agentd.service
[Unit]
Description=zabbix agent
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/tmp/zabbix_agentd.pid
ExecStart=/usr/local/sbin/zabbix_agentd
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

# 10. 启服务
[root@zabbixserver ~]# systemctl daemon-reload
[root@zabbixserver ~]# systemctl start zabbix_agentd.service 
[root@zabbixserver ~]# systemctl enable zabbix_agentd.service 
[root@zabbixserver ~]# ss -tlnp | grep :10050
LISTEN     0      128          *:10050

附:删库重导入

# 查看有哪些数据库
MariaDB [(none)]> show databases;
MariaDB [(none)]> drop database zabbix;
MariaDB [(none)]> create database zabbix default charset utf8;
MariaDB [(none)]> exit
[root@zabbixserver ~]# cd lnmp_soft/zabbix-3.4.4/database/mysql/
[root@zabbixserver mysql]# mysql -uzabbix -pzabbix zabbix < schema.sql 
[root@zabbixserver mysql]# mysql -uzabbix -pzabbix zabbix < images.sql 
[root@zabbixserver mysql]# mysql -uzabbix -pzabbix zabbix < data.sql 
  • zabbix的管理是通过web页面进行的。通过web初始化zabbix
# 拷贝zabbix的web页面到nginx
[root@zabbixserver ~]# ls lnmp_soft/zabbix-3.4.4/frontends/
php
[root@zabbixserver ~]# cp -r lnmp_soft/zabbix-3.4.4/frontends/php/* /usr/local/nginx/html/

# nginx运行期间,调用php-fpm服务,php-fpm需要向web目录中修改文件。php-fpm的运行用户是apache,所以apache用户需要对该目录有写权限
[root@zabbixserver ~]# chown -R apache:apache /usr/local/nginx/html/

# 访问192.168.88.5,跳转的是index.html网页
[root@zabbixserver zabbix-3.4.4]# vim /usr/local/nginx/conf/nginx.conf
 48         location / {
 49             root   html;
 50             index index.php  index.html index.htm;    # 添加index.php
 51         }
# 再次访问192.168.88.5,跳转的是index.php网页

# 访问192.168.88.5/index.php,首次访问,将会自动跳转到安装页面:http://192.168.88.5/setup.php

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndwNDG58-1682339945334)(…/imgs/image-20211108154951884.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VnjQmUS6-1682339945334)(…/imgs/image-20211108155036640.png)]

  • 根据上面红色报错,解决zabbix web依赖的内容
# 安装依赖的软件包
[root@zabbixserver ~]# yum install -y php-gd php-xml php-bcmath php-mbstring
# 修改php.ini文件
[root@zabbixserver ~]# vim /etc/php.ini
 672 post_max_size = 16M                 # vim搜索快捷键:行号+G(输入行号后按G)
 384 max_execution_time = 300
 394 max_input_time = 300
 878 date.timezone = Asia/Shanghai
[root@zabbixserver ~]# systemctl restart php-fpm
# 刷新web页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xPbr9Ap3-1682339945335)(…/imgs/image-20211108160054085.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vII4EI8D-1682339945336)(…/imgs/image-20211108162814600.png)]

连接数据库的密码,也是zabbix。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QtYr0f9p-1682339945336)(…/imgs/image-20211108162959430.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3UC8f6Vq-1682339945337)(…/imgs/image-20211108163021394.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HqmmsUkH-1682339945337)(…/imgs/image-20211108163042977.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7KAm60wC-1682339945337)(…/imgs/image-20211108163107194.png)]

默认的登陆用户是admin,密码是zabbix。

配置zabbix

  • 修改语言

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4LSdcHe-1682339945338)(…/imgs/image-20211108164724853.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hoYqPPYS-1682339945338)(…/imgs/image-20211108164800435.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YJzjbTl-1682339945339)(…/imgs/image-20211108164826100.png)]

  • 启用监控自身

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFdm6Jjm-1682339945339)(…/imgs/image-20211108171750489.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C3d8O7Yf-1682339945339)(…/imgs/image-20211108171813369.png)]

配置zabbix监控web1服务器

# 监控端(zabbix server)和被控端使用的软件是同一个,只是启用不同的功能
[root@zabbixserver ~]# scp lnmp_soft/zabbix-3.4.4.tar.gz 192.168.88.100:/root

# 安装编译agent需要的依赖环境
[root@web1 ~]# yum install -y gcc pcre-devel autoconf

# 编译agent
[root@web1 ~]# tar xf zabbix-3.4.4.tar.gz 
[root@web1 ~]# cd zabbix-3.4.4/
[root@web1 zabbix-3.4.4]# ./configure --enable-agent
[root@web1 zabbix-3.4.4]# make && make install

# 修改配置文件
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf
 30 LogFile=/tmp/zabbix_agentd.log   # 日志位置,不用改
 69 EnableRemoteCommands=1    # 允许监控端远程执行命令
 93 Server=127.0.0.1,192.168.88.5   # 允许自己和监控端进行数据采集
134 ServerActive=127.0.0.1,192.168.88.5  # 允许自己和监控端主动监控
145 Hostname=web1             # 自己的主机名
280 UnsafeUserParameters=1    # 允许用户自定义监控项

# 配置服务
[root@zabbixserver ~]# scp /usr/lib/systemd/system/zabbix_agentd.service 192.168.88.100:/usr/lib/systemd/system/
[root@web1 ~]# useradd -s /sbin/nologin zabbix
[root@web1 ~]# systemctl daemon-reload 
[root@web1 ~]# systemctl start zabbix_agentd.service 
[root@web1 ~]# systemctl enable zabbix_agentd.service 
[root@web1 ~]# ss -tlnp | grep :10050
LISTEN     0      128          *:10050

day02

在zabbix web管理平台中配置监控

  • 主机:安装了agent,被监控的主机
  • 主机组:根据需求,将多台主机加入到一个主机组中,方便管理。系统默认已经创建了一些主机组。
  • 模板:是监控项的集合。将模板应用到主机,主机就可以直接拥有模板中的所有监控项。系统中默认已经创建了一些模板。

添加被监控的主机

  • 登陆zabbix:http://192.168.88.5/index.php

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMigXK3f-1682339945340)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009103110365.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eW2Eghhh-1682339945340)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009103255479.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW9w7DeK-1682339945340)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009103513705.png)]

  • 查看监控数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RWIctRF0-1682339945341)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009104234567.png)]

需要查看哪个项目,可以点击右侧的“图形”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-byuQBkhU-1682339945341)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009104356220.png)]

常用的监控指标:

  • CPU idle time:CPU空闲时间。不宜过低。
  • Processor load(1 min average per core) / Processor load(5 min average per core) / Processor load(15 min average per core):每核心1分钟、5分钟、15分钟的平均负载。这个值不应长期大于1。
  • Free disk space on /:根分区剩余的空间
  • Free disk space on /(percentage):根分区剩余的空间百分比
  • Available memory:可用内存
  • Incoming network traffic on eth0:eth0网卡进入的流量
  • Outgoing network traffic on eth0:eth0网卡外出的流量
  • Maximum number of processes:系统最多运行的进程数
  • Number of logged in users:已登陆的用户数

自定义监控项

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

  1. 在被控端创建key。被控端被监控的内容叫作key,可以理解为它就是一个变量名,具体的名字自己决定。
  2. 在web页面中创建监控项。监控项对应key值。
  3. 监控项存在应用集中。应用集就是相似监控项的集合。
  4. 应用集存在模板中。一个模板可以包含多个应用集。
包含
包含
对应
模板
应用集
监控项
key
在被控端创建key
  • 创建key的语法
UserParameter=自定义key值,命令
# 命令的执行结果,是key的value
  • 在web1上声明自定义监控项所包含的配置文件。系统将会到/usr/local/etc/zabbix_agentd.conf.d/查找自定义监控项
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf
264 Include=/usr/local/etc/zabbix_agentd.conf.d/
  • 创建自定义配置文件。文件名自定义
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/count.line.passwd
UserParameter=count.line.passwd,sed -n '$=' /etc/passwd
  • 验证
[root@web1 ~]# systemctl restart zabbix_agentd.service 
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k count.line.passwd
[root@zabbixserver ~]# zabbix_get -s 192.168.88.100 -k count.line.passwd
# -s指定获取哪台主机的值
# -k指定key
[root@web1 ~]# zabbix_get -s 192.168.88.100 -k count.line.passwd
zabbix_get [17421]: Check access restrictions in Zabbix agent configuration    
# 此处报错是因为配置文件中只设置的了127.0.0.1和192.168.88.5可以访问,需在配置第93行加上88.100的地址即可访问
创建模板

创建名为count.line.passwd的模板。该模板属于名为count-passwd的组,该组不存在则自动创建。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ddb50KR4-1682339945341)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114126788.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsqkpUsT-1682339945342)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114246453.png)]

创建应用集
  • 创建名为count_line_passwd的应用集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hEjEUWD6-1682339945342)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114531862.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bmVEpV4V-1682339945343)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114608482.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-08v9qOIy-1682339945343)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114649712.png)]

在应用集中创建监控项
  • 创建名为count_line_passwd_item的监控项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jk2cIFyz-1682339945343)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114752343.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NPJNawzt-1682339945344)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114834521.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WNx2sJrU-1682339945344)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009114956605.png)]

应用模板到主机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EyKabSHH-1682339945344)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009115659638.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28YIHo44-1682339945345)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009115738765.png)]

查看结果
  • 注意,刚应用的模板,不会立即取得数据,需要等一会

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDD5MiEe-1682339945345)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009115844587.png)]

配置告警

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

用户数超35时,发送告警邮件

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

创建触发器规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X016ndo6-1682339945345)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009141857021.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Csq3jspt-1682339945346)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009141937098.png)]

创建名为password_line_gt_35的触发器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UJVDa80a-1682339945346)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009142113266.png)]

点击添加后,出现下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIzwwyWl-1682339945347)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009142224765.png)]

添加表达式之后的结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqrbzkFG-1682339945347)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009142329729.png)]

表达式语法:

{<server>:<key>.<function>(<parameter>)}<operator><constant>
{<主机>:<key>.<函数>(<参数>)}<操作符><常量>

例:

{count.line.passwd:count.line.passwd.last()}>35
# count.line.passwd是模板
# count.line.passwd是在被控端上定义的key
# last是函数,表示最近的一次取值
# > 是操作符
# 35 是常量
# 以上表达式的含义是:应用count.line.passwd模板的主机,它的count.line.passwd最近一次取值大于35,则状态为“问题”,即Problem

创建邮件类型的报警媒介

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RTBGgHw7-1682339945348)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009143748657.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Up9AJc4O-1682339945348)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009144132609.png)]

为用户关联邮箱

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mQ7758go-1682339945348)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009144729491.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aH2LU60E-1682339945349)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009144820740.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2WBFGSgT-1682339945349)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009144955348.png)]

创建动作:当出现Problem状态时,给admin发邮件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ilX2gnUI-1682339945349)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009151612465.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86BYcyGP-1682339945350)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20220314141636627.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HkJQR2zi-1682339945350)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009152241662.png)]

点击“新的”之后,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-497xcwgc-1682339945350)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009152452328.png)]

验证

# 配置zabbix服务器成为邮件服务器
[root@zabbixserver ~]# yum install -y postfix mailx
[root@zabbixserver ~]# systemctl enable postfix --now
[root@zabbixserver ~]# ss -tlnp | grep :25
LISTEN     0      100    127.0.0.1:25

# 在web1上创建用户
[root@web1 ~]# for user in user{1..20}
> do
> useradd $user
> done
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k count.line.passwd
43

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XbJMMlL-1682339945351)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009154251273.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTj2FzRV-1682339945351)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009154404010.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EkqkXjka-1682339945352)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009154512197.png)]

# 在zabbixserver上查看邮件
[root@zabbixserver ~]# mail
>N  1 zabbix@localhost.loc  Tue Nov  9 14:48  21/941   
# N表示未读,1是邮件编号
# 回车默认查看最新一封邮件
& q      # 退出

自动发现

  • 当被监控的设备非常多的时候,手工添加将会变得非常不方便

  • 可以使用自动发现功能,实现添加主机、添加到主机组、 链接模板

  • 自动发现流程:

    • 创建自动发现规则
    • 创建动作,当主机被发现之后,执行什么操作
    • 通过动作,添加主机,将模板应用到发现的主机
配置自动发现
  • 创建自动发现规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKNt1Xec-1682339945352)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009163820665.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZ11EDXS-1682339945353)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009164038717.png)]

  • 创建动作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AOapa9T-1682339945353)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009164529777.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZZfIMgJ-1682339945354)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009164634515.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3VpCFjx-1682339945354)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009164738033.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HfUcvY8v-1682339945354)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009164857584.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6pdMMu8w-1682339945355)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211109170417346.png)]

在zabbix web页面中查看web2是否已被发现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUzjfORH-1682339945355)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009170022854.png)]

web2是通过ssh发现的,它上面还没有配置zabbix agent,所以即使发现了,也无法监控。需要在web2上配置agent。

[root@web1 ~]# scp zabbix-3.4.4.tar.gz 192.168.88.200:/root/

[root@web2 ~]# yum install -y gcc pcre-devel autoconf
[root@web2 ~]# tar xf zabbix-3.4.4.tar.gz 
[root@web2 ~]# cd zabbix-3.4.4/
[root@web2 zabbix-3.4.4]# ./configure --enable-agent && make && make install
[root@web2 zabbix-3.4.4]# useradd -s /sbin/nologin zabbix
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
 69 EnableRemoteCommands=1
 93 Server=127.0.0.1,192.168.88.5
134 ServerActive=127.0.0.1,192.168.88.5
145 Hostname=web2
280 UnsafeUserParameters=1
[root@zabbixserver ~]# scp /usr/lib/systemd/system/zabbix_agentd.service 192.168.88.200:/usr/lib/systemd/system/
[root@web2 ~]# systemctl daemon-reload
[root@web2 ~]# systemctl enable zabbix_agentd.service --now
[root@web2 ~]# ss -tlnp | grep :10050
LISTEN     0      128          *:10050

实施主动监控

  • 默认zabbix使用的是被动监控,主被动监控都是针对被监控主机而言的。
  • 被动监控:Server向Agent发起请求,索取监控数据。此种模式常用
  • 主动监控:Agent向Server发起连接,向Server汇报
配置web2使用主动监控
  • 修改配置文件,只使用主动监控
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
 93 # Server=127.0.0.1,192.168.88.5   # 因为采用主动监控,所以不接受其他主机的查询
118 StartAgents=0   # 不接受被动检查,也不开启任何端口
134 ServerActive=192.168.88.5   # 只向server汇报
183 RefreshActiveChecks=120    # 120秒检查一次配置
264 Include=/usr/local/etc/zabbix_agentd.conf.d/
280 UnsafeUserParameters=1

# 重启服务
[root@web2 ~]# systemctl restart zabbix_agentd.service 
[root@web2 ~]# ss -tlnp | grep :10050    # 端口号消失

创建用于主动监控的模板。可以基于现有的模板,克隆之后修改。

  1. 克隆现有模板

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgGR8CDV-1682339945356)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009174454344.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxZ9t9L2-1682339945356)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009174527405.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BsMSwr5d-1682339945357)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009174642418.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GwEiTNW6-1682339945357)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009174721180.png)]

  1. 修改克隆的模板,将监控项改为主动监控

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXejENqy-1682339945358)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175034682.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAM7ZrCA-1682339945358)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175624108.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LIMc8dnq-1682339945359)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175143879.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uduvCO8F-1682339945359)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175207955.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GGfbq4cL-1682339945359)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175256277.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-For7kAlw-1682339945360)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175314253.png)]

克隆的模板有3项不支持主动,把它们禁用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKJQxEsT-1682339945360)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175426736.png)]

添加使用主动监控的主机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1X0lcYaA-1682339945360)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009175936684.png)]

下图中,注意主机名应该与被监控的主机的名字相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xnHXGqq-1682339945361)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009180109687.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ScQBIEu3-1682339945361)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009180207488.png)]

查看最新数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TMNIqdGV-1682339945362)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211009180511569.png)]

拓扑图和聚合图形

拓扑图

  • 在zabbix中可以创建拓扑图,反映拓扑结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-je4PK4ZI-1682339945362)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011093108735.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sonTP0GY-1682339945363)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011093138268.png)]

添加元素:

  • 图标:可以是一个装饰图形,也可以对应具体的设备
  • 形状:长方形、圆形
  • 链接:连线,多个设备之间才能使用链接
完善拓扑图
  • 添加交换机图标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bllH3hNG-1682339945363)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011093625759.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p62QANuY-1682339945363)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011093738831.png)]

  • 添加链接:圈中两台设备,点链接边上的添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioZFjMFY-1682339945364)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011093924690.png)]

  • 添加2台web服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RhSvYhZk-1682339945364)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011094401267.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCDFXDIa-1682339945364)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011094508613.png)]

聚合图形

  • 将常用的页面放到一个统一页面中查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xvul6iuf-1682339945365)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101231497.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAnyJ23A-1682339945365)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101321401.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2BaMcSk-1682339945366)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101405428.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UsueLTF6-1682339945366)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101429254.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oqZ6ZZqP-1682339945368)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101525333.png)]

点击更改之后,添加新望出现在该单元格的数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GL46bu9W-1682339945368)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101621625.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErRqIlYV-1682339945368)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101657170.png)]

使用同样的方法,点击其他的“更改”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXCTGk6O-1682339945369)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011101923352.png)]

《钉钉机器人告警》https://www.jianshu.com/p/6317121da5a4

day03

监控nginx示例

stub_status模块

  • 用于实时监控nginx的网络连接,这个模块是nginx官方提供的一个模块。
# 编译nginx,支持stub_status模块
[root@zzgrhel8 ~]# scp /linux-soft/2/lnmp_soft.tar.gz 192.168.88.100:/root
[root@web1 ~]# tar xf lnmp_soft.tar.gz 
[root@web1 ~]# cd lnmp_soft/
[root@web1 lnmp_soft]# yum install -y gcc pcre-devel openssl-devel
[root@web1 lnmp_soft]# tar xf nginx-1.12.2.tar.gz 
[root@web1 lnmp_soft]# cd nginx-1.12.2/
[root@web1 nginx-1.12.2]# ./configure --help | grep stub
  --with-http_stub_status_module     enable ngx_http_stub_status_module
[root@web1 nginx-1.12.2]# ./configure --with-http_stub_status_module
[root@web1 nginx-1.12.2]# make && make install

# 修改配置文件,启用stub_status
[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
 47         location /status {
 48             stub_status on;
 49         }
# 检查语法,出现syntax is ok表示配置文件正确
[root@web1 ~]# /usr/local/nginx/sbin/nginx -t
# 启动服务
[root@web1 ~]# /usr/local/nginx/sbin/nginx 
[root@web1 ~]# ss -tlnp | grep :80
LISTEN     0      128          *:80

# 访问监控页面
[root@web1 ~]# curl http://192.168.88.100/status
Active connections: 1 
server accepts handled requests
 1 1 1 
Reading: 0 Writing: 1 Waiting: 0 
# Active connections:当前客户端与nginx之间的连接数。它等于下面Reading / Writing / Waiting之和
# accepts:自nginx启动之后,客户端访问的总量
# handled:自nginx启动之后,处理过的客户端连接总数。
# requests:自nginx启动之后,处理过的客户端请求总数。
# Reading:正在读取HTTP请求头部的连接总数。
# Writing:正在向客户端发送响应的连接总数。
# Waiting:空闲连接。

# 使用工具向服务器发起多个请求
[root@web1 ~]# yum install -y httpd-tools
# 一共发1000个请求,每次并发数100
[root@web1 ~]# ab -n 1000 -c 100 http://192.168.88.100/status
[root@web1 ~]# curl http://192.168.88.100/status
Active connections: 1
server accepts handled requests
 1040 1040 1004 
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
1047
[root@web1 ~]# nginx_status.sh waiting
0
  • 创建zabbix用到的key,获取各项数据
# key的语法格式
UserParameter=key[*],<command> $1
# key[*]中的*是参数,将会传给后面的位置变量$1

# 创建声明key的文件
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1

# 测试key
[root@web1 ~]# systemctl restart zabbix_agentd.service 
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx.status[accepts]
1049
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx.status[active]
1
  • 在zabbix web中添加监控项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ifumkiu6-1682339945369)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110105033748.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3uJQ5mz-1682339945370)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110105057176.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0y6jqKNl-1682339945370)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110105242187.png)]

等待一会之后,可以查看最新数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yS9em03U-1682339945371)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110111814945.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5nSRwAQ4-1682339945371)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110112100106.png)]

Prometheus

  • 也是一款监控软件,也是一个时序数据库。
  • 主要用在容器监控方面,也可以用于常规的主机监控。
  • 使用google公司开发的go语言编写。
  • Prometheus是一个框架,可以与其他组件完美结合。
  • 自带httpd网站(页面相对简略)、数据库TSDB。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6CREiGSv-1682339945371)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011104321276.png)]

部署Prometheus服务器

  • prometheus:192.168.88.10
  • 被控端node1:192.168.88.11
[root@zzgrhel8 ~]# scp /linux-soft/2/prometheus_soft.tar.gz 192.168.88.10:/root/

[root@prometheus ~]# tar xf prometheus_soft.tar.gz 
[root@prometheus ~]# cd prometheus_soft/

# prometheus是经过编译后的go语言程序,相当于绿色软件,解压即用
[root@prometheus prometheus_soft]# tar xf prometheus-2.17.2.linux-386.tar.gz 
[root@prometheus prometheus_soft]# mv prometheus-2.17.2.linux-386 /usr/local/prometheus

# 修改配置文件
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
 29     - targets: ['192.168.88.10:9090']

# 注意:prometheus主机的时间需要与真机时间一致,如果不一致,修改时间
[root@prometheus ~]# timedatectl   # 查看时区
[root@prometheus ~]# timedatectl set-timezone Asia/Shanghai    # 修改时区
[root@prometheus ~]# date -s "20220105 14:18:00"

# 检查语法
[root@prometheus ~]# /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml 
Checking /usr/local/prometheus/prometheus.yml
  SUCCESS: 0 rule files found

# 创建服务文件
[root@prometheus ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
After=network.target

[Service]
ExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/usr/local/prometheus/data/

[Install]
WantedBy=multi-user.target

# 启服务
[root@prometheus ~]# systemctl daemon-reload 
[root@prometheus ~]# systemctl enable prometheus.service --now
[root@prometheus ~]# ss -tlnp | grep :9090
LISTEN     0      128         :::9090
查看监控页面
  • 访问http://192.168.88.10:9090

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-esCmbnaX-1682339945372)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011114013573.png)]

  • 被监控的对象称为targets

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QabrQ6kz-1682339945372)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011114248512.png)]

prometheus已经在监控自己了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDIBHIgE-1682339945372)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011114338135.png)]

查看监控图像:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nkOMToAI-1682339945373)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011114748412.png)]

添加需要查看的监控项:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5XU7jg8-1682339945373)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011114947884.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HlXvhrVL-1682339945374)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011115034507.png)]

查看监控项的图形信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r8bxzIHl-1682339945374)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011115124956.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-64TTO1q6-1682339945375)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011115254041.png)]

​ 如果web页面获取不到数据,使用date命令调整prometheus和真机的时间,它们需要保持一致。

添加被监控端

  • 监控方式:

    • 拉取:pull。监控端联系被监控端,采集数据
    • 推送:push。被监控端主动把数据发给监控端。在prometheus中,push的方式需要额外的组件pushgateway
  • 被监控端根据自身运行的服务,可以运行不同的exporter(被监控端安装的、可以与Prometheus通信,实现数据传递的软件)

  • exporter列表:https://prometheus.io/docs/instrumenting/exporters/

部署通用的监控exporter
  • node-exporter用于监控硬件和系统的常用指标
  • exporter运行于被监控端,以服务的形式存在。每个exporter所使用的端口号都不一样。
  • 在node1[192.168.88.11]上部署node exporter
# 部署
[root@prometheus prometheus_soft]# scp node_exporter-1.0.0-rc.0.linux-amd64.tar.gz 192.168.88.11:/root/

[root@node1 ~]# tar xf node_exporter-1.0.0-rc.0.linux-amd64.tar.gz 
[root@node1 ~]# mv node_exporter-1.0.0-rc.0.linux-amd64 /usr/local/node_exporter

[root@node1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

[root@node1 ~]# systemctl daemon-reload 
[root@node1 ~]# systemctl enable node_exporter.service --now
[root@node1 ~]# ss -tlnp | grep :9100
LISTEN     0      128         :::9100
  • 在Prometheus服务器上添加监控节点
# 在配置文件中追加以下内容。特别注意缩进
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml 
  - job_name: 'node1'
    static_configs:
    - targets: ['192.168.88.11:9100']
[root@prometheus ~]# systemctl restart prometheus.service 

查看结果结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQOmCNhZ-1682339945375)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011144322719.png)]

  • 查看node1节点的1分钟平均负载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e7HDd9wu-1682339945376)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011144650754.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eTcAMbv1-1682339945376)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011144715784.png)]

grafana可视化

  • grafana是一款开源的、跨平台的、基于web的可视化工具
  • 展示方式:客户端图表、面板插件
  • 数据源可以来自于各种源,如prometheus

部署grafana

  • 装包、启服务
[root@prometheus ~]# cd prometheus_soft/
[root@prometheus prometheus_soft]# ls *rpm
grafana-6.7.3-1.x86_64.rpm
[root@prometheus prometheus_soft]# yum install -y grafana-6.7.3-1.x86_64.rpm
[root@prometheus ~]# systemctl enable grafana-server.service --now
  • 修改配置,对接prometheus

访问http://192.168.88.10:3000。初始用户名和密码都是admin。第一次登陆时,要求改密码,我的密码改为tedu.cn。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LOxV6kAy-1682339945376)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011152230581.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOzaSEl9-1682339945377)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110162546052.png)]

对接数据的步骤:

  1. 添加数据源
  2. 为数据展示选择展示方式(dashboard仪表盘)
  3. 查看结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWxnQdAj-1682339945377)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011153727629.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WibSrhcU-1682339945377)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011153814503.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jECy2rAI-1682339945378)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011153943404.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYP7m6PX-1682339945378)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011154000848.png)]

选择展示方式。导入模板文件,展示不同主题风格。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWBM8T6D-1682339945379)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011154333024.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcW9NUKe-1682339945379)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011154416593.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQ8C4q7f-1682339945380)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011154546439.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5vtDgizA-1682339945380)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011154629159.png)]

查看结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oz408hNp-1682339945380)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011154659959.png)]

展示node1的监控信息

  • grafana模板下载:https://grafana.com/grafana/dashboards/
  • 导入主机监控模板
# 在真机上解压prometheus_soft.tar.gz
[root@zzgrhel8 ~]# tar xf /linux-soft/2/prometheus_soft.tar.gz  -C  /tmp

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SR2oJlCj-1682339945381)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011161809562.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XPUBmhMj-1682339945381)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011161841353.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tWwrKgke-1682339945382)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110170056718.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tu8N6iVf-1682339945382)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011162254949.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VeVz45zA-1682339945382)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011162415539.png)]

监控mariadb数据库

在node1节点上安装数据库
[root@node1 ~]# cat /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.88.240/dvd
enabled=1
gpgcheck=0

[root@node1 ~]# yum install -y mariadb-server
[root@node1 ~]# systemctl enable mariadb --now
在node1上安装mysql exporter
  • mysql exporter需要访问数据库,所以需要在数据库中为exporter创建授权用户
[root@node1 ~]# mysql
MariaDB [(none)]> grant all on *.* to jerry@'localhost' identified by '123';    # 创建用户jerry,密码是123
MariaDB [(none)]> exit
  • 配置mysql exporter
[root@prometheus prometheus_soft]# scp mysqld_exporter-0.12.1.linux-amd64.tar.gz 192.168.88.11:/root/

[root@node1 ~]# tar xf mysqld_exporter-0.12.1.linux-amd64.tar.gz 
[root@node1 ~]# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter

# 编写用于连接mysql服务的配置文件
[root@node1 ~]# vim /usr/local/mysqld_exporter/.my.cnf
[client]
host=127.0.0.1
port=3306
user=jerry
password=123

# 创建service文件
[root@node1 ~]# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
After=network.target

[Service]
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--config.my-cnf=/usr/local/mysqld_exporter/.my.cnf

[Install]
WantedBy=multi-user.target

# 启服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable mysqld_exporter.service --now
[root@node1 ~]# ss -tlnp | grep :9104
LISTEN     0      128         :::9104
配置prometheus监控mysql
# 修改配置文件,追加以下内容:
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml 
  - job_name: 'mysql'
    static_configs:
    - targets: ['192.168.88.11:9104']
[root@prometheus ~]# systemctl restart prometheus.service 

查看状态:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4LW0ZEj-1682339945383)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011174259410.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zpsxFKNk-1682339945383)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011174319770.png)]

在grafana中展示mysql exporter数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mrDUE98T-1682339945384)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011175013018.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0HyvZCg-1682339945384)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011175033194.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AyUYmdx0-1682339945384)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211110175416360.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Q6CCGV5-1682339945385)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011175146938.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GFYJmWKf-1682339945385)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011175430016.png)]

模板切换

查看其模板:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDijK0fy-1682339945385)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011175506407.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2r30WwA-1682339945386)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211011175526482.png)]

day04

kali

  • 实际上它就是一个预安装了很多安全工具的Debian Linux
[root@zzgrhel8 ~]# kali reset
kali reset OK.
该虚拟机系统用户名为:kali,密码为:kali
  • 基础配置
$ ip a s    # 查看网络
$ nmcli connection show    # 查看到网络连名为"Wired connection 1"
$ nmcli connection modify "Wired connection 1" ipv4.method manual ipv4.address 192.168.88.40/24 autoconnect yes
$ nmcli connection up "Wired connection 1"
$ systemctl start ssh      # 启ssh服务,弹出的窗口输入密码kali
[root@zzgrhel8 ~]# ssh kali@192.168.88.40
kali@192.168.88.40's password: kali
┌──(kali㉿kali)-[~]
└─$ 

nmap扫描

  • 一般来说扫描是攻击的前奏。
  • 扫描可以识别目标对象是什么系统,开放了哪些服务。
  • 获知具体的服务软件及其版本号,可以使得攻击的成功率大大提升。
  • 扫描可以检测潜在的风险,也可以寻找攻击目标、收集信息、找到漏洞
  • windows下,扫描可以使用xscan / superscan
  • Linux,扫描可以采用nmap
  • 吾爱破解:https://www.52pojie.cn/
  • 中国黑客团队论坛:https://www.cnhackteam.org/
  • 俄罗斯论坛:https://rutracker.org/
┌──(kali㉿kali)-[~]
└─$ nmap
# -sT: TCP扫描。
# -U: 扫描目标的UDP端口。
# -sP:ping扫描
# -A:对目标系统全面分析

# 扫描整个网段,哪机器可以ping通
┌──(kali㉿kali)-[~]
└─$ nmap -sP 192.168.88.0/24

# 扫描192.168.88.11开放了哪些TCP端口
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sT 192.168.88.11

# 扫描192.168.88.11开放了哪些UDP端口。非常耗时!
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sU 192.168.88.11

# 全面扫描192.168.88.11系统信息
┌──(kali㉿kali)-[~]
└─$ sudo nmap -A 192.168.88.11 
  • 使用脚本扫描
# 通过脚本扫描目标主机的ftp服务
# 在目标主机上安装vsftpd服务
[root@node1 ~]# yum install -y vsftpd
[root@node1 ~]# systemctl start vsftpd

# 在kali主机上查看有哪些脚本
┌──(kali㉿kali)-[~]
└─$ ls /usr/share/nmap/scripts/

# 扫描ftp服务是否支持匿名访问。ftp控制连接端口号是21
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ftp-anon.nse 192.168.88.11 -p 21
21/tcp open  ftp
| ftp-anon: Anonymous FTP login allowed   # 允许匿名访问

# 扫描ftp相关信息,如版本号、带宽限制等
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ftp-syst.nse 192.168.88.11 -p 21

# 扫描ftp后门漏洞
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ftp-vsftpd-backdoor 192.168.88.11 -p 21
  • 扫描口令
# 通过ssh协议,使用nmap自带的密码本扫描远程主机的用户名和密码
# 在目标主机上创建名为admin的用户,密码为123456
[root@node1 ~]# useradd admin
[root@node1 ~]# echo 123456 | passwd --stdin admin
# 或使用passwd --stdin admin <<< 123456创建密码

# 在kali上扫描弱密码
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ssh-brute.nse 192.168.88.11 -p 22  

# 通过ssh协议,使用nmap以及自己的密码本扫描远程主机的密码
# 1. 创建用户名文件
┌──(kali㉿kali)-[~]
└─$ sudo echo root > /tmp/users.txt
                                                        
┌──(kali㉿kali)-[~]
└─$ cat /tmp/users.txt 
root

[root@node1 ~]# passwd --stdin root <<< 19910101
# 2. 生成1990-01-01到2020-12-31之间的所月日期
# 在centos7上,创建以下文件
[root@cent7 ~]# vim mydate.py
from datetime import datetime, timedelta

d1 = datetime(1989, 12, 31)
d2 = datetime(2021, 1, 1)
dt = timedelta(days=1)

with open('/tmp/mima.txt', 'w') as f:
    while d1 < d2:
        d1 += dt
        f.write("%s\n" % d1.strftime('%Y%m%d'))
[root@cent7 ~]# python mydate.py
[root@cent7 ~]# scp /tmp/mima.txt kali@192.168.88.40:/tmp/

# 3. 使用自己的密码本破解密码
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=ssh-brute.nse --script-args userdb=/tmp/users.txt,passdb=/tmp/mima.txt 192.168.88.11 -p 22

# 4. 目标主机将会记录所有的登陆事件
[root@node1 ~]# vim /var/log/secure
# 查看最近的登陆失败事件
[root@node1 ~]# lastb
# 查看最近的登陆成功事件
[root@node1 ~]# last
  • 扫描windows口令
[root@zzgrhel8 ~]# cat /tmp/winuser.txt    # windows用户名
administrator
admin
# 通过samba服务扫描密码
[root@zzgrhel8 ~]# nmap --script=smb-brute.nse --script-args userdb=/tmp/winuser.txt,passdb=/tmp/mima 172.40.0.151

使用john破解密码

  • 在线破解哈希值的网站:https://cmd5.com/
  • 哈希是算法,英文hash的音译,包括md5、sha等
    • 哈希算法是一种单向加密的算法,也就是将原始数据生成一串“乱码”
    • 只能通过原始数据,生成这串“乱码”,但是不能通过“乱码”回推出原始数据
    • 相同的原始数据,生成的乱码是相同的。
  • kali系统提供了一个名为john的工具,可用于密码破解
[root@node1 ~]# echo 123456 | passwd --stdin root
[root@node1 ~]# useradd tom
[root@node1 ~]# echo abc123 | passwd --stdin tom
[root@node1 ~]# useradd jerry
[root@node1 ~]# echo 123123 | passwd --stdin jerry
[root@node1 ~]# scp /etc/shadow kali@192.168.88.40:/home/kali/

# 字典暴力破解,密码本是/usr/share/john/password.lst
┌──(kali㉿kali)-[~]
└─$ sudo john shadow  

# 直接显示破解的密码,不显示其他额外信息
┌──(kali㉿kali)-[~]
└─$ sudo john --show shadow                
root:123456:18912:0:99999:7:::
tom:abc123:18912:0:99999:7:::
jerry:123123:18912:0:99999:7:::


# 字典暴力破解,指定密码本文件
┌──(kali㉿kali)-[~]
└─$ sudo john --wordlist=/tmp/mima.txt shadow

抓包

  • 传输的各种数据,在网络中都是一个个的数据包
┌──(kali㉿kali)-[~]
└─$ sudo tcpdump
# -i:指定抓取哪块网卡进入的数据包
# -A:转换为ASCII码,使得可读
# -w:抓包写入文件
# -r:从文件中读取抓包信息
# 抓包时可以过滤要抓哪些包
# 使用host过滤主机,使用net过滤网段,使用port过滤端口... ...

# 1. 抓包:抓取eth0上进出的、与192.168.88.11有关的、涉及TCP21端口的数据包。以下命令执行后,打开新终端。
┌──(kali㉿kali)-[~]
└─$ sudo tcpdump -i eth0 -A host 192.168.88.11 and tcp port 21

# 2. 在新终端登陆ftp
┌──(kali㉿kali)-[~]
└─$ ftp 192.168.88.11
Connected to 192.168.88.11.
220 (vsFTPd 3.0.2)
Name (192.168.88.11:kali): tom   # 用户名
331 Please specify the password.
Password:abc123   # 此处是tom的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit    # 退出
221 Goodbye.

# 3.在tcpdump终端可以看到明文的用户名和密码



# 1. 将抓到的包存入文件ftp.cap
┌──(kali㉿kali)-[~]
└─$ sudo tcpdump -i eth0 -A -w ftp.cap host 192.168.88.11 and tcp port 21
# 2. 在另一个终端访问ftp
# 在新终端登陆ftp
┌──(kali㉿kali)-[~]
└─$ ftp 192.168.88.11
Connected to 192.168.88.11.
220 (vsFTPd 3.0.2)
Name (192.168.88.11:kali): tom   # 用户名
331 Please specify the password.
Password:abc123   # 此处是tom的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit    # 退出
221 Goodbye.

# 3. 在抓包终端ctrl+c停止
# 4. 读取抓到的包,并过滤
┌──(kali㉿kali)-[~]
└─$ tcpdump -A -r ftp.cap | egrep 'USER|PASS' 
  • 图形工具:wireshark
[root@zzgrhel8 ~]# yum install wireshark ftp

选择抓哪块网卡进出的数据,然后点左上角的开始

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yal95GRI-1682339945386)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211012165723032.png)]

抓到包后,点击左上角同样位置停止,查看数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7T8d55AU-1682339945387)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211012165852292.png)]

安全加固

nginx安全

  • 安装启服务
[root@node1 lnmp_soft]# yum install -y gcc pcre-devel zlib-devel
[root@node1 lnmp_soft]# tar xf nginx-1.12.2.tar.gz 
[root@node1 lnmp_soft]# cd nginx-1.12.2/
[root@node1 nginx-1.12.2]# ./configure && make && make install
[root@node1 ~]# /usr/local/nginx/sbin/nginx 
  • 访问不存在的路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAUvC1qS-1682339945387)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211012172841856.png)]

  • 命令行访问:
[root@node1 ~]# curl -I http://192.168.88.11/    # -I 只显示头部
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 10 Dec 2021 07:51:08 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 10 Dec 2021 07:46:16 GMT
Connection: keep-alive
ETag: "61b305c8-264"
Accept-Ranges: bytes
  • 隐藏版本信息
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
 17 http {
 18     server_tokens off;
... ...
[root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload

再次访问不存在的路径,版本号消失

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IkEV9fHV-1682339945387)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211012173446335.png)]

  • 防止DOS、DDOS攻击
  • DDOS:分布式拒绝服务
# 压力测试,每批次发送100个请求给web服务器,一共发200个
[root@zzgrhel8 ~]# yum install -y httpd-tools
[root@zzgrhel8 ~]# ab -c 100 -n 200 http://192.168.88.11/ 
... ...
Benchmarking 192.168.88.11 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests    # 发送200个请求完成
... ... 
Complete requests:      200   # 完成了200个请求
Failed requests:        0     # 0个失败
... ...
  • 配置nginx连接共享内存为10M,每秒钟只接收一个请求,最多有5个请求排队,多余的拒绝
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
 17 http {
 18     limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;   # 添加
... ...
 37     server {
 38         listen       80;
 39         server_name  localhost;
 40         limit_req zone=one burst=5;  # 添加
[root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload
[root@node1 ~]# /usr/local/nginx/sbin/nginx -t  // 检查语法

# 再次测试
[root@zzgrhel8 ~]# ab -c 100 -n 200 http://192.168.88.11/ 
... ...
Benchmarking 192.168.88.11 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
... ...
Complete requests:      200
Failed requests:        194   # 失败了194个
... ...

附:取出nginx.conf中注释和空行以外的行

# -v是取反。^ *#表示开头有0到多个空格,然后是#。^$表示空行
[root@node1 ~]# egrep -v '^ *#|^$' /usr/local/nginx/conf/nginx.conf

防止缓冲区溢出

  • 缓冲区溢出定义:程序企图在预分配的缓冲区之外写数据。
  • 漏洞危害:用于更改程序执行流,控制函数返回值,执行任意代码。
# 配置nginx缓冲区大小,防止缓冲区溢出
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
 17 http {
 18     client_body_buffer_size     1k;
 19     client_header_buffer_size   1k;
 20     client_max_body_size        1k;
 21     large_client_header_buffers 2 1k;
... ...
[root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload

Linux加固

  • 设置tom账号,有效期为2022-1-1
# 查看tom的账号信息
[root@node1 ~]# chage -l tom
最近一次密码修改时间					:10月 12, 2021
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

[root@node1 ~]# chage -E 2022-1-1 tom
[root@node1 ~]# chage -l tom
最近一次密码修改时间					:10月 12, 2021
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:1月 01, 2022
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

# 设置账号永不过期,注意-E后面是数字-1,不是字母l
[root@node1 ~]# chage -E -1 tom
[root@node1 ~]# chage -l tom
最近一次密码修改时间					:10月 12, 2021
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

# 对单个用户设置密码策略
[root@node1 ~]# chage -m 1 -M 90 -W 7 -I 15 tom  
m(MIN_DAYS) M(MAX_DAYS) W(WARN_AGE) I(宽限期)

# 设置新建用户的密码策略
[root@node1 ~]# vim /etc/login.defs 
 25 PASS_MAX_DAYS   99999    # 密码永不过期,设置最长有效期
 26 PASS_MIN_DAYS   0        # 密码最短使用时间,0表示随时可改密码
 27 PASS_MIN_LEN    5        # 密码最短长度
 28 PASS_WARN_AGE   7        # 密码过期前7天发警告
 33 UID_MIN                  1000   # 新建用户最小的UID
 34 UID_MAX                 60000   # 新建用户最大的UID
  • 用户安全设置
# 锁定tom账号
[root@node1 ~]# passwd -l tom    // l(lock)
锁定用户 tom 的密码 。
passwd: 操作成功

[root@node1 ~]# passwd -S tom   # 查看状态
tom LK 2021-10-12 0 99999 7 -1 (密码已被锁定。)

# 解锁tom账号
[root@node1 ~]# passwd -u tom  // u(unlock)
解锁用户 tom 的密码。
passwd: 操作成功
[root@node1 ~]# passwd -S tom
tom PS 2021-10-12 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
  • 保护文件
# 查看文件的特殊属性
[root@node1 ~]# lsattr /etc/passwd
---------------- /etc/passwd    # 没有特殊属性

# 修改属性
chattr +i 文件    # 不允许对文件做任何操作,只能看
chattr -i 文件    # 去除i属性
chattr +a 文件    # 文件只允许追加
chattr -a 文件    # 去除a属性

[root@node1 ~]# chattr +i /etc/passwd  // i(immunity:免疫)
[root@node1 ~]# lsattr /etc/passwd
----i----------- /etc/passwd
[root@node1 ~]# useradd zhangsan
useradd:无法打开 /etc/passwd
[root@node1 ~]# rm -f /etc/passwd
rm: 无法删除"/etc/passwd": 不允许的操作
[root@node1 ~]# chattr -i /etc/passwd
[root@node1 ~]# rm -f /etc/passwd   # 可以删除
[root@node1 ~]# ls /etc/passwd
ls: 无法访问/etc/passwd: 没有那个文件或目录

# 恢复passwd文件
[root@node1 ~]# cp /etc/passwd- /etc/passwd

# 追加
[root@node1 ~]# chattr +a /etc/hosts
[root@node1 ~]# echo '192.168.88.11   node1' >> /etc/hosts
[root@node1 ~]# rm -f /etc/hosts
rm: 无法删除"/etc/hosts": 不允许的操作

day05

iptables

  • iptables有多种功能,每一种功能都用一张表来实现
  • 最常用的功能是防火墙和NAT
  • 从RHEL7开始,默认的防火墙为firewalld,但是它的底层仍然调用iptables
  • 安装iptables服务
# 关闭firewalld
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld

# 安装iptables
[root@node1 ~]# yum install -y iptables-services.x86_64  
  • iptables的表和链。我们只关心nat表和filter表。filter表是默认的表,它实现防火墙,也就是包过滤的功能。nat表实现网络地址转换。mangle表实现包标记(着色)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RxCAaxTZ-1682339945388)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211013113027470.png)]

防火墙filter表

  • 配置iptables时,不指定表,就是使用filter表
  • 配置时不指定规则链,则配置所有链
  • 可以向规则链中加入很多规则,数据包进入该链时,从上向下匹配,一旦匹配就停止,开始应用规则。如果全都不匹配,则应用默认规则
  • 命令选项、链名、目标操作使用大写字母,其他小写
filter中的三条链
  • INPUT:数据包的目标地址是自己,则进入INPUT链
  • OUTPUT:数据包的源地址是自己,则进入OUTPUT链
  • FORWARD:数据包穿过自己,则进入FORWARD链

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IkZcauQS-1682339945388)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20211013114152960.png)]

环境准备
  • client1:eth0 -> 192.168.88.10/24 网关:192.168.88.11
  • node1:eth0 -> 192.168.88.11/24,eth1 -> 192.168.99.11/24
  • server1:eth1 -> 192.168.99.100/24 网关:192.168.99.11
# 在node1上停掉防火墙,安装iptables
[root@node1 ~]# systmctl stop firewalld
[root@node1 ~]# yum install -y iptables-services.x86_64 
iptables操作

常用选项:

-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则

通用参数:
-p 协议  例:iptables -A INPUT -p tcp
-s 源地址 例:iptables -A INPUT -s 192.168.1.1
-d 目的地址 例:iptables -A INPUT -d 192.168.12.1
--sport 源端口 例:iptables -A INPUT -p tcp --sport 22
--dport 目的端口 例:iptables -A INPUT -p tcp --dport 22
-i 指定入口网卡 例:iptables -A INPUT -i eth0
-o 指定出口网卡 例:iptables -A FORWARD -o eth0

-j 指定要进行的处理动作
常用的ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
# 查看filter表中的规则。-t指定表名
[root@node1 ~]# iptables -t filter -L   # 所有规则链都是空的
Chain INPUT (policy ACCEPT)   # INPUT链默认规则是接受
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)   # FORWARD链默认规则是接受
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)   # OUTPUT链默认规则是接受
target     prot opt source               destination         

[root@node1 ~]# iptables -L   # 不指定表名,默认操作filter表
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 


# 起动服务时,iptables将会出现一些默认规则
[root@node1 ~]# systemctl start iptables.service 
[root@node1 ~]# iptables -L

# 默认规则往往不合我们的要求,可以先将所有的规则清空
[root@node1 ~]# iptables -F
  • iptables的语法
iptables [-t 表名] 选项 [链名] [条件] [-j 满足条件的操作]
  • 示例
    • 可以设置默认拒绝,然后明确允许
    • 也可以设置默认允许,然后明确拒绝
# 向INPUT链追加规则,192.168.88.254发来的包全部接受
# -A是追加,-s是匹配源地址,-j为jump,采取的行为,ACCEPT是接受
[root@node1 ~]# iptables -A INPUT -s 192.168.88.254 -j ACCEPT

# 将INPUT链的默认规则改为DROP丢弃。-P设置默认规则
[root@node1 ~]# iptables -P INPUT DROP

# 查看INPUT链的规则
[root@node1 ~]# iptables -L INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  192.168.88.254        anywhere

# 在192.168.88.10上访问node1,将会被拒绝
[root@client1 ~]# ping -c2 192.168.88.11
[root@client1 ~]# ssh 192.168.88.11

# 注意,数据通信多数是双向的。现在node1也不能与192.168.88.254以外的其他机器通信,因为数据回不来。
[root@node1 ~]# ping -c2 192.168.88.10   # 失败  
# 允许node1能ssh访问client 
[root@node1 ~]# ssh 192.168.88.10   //失败,是因为node1在ssh远程控制client时,22端口的数据被放行,但随机端口数据未被放行
        node1(88.11)          --------->         client(88.10)
-s:88.11  -sport:25535(>1024的随机端口)        -s:88.11  -sport:22
-d:88.10  -dport:22                          -d:88.10  -dport:25535(同上)
[root@node1 ~]# iptables -I INPUT 1 -s 192.168.88.0/24 -p tcp --sport 22 -j ACCEPT     // 此规则为放行ssh源端口来的数据包

# 允许192.168.88.0网络的主机ssh连接node1
# -I是插入到INPUT链的第1个位置。-p指定协议,--dport指定目标端口号。-j是执行的操作
[root@node1 ~]# iptables -I INPUT 1 -s 192.168.88.0/24 -p tcp --dport 22 -j ACCEPT
至此,node1和client可以相互进行ssh访问了.

# 查看规则
[root@node1 ~]# iptables -L INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.88.0/24       anywhere             tcp dpt:ssh
ACCEPT     all  --  192.168.88.254        anywhere            
# 查看规则,n是指用数字来表示端口号、主机等
[root@node1 ~]# iptables -nL INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.88.0/24       0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  192.168.88.254        0.0.0.0/0 

# 测试,192.168.88.10已经可以ssh到node1,但是ping不通,因为只允许了ssh

# 如果ssh控制太慢,则在配置文件最后追加一条内容:UseDNS no
[root@node1 ~]# vim /etc/ssh/sshd_config
UseDNS no
# 配置任何地址访问node1的80端口,即http协议,都接受
[root@node1 ~]# yum install -y httpd
安装会卡住,因为node1使用的是ftp共享的网络yum,规则未放行该端口数据,需添加一条规则,放行192.168.88.240来的数据包(或者单独放行ftp的20/21端口也可)
[root@node1 ~]# iptables -A INPUT -s 192.168.88.240 -j ACCEPT
[root@node1 ~]# systemctl start httpd
# 不指定源,就是任何源
[root@node1 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@node1 ~]# iptables -nL INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.88.0/24       0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  192.168.88.254        0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0             0.0.0.0/0            tcp dpt:80

# 拒绝192.168.88.254 ping node1。以下写法不会生效,因为插入到了规则尾部,在它上面已经存在允许192.168.88.254通信的规则了。(从上往下,逐条匹配,匹配即停止)
# icmp就是ping命令底层用到的协议,叫Internet控制消息协议
[root@node1 ~]# iptables -A INPUT -s 192.168.88.254 -p icmp -j REJECT
[root@node1 ~]# iptables -nL INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.88.0/24       0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  192.168.88.254        0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0             0.0.0.0/0            tcp dpt:80
REJECT     icmp --  192.168.88.254        0.0.0.0/0            reject-with icmp-port-unreachable

# 查看规则的行号
[root@node1 ~]# iptables -nL INPUT --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  192.168.88.0/24       0.0.0.0/0            tcp dpt:22
2    ACCEPT     all  --  192.168.88.254        0.0.0.0/0           
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
4    REJECT     icmp --  192.168.88.254        0.0.0.0/0            reject-with icmp-port-unreachable

# 删除第4条规则
[root@node1 ~]# iptables -D INPUT 4
[root@node1 ~]# iptables -nL INPUT --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  192.168.88.0/24       0.0.0.0/0            tcp dpt:22
2    ACCEPT     all  --  192.168.88.254        0.0.0.0/0           
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

# 拒绝192.168.88.254 ping node1。-I不指定位置,默认插到最上面
[root@node1 ~]# iptables -I INPUT -s 192.168.88.254 -p icmp -j REJECT
[root@node1 ~]# iptables -nL INPUT --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    REJECT     icmp --  192.168.88.254        0.0.0.0/0            reject-with icmp-port-unreachable
2    ACCEPT     tcp  --  192.168.88.0/24       0.0.0.0/0            tcp dpt:22
3    ACCEPT     all  --  192.168.88.254        0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

# DROP是直接丢弃,REJECT是明确拒绝。

# 保存规则。不保存规则,重启iptables服务,自定义规则将消失
[root@node1 ~]# iptables-save > /etc/sysconfig/iptables

验证FORWARD链

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYA3N31D-1682339945388)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20220611105539717.png)]

准备环境
# 为node1的eth1配置ip地址
[root@node1 ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.11/24
[root@node1 ~]# nmcli connection down eth1
[root@node1 ~]# nmcli connection up eth1


# 配置server1
[root@localhost ~]# hostnamectl set-hostname server1
[root@localhost ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.100/24
[root@localhost ~]# nmcli connection down eth1
[root@localhost ~]# nmcli connection up eth1
[root@localhost ~]# echo a | passwd --stdin root

为192.168.88.10和192.168.99.100配置网关

[root@client1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.88.11
[root@client1 ~]# ifdown eth0; ifup eth0

[root@server1 ~]# nmcli connection modify eth1 ipv4.gateway 192.168.99.11
[root@server1 ~]# ifdown eth1; ifup eth1

# 在中间节点node1上打开路由转发功能
[root@node1 ~]# sysctl -a | grep ip_forward
[root@node1 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf 
[root@node1 ~]# sysctl -p

# client和server已经可以通信
[root@client1 ~]# ping -c2 192.168.99.100
  • 在server1上安装httpd服务
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# systemctl start httpd

# 在客户端访问web服务,可以访问
[root@client1 ~]# curl http://192.168.99.100/
配置FORWARD链
  • 要求:在node1上配置防火墙,保护server1
    1. 默认拒绝所有数据包通过
    2. 从server1所在网段发往client1所在网段的包全部允许
    3. 从client1所在网段到server1所在网段,允许icmp,允许22、80、443端口通过
# 默认拒绝所有数据包通过,此时client1和server1完全不通
[root@node1 ~]# iptables -P FORWARD DROP

# 源地址是192.168.99.0/24,目标地址是192.168.88.0/24的包,放行
[root@node1 ~]# iptables -A FORWARD -s 192.168.99.0/24 -d 192.168.88.0/24 -j ACCEPT

# 从client1到server1,允许icmp
[root@node1 ~]# iptables -A FORWARD -s 192.168.88.0/24 -d 192.168.99.0/24 -p icmp -j ACCEPT

# client1和server1已经可以ping通了
[root@client1 ~]# ping -c2 192.168.99.100

# 允许从client1访问server1的22、80、443,100-120端口范围
# -m是引入扩展模块,multiport多端口
[root@node1 ~]# iptables -A FORWARD -p tcp -m multiport --dport 22,80,443,100:120 -s 192.168.88.0/24 -j ACCEPT

# 现在从client1到server1的ssh、http都可以放行了
[root@client1 ~]# ssh 192.168.99.100
[root@client1 ~]# curl http://192.168.99.100/

# 设置三次握手建立连接规则 
[root@node1 ~]# iptables -A FORWARD -s 192.168.88.0/24 -d 192.168.99.0/24 -m state --state ESTABLISHED -j ACCEPT
[root@node1 ~]# iptables -nL FORWARD 
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.88.0/24      0.0.0.0/0            multiport dports 22,80,443,100:120
ACCEPT     all  --  192.168.99.0/24      192.168.88.0/24     
ACCEPT     icmp --  192.168.88.0/24      192.168.99.0/24     
ACCEPT     all  --  192.168.88.0/24      192.168.99.0/24      state ESTABLISHED
# 现在从server1到client1的ssh、http都可以放行了

# 拒绝192.168.88.10-192.168.88.20访问192.168.99.50-192.168.99.150
# -m是引入扩展模块,src-range是源地址范围,dst-range目标地址范围
[root@node1 ~]# iptables -I FORWARD -m iprange --src-range 192.168.88.10-192.168.88.20 --dst-range 192.168.99.50-192.168.99.150 -j REJECT

NAT

  • NAT:网络地址翻译、网络地址转换

  • NAT技术产生,主要是解决IPV4地址不够用。

  • NAT一般用于将私有地址转成全球唯一的公有地址。

  • 私有地址:

    • A类:10.x.x.x
    • B类:172.16.x.x-172.31.x.x
    • C类:192.168.x.x
  • 私有地址,如果需要访问互联网中的公有地址,进行上网,可以通过NAT技术,将私有地址转成公有地址,再访问外界。

配置SNAT

  • 现在的实验环境,client1可以访问server1,server1看到的是客户端地址是client1的地址。
# 跟踪httpd日志的尾部
[root@server1 ~]# tail -f /var/log/httpd/access_log 

# 在client上访问server1的web服务
[root@client1 ~]# curl http://192.168.99.100/

# 查看服务器终端的日志,将会显示client1的地址192.168.88.10访问了它
192.168.88.10 - - [13/Oct/2021:17:31:35 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
  • 互联网环境下,运营商不允许私有地址出现在互联网上,发现有这样的数据,就直接丢弃。所以,私有地址发往互联网时,需要用NAT转换成公有地址,也叫合法地址。

  • 在我们的练习环境下,在node1上配置NAT,当client1访问server1时,将client1的地址转换成server1的192.168.99.x再发给server1。因为数据包的源地址改变了,所以叫SNAT,S即Source。

# 向nat表中的POSTROUTING链添加规则。将源地址192.168.88.0/24转换成它外网卡地址。
[root@node1 ~]# iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -j MASQUERADE
[root@node1 ~]# iptables -t nat -nL

# client1再次访问server1时,server1上的日志将会显示node1的192.168.99.11访问
[root@server1 ~]# tail -f /var/log/httpd/access_log 
192.168.99.11 - - [13/Oct/2021:17:45:07 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

root@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值