1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > RHEL 7系统审计 系统日志文件 服务安全及打补丁 AIDE 系统入侵检测

RHEL 7系统审计 系统日志文件 服务安全及打补丁 AIDE 系统入侵检测

时间:2018-08-14 15:55:21

相关推荐

RHEL 7系统审计 系统日志文件 服务安全及打补丁   AIDE 系统入侵检测

一、RHEL 7系统审计

审计的目的:基于事先配置的规则生成日志,记录可能发生在系统上的事件(正常或者非正常),审计不会为系统提供额外的安全保护,但是它会发现和记录违反安全策略的人及其对应行为。

审计能够记录的日志内容:

a)日期与事件以及事件的结果;

b) 触发事件的用户;

c) 所有认证机制的使用都可以被记录,如ssh等

d) 对于关键数据文件的修改行为都可以被 记录

audit 审计分三个部分:1、控制规划:用于更改审计系统本身的配置和设置

2、文件系统的规划:文件或者目录监视

3、系统调用规划:用于监视由任何进程或者特定用户进行的系统调用

audit 主要用来记录安全信息。用于系统安全事件的追溯。记录内核信息、包括文件的读写、权限的更改;

auditctl :即时控制审计守护进程行为的工具;

auditd: audit守护进程负责把内核产生的信息写入到硬盘,这些信息由应用程序和系统活动触发产生;

/var/log/audit/audit.log

aureport :查看和生成审计报告的工具;

ausearch: 查找审计事件的工具;

auditspd : 转发事件通知给其他应用程序。而不是写入到审计日志文件中;

autrace : 一个用于跟踪进程的命令。

(syslog 日志系统用来记录系统中的各种信息。如硬件警报和软件日志,属于应用层,不能记录太多数据。

rsyslog 是在syslog基础上扩展的,可以理解为多线程增强的syslog。 如果audit因任何原因未运行,审计消息会发送到 rsyslog中。)

一、部署audit

主配置文件:/etc/audit/audit.conf

记录审计规划的文件: /etc/audit/audit.rules

查看文件:#man audit

1、安装audit软件包

#yum - y install audit

# cat /etc/audit/audit.conf

日志文件 :log_file =/var/log/audit/audit.log

# systemctl start auditd

#systemctl enable auditd

2、 配置审计

auditctl 命令控制审计系统并设置规划决定哪些行为会被记录。

auditctl [选项] filter ,action -S (系统调用号或者名字) syscall -F (规划域)condition -K (审计规则关键词) labal

—filter :user exit task exclude 说明哪个内核规则匹配过滤器应用在事件中

---- action :always 是 never 否 :是否审核事件

—syscall : 2 、 all 、 open等。(type=SYSCALL 值显示此消息由内核的系统调用发生的)

— condition : euid=0 ;arth=b64;

— lable :标记审核事件并检查日志

# auditctl -s 查询状态

# auditctl -l 查看规则

#auditctl -D 删除所有规则

3、定义临时规则

文件系统的规划 -----auditctl -w path -p [r w x a] -k key-name

----path 需要审计的文件和目录

----权限可以是:r w x a , a用来改变目录的属性

----key-name 方便识别是哪个规则生成的日志

修改配置文件 #/etc/audit/auditd.conf

11行 num_logs=5 日志轮询数目 默认为5,小于2不轮询

16行 max_log_file=6 日志文件大小,大于这个设定值就执行17行

17行 max_log_file_action=ROTATE 轮询

4、定义永久规则

写入规则记录文件:/etc/audit/rules.d/audit.rules

# vim /etc/audit/rules.d/audit.rules

-w /etc/passwd -p wa -k passwd_changes

-w /usr/sbin/fdisk -p x -k partition_disks

5、审计日志

5.1 定义一个规则

#auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config

查看日志:#taif /var/log/audit/audit.log

-----type 类型

-----msg 为(time_stamp:ID),时间是data+%s

-----arch=c000003e ,代表x86_64(16进制)

----success=yes/no 事件是否成功

-----a0-a3是程序调用时前4个参数,16进制的编码

-----ppid 父进程ID

-----auid 是审核用户的ID su - test 依然能追踪su 前的账户

-----uid gid 用户和组

-----tty 从哪个终端执行的

-----comm=“cat” 用户在命令行执行的命令

-----exe ="/bin/cat" 实际程序的路径

-----key=“sshd_config” 关键字

-----type =CWD 用来记录当前工作目录

—cwd="/home/username"

------type=PATH

–ouid 对象所有者的id

—ogid 对象所有组的id

5.2 搜索日志

ausearch 默认会搜索文件: /var/log/audit/audit.log

----ausearch option -if file_name 指定文件名

#ausearch -k shhd_config -i 根据key搜索日志, -i为交互操作

生成所有用户失败事件的总结报告:

#ausearch -u --fialed --summary -i

生成系统调用事件报告

#aureport -s -i --summary

(图形化工具 :seaudit seaudit 允许用户查看和过滤日志文件的内容,支持syslog和audit 两种日志格式)

二、系统日志

2.1 一般包括系统启动时候的日志,包括自启动的服务: /var/log/boot.log

2.2 记录所有登录失败信息,非文本,使用 # last -f /var/log/btmp

2.3 cron计划任务的日志 :#/var/log/cron

2.4 记录跟内核缓冲信息的日志 :/var/log/dmesg

2.5 记录所有用户最近的信息 ,用lastlog 查看 # lastlog /var/log/lastlog

2.6 记录着系统运行电子邮件服务器的日志信息 :/var/log/maillog

2.7 记录整体系统信息 :/var/log/message

三、服务安全

-----Nginx 安全优化:最小化安装,删除不需要的模块、修改版本信息、限制并发、拒绝非法请求、防止buffer溢出

-----Mysql 安全优化:初始化安全脚本、密码安全、备份与还原、数据安全

-----Tomcat 安全优化:隐藏版本信息、降权启动、删除默认测试页面

nginx服务的安装:

安装依赖关系的包 :gcc gcc-c++ openssl openssl-devel zlib zlib-devel pcre pcre-devel

#yum -y install gcc gcc-c++ openssl openssl-devel zlib zlib-devel pcre pcre-devel

#tar -zxf nginx-1.12.2.tar.gz

#cd nginx-1.12.2/

#./configure (添加模块–with ;删除模块:–without ; #configure --help 查看)

#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 启动nginx服务

#ps -ef | grep nginx 查看服务进程跟端口信息

# 验证nginx配置文件是否正确 :#cd /usr/local/nginx/sbin

# ./nginx -t

.#/configure >–without-http_autoindex_module \ 禁止自动索引文件目录模块

–without-http_ssi_module

3.1修改版本信息

3.2 隐藏版本号信息(server_tokens off)

#vim /usr/local/nginx/conf/nginx.conf

http {

server_token off; //在http 下面手动添加

}

## /usr/local/nginx/sbin/nginx -s reload 重新读取配置文件

#curl -I http://172.25.0.11

页面仍然显示nginx

# cd /root/nginx-1.12.2/

# vim +48 src/http/ngx_http_header_filter_module.c (将49行的nginx 换成自定义的,50行Server:定义;51行一样)

# ./configure

#make && make install

#killall nginx 杀死进程

#/usr/local/nginx/sbin/nginx 启动服务

#curl -I http://172.25.0.11

3.3 限制并发量

(DDOS攻击者会发送大量的并发量,占用服务资源,包括连接数、带宽等,这样会导致正常用户处于等待或者无法访问服务器的状态,nginx提供一个ngx_http_limit_req_module模块,可以降低DDOS攻击风险)

# vim /usr/local/nginx/conf/nginx.conf

http{

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {

listen 80;

server_name localhost;

limit_req zone=one burst=5;

}

}

//limit_req_zone 语法:limit_req_zone key zone=name:size rate=rate;

上面的案例意思:将客户端ip信息存储在名为one的共享内存内,内存空间为10M,每秒仅接收一个请求,多余放漏斗,漏斗超过5个就报错,容量自己可以调整。

# /usr/local/nginx/sbin/nginx -s reload

客户端测试 # ab -c 100 -n 100 http://172.25.0.11/

3.4 拒绝非法的请求

GET 请求指定的页面信息,并返回实体主体

HEAD 类似GET,只是用户获取报头

POST 向指定资源提交数据进行处理请求

DELETE 请求服务器删除指定的页面

PUT 向服务器特定的位置上传资料

#curl -i -X GET http://172.25.0.11 - i 选项:访问服务器页面时,显示HTTP的头部信息

# curl -i -X HEAD http://172.25.0.11 -X 选项: 指定请求服务器的方法

设置让Nginx拒绝非法请求:

# vim /usr/local/nginx/conf/nginx.conf (如果用户使用非GET或者POST方式访问网站,则return返回444)

http {

server {

listen 80;

if ( requestmethod!(GET∣POST)request_method !~^(GET|POST)requestm​ethod!(GET∣POST) ) {

return 444;

}

}

}

# /usr/local/nginx/sbin/nginx -s reload

验证 : # curl -i -X HEAD http://172.25.0.11

curl: (52) Empty reply from server

3.5 防止buffer溢出

当客户端连接服务器时,服务器会启用各种缓存,用来存放连接的状态信息,如果攻击者发送大量的连接请求,而服务器不对缓存做限制的话,内存数据就有可能溢出(空间不足),调整各种buffer参数,可以有效降低溢出的风险。

# vim /usr/local/nginx/conf/nginx.conf

http {

client_body_buffer_size 1k;

client_header_buffer_size 1k;

client_max_body_size 1k;

large_client_header_buffers 2 1k;

}

重启 # /usr/local/nginx/sbin/nginx -s reload

四、数据库安全

4.1 初始化安全脚本

安装完mariadb或者mysql 后,默认root没有密码,并提供了一个任何人都可以操作的test测试数据库。

脚本:mysql_secure_installation脚本,该脚本可以帮助管理员为root设置密码,并禁止root从远程其他主机登陆数据 库,并删除测试性数据库test.

# yum -y install mariadb mariadb-server

#systemctl start mariadb

# systemctl enable mariadb

#mysql_secure_installation 执行初始化安全脚本(设置的密码为123456)

4.2 密码安全

手动修改数据库的密码:# mysqladmin -uroot -p123456 password ‘mysql’ (旧密码是123456,新密码mysql)

# mysql -uroot -pmysql

MariaDB [(none)]> set passwprd for root@‘localhost’=password(‘redhat’); (使用账户数据库,修改密码为redhat)

MariaDB [(none)]> select user,host,password from mysql.user;

这里有个问题,密码通过命令行修改,#history 就可以查看设置的密码是啥,因为历史记录中记录的是明文密码。

同时,数据库海有一个binlog日志有明文密码。

解决办法:1–设置history的记录数; 2–使用防火墙从TCP层设置ACL(禁止外网接触数据库)

4.3 数据备份与还原

4.3.1 备份数据库 (用户名为root 密码为redhat)

# mysqldump -uroot -predhat --all-databases > all.sql 备份所有的数据库

# mysqldump -uroot -predhat mydb > my.sql 备份mydb数据库

# mysqldump -uroot -predhat mydb table > table.sql 备份mydb 的table表

还原数据库

# mysqldump -uroot -predhat < all.sql 还原所有的数据库

# mysqldump -uroot -predhat mydb < my.sql 还原mydb数据库

# mysqldump -uroot -predhat mydb < table.sql 还原mydb 数据表

4.3.2 数据安全

部分内容等后续补充!!

五、使用diff和patch工具打补丁

在linux系统中diff命令可以生成补丁文件,然后使用patch 命令为有问题的程序打补丁。

5.1 使用diff对比文件的差异

5.2 使用diff生成补丁文件

例子:#vim test1.sh

# vim test2.sh

# diff test1.sh test2.sh 查看文件差异

#diff -u test1.sh test2.sh 查看差异及包含头部信息

diff 命令: -u 输出统一的内容的头部信息(打补丁使用),计算机知道哪个文件需要修改

-r 递归对比目录中的所有资源 (可以对比目录)

-a 所有的文件视为文本 (包括二进制)

-N 无文件视为空文件

----N 说明: ----A目录下没有txt文件,B目录下有txt文件

diff比较A B 时,默认会提示txt只有B里面有,(无法对比差异,修复文件)补丁信息会说明如何从空文件修改后变为txt文件。

5.3 使用patch命令为旧版本打补丁

#yum -y install patch

#systemctl start patch

#diff -u test1.sh test2.sh > test.patch

#patch -p0 <test.patch 打补丁

#patch -RE <test.patch 还原旧版本 ,反向修复

patch :(选项) — -pnum (num为数字,指定删除补丁文件中多少层路径前缀)

— -p0 则整个路径不变

— -p1 则修改除了第一路径外的剩下路径的内容

— -p2 同上

— -R (reverse)反向修复,-E 修复后如果为空文件则删除该文件

六、AIDE 系统入侵检测

Advanced Intrusion Detection Environment

是系统自带的一个入侵检测工具,主要目的是检查文件的一致性,包括文件是否被更改,文件属性是否发生变化,

文件被修改的时间等。一旦出现AIDE监控的文件被篡改的情况,就会发出警告,通知系统管理员。

6.1 配置AIDE

6.1.1安装包:]# yum -y install aide

6.1.2 查看配置文件/etc/aide.conf 里的默认规则

]# cat /etc/aide.conf | grep -A20 ‘These’

##These are the default rules.

6.1.3 aide常用的命令

aide : -i, --init 初始化数据库

-C , – check 检查数据库

-u , --update 更新数据库

6.1.4 配置监控规则

例如,监控/etc/shadow 文件为例

——先修改配置文件/etc/aide.conf 将88行之后的内容全部注释掉#,

然后再结尾添加:/etc/shadow NORMAL

6.1.5 测试

]# aide --init 初始化数据库

]# useradd testuser 创建一个测试用户

]# aide --check 检查数据库

Couldn’t open file /var/lib/aide/aide.db.gz for reading 报错:

因为没有aide.db.gz文件,此时还不能对文件进行监控

]# cd /var/lib/aide/

aide]# mv aide.db.new.gz aide.db.gz

aide]# ll

aide]# aide -C

###All files match AIDE database. Looks okay! (因为之前没有数据库相当于这个第一个,所有没有报错)

]# useradd testuser2

]# aide -C

AIDE 0.15.1 found differences between database and filesystem!! 发出警告!!

并提示了发生变化的文件changed files,以及文件大小,时间mtime 和ctime

注意:检测完之后可以用 aide -u 更新数据库,更新之后也会重新生成 /var/lib/aide/aide.db.gz。

因为每次更新或初始化时都会生成 /var/lib/aide/aide.db.gz,而数据库读取的文件是aide.db.gz

所以,要把aide.db.new.gz重命名为aide.db.gz。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。