案例1:部署audit监控文件
案例2:加固常见服务的安全
案例3:使用diff和patch工具打补丁
1.案例1:部署audit 监控文件 (现在用堡垒机,或者自研)
审计: 基于实现配置的规则生成日志,记录可能发生在系统上的事件,不会提供额外的安全保护,但是会发现记录违反安全策略的人或行为.
步骤
1.配置audit
1)装包
[root@proxy3 ~]# yum -y install audit
[root@proxy3 audit]# cat /etc/audit/audit.conf
log_file = /var/log/audit/audit.log 日志文件路径
[root@proxy3 audit]# systemctl start auditd
[root@proxy3 audit]# systemctl enable auditd
2)配置审计规则
[root@proxy ~]# auditctl -s //查询状态
[root@proxy ~]# auditctl -l //查看规则
[root@proxy ~]# auditctl -D //删除所有规则
语法
语法格式:auditctl -w path -p permission -k key_name 临时的
[root@proxy ~]# auditctl -w /etc/passwd -p wa -k passwd_change
//设置规则所有对passwd文件的写、属性修改操作都会被记录审计日志
[root@proxy3 audit]# auditctl -l
-w /etc/passwd -p wa -k passwd_change
永久生效: 将规则写入配置文件
[root@proxy ~]# vim /etc/audit/rules.d/audit.rules
##########################
案例2: 加固常见服务安全
1.优化Nginx服务的安全配置:删除不要的模块、修改版本信息、限制并发、拒绝非法请求、防止buffer溢出
2.优化MySQL数据库的安全配置:初始化安全脚本、密码安全、备份与还原、数据安全
3.优化Tomcat服务器:隐藏版本信息、删除默认测试页面
步骤:
优化nginx
1) 删除不要的模块
[root@proxy ~]# tar -xf nginx-1.12.tar.gz
[root@proxy ~]# cd nginx-1.12
[root@proxy nginx-1.12]# ./configure
>–without-http_autoindex_module \ //禁用自动索引文件目录模块
>–without-http_ssi_module with开头 是默认不会安装的模块 without 是默认安装的,
[root@proxy nginx-1.12]# make
[root@proxy nginx-1.12]# make install
2)隐藏版本号 (不然容易被别人根据版本的bug来攻击)
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
http{
server_tokens off; //在http下面手动添加这么一行
… …
}
[root@proxy ~]# nginx -s reload
[root@proxy ~]# curl -I http://192.168.4.5 //查看服务器响应的头部信息
3)限制并发量
需要 ngx_http_limit_req_module 模块
开始ab 测试
Concurrency Level: 100
Time taken for tests: 0.018 seconds
Complete requests: 100 全部完成
写入限制:
http{
… …
limit_req_zone $binary_remote_addr zone=xxx :10m rate=1r/s;
server {
listen 80;
server_name localhost;
limit_req zone=xxx burst=5; 漏斗超过5个则报错
}
1M可以存储8千个IP信息,10M可以存储8万个主机连接的状态,容量可以根据需要任意调整
每秒中仅接受1个请求,多余的放入漏斗
测试:
Concurrency Level: 100
Time taken for tests: 5.002 seconds
Complete requests: 100
Failed requests: 94 失败94
________________________
步骤二:数据库安全
1)初始化安全脚本
[root@proxy ~]# systemctl status mariadb
//确保服务已启动
[root@proxy ~]# mysql_secure_installation
//执行初始化安全脚本
[root@web1 ~]# mysql -uroot -p123456
2)密码安全
1种:
# mysqladmin -uroot -predhat password ‘mysql’ 通过历史命令,可以看到明文密码
//修改密码,旧密码为redhat,新密码为mysql
2种:
先进入mysql
MariaDB [(none)]> set password for root@‘localhost’=password(‘redhat’);
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
±----------±-------------±------------------------------------------+
| user | host | password |
±----------±-------------±------------------------------------------+
| root | localhost | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| wordpress | localhost | *C260A4F79FA905AF65142FFE0B9A14FE0E1519CC |
| wordpress | 192.168.2.11 | *C260A4F79FA905AF65142FFE0B9A14FE0E1519CC |
±----------±-------------±------------------------------------------+
5 rows in set (0.00 sec)
在 ~/bash_history 里面也有记录,记得清理
~/mysql_history 也有记录
[root@web1 ~]# cat .mysql_history
select user,host,password from mysql.user;
set password for root@‘localhost’=password(‘redhat’);
3)数据备份与还原
备份
[root@proxy ~]# mysqldump -uroot -predhat mydb table > table.sql
//备份数据库中的某个数据表
[root@proxy ~]# mysqldump -uroot -predhat mydb > mydb.sql
//备份某个数据库
[root@proxy ~]# mysqldump -uroot -predhat --all-databases > all.sql
//备份所有数据库
还原
[root@proxy ~]# mysql -uroot -predhat mydb < table.sql //还原数据表
[root@proxy ~]# mysql -uroot -predhat mydb < mydb.sql //还原数据库
[root@proxy ~]# mysql -uroot -predhat < all.sql //还原所有数据库
4)数据库安全
创建一个数据数据账户 4.5
MariaDB [(none)]> grant all on . to tom@‘192.168.2.5’ identified by ‘123’;
抓包
tcpdump -w log -i any src or dst port 3306 抓取源或目标端口是3306的数据包,保存到log文件中
客户端(192.168.4.100)从远程登陆数据库服务器(192.168.4.5)
[root@client ~]# mysql -utom -p123 -h 192.168.4.5
//在192.168.4.100这台主机使用mysql命令登陆远程数据库服务器(192.168.4.5)
//用户名为tom,密码为123
MariaDB [(none)]> select * from mysql.user;
//登陆数据库后,任意执行一条查询语句
[root@proxy ~]# tcpdump -A -r log
//使用tcpdump查看之前抓取的数据包,很多数据库的数据都明文显示出来
步骤三:tomcat 安全
##################
案例三: 使用diff (生成补丁)patch (打补丁)
使用diff对比文件差异
使用diff生成补丁文件
使用patch命令为旧版本打补丁
____________________
#diff test1.sh test2.sh //查看文件差异
2c2,3 第2行换成 右边的第二行 , 再加第三行
< echo “hello wrld”
> echo “hello the world”
> echo “test file”
#diff -u test1.sh test2.sh //查看差异,包含头部信息
— test1.sh 2020-05-11 17:23:25.881292795 +0800
+++ test2.sh 2020-05-11 17:23:44.495292795 +0800
@@ -1,2 +1,3 @@
#!/bin/bash 第一行不动
-echo “hello wrld” 删去
+echo “hello the world” 加上
+echo “test file” 加上
生成补丁
diff -u test1.sh test2.sh > test.patch
[root@web3 lib]# yum -y install patch
[root@web3 lib]# patch -p0 < test.patch 打补丁
patching file test1.sh
[root@web3 lib]# cat test1.sh
#!/bin/bash
echo “hello the world”
echo “test file”
__________________________________
//patch -pnum(其中num为数字,指定删除补丁文件中多少层路径前缀) |
//如原始路径为/u/howard/src/blurfl/blurfl.c |
//-p0则整个路径不变 |
//-p1则修改路径为u/howard/src/blurfl/blurfl.c |
//-p4则修改路径为blurfl/blurfl.c |
//-R(reverse)反向修复,-E修复后如果文件为空,则删除该文件 |
___________________________________|
patch -RE < test.patch //还原旧版本,反向修复
步骤三:对比目录文件 #思想是雄心的结晶,它见解独立.
1)实验环境
[root@proxy ~]# mkdir demo
[root@proxy ~]# cd demo
[root@proxy demo]# mkdir {source1,source2}
[root@proxy demo]# echo “hello world” > source1/test.sh
[root@proxy demo]# cp /bin/find source1/
[root@proxy demo]# tree source1/ //source1目录下2个文件
|-- find
-- test.sh [root@proxy demo]# echo "hello the world" > source2/test.sh [root@proxy demo]# echo "test" > source2/tmp.txt [root@proxy demo]# cp /bin/find source2/ [root@proxy demo]# echo "1" >> source2/find [root@proxy demo]# tree source2/ //source1目录下3个文件 |-- find |-- test.sh
– tmp.txt
//注意:两个目录下find和test.sh文件内容不同,source2有tmp.txt而source1没有该文件
2)制作补丁
[root@proxy demo]# diff -u source1/ source2/
//仅对比了文本文件test.sh;二进制文件、tmp都没有对比差异,仅提示,因为没有-a和-N选项
[root@proxy demo]# diff -Nu source1/ source2/
//对比了test.sh,并且使用source2目录的tmp.txt与source1的空文件对比差异。
[root@proxy demo]# diff -Nua source1/ source2/
//对比了test.sh、tmp.txt、find(程序)。
_____________
diff -Nuar source1/ source2/ > source.patch
patch -p1 < …/source.patch
http-tools