一、装包
/etc/audit/auditd.conf
[root@ip53 ~]# yum -y install audit
[root@ip53 ~]# systemctl start auditd //启动服务
[root@ip53 ~]# systemctl enable auditd
[root@ip53 ~]# cat /var/log/audit/audit.log //查看审计日志
二、配置审计
(1)auditctl命令
[root@ip53 ~]# auditctl -s //查看服务状态
[root@ip53 ~]# auditctl -l //查看当前自定义规则类表
[root@ip53 ~]# auditctl -D //清除所有规则
(2)定义临时规则
(3)设置规则所有对passwd文件写、属性修改操作都会被记录到审计日志
[root@ip53 ~]# auditctl -w /etc/passwd -p wa -k passwd_change
(4)设置规则,监控/etc/selinux目录
[root@ip53 ~]# auditctl -w /etc/selinux/ -p wa -k selinux_change
(5)设置规则,监控fdisk程序
[root@ip53 ~]# auditctl -w /usr/sbin/fdisk -p x -k disk_partition
三、定义永久规则
文件/etc/audit/rules.d/audit.rules
[root@ip53 ~]# vim /etc/audit/rules.d/audit.rules
... ...
-w /etc/passwd -p wa -k passwd_change
-w /etc/selinux -p wa -k selinux_change
-w /usr/sbin/fdisk -p x -k disk_partition
从文件里加载规则
[root@ip53 ~]# auditctl -R /etc/audit/rules.d/audit.rules
附加扩展
[root@ip53 ~]# ls /usr/share/doc/audit-2.7.6/rules/
四、审计日志
查看日志
[root@ip53 ~]# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
[root@ip53 ~]# tailf /var/log/audit/audit.log
type为类型
搜索日志
/var/log/audit/audit.log
ausearch options -if file_name
可以指定文件名根据k搜索日志
[root@ip53 ~]# ausearch -k passwd_change
[root@ip53 ~]# ausearch -k passwd_change -i //加-i是交互式操作
一、删除不需要的模块
(1)安装nginx,编写测试页面
[root@ip50 ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel //安装依赖包
[root@ip50 ~]# cd nginx-1.12.2/
[root@ip50 nginx-1.12.2]# useradd nginx
[root@ip50 nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx
[root@ip50 ~]# echo "A" > /usr/local/nginx/html/a.html
[root@ip50 ~]# echo "B" > /usr/local/nginx/html/b.html
[root@ip50 ~]# echo "C" > /usr/local/nginx/html/c.html
[root@ip50 ~]# /usr/local/nginx/sbin/nginx
[root@room9pc01 ~]# firefox 192.168.4.50/a.html
(2)修改配置文件,打开自动索引
[root@ip50 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
server {
autoindex on; //自动索引打开
listen 80;
server_name localhost;
#charset koi8-r;
... ...
[root@ip50 ~]# /usr/local/nginx/sbin/nginx -s reload
(3)创建新的访问路径
[root@ip50 ~]# mkdir /usr/local/nginx/html/game
[root@ip50 ~]# echo "one" > /usr/local/nginx/html/game/a1.html
[root@ip50 ~]# echo "two" > /usr/local/nginx/html/game/a2.html
这样访问时,浏览器会列出所有该文件夹下的文件,这样太不安全
[root@room9pc01 ~]# firefox 192.168.4.50/game
所以需要去除相应模块,禁用该功能
[root@ip50 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@ip50 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
server {
#autoindex on; //注释掉该项
listen 80;
server_name localhost;
#charset koi8-r;
... ...
(4)重新编译安装,禁用自动索引模块
[root@ip50 nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --without-http_autoindex_module
[root@ip50 nginx-1.12.2]# make && make install
[root@ip50 ~]# /usr/local/nginx/sbin/nginx
[root@room9pc01 ~]# firefox 192.168.4.50/game //报错403
二、修改版本信息
(1)修改源码,隐藏软件名跟版本号
[root@ip50 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@ip50 nginx-1.12.2]# vim +48 src/http/ngx_http_header_filter_module.c
修改前
... ...
static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;
... ...
修改后
... ...
static u_char ngx_http_server_string[] = "Server: IIS" CRLF;
static u_char ngx_http_server_full_string[] = "Server: IIS" CRLF;
static u_char ngx_http_server_build_string[] = "Server: IIS" CRLF;
... ...
(2)重新编译安装
[root@ip50 nginx-1.12.2]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --without-http_autoindex_module
[root@ip50 nginx-1.12.2]# make && make install
[root@ip50 ~]# /usr/local/nginx/sbin/nginx
三、限制并发
ngx_http_limit_req_module
为默认模块[root@ip50 ~]# /usr/local/nginx/sbin/nginx -s stop
limit_req_zone key zone=name:size rate=rate;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req zone=one burst=5;
[root@ip50 ~]# vim /usr/local/nginx/conf/nginx.conf
http{
... ...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
... ...
server {
#autoindex on;
listen 80;
server_name localhost;
limit_req zone=one burst=5;
... ...
这样的配置的是,服务器1s只处理一个,其中有5个放在内存里边等待处理,即就是客户端通一时间访问数据库的并发量最大只有6个,剩下的服务器都不处理,如一次性客户端发起10个请求,有6个会请求成功,其余4个全部失败
[root@ip50 ~]# /usr/local/nginx/sbin/nginx
[root@room9pc01 ~]# ab -n 10 -c 10 http://192.168.4.50/
四、拒绝非法请求
请求方法 | 功能描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件) |
DELETE | 请求服务器删除指定的页面 |
PUT | 向服务器特定位置上传资料 |
… | 其他 |
(1)修改配置文件,只配置(GET|POST)请求,关闭其他请求
[root@ip50 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
server {
#autoindex on;
listen 80;
server_name localhost;
limit_req zone=one burst=5;
#charset koi8-r;
#access_log logs/host.access.log main;
if ($request_method !~ ^(GET|POST)$) {
return 444;
}
... ...
[root@ip50 ~]# /usr/local/nginx/sbin/nginx -s reload
(2)客户端测试
[root@room9pc01 ~]# curl -i -X GET http://192.168.4.50/a.html
[root@room9pc01 ~]# curl -i -X POST http://192.168.4.50/a.html
[root@room9pc01 ~]# curl -i -X HEAD http://192.168.4.50/a.html
五、防止buffer溢出
[root@ip50 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
http {
client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 16k;
large_client_header_buffers 4 4k;
... ...
初始化安全脚本
(1)安装mariadb
[root@ip50 ~]# yum -y install mariadb mariadb-server
[root@ip50 ~]# systemctl start mariadb
[root@ip50 ~]# mysql_secure_installation //执行初始化安全脚本
[root@ip50 ~]# mysql -uroot -p123456
通过mysqladmin或者登陆mysql通过set password修改密码
(2)密码安全
[root@ip50 ~]# cat ~/.bash_history
... ...
mysqladmin -uroot -pxxx password '123456'
... ...
[root@ip50 ~]# cat ~/.mysql_history
... ...
set password for root@'localhost'=password('123456');
select user,host,password from mysql.user;
flush privileges;
... ...
(1)安装依赖环境
[root@ip50 ~]# yum -y install java-1.8.0-openjdk
[root@ip50 ~]# yum -y install java-1.8.0-openjdk-headless
(2)安装tomcat
隐藏版本信息
[root@ip50 ~]# yum -y install java-1.8.0-openjdk-devel
[root@ip50 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@ip50 ~]# cd /usr/local/tomcat/lib/
[root@ip50 lib]# jar -xf catalina.jar
[root@ip50 lib]# vim org/apache/catalina/util/ServerInfo.properties //修改内容
修改之前
... ....
server.info=Apache Tomcat/9.0.6
server.number=9.0.6.0
server.built=Mar 5 2018 09:34:35 UTC
... ...
修改之后
... ...
server.info=Nginx
server.number=6.0
server.built=May 3 2013 04:20:01 UTC
... ...
[root@ip50 ~]# vim /usr/local/tomcat/conf/server.xml
[root@ip50 ~]# /usr/local/tomcat/bin/startup.sh
测试
[root@ip50 ~]# curl -I http://192.168.4.50:8080/a.html //头部信息
[root@ip50 ~]# curl -I http://192.168.4.50:8080 //头部信息
[root@ip50 ~]# curl http://192.168.4.50:8080/xx //报错页面
降权启动
[root@ip50 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@ip50 ~]# useradd tomcat
[root@ip50 ~]# chown -R tomcat:tomcat /usr/local/tomcat/
[root@ip50 ~]# su -c /usr/local/tomcat/bin/startup.sh tomcat
[root@ip50 ~]# ps aux | grep -i java
[root@ip50 ~]# chmod +x /etc/rc.local
[root@ip50 ~]# vim /etc/rc.local //添加如下内容
su -c /usr/local/tomcat/bin/startup.sh tomcat
删除默认的测试页面
[root@ip50 ~]# rm -rf /usr/local/tomcat/webapps/*
一、补丁的原理
diff逐行比较
选项:
过程概述
一、创建补丁文件
(1)创建一个原始脚本并写入内容
[root@ip50 ~]# mdkir /cod
[root@ip50 ~]# cd /code
[root@ip50 code]# vim hello.sh
echo "hello,world"
[root@ip50 code]# scp hello.sh [email protected]:/root/
[root@ip53 ~]# mkdir code
[root@ip53 ~]# mv hello.sh code/
(2)撰写新的修复后的文件
[root@ip50 code]# cp hello.sh hello1.sh
[root@ip50 code]# vim hello1.sh
echo "hello,world"
echo "hello,world"
echo "hello,world"
echo "hello,world"
echo "hello,world"
echo "hello,world"
echo "hello,world"
(3)生成补丁文件
[root@ip50 code]# diff -u hello.sh hello1.sh > hello.patch
[root@ip50 code]# cat hello.patch
-r选项
[root@ip50 code]# mkdir -p /demo/{source1,source2} //创建相应目录
(1)每个目录中创建对应的文件
[root@ip50 code]# echo "hello world" > /demo/source1/test.sh
[root@ip50 code]# echo "hello the world" > /demo/source2/test.sh
[root@ip50 code]# echo "test" > /demo/source2/tmp.txt
[root@ip50 code]# cp /bin/find /demo/source1/
[root@ip50 code]# cp /bin/find /demo/source2/
[root@ip50 code]# echo 1 >> /demo/source2/find
(2)B主机创建对应目录
[root@ip53 ~]# mkdir -p /demo/source1
(3)A主机拷贝源码到B主机
[root@ip50 ~]# scp /demo/source1/* [email protected]:/demo/source1/
(4)生成补丁文件
[root@ip50 demo]# diff -uraN source1/ source2/ > /root/all.patch
(5)将补丁文件发送给B主机
[root@ip50 demo]# scp /root/all.patch [email protected]:/root/
二、patch打补丁
(1)安装补丁文件
[root@ip53 ~]# yum -y install patch
(2)打补丁
[root@ip53 ~]# cd /demo/
[root@ip53 demo]# patch -p0 < /root/all.patch
patching file source1/find
patching file source1/test.sh
patching file source1/tmp.txt
(4)还原旧版本,反向修复
[root@ip53 demo]# cd source1/
[root@ip53 source1]# patch -RE < /root/all.patch