服务安全与监控
Posted xujint
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务安全与监控相关的知识,希望对你有一定的参考价值。
一、审计服务(audit)
1.1 审计服务介绍
auditd(或 auditd 守护进程)是Linux审计系统中用户空间的一个组件,其负责将审计记录写入磁盘。Auditd可以对整个操作系统的以下行为做审计:
账户管理、文件系统管理、权限管理、网络配置管理、日志文件操作管理
auditd安装完毕后将自动安装以下auditd和相关的工具:
auditctl : 即时控制审计守护进程的行为的工具,比如如添加规则等等。
/etc/audit/audit.rules : 记录审计规则的文件。
aureport : 查看和生成审计报告的工具。
ausearch : 查找审计事件的工具
auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中。
autrace : 一个用于跟踪进程的命令。
/etc/audit/auditd.conf : auditd工具的配置文件。
1.2 配置审计服务
[root@host53 ~]# rpm -q audit (没有则yum安装)
audit-2.7.6-3.el7.x86_64
配置文件: /etc/audit/auditd.conf
log_file = /var/log/audit/audit.log //日志文件
[root@svr7 ~]# systemctl start auditd
[root@svr7 ~]# systemctl enable auditd
查看审计规则
[root@svr7 ~]# auditctl -s //查看服务状态
[root@svr7 ~]# auditctl -l //查看规则列表
[root@svr7 ~]# auditctl -D //删除规则
1.3自定义审计规则
命令行定义(临时生效)
auditctl -w /etc/passwd -p wa -k passwd_change
-w + 需要审计的文件或目录
-p + 权限(r,w,x,a)
-k + 名称(方便识别生成的规则)
永久定义
]# vim /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k plj_passwd
查看审计日志
~]# ausearch -k passwd_change-i //根据key搜索日志,-i为交互式操作
二、服务安全
网站安全(nginx)
源码安装nginx服务
]# yum -y install gcc pcre-devel zlib-devel openssl-devel //安装依赖包
]# tar -zxvf nginx-1.12.2.tar.gz
]# cd nginx-1.12.2/
]# ./configure --without-http_autoindex_module --without-http_ssi_module
]# make&&make install
]# /usr/local/nginx/sbin/nginx
]# netstat -utnlp | grep :80
nginx安全配置
**1. 禁用不需要的模块 **
nginx-1.12.2]# ./configure --help |grep -i "without" //查看那些模块可以被禁用
/usr/local/nginx/sbin/nginx -t //测试是否有错误
]# /usr/local/nginx/sbin/nginx -s stop(修改配置时先停止服务)
]# vim /usr/local/nginx/conf/nginx.conf
server {
#autoindex on ; //自动索引模块(不安全)
]#./configure --without-http_autoindex_module 配置时禁用autoindex模块
]# make && make install
**2 .修改版本信息 **
[root@pc117 ~]# curl -I http://192.168.4.50/ //获取软件名与版本
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Wed, 29 May 2019 07:47:10 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 29 May 2019 07:13:58 GMT
Connection: keep-alive
ETag: "5cee3136-264"
Accept-Ranges: bytes
]# /usr/local/nginx/sbin/nginx -s stop
]#vim +48 src/http/ngx_http_header_filter_module.c
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;
]# ./configure --without-http_autoindex_module && make && make install
]# /usr/local/nginx/sbin/nginx
[root@pc117 ~]# curl -I http://192.168.4.50/ //验证
3.限制并发----->降低DDos攻击风险
DDOS攻击者会发送大量的并发连接,占用服务器资源(包括连接数、带宽等),这样会导致正常用户处于等待或无法访问服务器的状态
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
http{
… …
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
//1M可以存储8千个IP信息,将客户端IP信息存储名称为one的共享内存,内存空间为10M,容量可以根据需要任意调整
server {
listen 80;
server_name localhost;
limit_req zone=one burst=5;//每秒中仅接受1个请求,多余的放入漏斗
}
}
[root@client ~]# ab -c 100 -n 100 http://192.168.4.5/ //客户端使用ab测试软件测试
[root@client ~]# curl -i -X HEAD http://192.168.4.5
//curl命令选项说明:-i选项:访问服务器页面时,显示HTTP的头部信息,-X选项:指定请求服务器的方法
让Nginx拒绝非法的请求方法:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http{
server {
listen 80;
#这里,!符号表示对正则取反,~符号是正则匹配符号
if ($request_method !~ ^(GET|POST)$ ) { #如果用户使用不是GET或POST方法访问网站,则retrun返回444的错误信息
return 444;
}
}
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
4.防止buffer溢出
当客户端连接服务器时,服务器会启用各种缓存,用来存放连接的状态信息。
如果攻击者发送大量的连接请求,而服务器不对缓存做限制的话,内存数据就有可能溢出(空间不足)。
[root@proxy ~]# 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;
… …
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
网站安全(Tomcat)
启动服务
#rpm -qa | grep -i openjdk //查看是否安装java
#java -version //查看版本
#tar -zxvf apache-tomcat-8.0.30.tar.gz
#mv apache-tomcat-8.0.30 /usr/local/tomcat //移动包并改名
#echo "test" > /usr/local/tomcat/webapps/ROOT/a.html //测试页面
mv /dev/random /dev/random1
ln -s /dev/urandom /dev/random //有需要的话更改随机数,提高启动速度
#/usr/local/tomcat/bin/startup.sh
#netstat -utnlp | grep :8080
#curl http://localhost:8080/a.html
优化配置
1) 隐藏版本信息、修改tomcat主配置文件(隐藏版本信息)
未修改版本信息前,使用命令查看服务器的版本信息
[root@proxy ~]# curl -I http://192.168.2.100:8080/xx
//访问不存在的页面文件,查看头部信息
[root@proxy ~]# curl -I http://192.168.2.100:8080
//访问存在的页面文件,查看头部信息
[root@proxy ~]# curl http://192.168.2.100:8080/xx
//访问不存在的页面文件,查看错误信息
[root@web1 tomcat]# yum -y install java-1.8.0-openjdk-devel
[root@web1 tomcat]# cd /usr/local/tomcat/lib/
[root@web1 lib]# jar -xf catalina.jar //解压
[root@web1 lib]# vim org/apache/catalina/util/ServerInfo.properties //修改版本信息的内容
修改后,客户端再次查看版本信息
再次修改tomcat服务器配置文件,修改版本信息,手动添加server参数(服务端)
[root@web1 lib]# vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" server="jacob" />
[root@web1 lib]# /usr/local/tomcat/bin/shutdown.sh //关闭服务
[root@web1 lib]# /usr/local/tomcat/bin/startup.sh //启动服务
修改后,客户端再次查看版本信息
[root@proxy ~]# curl -I http://192.168.2.100:8080/xx
//访问不存在的页面文件,查看头部信息
[root@proxy ~]# curl -I http://192.168.2.100:8080
//访问存在的页面文件,查看头部信息
[root@proxy ~]# curl http://192.168.2.100:8080/xx
//访问不存在的页面文件,查看错误信息
2)降权启动
~]# ps aux |grep -i java //查看进程
默认tomcat使用系统高级管理员账户root启动服务,启动服务尽量使用普通用户。
[root@web1 ~]# useradd tomcat
[root@web1 ~]# chown -R tomcat:tomcat /usr/local/tomcat/
//修改tomcat目录的权限,让tomcat账户对该目录有操作权限
[root@web1 ~]# su -c "/usr/local/tomcat/bin/startup.sh" tomcat
//使用su命令切换为tomcat账户,以tomcat账户的身份启动tomcat服务
[root@m50 ~]# ps aux |grep -i java
[root@web1 ~]# chmod +x /etc/rc.local //设置该文件为开机启动文件
[root@web1 ~]# vim /etc/rc.local //修改文件,添加如下内容
su -c /usr/local/tomcat/bin/startup.sh tomcat
3)删除默认的测试页面
[root@web1 ~]# rm -rf /usr/local/tomcat/webapps/*
数据库服务(mariadb)
[root@proxy ~]# cat .mysql_history
//通过命令行修改的密码,bash会自动记录历史,历史记录中记录了明文密码
怎么解决?
管理好自己的历史;不使用明文登录;选择合适的版本5.6以后的版本;
日志,行为审计(找到行为人);使用防火墙从TCP层设置ACL(禁止外网接触数据库)
1.优化配置
]# rpm -q mariadb
]# rpm -q mariadb-server
[root@proxy ~]# systemctl status mariadb //确保服务已启动
[root@proxy ~]# mysql_secure_installation //执行初始化安全脚本
]# netstat -utnlp | grep :3306
2.删除/root/.mysql_history 文件
rm -rf /root/.mysql_history
3.使用tcpdump抓包[查看被谁访问过]
[root@proxy ~]# tcpdump -w log -i any src or dst port 3306//抓取源或目标端口是3306的数据包,保存到log文件中
mysql数据默认不加密传输
以上是关于服务安全与监控的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段