一个人想着一个人 提交于 2020-04-06 18:35:04
一. mysql安装和基本操作
1.安装mysql包5.7版本(不能于mariadb共存)默认端口3306
 yum -y  install perl-Data-Dumper  perl-JSON  perl-Time-HiRes(依赖包)
 再安装mysql包(官网下载)
2.启服务,开机自启mysqld     
3.查看服务:
 systemctl  status mysqld 查看服务状态
 netstat -antpu | grep mysql 查看服务端口
 ps -C mysqld 查进程
 ps aux | grep -i mysqld 查看进程所有者
4.本地登入数据库;
 初次登陆需手动查看mysql随机密码 grep 'temporary password' /var/log/mysqld.log
 用该密码登录到服务端后,必须马上修改密码,不然会报错;
 修改密码前先修改密码规则:
 mysql>set global validate_password_policy=0; (关闭密码策略)
 mysql<set global validate_password_length=6; (修改密码长度)
 以上修改为临时修改,永久生效要修改配置文件/etc/my.cnf 
 [mysqld](手动添加)
 validate_password_policy=0
 validate_password_length=6
  --------------------------------------------------------------    

  修改密码:mysql -uroot -p"123456" 
5.查看,添加,删除操作
 show databases;      查看有那些库
 select database();  
 create database nsd; 创建库
 drop database nsd;   删除库
 use nsd;             使用进入库
 show tables;         查看库里的表
 desc 库名.表名;             查看表的字段结构 
 create table 表名(
    字段名1  字段类型(宽度),
    字段名2  字段类型(宽度);    创建表
 drop table 表名;              删除表
 insert into 库.表  values(内容); 插入表
 select * from 库.表;    查看表的内容
------------------------------------------------------------------------------------------------------------------------
二. Mysql数据类型
1.数值类型:整数,小数
 tinyint (unsigned) 1字节  范围(-128~127) 范围(0~255) 微小整数
 int     4字节          大整数
 float   4字节     单精度浮点数(小数)
 double  8字节     双精度浮点数(小数)
 1)整数型:指定的宽度仅显示宽度,存数值的大小由类型决定,数值不够指定宽度时,
                 在左边填空格补位
 2)浮点型:定义格式:float(总宽度,小数位数)
                当字段值与类型不匹配时,字段值作0处理  
                当数值超出范围,进保存最大/最小值
2.字符类型:
 1)定长:char(字符数) 最大长度255字符
              不够指定字符数时,在右边用空格补齐
              字符数超出范围时,无法写入数据
 2)变长:varchar(字符数)
              按实际大小分配储存空间
              字符数超出范围时,无法写入数据
 3)大文本类型:text/blob
              字符数大于36635储存使用
3.日期时间类型:
  年 year       YYYY    2017 
  日期date    YYYYMMDD   20170713
  时间 time   hhmmss         155548

  日期时间
  timestamp   yyyymmddhhmmss    20170713155548     
  datetime      yyyymmddhhmmss    20170713155548

  时间函数
  year()  date()  month()  day()  time()   now()
   年                  日期       月        几号     时间   当前日期时间

  create   table   t8(
  name   char(5),
  homeaddr  varchar(20),
  age    tinyint   unsigned,
  pay    float(7,2),
  s_year   year,
  birthday  date,
  up_time    time,
  meettint    datetime     
  );

  yesr 2017
  date 20170713
  time 163600
  datetime 20170713163700

  mysql>select    year(20190823);
  mysql>select    now();
  mysql>select    year( now() );
  mysql>select    month( now() );
   等等。。。。

  insert into  t8 values("lucy","shanghai",21,18880,year(20130918),date

  (now()),time(now()),now() );
4.枚举类型:从给定的集合中选择值,分两种:
 1)选择单个值:
  create table t1(
  name enun("lisi","zhangsan")
    );
 2)选择多个值:
  create table t1(
  class set("nsd","it","uid")
    ); 
-------------------------------------------------------------------------------------------------------------------------------------
三.表格结构的调整
1.修改表的字段:alter table 表名 执行动作;
 1)添加新字段:add 字段名 类型(宽度)  约束条件; (可以选择位值,after 字段名,first)
  alter table t4 add name char(4) not null after pay;
 2)删除字段:drop 字段名;
  alter table t4 drop name;
 3)修改字段类型:modify 字段名 新类型(宽度)  约束条件; (可以用来修改位值)
  alter table t4 modify pay int(4) not null default 2000 after age;
 4)修改字段名:change 源字段名 新字段名 类型(宽度) 约束条件;
  alter table t4 change pay name int(4);
2.修改表名:alter table 源表明 rename  新表名;

一.MySql 索引类型
    优点:可以创建唯一性索引,保证数据每一行的唯一性;
    缺点:改变数据时,索引也要对应变化,降低维护速度;索引需要占用物理空间;
1.index普通索引:
     可以有多个index字段,字段允许有重复;标志是key--> MUL
 1)建表的时候指定索引字段
  create table 表名(
    字段  类型(宽度) 约束条件;
  index(字段),index(字段)
    );
 2)在已有表中设置index字段
  create index 索引名 on 表名(字段名);
 3)删除索引
  drop index 索引名  on 表名;
 4)查看索引信息,两种方法:
  show index from 表名\G;
2.主键primary key
     只能有一个primary key字段,key标志---> pri
     对应的字段值不允许有重复,且不允许赋null 
   primary key  与 auto_increment  连用字段的值自动增长i++
     如果有多个字段都位primary key 则称位“复合主键”
  1)建表的时候指定索引字段
  create table 表名(
    字段  类型(宽度) 约束条件;
  primary key(字段)
     ); 
    或
  create table 表名(
    字段  类型(宽度) 约束条件 primary key;
     ); 
  2)在已有表里创建
   alter table 表名  add primary key(字段);
  3)删除primary key字段
   alter table 表名 drop primary key;
  4)复合主键的使用
     建表时创建
   create  table   db1.xfb(
   name  char(10),
   class  char(7),
   pay     enum("yes","no")  default  "no",
   primary key(name,class)
      );
     在已有表里添加复合主键。
   alter  table   表名 add  primary  key(字段名列表);
     删除复合主键    alter  table   表名 drop  primary  key;
 5)primary key  与 auto_increment  连用
    create table t1(
    id int(2) zerofill primary key auto_increment
        );
3.unique 唯一索引
    可以有多个unique字段 key标志---> uni
    对应字段值不可以重复,可以位null,如果将其修改为not null,则此字段限制与主键相同
  1)建表的时候指定unique字段
  create table 表名(
    字段  类型(宽度) 约束条件;
   unique(字段),unique(字段)
     ); 
  2)在已有表中创建
   create unique index 索引名 on 表名(字段名);
  3)删除
   drop index 索引名 on 表名;
4.foreign key 外键
  1)创建外键
  foreign key(字段名)  references  表名(字段名) 
  on  update cascade    on  delete cascade
  2)在已有表里创建外键
  alter table bjb add foreign key(bjb_id) references jfb(jfb_id) 
  on update cascade  on delete cascade
  3)删除外键
  alter table 表名 drop  foreign key 外键;
  4)查看外键名称 show create table 表名;
  总结外键:外键是关联其他表作为自己表的参考限制,启到一定约束作用;
  外键表的储存引擎必须是innodb才可以,被参照的字段必须是索引类型的一种(一般为主键),当被关联的字段发生变化时,自己的表也会同时改变;被关联表的字段无法被删除;

MySQL存储引擎
1.一个为mysql服务自带的功能程序,引擎;还有一个时表自己的引擎;
2.查看表使用的存储引擎   show   create  table  表名;
3.查看mysql服务使用的引擎show engines;
4.服务的引擎就是表创建时默认的引擎
5.修改表使用的引擎alter table 表名 engines=引擎名
6.建表时指定表使用的存储引擎?
create  table  表名(
字段名列表
.....
)engine=存储引擎名;
7.修改服务引擎
 vim /etc/my.cnf
[mysqld]
default-storage-engine=引擎
8.生产环境中常用存储引擎及特点
myisam特点:支持表级锁,不支持外键 、事务、事务回滚;接收查访问多的表,适合使用myisam存储引擎,节省系统资源
innodb特点:支持行级锁、 外键 、事务、事务回滚,接收写访问多的表,适合使用innodb存储引擎,并发访问量大。(事务回滚:事务执行过程,任意一步执行不成功,会恢复所有的操作。)
9.锁的作用:解决并发访问的冲突问题

1.数据导入,要注意,只能从指定默认路径里导入(需关闭selinux) : 
load data infile  “指定目录名/文件名”  into table 库.表  fields terminated by “列的间隔符号” lines terminated by “行的间隔符号”
2.查看导入数据时,指定的系统的目录:
show variables like “secure_file_priv”
3.修改导入数据时,指定的系统的目录:(记着要给自己设置的文件一个权限)
vim /etc/my.cnf
[mysqld]
secure_file_priv=”自己指定路径”
4.数据导出:
select 字段 from 表  条件  into outfile “目录名/文件名” fields terminated by “列隔符号” lines terminated by “行间隔符号”;
-------------------------------------------------------------
管理表记录(增 删 改 查)
1.给表字段赋值:
 insert into 表名 values(值),(值);
2.查询表记录
select 字段名 from 表名 where 匹配条件;
3.匹配条件的表示方式:
 数值比较:= , != ,  < ,> , <=,>=
 字符比较:=, != 
 范围内匹配:
 where 字段名  between 值1  and 值2;   在。。。之间
                in (列表值);                 在。。。里
                not in ()
4.逻辑匹配:
逻辑与 and   条件都成立才可以
逻辑或 or     某一个条件成立就可以
逻辑非 !      取反(select  name,uid  from user  where  name!="lucy";)
5.匹配空  is null   (select  id ,name,shell from  user where shell  is  null;)
  匹配非空 is not null 
6.distinct 查询时,字段的重复值不显示,只显示第一次出现的值;
  select    distinct  shell  from user;
7.查询时作运算操作+ - * / %
select uid,gid,uid+gid as sum,(uid+gid)/2 as avg from user;
8.糢糊查询 like
where 字段名 like  ‘表达式’
% 表示0个或多个字符
_ 表示一个字符
select id,name from user where name like ‘%a’;
select name from  user where name like ‘____’;

9.正则匹配:. ^ $ [ ] *
where 字段名 regexp ‘正则表达式’
select name from user where name regexp ‘[0-9]’
select name  from user  where  name regexp  '^[0-9]';
select name,uid  from user where  name  regexp  '^r.*t$';
10.统计函数(对字段的值作统计)
sum(字段)求和
avg(字段)求平均值
max(字段)求最大值
min(字段) 求最小值
count(字段) 统计个数
select  avg(uid)  from user  where sex="girl";
select  avg(uid) ,sum(uid) from  user;
select  min(uid),max(uid) from  user;
select   count(id)  from  user;
select  count(name) from user;
select  count(name),count(id) from user;
select  count(name) from user  where uid >1000;
11.查询结果分组(和distinct 查询差不多)
sql查询    group  by  字段名;
select  shell   from user  where uid<=100  group by shell;
12.查询结果排序
sql查询  order  by  字段名 asc(从小到大)/desc;默认为asc
select name,uid from user where uid<100 order by  uid desc;
13.查询结果限制显示记录行数
sql查询  limit 数字      ;显示查询结果的前几行;(注意行数从0开始)
select id,name,uid,shell from user where id<=10 limit  2,3;
select id,name,uid,shell from user where id<=10 limit  2;
14.总结:
条件匹配:
数值比较  =  !=   >    >=   <   <=  
字符比较  =  !=  
逻辑比较  and   or   !
范围内匹配  between...and  \  in  \    not  in 
空      is   null
非空  is  not  null
模糊查询 like   '表达式'    %    _  
正则匹配 regexp   '正则表达式'    . ^  $  []   *
数学计算  +   -   *   /    %       ( )
统计函数  sum()  avg()  max()  min()    count()   
不显示字段的重复值   distinct 字段名
查询分组  group  by  字段名
查询排序  order  by   字段名  asc/desc
限制显示查询记录的行数 limit  数字;

                                          limit  数字1,数字2;  limit 0,1
                            limit 2,2

1.修改表记录字段的值
update  库.表  set 字段名=“值”  where 条件;
update  studb.user   set    uid=uid+5     where uid<10;
2.删除表记录
删除全部表记录     delete  from  库.表;
删除指定的记录    delete  from  库.表   where  条件;  
3.where嵌套:把内层查询结果作为外查询的查询条件
select  字段名列表  from  库.表  where  条件  (select  字段名列表  from  库.表  where  条件);

select name ,liunxsys  from  user  where uid>=10 and uid<=50 and liunxsys < (select avg(liunxsys) from user  where uid>=10 and uid<=50);

select  name from studb.user where name in (select user from mysql.user where host="localhost" and user="root");

4.复制表:
 命令格式  create  table  库.表    sql查询;
create  table studb.user2   select  *  from studb.user;
create  table studb.user3   select  *  from studb.user order by  uid   desc  limit  5;
5.多表 查询
select  t1.name,t1.uid,t2.homedir  from  t1,t2;

select  t1.*,t2.homedir  from  t1,t2  where  t1.name = t2.name  and   t1.uid =  t2.uid;
6.连接查询
左连接查询 
select  字段名列表  from 表A   left  join  表B  on  条件;

右连接查询
select  字段名列表  from 表A   right  join  表B  on  条件;

一 、管理root用户密码(*操作系统管理员有权限管理)
1. 修改本机登录密码
#mysqladmin   -hlocalhost   -uroot   -p   password  "新密码"
2. 恢复本机登录密码(忘记密码这样操作)
#vim  /etc/my.cnf
[mysqld]
skip-grant-tables
#validate_password_policy=0
#validate_password_length=6
wq
mysql>update  mysql.user  set  authentication_string=password("123456") where  host="localhost"   and  user="root";
mysql> flush  privileges;
#vim  /etc/my.cnf
[mysqld]
#skip-grant-tables
validate_password_policy=0
validate_password_length=6
3.授权用户登录后,修改自己的登录密码?
SET PASSWORD=PASSWORD("新密码");
数据库管理员重置授权用户的登录密码?
SET PASSWORD 
FOR 用户名@'客户端地址'=PASSWORD('新密码');
二、用户授权与权限撤销
1.授权 (在数据库服务器上添加新的连接用户)
授权命令语法格式
mysql>  grant   权限列表 on  库名  to  用户名@"客户端地址"  identified by  "密码"   with  grant option;

权限列表:  
all    
select ,insert ,update(字段名)
usage

库名:
*.*
库名.*
库名.表名

用户名 : 连接数据库服务器时使用的名字授权时自定义即可要有标识

客户端地址:
%
192.168.4.12  
192.168.4.%

pc100.tedu.cn
%.tedu.cn
localhost

identified by  "密码"  登录密码   
with  grant option       有授权权限  (可选项)
2.mysql>select @@hostname; 查看所连数据库主机名
 mysql>  select  user();  查看当前数据库登陆的用户
 mysql> show processlist ;  服务器端显示当前运行的程序访问用户的信息
show   grants  for   用户名@"客户端地址";   查看已有的授权用户访问权 
3.撤销权限(数据库服务器上执行)
MySQL> revoke   权限  on  库名  from  用户名@"客户端地址";
mysql> revoke grant option on *.* from root@'%';
mysql> show   grants  for  root@'%';
4.删除授权用户:
mysql> delete from mysql.user where  user="root" and 
host="192.168.4.254"; flush  privileges;

mysql> drop  user   root@"192.168.4.254";
---------------------------------------------------

默认的4个库
sys
information_schema   虚拟库
performance_schem

mysql    授权库(存储授权信息)
mysql.user   存储已有的授权用户
mysql.db  存储授权用户对库的访问权限
mysql.tables_priv  存储授权用户对表的访问权限
mysql.columns_priv   存储授权用户对字段的访问权限
----------------------------------------------------------------

三 安装mysql服务图形管理工具
phpmyadmin
#yum  -y  install   httpd   php  php-mysql 
#tar -zxvf phpMyAdmin-2.11.11-all-languages.tar.gz  -C  /var/www/html/
#cd /var/www/html/
#mv phpMyAdmin-2.11.11-all-languages  phpmyadmin
#cd    /var/www/html/phpmyadmin
#cp config.sample.inc.php config.inc.php
#vim config.inc.php 
17 $cfg['blowfish_secret'] = 'plj123';
31 $cfg['Servers'][$i]['host'] = 'localhost';
:wq
客户端访问
#ping 192.168.4.55
#firefox http://192.168.4.55/phpmyadmin

一.数据备份与恢复
1.数据备份方式:
物理备份:直接拷贝库后表对应的文件。
cp  -r  /var/lib/mysql/mysql   /opt/mysql.bak
tar  -zcvf  /opt/mysql.tar.gz    /var/lib/mysql/mysql/*

逻辑备份:执行备份命令时,根据已有的库、表、记录生成对应的sql命令,把sql命令保存到指定的文件里。

2.备份策略
完全备份:备份所有数据(一台服务器   一个库   一张表)
增量备份:备份"上一次"后,所有新产生数据
差异备份:备份自"完全备份"后,所有新产生数据。
3.完全备份:备份所有数据(一台服务器   一个库   一张表)
mysqldump  -uroot   -p123456  数据库名  >    目录名/名.sql
数据库名表示方式?
--all-databases  一台服务器  
库名                   一个库  
库名  表名          一张表
-B 库名1 库名2  库名n   一起备份多个库

恢复数据:
#mysql  -uroot   -p123456  数据库名 <   目录名/名.sql

编写完全备份脚本
#mkdir  /shell
#vim /shell/allteadb.sh
#!/bin/bash
day=`date  +%F`
if  [ ! -e  /mydata  ];then
    mkdir  /mydata
fi
mysqldump  -uroot  -p123456   teadb  >  /mydata/${day}-

teadb.sql
:wq
#chmod  +x   /shell/allteadb.sh
#crontab  -e
00  03   *    *   1     /shell/allteadb.sh
:wq
#/shell/allteadb.sh
#ls /mydata
 增量备份
一、启用binlog日志 实现 实时增量备份
1. binlog日志介绍:二进制日志, 是MySQL数据库服务日志文件中的一种,记录执行的除查询之外的sql命令。默认没有启用。
2. 启用binlog日志
vim /etc/my.cnf
[mysqld]
server_id=50                 #1-255 
log-bin
binlog-format="mixed"     #ROW
....
:wq
#systemctl  restart  mysqld
日志文件默认存储位置: 数据库目录  /var/lib/mysql/
日志文件的默认名称:主机名-bin.编号   500M
日志索引文件                host50-bin.index
3 查看日志文件内容
#mysqlbinlog   目录名/日志文件名
#mysqlbinlog  /var/lib/mysql/host50-bin.000001
4 自定定义日志文件的名字和存储目录
#mkdir  /logdir
#chow  mysql  /logdir
#setenforce  0
#vim /etc/my.cnf
[mysqld]
server_id=50                 #1-255 
#log-bin
log-bin=/logdir/plj
binlog-format="mixed"
....
:wq
#systemctl  restart  mysqld
#ls   /logdir/
5 日志文件记录sql命令的方式
时间点
--start-datetime="yyyy-mm-dd  hh:mm:ss" 
--stop-datetime="yyyy-mm-dd  hh:mm:ss"

偏移量(pos)
--start-position=数字   --stop-position=数字

6 执行日志文件内的sql命令恢复数据
#mysqlbinlog [选项] 目录名/日志文件名  |   mysql  -uroot  -p123456

mysqlbinlog  --start-position=293  --stop-position=1490  /logdir/plj.000001    |  mysql -uroot  -p123456 
7  手动创建新的binlog日志文件
mysql>  flush logs;
#mysql  -uroot  -p123456   -e  "flush logs"
#mysqldump  -uroot  -p123456  --flush-logs  db4  > /root/db4.sql
8  删除已有的binlog日志文件 
mysql> reset   master;
mysql> purge  master  logs  to  "日志文件名";
mysql> purge  master  logs  to "plj.000006";
二、使用第3方软件提供的命令做增量备份---
1 percona 介绍:
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁
2.安装percona
#yum  -y  install  perl-Digest-MD5   perl-DBD-MySQL
#rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
#rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
3.命令语法格式:
#innobackupex   <选项>
选项?
--user  用户名     
--password  密码  
--databases  库名
--no-timestamp  不使用系统日期做备份目录的子目录名
--apply-log  恢复日志
--copy-back  恢复数据
A、使用innobackupex命令只做完全 和完全恢复?
A.1  完全备份
#innobackupex   --user  root    --password  123456  --databases="mysql  performance_schema   sys   db66"    /allbak  --no-timestamp
#ls   /allbak
A.2 完全恢复
#innobackupex   --user  root    --password  123456  --databases="mysql  performance_schema   sys   db66"   --apply-log    /allbak
#rm  -rf  /var/lib/mysql
#mkdir  /var/lib/mysql
#innobackupex   --user  root    --password  123456  --databases="mysql  performance_schema   sys   db66"   --copy-back    /allbak
#ls  /var/lib/mysql
#chown   -R  mysql:mysql   /var/lib/mysql
#systemctl  stop mysqld
#systemctl  start mysqld
#mysql -uroot  -p123456
 mysql> show  databases;

 /var/lib/mysql

++++++++++++++++++++++++++++++++++++++
增量备份  
--incremental  目录名     #增量备份数据存储目录
--incremental-basedir=目录名   #上次备份数据存储目录
1 先要有一次完全备份  /onedir
#innobackupex   --user  root    --password  123456  --databases="mysql  performance_schema   sys   db66"   /onedir  --no-timestamp
2 增量备份  
第一次增量备份 存储目录/new1dir
#innobackupex   --user  root    --password  123456  
--databases="mysql  performance_schema   sys   db66"   
--incremental   /new1dir    --incremental-basedir=/onedir   --no-timestamp
第二增量备份数据存储的目录   /new2dir  
#innobackupex   --user  root    --password  123456  
--databases="mysql  performance_schema   sys   db66"
--incremental   /new2dir   --incremental-basedir=/new1dir  --no-timestamp

增量备份的工作原理:
innobackupex 命令  -----> innodb 存储引擎的表

数据库目录/var/lib/mysql  下
事务日志文件 记录 执行的sql 操作 和 数据信息
                        ib_logfile1   ib_logfile0       ibdata1

LSN  日志序列号

备份目录的文件说明: /onedir    /new1dir   /new2dir
cat xtrabackup_checkpoints
xtrabackup_logfile

增量恢复(要求数据库目录必须是空的)
--redo-only  合并日志
--incremental-dir=目录名    #增量恢复时,指定使用哪个备份目录的恢复数据。

1 #rm -rf  /var/lib/mysql 
2 恢复日志
#innobackupex   --user  root    --password  123456  
--databases="mysql  performance_schema   sys   db66"    
--apply-log  --redo-only  /onedir

#innobackupex   --user  root    --password  123456 
--databases="mysql  performance_schema   sys   db66"  
--apply-log  --redo-only   /onedir    --incremental-dir=/new1dir

#innobackupex   --user  root    --password  123456 
--databases="mysql  performance_schema   sys   db66"  
--apply-log  --redo-only   /onedir    --incremental-dir=/new2dir
3 恢复数据
#innobackupex   --user  root    --password  123456 
--databases="mysql  performance_schema   sys   db66"  
--copy-bak   /onedir

4 修改文件所有者
# chown  -R mysql:mysql  /var/lib/mysql

5 重启数据库服务
#systemctl restart  mysqld

6 查看数据
#mysql -uroot -p123456
mysql>
++++++++++++++++++++++++++++++++++++++++
恢复完全备份数据中的某张表 

innobackupex  命令信息:
--export  导出表信息
import  导入表空间

删除表空间
mysql> alter  table 库.表  discard  tablespace; 

db66.a
db66.b
完全备份:
#innobackupex   --user  root    --password  123456 
--databases="db66"   /db66bak   --no-timestamp
#ls /db66bak

mysql> use db66;
mysql> drop  table  a;
mysql> create  table a(id int);

#ls /var/lib/mysql/db66/
a.frm  a.ibd

导出表信息
#innobackupex --user root --password 123456 
--databases="db66" --apply-log --export /db66bak  
#ls /db66bak/db66/
删除表空间
mysql> alter  table db66.a  discard  tablespace;  
#ls /var/lib/mysql/db66/

把备份目录下导出的表信息文件拷贝到数据库目录下
# cp /db66bak/db66/a.{cfg,exp,ibd}  /var/lib/mysql/db66/
# chown mysql /var/lib/mysql/db66/a.*

导入表空间
mysql> alter  table  db66.a  import  tablespace; 
mysql> select  * from  a;
mysql> select  * from  b;

++++++++++++++++++++++++++++++++++++++++
innobackupex 增量备份
选项:
--user    --password    --databases
--incremental  
--incremental-basedir
--apply-log   --redo-only    --incremental-dir
--export   import

mysql> alter  table 库.表  discard  tablespace;

完全备份完全恢复
增量备份增量恢复 (增量备份原理)
使用完全备份文件恢复某张表的数据 

mysql主从同步 
一.主服务器配置:
1.用户授权,在主服务器上给从服务器授权
mysql> grant  replication  slave on *.*  to  yaya@"192.168.4.55" identified by "123456";
2.启用binlog日志(主服务器)
 vim  /etc/my.cnf
server_id=54
log-bin=master54
binlog-format="mixed"
3.重启数据库服务器
4 查看正在使用binlog日志文件。
mysql> show  master  status;
二.从库角色主机的配置
1.显示自己是否是从数据库服务器
mysql> show slave status;
2.测试主库授权的用户是否有效
#mysql  -h192.168.4.54  -uyaya  -p123456
 mysql> show grants;
 mysql> quit
3.修改配置文件指定server_id
#vim /etc/my.cnf
[mysqld]
server_id=55
:wq
#systemctl  restart  mysqld
4.在本机数据管理员登录指定主库信息。
mysql> change master  to
    -> master_host="192.168.4.54",
    -> master_user="yaya",
    -> master_password="123456",
    -> master_log_file="master54.000001",
-> master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
验证主从同步配置:结果
客户端连接主库服务器 产生的新数据,在从角色的主机上都能够查看到。
5.主从工作原理
IO线程:  把master 库的 binlog日志内容 记录到本机的relay-binlog日志里。
SQL线程:执行本机relay-binlog日志里的sql命令 把数据写进本机的库。

从角色主机的数据库目录下会多出如下文件:
master.info   存储主数据库的信息
slave55-relay-bin.XXXXXX   
中继日志文件 记录本机产生新数据的sql命令
slave55-relay-bin.index  中继日志文件索引文件
relay-log.info  记录当前数据库服务器使用的中继日志文件
6.主从同步配置排错,修改配置的时候要先stop slave
IO线程报错: 从库指定主库的信息错误; 安全限制(firewall selinux);
7.把从库 还原成独立的数据库服务器?
#rm  -rf   master.info  slave55-relay-bin.*   relay-log.info
#systemctl  restart  mysqld
# mysql> show slave  status;
8.主库角色主机的配置参数
[mysqld]
binlog_do_db=数据库名,数据库名  #只允许同步的库
binlog_ignore_db=数据库名,数据库名  #只不允许同步的库

mysql> show  master stauts;
9.从库角色主机的配置参数
[mysqld]
log_slave_updates   级联复制
replicate_do_db=数据库名,数据库名      #只同步的库
replicate_ignore_db=数据库名,数据库名    #只不同步的库relay_log=文件名   #设置中继日志文件名称

一.数据读写分离:把客户的查询记录的操作和写数据的操作在不同的数据库服务器上执行。
                减轻单台数据库服务器的并发访问压力和提供服务器硬件资源的利用率。
1.实现读写分离要安装第三方软件maxscale 
libev-4.15-1.el6.rf.x86_64.rpm  依赖包
maxscale-2.1.2-1.rhel.7.x86_64.rpm
2.修改配置文件
vim  /etc/maxscale.cnf
9 [maxscale]
10 threads=1

 18 [server1]
 19 type=server
 20 address=192.168.4.54
 21 port=3306
 22 protocol=MySQLBackend
 23 

 25 [server2]
 26 type=server
 27 address=192.168.4.55
 28 port=3306
 29 protocol=MySQLBackend

 38 [MySQL Monitor]
 39 type=monitor
 40 module=mysqlmon
 41 servers=server1, server2
 42 user=scalemon   # 监控数据库服务服务的运行状态和主从状态
 43 passwd=123456
 44 monitor_interval=10000

 66 [Read-Write Service]
 67 type=service
 68 router=readwritesplit
 69 servers=server1, server2
 70 user=maxscale #检查接收客户端连接请求时,连接的用户名和密码在数据库服务器上是否存在
 71 passwd=123456
 72 max_slave_connections=100%

 78 [MaxAdmin Service]
 79 type=service
 80 router=cli

 94 [Read-Write Listener]
 95 type=listener
 96 service=Read-Write Service
 97 protocol=MySQLClient
 98 port=4006       

100 [MaxAdmin Listener]
101 type=listener
102 service=MaxAdmin Service
103 protocol=maxscaled
104 socket=default
105 port=4010

3.根据配置文件的设置在数据库服务器上添加对应的授权用户。
mysql> grant replication slave, replication client on *.* to scalemon@'%'  identified by "123456";

mysql> grant select on mysql.* to maxscale@'%' identified by  "123456";

4.启动服务
[root@003 ~]# maxscale -f  /etc/maxscale.cnf
[root@003 ~]# netstat -utnalp  | grep :4010
[root@003 ~]# netstat -utnalp  | grep :4006
5.访问本机的管理服务 查看监控主机的状态
[root@003 ~]# maxadmin -P4010 -uadmin  -pmariadb
MaxScale>list   servers
6.停止maxscale 服务
#ps  -C maxscale
#kill  -9  pid号
7.在客户端测试配置
#mysql  -P4006 -h192.168.4.53   -ustudent   -p123456

三. mysql优化
1 硬件配置低:查看应用设备的使用率CPU     内存     存储(硬盘)
                             top uptime   free -m    wa
2. 网络带宽:  使用网络测速软件 网速
3. 提供数据库服务软件版本低:
   查看数据库服务运行时的运行参数配置(常用配置参数)
a.  建立连接时,三次握手的超时时间connect_timeout
建立连接后,等待断开连接的超时时间 wait_timeout
    mysql> show  variables  like  "connect_timeout";
    mysql> show  variables  like  "wait_timeout";
b.允许重复使用的线程的数量
  mysql> show  variables  like   "thread_cache_size";
c.为所有线程缓存打开表的数量。
  mysql> show  variables  like "table_open_cache";  
d.查询缓存相关参数设置
  MySQL> show   variables  like "query_cache%";
e.查询缓存写锁有效 存储引擎(MYISAM)
  query_cache_wlock_invalidate | OFF
  query_cache_type             0|1|2
  0 关闭   不存储
  1 开启   无条件存储 
  2 开启   指定存储才存储
f.查询查询缓存统计信息
 MySQL> show  global  status  like  "qcache%";
 Qcache_hits               0       
 Qcache_inserts          0       
 Qcache_lowmem_prunes     0                                                                       
g.并发连接数:
 mysql> show variables like "max_connections";
 曾经有过的最大连接数
mysql> show  global  status like "Max_used_connections";
公式:
曾经有过的最大连接数/并发连接数=0.85  * 100%  =  85%
3000/ X  = 0.85

3.查看参数的值
MySQL> show  variables  like  "%关键字%";
mysql> show variables like "%password%";
mysql> show variables like "old_passwords";
临时定义   mysql>  set  [global]  变量名=值;
永久定义  
vim /etc/my.cnf
[mysqld]
变量名=值
....

4 程序编写的查询数据库的sql查询命令不合理 ,导致数据库处理慢
在数据库服务器上启用"慢查询日志":记录超过指定时间显示查询结果的sql命令.
5 数据存储架构设置有数据传输瓶颈。

 部署MySQL高可用集群
 高可用集群介绍: 主备模式 当主不能提供服务的时候备用主机接替它提供服务,这个过 程对于客户端是透明的。
一 配置MySQL主从同步
主主结构
主从从
一主多从
二配置MySQL-mmm  perl
mmm_monitor   监控服务 运行在管理节点主机上。
mmm_agentd     代理服务 运行在所有的数据节点主机上。
writer-vip :  192.168.4.100                       
read  -vip :   192.168.4.101/102
2.1  在所有主机上安装mysql-mmm-2.2.1.tar.gz软件包
#yum  -y  install   perl-*
#unzip  mysql-mmm.zip
#cd  mysql-mmm
#tar -zxf  mysql-mmm-2.2.1.tar.gz
#cd  mysql-mmm-2.2.1
#make install
#ls  /etc/mysql-mmm/
mmm_agent.conf   //mmm_agentd服务主配置文件
mmm_common.conf   //公共配置文件(管理主机和数据节点主机)
mmm_mon.conf  //mmm_monitor服务主配置文件
mmm_tools.conf
2.2  修改配置
2.2.1  修改数据节点主机mmm_agentd服务的配置文件
#vim /etc/mysql-mmm/mmm_agent.conf
  include mmm_common.conf
  this 主机名  (master51) 
2.2.2  修改管理节点主机mmm_monitor服务的配置文件
# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf

<monitor>
    ip      192.168.4.55
    pid_path                /var/run/mmm_mond.pid
    bin_path                /usr/lib/mysql-mmm/
    status_path             /var/lib/misc/mmm_mond.status
    ping_ips    192.168.4.51, 192.168.4.52, 192.168.4.53, 192.168.4.54
</monitor>

<host default>
    monitor_user        monitor
    monitor_password    123456
</host>

debug 0
[root@005 ~]# 

1.passwd -S tom 查看tom的密码信息
2.chage -l tom  查看详细信息
3.passwd -l tom  锁定用户
4.passwd -u tom  解锁用户
5.grep tom /etc/shadow  在文件中查看密码
6.chage -d 0 tom  修改最近一次修改密码的时间(首次登陆用户必须修改密码)
7.chage -E 2018/01/31 tom 修改密码过期时间
8.grep -v "^#" /etc/login.defs 查看默认配置文件
9.ls /etc/skel/ -a 用户家目录默认环境模版文件(-a显示隐藏文件(根据需要可添加文件)
10.隐藏内核和操作系统信息
 本地连接:cat /etc/issue   (修改里面内容)
 网络连接:cat /etc/issue.net
11.修改历史记录记录条数
 sed -i '45s/1000/500/' /etc/profile
 source /etc/profile 刷新文件,生效
 cat ~/.bash_history  查看历史命令
12.给历史命令添加执行时间
 临时生效:#HISTTIMEFORMAT='%F %T  '
 永久生效的全局配置:vim/etc/profile
  ....
  export HISTTIMEFORMAT='%F %T'
13.mount挂载defaults的选项应用
  命令行挂载    mount    -t   文件系统类型  选项 分区名   目录名
 defaults默认挂载 包括哪些挂载项?
 #man   mount   搜索defaults
 defaults
              Use default options: rw, suid, dev, exec, auto,
              nouser, and async.

 suid  允许在挂载目录下执行suid 和sgid权限的文件  
 exec  允许在挂载目录下执行二进制文件

 1)nosuid不允许在挂载目录下执行suid和sgid权限文件
   noexec不允许在挂载目录下执行二进制文件
14.给文件加特殊属性(加锁  解锁)
 i 对文件没有移动 编辑 删除的权限
 a 只能一追加的方式访问
 查看 lsattr  文件名 
 添加 chattr  +属性  文件名
 删除 chattr  -属性   文件名
 chattr +i /etc/passwd
 chattr +a /etc/passwd
15.用户切换
 su          切换到root用户
 su - 用户   
 su   用户     只切换到用户的身份,不切换到用户的环境
 su - -c "命令" 用户  切换到用户身份后执行命令
16.用户提权:/etc/sudoers
 用户提权: 系统root用户让系统的普通用户可以执行自己可以使用的命令。
 用户名    主机名列表=命令列表   // 给单个用户提权
 %用户组   主机名列表=命令列表   //给用户组用提权

 *命令列表中的命令,必须要写命令的绝对路径
 #vim /etc/sudoers
 webadmin   localhost, host50=/usr/bin/systemctl  * httpd,   /usr/bin/ vim /etc/httpd/conf/httpd.conf,  NOPASSWD: ALL

 mike    localhost,host50=/sbin/*, !/sbin/ifconfig  eth0
 :wq!

 %webgrp    localhost, host50=/usr/bin/systemctl  * httpd,   /usr/bin/  vim /etc/httpd/conf/httpd.conf
  验证时:
 sudo -l 查看权限并验证
 sudo + 绝对命令
17.使用别名提权
 定义用户别名    
 User_Alias  别名名称 = 用户名列表
 User_Alias  HTTPUSERS =  webamdin, webadmin2
 定义主机别名   
 Host_Alias    别名名称 = 主机名列表
 Host_Alias    MYPC=localhost,  host50

 定义命令别名
 Cmnd_Alias 别名名称 = 命令列表
 Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

 用户别名名称  主机别名=命令别名名称
 HTTPUSER  MYPC=SOFTWARE
 启用日志记录提权用户执行过的命令
 vim /etc/sudoers
 Defaults logfile="/var/log/sudo"
18.ssh服务访问控制:
 vim /etc/ssh/sshd_config 
 17 Port 22022    (访问端口)
 19 ListenAddress 192.168.4.51  (访问这个ip)
 配置白名单:
 AllowUsers 用户名1  用户名2@客户端地址
 AllowGroups 用户组名1  用户组名2
 配置黑名单 : 只有在黑名单列表里的用户不可以访问
 DenyUsers  用户名1     用户名2@客户端地址
 DenyGroups    用户组名1    用户组名2 
19.配置ssh服务仅允许密钥对认证登录
 1)创建密钥对:  ls  ~/.ssh/
 [root@room9pc17 ~]#rm  -rf ~/.ssh
 [root@room9pc17 ~]#ssh-keygen    // 创建密钥对
 [root@room9pc17 ~]# ls ~/.ssh/
 id_rsa  id_rsa.pub
 2)ssh-copy-id   root@192.168.4.50  //上传密钥对
 3)client端禁用密码认证登录
 vim  /etc/ssh/sshd_config
 81 PasswordAuthentication  no     //禁用密码认证登录
 :wq
 #systemctl restart  sshd

1.sestatus  查看当前系统selinux的状态
2. 查看安全上下文
   查看进程  ps  aux  -Z
   查看文件  ls   -lZ  文件名
   查看目录  ls    -ldZ  目录名
3.安全上下文的组成
system_u:object_r:net_conf_t:s0
用户:角色:访问类型:参数
4.SELinux启用后的一般操作规律:
创建新文件时,新文件继承父目录的安全上下文。
移动文件时,保持原有的安全上下文不变
拷贝文件时,继承目标目录的安全上下文
5.修改访问类型
]# chcon -R  -t   访问类型  目录名   //递归修改 
]# chcon -t   访问类型  文件名 
]# chcon -t httpd_sys_content_t  /var/www/html/test1.html 
6.恢复文件访问类型?
]# restorecon -R 目录名   //递归恢复
]# restorecon 文件名
]# restorecon /var/www/html/test2.html 
7.selinux布尔值  (功能开关)
查看bool值
#getsebool -a 
#getsebool -a  |  grep -i ftp
修改bool值
#setsebool  -P   选项=1|0
#setsebool  -P   选项   on|off
8.配置vsftpd服务允许匿名ftp用户, 可以上传和下载文件
1)装包vsftpd
2)修改配置文件
sed -n '29p' /etc/vsftpd/vsftpd.conf anon_upload_enable=YES 开启上传功能
3)创建共享文件
  mkdir /var/ftp/shardir
  chmod  o+w  /var/ftp/shardir
  systemctl  restart  vsftpd
4)修改seliunx
 setsebool -P ftpd_anon_write=1
 setsebool -P ftpd_full_access on
5)客户端 
 安装访问ftp软件:yum -y install ftp 
 lcd  切换到本机目录
 get  下载
 put  上传
6)启用selinux日志程序记录报错信息:
 cat /var/log/messages
 [root@host50 ~]# sealert -l a9db74ee-ff0d-45c7-8a4d-34d4bf5bc3c4

1.数据 加密 解密 方式:
对称加密:  加密和解密使用相同的计算规则
非对称加密:加密和解密使用不相同的计算规则
对称加密算法: DES   AES
非对称加密算法: RSA    DSA
Hash散列技术,保证数据的完整性。 md5sum    shasum
2.gpg 对称加密 
 加密    gpg   -c    文件名
 解密    gpg   -d    文件名
3.gpg 非对称加密(使用密钥对)
 1) 创建密钥对  ~/.gnupg/
 #gpg   --gen-key
 #ls   ~/.gnupg/
 2) 导出公钥 并把公钥文件传给usera
 [userb@room9pc17 ~]$ gpg --export -a  > /tmp/userb.pub
 [ userb@room9pc17 ~]$ cat /tmp/userb.pub 
 usera(加密)
 3) 导入公钥文件~/.gnupg
  [usera@room9pc17 ~]$ gpg --import  /tmp/userb.pub
  [usera@room9pc17 ~]$ ls   ~/.gnupg
 4) 使用公钥加密文件 ,把加密后的文件给userb
  [usera@room9pc17 ~]$ gpg -e  -r usera b.txt
  [usera@room9pc17 ~]$ mv  b.txt.gpg  /tmp/
 5) userb解密 
  调用私钥解密 解密文件
  [userb@room9pc17 ~]$ gpg -d  /tmp/b.txt.gpg   > u.txt 
                                         cat  u.txt
4.gpg数字签名   功能验证数据完整性
userb   
私钥签名
  vim  c.txt
  gpg -b  c.txt
  ls   c.*
  cp c.*   /tmp/
  gpg --fingerprint
usera
公钥验证签名
#gpg --verify /tmp/c.txt.sig
#cat  /tmp/c.txt
root#  sed  -i  '1s/^/aaa/'  /tmp/c.txt
usera
#cat  /tmp/c.txt
#gpg --verify /tmp/c.txt.sig
抓包与扫描
一.nmap扫描软件
1.装包:yum -y install nmap
2.作用:
 1):探测一组主机是否在线
 2):扫描 主机端口,嗅探所提供的网络服务
 3):推断主机所用的操作系统
3.功能参数:man nmap 参考
语法格式:nmap    [扫描类型]    [选项]     <ip地址>
扫描类型:
⑴ TCP connect()端口扫描(-sT参数)。
⑵ TCP同步(SYN)端口扫描(-sS参数)。
⑶ UDP端口扫描(-sU参数)。
⑷ Ping扫描(-sP参数)。
选项有哪些: -A   -n   -p 
ip地址表示方式:
192.168.4.53
192.168.4.100-200
192.168.4.53,57,68
应用:
# nmap -n -sP  172.40.55.100-200  --excludefile   /root/ip.txt
脚本:
vim /root/web.sh
#/bin/bash
for   ip   in   180   143    158  
do
    nmap  -n  -sS  -p  80  172.40.55.$ip  | grep  -q open
    if  [ $? -eq 0  ];then
         echo   " 172.40.55.$ip  80  open"
    else
         echo   " 172.40.55.$ip  80  closed"
   fi
done
:wq
把这个脚本变成系统可执行的命令
 1):#mkdir  /myself
      #mv /root/web.sh   /myself/checkweb
      #chmod  +x   /myself/checkweb
 2):vim /etc/profile
....
export  PATH=/myself:$PATH
:wq
#resource  /etc/profile
#echo $PATH
#cd  /usr/local/
#checkweb
二.抓包工具tcpdump:(默认都安装了)
1.语法格式:tcpdump   [选项]    [过滤条件]
选项  
-i  网络接口名  //不指定接口名时,默认抓eth0 接口进出的包
-c 数字             //指定抓包个数,不指定的话会一直抓包
-A                    //以可阅读的方式抓取数据包
-w  文件名.cap   //把抓到的数据信息存储到文件里。默认会输出到屏幕上。
-r    文件名.cap  //读取抓包文件的内容
过滤条件:  抓包时,不加过滤条件,会抓所有到达的数据包。反之,只抓复合条件的数据包。
tcpdump -i eth0  -A  tcp  port 8090   and    host  192.168.4.53
tcpdump -i eth0  -A  tcp  port 22 and net 192.168.4.0/24
tcpdump -i eth0  -A  tcp  port  8090  and   host  192.168.4.53    or   host  192.168.4.54
tcpdump -i eth0  -A  tcp  port  8090  and \(host  192.168.4.53    or   host  192.168.4.54\)
tcpdump -i eth0  -A  tcp  port  25  -w /tmp/mail2.cap
tcpdump   -A    -r /tmp/mail2.cap
三.协议分析软件wireshark  (宿主机)图形界面的软件
安装软件包
# yum -y install  wireshark    wireshark-gnome
打开图形界面
应用程序->互联网->软件名 ---> 文件菜单->打开文件/root/mail2.cap

tcp 传输协议 标记位
SYN  新连接
ACK 确认连接
FIN   断开连接 
push( P) 传输数据
RST  重新建立连接

应用层    http  smtp  ftp
传输层   tcp  upd
网络层   ip包
物理层   数据流 (0101)

一.部署CA服务器
1.部署证书签发环境
 1)# vim /etc/pki/tls/openssl.cnf
40 [ CA_default ]
42 dir             = /etc/pki/CA
43 certs           = $dir/certs
45 database        = $dir/index.txt   *
50 certificate     = $dir/my-ca.crt     *
51 serial          = $dir/serial   *
55 private_key     = $dir/private/my-ca.key  *

128 [ req_distinguished_name ]
130 countryName_default             = CN  国家
135 stateOrProvinceName_default     = beijing  省
138 localityName_default            = beijing  城市
141 0.organizationName_default      = tarena  公司名称
148 organizationalUnitName_default  = ope    部门名称

 84 [ policy_match ]   // 匹配策略
 85 countryName             = match
 86 stateOrProvinceName     = match
 87 organizationName        = match
 88 organizationalUnitName  = optional
 89 commonName              = supplied
 90 emailAddress            = optional
2)根据配置文件的设置创建对应的文件
echo 01  > /etc/pki/CA/serial 创建流水文件
chmod 600 /etc/pki/CA/serial 安全考虑修改文件权限
touch  /etc/pki/CA/index.txt  创建记录文件
chmod 600  /etc/pki/CA/index.txt
 3)创建私钥文件
#cd /etc/pki/CA/private
# openssl  genrsa  -des3  2048  >  my-ca.key (密码123456)
#cat my-ca.key 
#chmod  600 my-ca.key
 4)创建根证书文件
#cd  /etc/pki/CA
# openssl  req -new -x509 -key ./private/my-ca.key  -days 365 > my-ca.crt
Country Name (2 letter code) [CN]:
State or Province Name (full name) [beijing]:
Locality Name (eg, city) [beijing]:
Organization Name (eg, company) [tarena]:
Organizational Unit Name (eg, section) [ope]:
Common Name (eg, your name or your server's hostname) []:ca.tedu.cn
Email Address []:plj@163.com
二.配置网站加密https
配置网站服务器 192.168.4.53  www.tedu.cn
1. 创建私钥文件
   #cd  /etc/pki/tls/private/
   #openssl  genrsa   2048   > www.key
2. 创建证书请求文件
   # openssl     req   -new   -key  www.key    >   /root/www.csr
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:tarena
Organizational Unit Name (eg, section) []:ope
Common Name (eg, your name or your server's hostname) []:www.tedu.cn
Email Address []:jim@163.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
3. 提交证书请求文件给CA服务器
4. 配置CA服务器,审核证书请求文件并签发数字证书文件
#cd /etc/pki/CA/certs
#openssl    ca    -in   /tmp/www.csr  >   www.crt
5. 下发数字证书文件给网站服务器
6. 在网站服务器配置,调用私钥文件和数字证书文件,然后重启网站服务
yum -y  install mod_ssl
vim /etc/httpd/conf.d/ssl.conf
100 SSLCertificateFile /etc/pki/tls/certs/www.crt
107 SSLCertificateKeyFile /etc/pki/tls/private/www.key
:wq
7.在浏览器里访问
http://www.tedu.cn/test.html
https://www.tedu.cn/test.html   (不信任)
想要信任网站需要在CA服务器下载根证书
下载根证书文件并安装
http://192.168.4.55/ca
在浏览器里访问
https://www.tedu.cn/test.html   (验证通过 )
8.配置网站服务器,访问80端口的请求,自动跳转到本机的443端口。
(端口重定向)
[root@53 ~]# vim /etc/httpd/conf/httpd.conf
<ifmodule ssl_module>
sslrandomseed startup builtin
sslrandomseed connect builtin
</ifmodule>
rewriteengine on
rewritecond  %{server_port}  !^443$
rewriterule (.*)  https://%{server_name}/$1 [R]
[root@53 ~]# systemctl restart httpd
一.做邮件服务器 (在主机52)
1.运行postfix服务 能够发邮件(端口25)
#yum  -y   install  postfix
#systemctl   start  postfix  ;  systemctl   enable  postfix
#netstat  -utnalp  | grep :25
#ps  -C  master 邮件服务进程
# vim /etc/postfix/main.cf
113 inet_interfaces = all
116 #inet_interfaces = localhost
419 home_mailbox = Maildir/
:wq
#systemctl   restart  postfix
2.客户端51 测试能否发送邮件
yum  -y  install  telnet
# telnet  192.168.4.52 25      //连接邮件服务器
helo  pc51                             //客户定义主机名
mail  from:lili@localhost     //发件人
rcpt  to:jerry@localhost      //收件人
data                                       //写邮件内容
邮件内容
.                                            //提交邮件
quit                                       //断开连接
3.查看邮件是否被投递到用户的邮箱里
#cd /home
#cat  jerry/Maildir/new/1517275339.Vfd02I4000084M202939.host52
4.能够收邮件(运行dovecot服务110端口)
# yum -y install    dovecot
#cd  /etc/dovecot/
#vim conf.d/10-mail.conf
24 mail_location = maildir:~/Maildir   定义从那个文件读取邮件   
:wq

#vim conf.d/10-auth.conf
10 disable_plaintext_auth = no  启用明文显示
:wq
systemctl  start dovecot
systemctl  enable dovecot
5.测试能否收邮件
#yum  -y   install  telnet
#telnet    localhost   110  //连接本机收邮件的服务
user    jerry                      //收件人用户名
pass   123456                   //邮箱密码
list               //列出邮件
retr   1               //查看第1封邮件的内容
quit                           //断开连接
----------------------------------------------------------------------------------------
二.配置邮件加密
配置邮件服务器 192.168.4.52   mail.tedu.cn
1.创建私钥文件
# cd  /etc/pki/tls/private/
]# openssl  genrsa  2048  >  mail.key 
2.创建证书请求文件
]#openssl   req    -new   -key  mail.key   >  /root/mail.csr
3 提交证书请求文件给CA
]#scp  /root/mail.csr   192.168.4.55:/root/
4.CA服务器审核证书请求文件并签发
cd /etc/pki/CA/certs
openssl    ca   -in  /root/mail.csr   >  mail.crt
5.下发数字证书文件给邮件服务器
]# scp mail.crt   192.168.4.52:/root/
6.在邮件服务器配置收邮件服务器运行时,调用私钥文件和数字证书文件
vim /etc/dovecot/conf.d/10-ssl.conf
 14 ssl_cert = </etc/pki/dovecot/certs/mail.crt
 15 ssl_key =  </etc/pki/dovecot/private/mail.key
]# cp /root/mail.crt   /etc/pki/dovecot/certs/
]# cp /etc/pki/tls/private/mail.key  /etc/pki/dovecot/private/
]#  systemctl  restart  dovecot
]#  netstat  -utnalp  | grep  dovecot
7.配置发邮件服务器运行时,调用私钥文件和数字证书文件
#vim /etc/postfix/main.cf
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/pki/tls/private/mail.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
:wq
#systemctl  restart postfix
#netstatus  -utnalp   | grep master

一.监控对象
 网络流量: eth (进出的流量)----------------》ping
 硬件资源的使用情况: cpu(sar,uptime), 内存(free), 储存 (df) 
 服务运行状态: 运行 停止 休眠 僵尸 ---------------->systemctl status 
 操作系统运行情况: 
      进程数量(ps aux | wc -l)  用户数量(wc -l users ,wc -l /etc/passwd)
--------------------------------------------------------------------------------------
二.搭建Nagios监控服务器
1.部署Nagios服务运行环境
 yum -y install httpd php
2.源码安装Nagios软件 (nagios-4.2.4 )
 yum -y install gcc gcc-c++ 安装编译工具
 useradd nagios      (创建进程用户)
 groupadd nagcmd      (创建组)
 usermod -G nagcmd nagios (因为某些文件需要此用户权限)
----------------------------------------------------------------
 cd nagios-4.2.4 
 ./configure --with-nagios-user=nagios --with-nagios-group=nagcmd --with-
 command-user=nagios --with-command-group=nagcmd (根据help)
 make all 
 make install 
 make install-init
 make install-commandmode
 make install-config
 make install-webconf
 make install-exfoliation 
 软件的安装路径:ls /usr/local/nagios/
3.源码安装监控插件
 cd nagios-plugins-2.1.4
 ./configure
 make
 make install
 插件安装位置: ls /usr/local/nagios/libexec/
4.启动监控服务
 /etc/init.d/nagios start
5.设置访问监控网页的用户名和密码
 htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
 /etc/init.d/nagios restart
 systemclt restart httpd
6.访问监控服务器查看监控信息
 其他电脑访问URL  http:192.168.4.56/nagios/ 输入用户和密码
 nagios默认监控本机资源,资源如下:
 CPU负载                     check_load
 系统用户登陆数量         check_users
 系统网站服务运行状态   check_http
 ping              check_ping
 根分区空闲空间            check_disk
 ssh服务                     check_ssd
 交换分区使用               check_swap
 系统总进程数量            check_procs

 监控显示状态:ok warning  unknown(配置错误)  critical(报错)  pending(监控中)
7.nagios监控过程:
 nagios服务运行时,调用监控插件,并设置监控的阀值,分别是警告值和错误值。nagios服务
 把插件获取到的数据和设置的阀值比较,然后显示监控状态。
 显示  unknown   状态  表示nagios服务配置文件有问题。
 显示  pending     状态 表示正在获取被监控资源的数据
-----------------------------------------------------------------------------
三.配置Nagios监控服务器
1.配置文件说明
 nagios.cfg 主配置文件   启动时加载的文件
 resource.cfg 宏定义文件  设置nagios服务使用的变量
 cgi.cfg 定义CGI访问权限
 templates.cfg    //定义监控模板配置文件
 timeperiods.cfg     //定义监控时间模板配置文件
 contacts.cfg  //定义接收报警邮件的配置文件

 commands.cfg    //定义监控命令
 define    command  {
        command_name    check_local_disk  //命令名称
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$     //监控插件
  }

 localhost.cfg    //监控本机配置文件
 define host{  //定义监控主机
         use            linux-server     //定义监控主机使用的模板  
         host_name        localhost   //定义主机
         alias                  localhost   //定义描述信息 可选项
         address             127.0.0.1   //被监控主机的ip 地址
     }

  define  service  {  //定义监控主机资源
         use                     local-service    //监控资源使用的模板
         host_name                localhost  //主机名
         service_description   root_paticion  //设置监控资源显示名称
         check_command     check_local_disk!20%!10%!/   //调用的监控命令
   }

2.检测配置文件是否配置错误(方便操作,可作别名)
 # /usr/local/nagios/bin/nagios -v  /usr/local/nagios/etc/nagios.cfg
 vim ~/.bashrc
 alias  checknagios='/usr/local/nagios/bin/nagios -v  /usr/local/nagios/
 etc/nagios.cfg'
 :wq
3.监控插件的使用
 #cd /usr/local/nagios/libexec/
  ./插件名  --help     //查看插件的帮助信息

 CPU负载                  check_load
 系统登录用户数量   check_users
 网站服务运行状态   check_http
 PING                        check_ping
 根分区空闲空间       check_disk  (监控磁盘的空闲空间)
 ssh服务                   check_ssh
 交换分区使用量       check_swap
 系统总进程数量       check_procs
 ]# ./check_users -w  1  -c  2
 ]# ./check_http -I 192.168.4.51 -p 8090
 ]# ./check_ssh -H 192.168.4.51  -p  22122
 ]# ./check_disk -w 50%  -c 25%  -p /boot
 ]# ./check_procs  -w 20  -c 21  -s R
 ]# ./check_procs  -w 10  -c 11 -s  Z      (pid   0-65535)
 ]# ./check_procs  -w 20  -c 21  -s S
 ]# ./check_procs  -w 100  -c 101
 ]# ./check_load  -w  0.5,1.0,1.5   -c 1.0,2.0,2.5
 ]# ./check_ping -H 192.168.4.51 -w 10,50%  -c 15,75% 
 ]# ./check_swap  -w  50%  -c 25%
 ]# ./check_tcp -H 192.168.4.51 -p 80
 ]# ./check_tcp -H 192.168.4.51 -p 3306
--------------------------------------------------------------------------------------------
一.监控主机的配置步骤:
1 定义监控命令  commands.cfg
2 创建监控主机的配置文件  vim  ser51.cfg
3 在服务主机配置文件nagios.cfg 文件里 加载监控主机的配置文件ser51.cfg
4 检查配置是否有错误  checknagios
5 重启nagios监控服务
6 访问监控页面查看监控信息
7 若监控项有警告状态或严重错误状态的 查看是否收到报警邮件
------------------------------------------------------------------------------------------
二.监控远端主机公有资源  192.168.4.51
1.监控远端主机的公有资源(各种服务 httpd   mysql  ssh )
 1)定义监控命令  commands.cfg
 vim commands.cfg
 #monitor mysqld
 define command {
  command_name  check_51_mysqld
  command_line  $USER1$/check_tcp -H 192.168.4.51 -p  3306
 }
 #monitor  httpd
 define command {
  command_name check_51_httpd
  command_line $USER1$/check_http -H 192.168.4.51 -p  8090
 }
 #monitor  sshd
 define command {
    command_name check_51_sshd
    command_line $USER1$/check_ssh -H 192.168.4.51
 }

 2)创建监控主机的配置文件  vim  ser51.cfg
 define host{
        use                     linux-server            
        host_name               ser51
        address                 192.168.4.51
        }

 define service{
        use                             local-service         
        host_name                       ser51
        service_description             httpd
    check_command           check_51_httpd
        }

 define service{
        use                             local-service         
        host_name                       ser51
        service_description             mysqld
    check_command           check_51_mysqld
        }

 define service{
        use                             local-service         
        host_name                       ser51
        service_description             sshd
    check_command           check_51_sshd
        }

 3)在服务主机配置文件nagios.cfg 文件里 加载监控主机的配置文件ser51.cfg
 vim nagios.cfg
 cfg_file=/usr/local/nagios/etc/objects/ser51.cfg
 4)检查配置是否有错误
 /usr/local/nagios/bin/nagios -v  /usr/local/nagios/etc/nagios.cfg
 5)重启nagios监控服务
 /etc/init.d/nagios  restart
---------------------------------------------------------------------------------------
三.监控远端主机的私有资源(系统运行情况,磁盘使用量   登录用户数量    进程数量)
1.配置被监控端 51
1)安装获取私有资源的插件 ,并使用插件
 ]# tar -zxf nagios-plugins-2.1.4.tar.gz 
 ]# cd nagios-plugins-2.1.4/
 ]# rpm -q gcc gcc-c++ || yum -y  install  gcc gcc-c++
 ]# ./configure  && make && make install
 ]# ls /usr/local/nagios
2)运行nrpe服务(端口号5666)
 #yum  -y  install  openssl-devel
 #useradd  nagios
 ]# tar -zxf nrpe-3.0.1.tar.gz 
 ]# cd nrpe-3.0.1/
 ]# ./configure
 ]#  make  all
 make   install-daemon
 make   install-config
 make   install-init
 make   install-plugin
3)修改配置文件
 ]# vim /usr/local/nagios/etc/nrpe.cfg
 98 allowed_hosts=127.0.0.1,    192.168.4.56  添加允许远程访问的主机

 command[nrpe_51_users]=/usr/local/nagios/libexec/check_users -w 1 -c 2

 command[nrpe_51_root]=/usr/local/nagios/libexec/check_disk  -w  20%   -
 c  10%  -p   /
 command[nrpe_51_boot]=/usr/local/nagios/libexec/check_disk  -w  20%   -
 c  10%  -p   /boot
 command[nrpe_51_prun]=/usr/local/nagios/libexec/check_procs  -w  10 -c 
 11   -s  R
 command[nrpe_51_pzbi]=/usr/local/nagios/libexec/check_procs  -w  5 -c 
 6   -s  Z
 command[nrpe_51_psum]=/usr/local/nagios/libexec/check_procs  -w  100 -
 c 101  (定义命令参数)
4)启动nrpe服务
 ]# systemctl  enable nrpe  ; systemctl  start nrpe
 ]#netstat  -utnalp   | grep  :5666
5) 测试nrep服务配置
 [root@PC51 ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -p 
 5666 -c nrpe_51_users
2.配置监控服务器:192.168.4.56
1)安装连接nrpe服务的插件check_nrpe    并测试
 #yum  -y  install openssl-devel
 ]# tar -zxf nrpe-3.0.1.tar.gz 
 ]# cd nrpe-3.0.1/
 ]# ./configure
 ]# make  all
 ]# make   install-plugin
 ]#ls  /usr/local/nagios/libexec/check_nrpe

 [root@mon56 nrpe-3.0.1]# /usr/local/nagios/libexec/check_nrpe  -H   
 192.168.4.51  -p 5666 -c  nrpe_51_users
2)定义监控远端主机私有资源的监控命令
 vim commands.cfg
 define  command  {
    command_name   check_51_user
    command_line $USER1$/check_nrpe  -H  192.168.4.51  -p 5666 -c  
 nrpe_51_users
 }
3)监控远端主机时,调用定义的监控命令  
 vim ser51.cfg
 define service{
        use                             local-service
        host_name                       ser51
        service_description             users
        check_command                   check_51_user
        }
 :wq
4)配置nagios服务运行时,加载监控远端主机的配置文件
5)检查配置并重启nagios服务
 #checknagios
 #systemctl  restart  nagios
6)登录监控页面查看监控信息
----------------------------------------------------------------------------------------
配置监控报警nagios服务会给指定的邮箱发邮件
1.]# grep email /usr/local/nagios/etc/objects/contacts.cfg 
        email                           nagios@localhost
2. vim /etc/hosts
         127.0.0.1    mon56
3.echo 123456  | passwd --stdin nagios
4.systemctl  restart postfix
----------------------------------------------------------------------------------------------
扩展知识:
配置nagios服务监控时,调用自定义监控脚本(shell脚本)
配置nagios服务使用短信的方式接收报警消息。
配置nagios主机依赖监控
配置nagios服务依赖监控
配置nagios绘制监控图像
部署Cacti监控
一.部署cacti 运行环境LAMP
1.安装运行依赖软件:
yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql gcc gcc-c++
systemctl restart httpd mariadb
systemctl enable httpd mariadb
安装绘图工具yum -y  install   rrdtool
安装cacti连接远端主机的网络管理协议yum -y  install net-snmp*

2.设置数据库管理员本机登陆密码
mysqladmin -hlocalhost -uroot password “123456”
mysql -uroot -p123456
3.创建储存cacti配置信息的库, 授权连接时的连接用户。
mysql>  create  database  cactidb ;
mysql>  grant  all  on  cactidb.*  to  yaya@"localhost"  identified by   "123456";
4.测试PHP能否连接本机的数据库服务
vim /var/www/html/linkdb.php
<?php
$db=mysql_connect("localhost","yaya","123456");
if($db){   echo  "ok";    }else{   echo  "err";    };
?>
:wq
访问该网页时,出现ok即环境配置ok
二.安装Cacti软件  cacti-0.8.8h.tar.gz
tar -zxf cacti-0.8.8h.tar.gz -C /var/www/html/
 cd /var/www/html/
mv  cacti-0.8.8h/   cacti
chown -R apache:apache  cacti
三、做初始化配置
1.还原cacti自带数据库内容
#cd  /var/www/html/cacti
#mysql -hlocalhost -uyaya  -p123456  cactidb  < cacti.sql
2.修改cacti配置文件,配置cacti使用数据库的库名,用户,和密码
]# vim /var/www/html/cacti/include/config.php
 26 $database_type = "mysql";
 27 $database_default = "cactidb";
 28 $database_hostname = "localhost";
 29 $database_username = "yaya";
 30 $database_password = "123456";
 31 $database_port = "3306";
 32 $database_ssl = false;
3.访问管理页面做初始化配置,登录监控页面的帐号密码都是:admin
URL   http://192.168.4.56/cacti
四.cacti软件的使用
1.安装数据高速采集器spine
tar -zxf cacti-spine-0.8.8h.tar.gz 
cd cacti-spine-0.8.8h/
 ./configure  --with-mysql
make
make install
ls /usr/local/spine/
2.修改配置文件(此配置文件需要手动cp),指定访问的数据库名,和用户密码
]# cp /usr/local/spine/etc/spine.conf.dist   /etc/spine.conf
vim   /etc/spine.conf
 33 DB_Host         localhost
 34 DB_Database     cactidb
 35 DB_User         yaya
 36 DB_Pass         123456
 37 DB_Port         3306
:wq
3.登录cacti管理页面配置 使用spine采集器程序

/usr/local/spine/bin/spine
五、配置Cacti监控服务,监控远端主机  192.168.4.51
1 。运远端主机行snmpd服务:装包  修改配置文件  启动服务  查看端口号
]# yum  -y  install net-snmp*
]# vim /etc/snmp/snmpd.conf
]# sed -i  '41s/default/192.168.4.56/'   /etc/snmp/snmpd.conf
]# sed -i  '62s/systemview/all/'   /etc/snmp/snmpd.conf
]# sed -i  '85s/^#//'   /etc/snmp/snmpd.conf
]# systemctl  start snmpd ; systemctl enable snmpd
[root@a51 ~]# systemctl  stop firewalld
[root@a51 ~]# setenforce  0
2.配置监控服务器192.168.4.56
1) 登录管理页面
2) 添加监控新主机,并选择监控模板和监控项
3) 给监控项创建图像
4) 创建图像树,并把图像添加到图像树里
5) 编写抓取数据的计划任务
[root@mon56 ~]# sed -n '878p' /etc/php.ini 
date.timezone =  Asia/Shanghai
]#crontab  -e
*/5   *  *  *   *    php /var/www/html/cacti/poller.php  &> /dev/null
:wq
]# systemctl  enable crond
3.监控本机  192.168.4.56
1) 运行snmpd服务:装包  修改配置文件  启动服务  查看端口号
#rpm  -qa  | grep -i net-snmp
]# sed -i '41s/default/127.0.0.1/' /etc/snmp/snmpd.conf
]# sed -i '62s/systemview/all/' /etc/snmp/snmpd.conf
]# sed -i '85s/^#//' /etc/snmp/snmpd.conf
]# systemctl  start snmpd 
]# systemctl  enable snmpd 
]# ps -C  snmpd
]# netstat  -utnalp  | grep snmpd

2) 添加监控新主机,并选择监控模板和监控项
3) 给监控项创建图像
4) 创建图像树,并把图像添加到图像树里
5) 查看监控信息

5.监控报警 (在监控服务器端配置)
1)安装支持报警功能的插件 并 激活
tar -zxf monitor-v1.3-1.tgz 
mv monitor /var/www/html/cacti/plugins/
tar -zxf settings-v0.71-1.tgz 
mv settings /var/www/html/cacti/plugins/
tar -zxf thold-v0.5.0.tgz 
mv thold /var/www/html/cacti/plugins/
2)准备邮件服务器
#rpm  -q  postfix
#systemctl   restart  postfix
]# netstat -utnalp  | grep :25
[root@mon56 ~]# useradd cactiuser
[root@mon56 ~]# echo 123456  | passwd --stdin cactiuser
3)配置监控报警
 创建消息列表 定义收件人
 创建监控报警项
 指定发邮件服务
 测试监控报警配置(当监控报警项被触发时给邮箱发邮件)

部署搭建Zabbix监控服务器
1.部署Zabbix监控服务运行环境  LAMP
yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql gcc gcc-c++
useradd  zabbix
2.安装软件包
]# tar -zxf zabbix-3.2.3.tar.gz
]# cd zabbix-3.2.3/
]# ./configure  --prefix=/usr/local/zabbix   --enable-server   
--enable-agent    --with-mysql
]#make  install
]#ls /usr/local/zabbix
3.创建web页面:
]#cd  zabbix-3.2.3
]# cp -r  frontends/php    /var/www/html/zabbix
4.创建存储配置信息的库和表,并授权用户
]# mysql -uroot -p123456
mysql>  create  database   zabbixdb;
mysql>  grant  all  on   zabbixdb.*   to   yaya2@"localhost"  identified by  "123456";
mysql>quit;
5.还原备份数据库中的表(一定要按照以下顺序还原)
cd zabbix-3.2.3/database/mysql
]#mysql  -uyaya2   -p123456  zabbixdb  <   schema.sql
]#mysql  -uyaya2   -p123456  zabbixdb  <   images.sql  
]#mysql  -uyaya2   -p123456  zabbixdb  <   data.sql
6.在web界面安装软件时,会有提示报错内容,需要先完成以下配置方可安装
]# vim /etc/php.ini
672 post_max_size = 16M
384 max_execution_time = 300
394 max_input_time = 300
]#yum  -y  install  php-gd    php-xml
]#rpm -ivh --nodeps php-bcmath-5.4.45-13.el7.remi.x86_64.rpm 
]#rpm -ivh --nodeps php-mbstring-5.4.45-13.el7.remi.x86_64.rpm
]#systemctl  restart  httpd

]#  chmod  o+w /var/www/html/zabbix/conf
7.访问web页面做初始化配置
URL  http://192.168.4.56/zabbix

二.修改配置
1.修改服务配置文件
 vim /usr/local/zabbix/etc/zabbix_server.conf
  87    DBName=zabbixdb
  103   DBUser=yaya2
  111   DBPassword=123456
2.创建启动脚本
  cd cd  zabbix-3.2.3   
  cp misc/init.d/fedora/core/zabbix_agentd   /etc/init.d/
  chmod  +x   /etc/init.d/zabbix_agentd
  vim  /etc/init.d/zabbix_agentd
   BASEDIR=/usr/local/zabbix    (修改22行,告诉zabbix的位置)
3.启动zabbix服务,查看端口
  /etc/init.d/zabbix_server  start
  netstat -antpu |grep 10051
三.配置监控
1.配置被检控端vh01
  创建zabbix用户;安装gcc-c++软件
2.在vh01安装zabbix软件
  tar -xf zabbix-3.2.3.tar.gz  
  cd  zabbix-3.2.3
  ./configure --prefix=/usr/local/zabbix --enable-agent
   make install 
3.修改服务配置文件
  vim /usr/local/zabbix/etc/zabbix_agentd.conf
  30 LogFile=/tmp/zabbix_agentd.log
  91 Server=127.0.0.1, 192.168.4.3
  132 ServerActive=192.168.4.3:10051
4.创建启动配置文件
  cp misc/init.d/fedora/core/zabbix_agentd   /etc/init.d/
  chmod  +x   /etc/init.d/zabbix_agentd
5.修改脚本文件启动服务时,加载程序的目录
 vim /etc/init.d/zabbix_agentd 
  22  BASEDIR=/usr/local/zabbix
6.启动被检控端服务
  /etc/init.d/zabbix_agentd  start
  netstat  -utnalp  | grep  :10050
三.在web管理界面添加被检控主机
1.添加监控主机 选择监控模板 查看监控信息

四.自定义监控项
A:使用软件自带的命令创建新的监控项
1.创建模版  atmp
2.创建应用集 services
3.创建监控项   名称 --》键值
4.监控主机时调用创建的模版 atmp
5.查看监控信息

B:自定义监控命令创建新的监控项
要求监控主机2 能够登陆系统的用户的个数
1.配置被检控端vh02
 1)启用自定义命令监控功能
   vim /usr/local/zabbix/etc/zabbix_agentd.conf
   263 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
   278 UnsafeUserParameters=1 (下面可以看到监控命令模版)
 2)定义监控命令
  vim  /usr/local/zabbix/etc/zabbix_agentd.conf.d/getusers.conf
  UserParameter=get_login_users,grep  "/bin/bash" /etc/passwd | wc -l
 3)重启zabbix_agentd服务
  /etc/init.d/zabbix_agentd stop
  /etc/init.d/zabbix_agentd start
 4)测试配置(--help 可以查看帮助)
   /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1  -p 10050  -k get_login_users
2.配置监控服务器
 1)测试被检控的自定义命令
   /usr/local/zabbix/bin/zabbix_get -s 192.168.4.2 -p 10050 -k getusers
 2)在web页面创建新的监控项,调用被监控主机自定义的命令(同上)
 3)在web页面查看监控信息
五.配置监控报警
监控2主机能登录系统的用户数量大于4个时发送报警邮件给zabbix@localhost 邮箱。
1.在监控服务器端配置邮件服务器和邮箱帐号
2.配置监控报警
 1)创建触发器  
 2)创建动作 
 3)创建邮箱账号 
 4)指定邮件服务器
 5)当触发器被触发后查看zabbix@localhost 邮箱是否收到邮件

一、使用LVS部署 网站LB集群
LVS工作模式:  LVS/NAT     LVS/DR     LVS/TUN
LVS调度算法: 10种  常用4种(RR   WRR   LC   WLC)。
NAT:通过网络地址的转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈
1.LVS/NAT环境准备
service  iptables  stop ;chkconfig  iptables off
setenforce  0  关闭防火墙和selinux
2.配置所有网关,使服务器和客户端都能ping通
客户端250:
配置网关地址: sed -i ‘7s/0/1/’ /etc/sysctl.conf
               route  -n
               route  add  default  gw  192.168.2.100
A配置网站服务器101/102 :
配置网关地址: route  -n
              route  add  default  gw  192.168.4.100
              route  del  default  gw  192.168.4.100
B配置分发器100
开启内核的路由转发功能
]# sed -i  '7s/0/1/'  /etc/sysctl.conf 
]# sysctl -p  刷新确认
3.安装软件包
]#yum -y  install ipvsadm
4.配置LVS
]# ipvsadm  -Ln 列出已经添加的配置
]# ipvsadm  -C  清除所有配置
]# ipvsadm -A  -t 192.168.2.100:80 -s rr 添加虚拟服务
添加real  server
]# ipvsadm -a  -t 192.168.2.100:80  -r   192.168.4.101:80  -m
]# ipvsadm -a  -t 192.168.2.100:80  -r   192.168.4.102:80  -m
保存配置
]# /etc/init.d/ipvsadm  save
]# cat  /etc/sysconfig/ipvsadm 查看配置
]# /etc/init.d/ipvsadm restart  ;chkconfig  ipvsadm on重启设置自启
watch -n 1 ipvsadm -Ln --stats 查看使用状态
5.在客户端250主机 测试分发器配置:
#elinks  --dump   http://192.168.2.100/test.html
6.]# ipvsadm -d  -t 192.168.2.100:80 -r 192.168.4.103:80 删除realserver 
]# ipvsadm -E  -t 192.168.2.100:80 -s wrr 修改虚拟服务的调度算法
# ipvsadm -e -t 192.168.2.100:80 -r 192.168.4.102:80 -w 3 -m  修改权重值
]# /etc/init.d/ipvsadm  save  保存修改
-----------------------------------------------------------------------------------------
二.LVS/DR  网站  LB集群
real  server 的ip地址要和  vip 地址是一个网段的。
1.配置网站服务器101/102
修改网络接口运行参数
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

绑定vip地址
#ifconfig  lo:1  192.168.4.253/32
永久配置,需要写入到开机自启文件中
vim /etc/rc.local
ifconfig lo:1 192.168.4.253/32
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
:wq
2.配置分发器100
#yum -y  install ipvsadm
绑定vip地址
# ifconfig  eth0:1 192.168.4.253/32
永久配置
#vim /etc/rc.local
ifconfig  eth0:1 192.168.4.253/32
:wq
3.添加虚拟服务 ,和realserver.
ipvsadm -A -t 192.168.4.253:80 -s rr
ipvsadm -a -t 192.168.4.253:80 -r 192.168.4.101:80 -g
ipvsadm -a -t 192.168.4.253:80 -r 192.168.4.102:80 -g
/etc/init.d/ipvsadm save
ipvsadm  -Ln  --stats (只有进来的包 没有出去的包)
4.客户端192.168.4.250测试
#arping   192.168.4.253   (显示的是分发器eth0接口的mac地址)
#elinks --dump  http://192.168.4.253/test.html
5.思考?
LVS 默认不对realserver 不做健康性检查。基于四层负载均衡集群软件
编写脚本  检查realserver 主机上网站服务的状态,当网站服务没运行时 ,把realserver 主机从虚拟服务里删除。
一、使用Haproxy软件部署网站LB集群
1.普通LB集群
客户端                 192.168.4.250
haproxy服务器   192.168.4.100 
网站服务器          192.168.4.101/102
2.配置 haproxy服务器:192.168.4.100
1)装包yum -y install haproxy
2)修改配置文件
cp /etc/haproxy/haproxy.cfg  /etc/haproxy/haproxy.cfg.bak 备份配置文件
vim /etc/haproxy/haproxy.cfg 把59行以下的全部删除,手动写入以下内容
[global]
..........
[default]
.......
stats   uri   /admin  定义访问健康查询界面
listen  lbweb  0.0.0.0:80
cookie  SERVERID rewrite
balance roundrobin  定义算法为轮询访问
server  webA 192.168.4.101:80 cookie app101a check inter 2000  rise 2 fall 5
server  webB 192.168.4.102:80 cookie app102b check inter 2000  rise 2 fall 5
3.启动服务#service  haproxy  start   ; chkconfig   haproxy  on
4.客户端250 测试
#elinks   --dump   http://192.168.4.100/test.html
查看web页面显示健康性检查信息 http://192.168.4.100/admin
----------------------------------------------------------------------------------------------------
1. 区分业务的LB集群(七层)
客户端                 192.168.4.250
haproxy服务器   192.168.4.100 
网站服务器          192.168.4.101/102
2.修改配置文件
]# vim   haproxy.cfg
    stats  uri  /admin
frontend  weblb    192.168.4.100:80
    acl  pathhtml         path_end   -i   .html
    acl  pathphp          path_end   -i   .php

    use_backend   htmlgrp  if pathhtml
    use_backend   phpgrp  if pathphp
    default_backend   htmlgrp
backend htmlgrp
    balance     roundrobin
    server  app101 192.168.4.101:80  check
    server  app102 192.168.4.102:80  check
backend  phpgrp
    balance     roundrobin
    server  app103  192.168.4.103:80  check
    server  app104  192.168.4.104:80   check
]# service  haproxy  start

二、使用keepalived软件部署网站HA集群
能够实现任意单故障节点的高可用集群
配置网站高可用集群   103  和 104
1 在主机上都安装keepalived软件
yum  -y  install keepalived
2 修改服务的主配置文件/etc/keepalived/keepalived.conf
2.1修改主服务器192.168.4.103
state   MASTER
priority 150
2.2修改备用服务器192.168.4.104
vim   /etc/keepalived/keepalived.conf
....
state  BACKUP
priority 100
3 启动服务
/etc/init.d/keepalived  start  
chkconfig   keepalived  on
4 查看是否获取到vip 地址
#ip   addr   show   |  grep   192.168.4.
4测试
250: elinks   --dump  http://vip/teset.php
 思考:  HA 集群中  主服务器没有宕机,但是应用服务(httpd)停止了,为问主服务器 是否会是否vip地址?
                                    192.168.4.253

------------------------------------------------------------------------------
三、使用keepalvied 做lvs分发器的HA集群
3.1 配置KVS/DR模式的LB集群(网站)
   3.1.1、配置网站服务器101 、 102 
              运行网站服务 并编辑网页文件
              修改网络接口运行参数  、绑定vip 地址

    3.1.2、在做分发器的主机100、200上安装提供lvs服务的软件ipvsadm
3.2  配置分发器的HA集群 100、200
   3.2.1  在2台分发器主机上分别安装keepalived软件
   3.2.2  分别修改2台分发器主机上keepalived服务配置文件
   3.2.3  分别启动2台分发器主机上的keepalived服务
   3.2.4  查看是否获取到VIP地址 和 虚拟服务及realserver

3.3  测试HA集群的配置
     把主服务器宕机后,客户端仍然能够正常访问网站服务。
     elinks  --dump  http://192.168.4.253/test.html
                     vip 地址 
 ---------------------------------------------------------------------------------------
rhel6 下搭建nfs服务
一、配置存储服务器192.168.4.105
1.1  准备存储空间:  分区 、  格式化 、  挂载
fdisk  /dev/vdd  -> n  -> p ->1 ->2次回车->w
mkfs.ext4  /dev/vdd1
blkid /dev/vdd1
mkdir  /webdir
mount /dev/vdd1 /webdir
df -h /webdir/
设置开机挂载  /etc/fstab
UUID=3f505f56-b559-4f95-9d99-8f99d9318e3c  /webdir ext4 defaults   0 0
]# mount  -a
]# mount   | grep  /webdir
1.2  共享存储存储空间:  装包  、修改配置文件、启动服务
yum -y  install  nfs-utils
yum -y  install rpcbind
]# vim  /etc/exports
 /webdir     *(rw)
 :wq
]# chmod o+w /webdir/
/etc/init.d/rpcbind start
/etc/init.d/nfs start
#chkconfig   rpcbind  on 
#chkconfig   nfs  on
1.3  在本机查看共享信息
[root@storage105 ~]# rpm -qf /usr/sbin/showmount 
nfs-utils-1.2.3-64.el6.x86_64
]# showmount  -e localhost

二、配置应用服务器192.168.4.101/102
2.1  挂载nfs共享目录
]# yum -y install nfs-utils
]#  showmount  -e   192.168.4.105
]# rm -rf  /var/www/html/*
]# mount  -t  nfs   192.168.4.105:/webdir   /var/www/html/
2.2  在105主机上编写网页文件
vim /webdir/test.html
aaaa
cccc
:wq
2.3  客户端 250 访问 lb集群能够看到网页内容
elinks  --dump   http://192.168.4.253/test.html

存储技术?   DAS      NAS     SAN 
一、配置iscsi (rhel6)
把本机的/dev/vdb  和/dev/vdc  两块盘共享给 网站服务器103和104主机。
A、配置后端存储  105
1  准备磁盘
2  装包  yum list | grep scsi
     yum -y install  scsi-target-utils
rpm  -qc  scsi-target-utils 查看配置文件位置
3  修改配置文件
]# cd    /etc/tgt/
]# cp   targets.conf     targets.conf.bak
]# vim targets.conf
<target iqn.2018-02.cn.tedu:storage105.diskb>
    backing-store /dev/vdb
    write-cache off
    vendor_id tarena
    product_id disktwo
    #initiator-address 192.168.4.103
    #initiator-address 192.168.4.104
</target>
<target iqn.2018-02.cn.tedu:storage105.diskc>
    backing-store /dev/vdc
    write-cache off
    vendor_id tarena
    product_id diskthr
    #initiator-address 192.168.4.103
    #initiator-address 192.168.4.104
</target>
:wq
4 启动服务
service tgtd start
chkconfig tgtd on
netstat -utnalp  | grep  :3260
5  查看共享信息
tgt-admin    --show
++++++++++++++++++++++++++++++
B、配置前端应用  103/104
yum -y  install iscsi-initiator-utils
2  发现设备 (man iscsiadm)
]#iscsiadm   --mode  discoverydb  --type sendtargets  --portal 192.168.4.105 --discover
简写
]# iscsiadm -m discovery -t   sendtargets -p 192.168.4.105:3260
3  登入设备  --login
 iscsiadm --mode node --targetname iqn名称  --portal 192.168.4.105:3260 --login 
简写  
]# iscsiadm -m node  -T    iqn名称  -p  存储服务器ip地址:3260  -l
4 在本机查看是否多出新的磁盘
登出设备 --logout    -u
]# iscsiadm -m node -T   iqn名称  -p  存储服务器ip地址:3260  -u
------------------------------------------------------------------------------------------
二、配置udev
2.1 获取内核识别的硬件设备的参数信息(--help)
]# udevadm   info   --query=path       --name=磁盘名
]# udevadm   info   --attribute-walk  --path=路径名
]# udevadm   info   --query=path   --name=/dev/sda
]# udevadm   info     --attribute-walk  --path=/devices/platform/host8/session7/target8:0:0/8:0:0:1/block/sda
2.2 编写udev配置文件
]#cd  /etc/udev/rules.d/
]#vim  70-iscsi.rules
SUBSYSTEM=="block", ATTR{size}=="6291456",  ATTRS{vendor}=="tarena  ", ATTRS{model}=="disktwo         ",  SYMLINK+="iscsi/diskb"
SUBSYSTEM=="block", ATTR{size}=="6291456", ATTRS{vendor}=="tarena  ", ATTRS{model}=="diskthr         ", SYMLINK+="iscsi/diskc"
:wq
2.3 测试配置
]#start_udev
]#  ls -l  /dev/iscsi/  

C、前端应用使用共享存储介质
分区    格式化   挂载 (在一台上格式化 另一台可以直接挂载)
fdisk  /dev/iscsi/diskb
mkfs.ext4  /dev/sda1     (gfs 全局文件系统)
blkid  /dev/sda1
rm  -rf  /var/www/html/*
#vim  /etc/fstab
uuid=xxxxxxx    /var/www/html     ext4    defaults   0   0
:wq
#mount  -a
#mount  | grep  /var/www/html
#echo   123  > /var/www/html/test.html
104 :
#ls /dev/sd*
若没有看到分区信息,把登入设备全部登出一下,再重新登录。
#ls /dev/sd*
#blkid  分区名
#vim  /etc/fstab
uuid=xxxxxxx    /var/www/html     ext4    defaults   0   0
:wq
#mount  -a
#mount  | grep  /var/www/html
#cat  /var/www/html/test.html

*  iscsi设备不能够同时挂载。
-------------------------------------------------------------------------------
三、配置多路径
106  存储服务器 ,把本机/dev/vdb  3G 空间的裸盘只共享给前端web应用服务器 107 
eth0   192.168.4.106
eth1   192.168.2.106
二、web应用服务器 107   
eth0   192.168.4.107   eth1   192.168.2.107
2.1 发现并登录设备
]#iscsiadm   --mode  discoverydb  --type sendtargets  --portal 192.168.2.106 --discover
]# iscsiadm   -m node -T  iqn.2018-02.cn.tedu:storage106.diskb -p 192.168.2.106:3260 -l
[root@web107 ~]# ls /dev/sd*
/dev/sda
]#iscsiadm   --mode  discoverydb  --type sendtargets  --portal 192.168.4.106 --discover
]# iscsiadm   -m node -T  iqn.2018-02.cn.tedu:storage106.diskb -p 192.168.4.106:3260 -l
[root@web107 ~]# ls /dev/sd*
/dev/sda    /dev/sdb
2.2 配置多路径服务:装包  修改配置文件  启动服务  验证配置
]# yum  -y  install   device-mapper-multipath
获取  wwid 全球识别符   全球唯一
]# scsi_id --whitelisted    --device=/dev/sda
]# vim /etc/multipath.conf
25 defaults {
26         user_friendly_names no
             getuid_callout          "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
27 }
//在文件末尾添加
103 multipaths {
104         multipath {
105                 wwid  "1IET     00010001"
106                 alias mpatha    //别名名称 自定义
107         }
108 }
:wq
]# /etc/init.d/multipathd start
]# chkconfig multipathd on
]# ls /dev/mapper/mpatha 

使用共享存储介质: 分区  格式化  挂载
fdisk /dev/mapper/mpatha 
mkfs.ext4 /dev/mapper/mpatha 
UUID=27e8ab35-4c78-4914-a1ed-d71c2e4ab788       /var/www/html   ext4   defaults 0 0
验证多路径配置:107
1 查看多路径信息  ]# multipath -ll 
                                    ifdow eth1

2 重载多路径信息  ]# multipath -rr 
                               ]# multipath -ll

部署分布式存储服务 rhel6
二、配置分布式存储服务fastdfs
2.1  配置主控节点(111)    装包   修改配置文件  启动服务  查看端口
]# yum  -y  install  gcc  gcc-c++   libevent
rpm安装三个libevent依赖包

源码安装主包fastdfs
]#tar -zxf FastDFS_v4.06.tar.gz 
]#cd FastDFS
]#./make.sh 
]#./make.sh  install
]# ls  /etc/fdfs/                 #配置文件存放目录
]# ls /usr/local/bin/         #命令文件存放目录
]# vim /etc/fdfs/tracker.conf    //服务主配置文件
base_path=/data/fastdfs    
max_connections=4096
store_group=group1
use_storage_id = true
storage_ids_filename = storage_ids.conf
]# mkdir -p /data/fastdfs
]# cd  FastDFS
]# cp  conf/storage_ids.conf   /etc/fdfs/
]# vim  /etc/fdfs/storage_ids.conf
100001   group1  192.168.4.108
100002   group1  192.168.4.109
]#cd FastDFS
]# cp init.d/fdfs_trackerd /etc/init.d/
]# chmod  +x /etc/init.d/fdfs_trackerd 
]# /etc/init.d/fdfs_trackerd status 
fdfs_trackerd  停止
]# netstat  -utnalp  | grep  :22122
++++++++++++++++++++++++++++++++++
2.2  配置数据节点  108   109 
准备存储空间:分区  格式化  配置开机挂载到/data/fastdfs
fdisk  /dev/vdb
mkfs.ext4 /dev/vdb1
mkdir -p /data/fastdfs
blkid /dev/vdb1
vim /etc/fstab 
UUID=f2853b35-13d3-48b1-8c3f-9b9e5f225fca  /data/fastdfs  ext4 defaults 0 0
]# mount   -a

装包   修改配置文件  启动服务  查看端口
yum -y  install gcc gcc-c++ libevent

]#tar -zxf FastDFS_v4.06.tar.gz 
]#cd FastDFS
]#./make.sh 
]#./make.sh  install
]# ls  /etc/fdfs/                 #配置文件存放目录
]# ls /usr/local/bin/         #命令文件存放目录
]# vim /etc/fdfs/storage.conf
base_path=/data/fastdfs
max_connections=4096store_path0=/data/fastdfs
subdir_count_per_path=256
tracker_server=192.168.4.111:22122
++++++++++++++++++++++++++++++++
2.3 启动服务
2.3.1  启动主控节点主机上的服务trackerd
/etc/init.d/fdfs_trackerd start
2.3.2  启动数据节点主机上的storaged服务
cd FastDFS
cp init.d/fdfs_storaged    /etc/init.d/
 chmod  +x  /etc/init.d/fdfs_storaged
/etc/init.d/fdfs_storaged  start
#netstat  -utnalp  | grep  :23000

2.3  在客户端测试配置 250
创建连接主控服务器111的配置文件
]# scp  192.168.4.108:/etc/fdfs/client.conf  /root/
]# vim /root/client.conf
10 base_path=/data/fastdfs
14 tracker_server=192.168.4.111:22122
:wq
]# mkdir  -p   /data/fastdfs
108:
把命令行,操作文件的命令传给客户端 
]# scp  fdfs_test    192.168.4.254:/root/bin/
]# scp fdfs_upload_file 192.168.4.254:/root/bin/
]# scp fdfs_download_file 192.168.4.254:/root/bin/
]# scp fdfs_delete_file 192.168.4.254:/root/bin/
250:
上传文件:
显示上传文件过程fdfs_test
不显示上传文件过程 fdfs_upload_file

]# fdfs_test      配置文件                   上传       文件名

]# fdfs_test   /root/client.conf        upload     foo.sh
]#fdfs_upload_file     /root/client.conf     /etc/passwd

删除文件
]# fdfs_test  /root/client.conf  delete   group1 M00/00/00/wKgEbVp7fh-AdtHSAAAJ6YX0WVM0035120

下载文件
在存储服务器上配置web服务,让客户端访问存储服务器的web服务上传和下载文件
108  109
1   运行nginx网站服务: 装包  修改配置文件  启动服务  查看端口
]# yum  -y  install   gcc   gcc-c++  
]# useradd  nginx
]# yum -y  install pcre-devel    zlib-devel  

]#tar -zxf fastdfs-nginx-module_v1.16.tar.gz
]#tar -zxf nginx-1.7.10.tar.gz 
]#cd nginx-1.7.10
]# ./configure --prefix=/usr/local/nginx  --user=nginx 
--group=nginx --add-module=../fastdfs-nginx-module/src/

]# make    &&  make  install
]# ls /usr/local/nginx/
conf  html  logs  sbin

]# cp fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/
]# vim  /etc/fdfs/mod_fastdfs.conf
40  tracker_server=192.168.4.111:22122
53  url_have_group_name = true
47 group_name=group1
57 store_path_count=1
62 store_path0=/data/fastdfs/:wq
]#vim  /usr/local/nginx/conf/nginx.conf
 43         location / {
 44             #root   html;
 45             #index  index.html index.htm;
                  ngx_fastdfs_module; 
 46         }
:wq

[root@web108 ~]# /etc/init.d/fdfs_storaged stop
[root@web108 ~]# /etc/init.d/fdfs_storaged start
[root@web108 ~]# /usr/local/nginx/sbin/nginx  -t 检测配置文件是否有误
/usr/local/nginx/sbin/nginx  启动服务

客户端访问:
254:  上传文件
]# fdfs_upload_file /root/client.conf ./tedu.jpg 
254:  通过访问web页面下载文件
]#firefox   http://192.168.4.108/group1/M00/00/00/wKgEbFp7nlWABtXMAACwEV-ILDc616.jpg

http://192.168.4.108
                 80 -----> nginx----->连接tracked服务的模块->模块读取配置文件---> 访问taracked服务器--->配置文件

 RHEL6 操作系统防火墙服务iptables
1.iptables 的组成:
   内核态:集成在内核里的功能
   用户态:安装服务的软件包后提供的管理命令
[root@web103 ~]# man  iptables
iptables 命令的功能 :   查看/修改/删除/添加规则
iptables 命令格式:
2.]#iptables   -t   表名   管理选项    链名   匹配规则  -j   处理动作
3.iptables服务的功能:
功能              表
ip包过滤         filter
网络地址转换    nat
对ip包打标记   mangle
做状态跟踪         raw
4.ip包传输的路径(方向)(以防护墙主机位参照物)
方向                          链
进入防火墙主机的            INPUT
从防火墙本机出去           OUTPUT
经过防火墙主机的           FORWARD
路由前                   PREROUTING
路由后                   POSTROUTING

管理选项   -L    -F    -D   -A    -I   -P 

5.查看指定表中有哪些链
  iptables  -t  表  -L
]# iptables -t  filter  -L
]# iptables -t  nat  -L
]# iptables -t  mangle  -L
]# iptables -t  raw  -L

6.查看表中指定链的所有规则并给规则加编号
]# iptables -t  filter  -nL  INPUT --line-numbers
7.查看链中规则是显示行号
]# iptables -t  filter  -nL  --line-numbers

删除表中指定链的某1条规则 
]# iptables  -t filter  -D  INPUT  2
]# iptables -t  filter  -nL  --line-numbers

删除表中指定链的所有规则 
]# iptables  -t filter  -F   INPUT  

删除表中所有链的规则
]# iptables  -t filter  -F

让设置永久生效
]# service  iptables save
]# cat  /etc/sysconfig/iptables   //保存到的文件

处理动作
ACCEPT  允许
DROP       丢弃
REJECT   拒绝

修改链的默认规则 (ACCEPT  或丢弃 DROP)
]#iptables  -t  filter   -P  INPUT   DROP
]#iptables  -t  filter   -L  INPUT

匹配条件选项   
-p   协议     udp   tcp

--sport  源端口号
--dport  目标端口
--source   /  -s   源地址
--destination   /  -d   目标地址

主机型防火墙  (自己保护自己)
]#iptables  -t  filter   -P  INPUT   DROP
]#iptables  -t  filter   -A  INPUT    -p tcp   --dport  22       -j  ACCEPT
]#iptables  -t  filter   -A  INPUT    -p tcp   --dport  80       -j  ACCEPT
]#iptables  -t  filter   -Ln  INPUT  --line-numbers
]#service  iptables   save
]# iptables -t filter -I INPUT 1  --source 192.168.4.104 -p tcp  --dport 22  -j  DROP
]#iptables  -t  filter   -Ln  INPUT  --line-numbers
]# iptables -t filter -I INPUT 1  --source 192.168.4.254  -p tcp  --dport 22  -j  ACCEPT

]#iptables  -t  filter   -Ln  INPUT  --line-numbers
]#iptables  -t  filter   -D  INPUT  2
]#iptables  -t  filter   -Ln  INPUT  --line-numbers
]#iptables  -t  filter   -D  INPUT  2
]#service  iptables   save

]#iptables  -t  filter  -A  INPUT    -p  icmp   --icmp-type   echo-reply  -j  ACCEPT
---------------------------------------------
在108主机上设置如下防火墙规则。并在客户端测试。
允许所有主机访问本机的网站服务,只允许从254主机连接本机的ssh服务,可以ping其他主机,其他主机不可以ping 自己。INPUT链默认策略是DROP.
108:
]#service   iptables  start ; chkconfig  iptables  on
]#iptables  -t  filter   -nL  --line-numbers
]#iptables  -t  filter   -F
]#service   iptables  save

]#iptables  -t  filter  -P INPUT  DROP

]#iptables  -t  filter  -A INPUT -s 192.168.4.254  -p  tcp  --dport 22  -j ACCEPT 

]#iptables  -t  filter  -A INPUT  -p  tcp  --dport  80  -j ACCEPT

]#iptables  -t  filter  -A INPUT  -p  icmp  --icmp-type   echo-reply  -j  ACCEPT
]#service   iptables  save
]#iptables  -t  filter   -nL  --line-numbers
---------------------------------------------------
网络型防火墙  (架设在2个网络之间的服务器,提供防火墙服务。保护内网网络)
iptables 103:
#eth0  192.168.4.103
#eth1  192.168.2.103
#sed -i  '7s/0/1/'  /etc/sysctl.conf
#sysctl  -p
]#iptables  -t  filter  -P  INPUT  ACCEPT
]#iptables    -F
]#service  iptables save

host250 :
ifdown  eth0
eth1   192.168.2.250
route  add  default  gw  192.168.2.103

host104
eth0   192.168.4.104
route  add  default  gw  192.168.4.103

host250 :  ping   -c   2  192.168.4.104
host104 :  ping   -c   2  192.168.2.250

103 编写防火墙规则
]#iptables  -t  filter   -P  FORWARD   DROP
]#iptables  -t  filter   -A  FORWARD   -p  tcp  --dport 22  -j  ACCEPT
]#iptables  -t  filter   -A  FORWARD   -p  tcp  --sport 22  -j  ACCEPT
]#iptables  -t  filter   -A  FORWARD   -p  tcp  --dport 80  -j  ACCEPT
]#iptables  -t  filter   -A  FORWARD   -p  tcp  --sport 80  -j  ACCEPT

host105
eth0  192.168.4.105
route  add  default  gw   192.168.4.103
yum  -y  install  elinks  
elinks  --dump  http://192.168.2.250/test.html

iptables 103 :   不允许105主机访问  250主机上的web服务
]# iptables -nL FORWARD  --line-numbers
]# iptables  -t  filter   -I  FORWARD  3   -s 192.168.4.105  -p  tcp  --dport   80  -j  DROP
-----------------------------------------------------------------------------------
]#iptables  -F
iptables  -t  filter  -P  FORWARD  ACCEPT
service  iptables  save

nat表 (转换源地址   转换目标地址) 

转换源地址:让内网所有主机共享一个公网ip地址上网
host250  #yum  -y  install  httpd 
               # echo   web250  > /var/www/html/test.html
               #service  httpd  start  ;chkconfig  httpd  on
               tail   -1   /etc/httpd/log/access.log

iptables103 
//允许192.168.4.0/24网段的所有主机上网。(思考:但 不允许主机192.168.4.105上网)

#iptables  -t  nat   -A   POSTROUTING   -s 192.168.4.0/24  -p tcp  --dport 80   -o  eth1  -j  SNAT  --to-source  192.168.2.103

]# iptables  -t  nat   -nL   POSTROUTING  --line-numbers

]#service  iptables save

host104/105   
#route  add default  gw   192.168.4.103
# elinks  --dump  http://192.168.2.250/test.html
--------------------------------------------------------------------------------------------------------
转换目标地址,发布内网服务器。
104/105  是内网网站服务器
iptables103]#
]# service   httpd stop
]# chkconfig   httpd off
]# iptables  -t  nat   -A  PREROUTING    
-i  eth1   -d  192.168.2.103      -p  tcp   --dport 80   
-j  DNAT  --to-destination   192.168.4.104

]# iptables  -t  nat   -nL   PREROUTING  --line-numbers

]#service  iptables save
思考:编写转换22222端口的请求给192.168.4.104 主机的规则 

]#iptables  -t  nat  -A  PREROUTING  -i eth1  -d  192.168.2.103  -p  tcp   --dport  22222  -j  DNAT  --to-destination  192.168.4.104

]#service  iptables save

host250]# elinks --dump  http://192.168.2.103/test.html

host250]# ssh -p 22222  192.168.2.103      //可以连接到104主机
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!