运维交付安全基线检查

DevOpSec
• 阅读 394

来源: DevOpSec公众号 作者: DevOpSec

背景

  1. 业务安全,业务上线运行要分配主机、网络、域名等资源,这些资源安全性决定了其背后业务线的基本安全性。

  2. 为了满足等保要求,安全合规。

  3. 业务能不能安全运行,间接影响产品稳定性。

运维交付安全基线检查时业务运行安全的安全底座,下面我们来看看从主机、代理、逻辑、db、网络等层面如何做交付前基线检查。

检查方向

主机层面

主机层面的安全是相对来说基础的,业务程序在主机上运行,如果主机安全做不好,业务程序安全性何从谈起,我们从以下几点来聊聊主键安全怎么做,主要是一些配置。

1. ssh安全设置

a. sshd timeout配置 设置闲置会话超时时间,防止有人利用已经登录的ssh 客户端做坏事。

# 探活周期和探活最大次数,此处为150min
grep -i ClientAlive /etc/ssh/sshd_config
ClientAliveInterval 30
ClientAliveCountMax 5

b. sshd 连接缓慢,优化sshd链接速度

grep -iE "GSSAPIAuthentication|UseDNS" /etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no

c. sshd禁止转发,防止有人把线上服务通过ssh代理出去

grep -iE "AllowAgentForwarding|AllowTcpForwarding|GatewayPorts|X11Forwarding" /etc/ssh/sshd_config 
AllowAgentForwarding no
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no

d. 登录保护 登录失败限制,比如失败3次锁定5分钟

# 默认的锁定时间,如果,指定,需要加 unlock_time=300
# grep "password    requisite" /etc/pam.d/system-auth 
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

e. 密码长度限制(至少8位包含大小写、特殊字符、数字)

# lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1, < 0  复杂密码最少出现次数, >0最多出现次数
# grep "password    requisite" /etc/pam.d/system-auth 
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

f. 22号端口或者修改sshd端口,只允许跳板机连接

连接线上服务器都通过跳板机连接,服务器22号端口只允许跳板机ip来连接

ssh先关的配置基本上说完了,注意:机器不要有外网ip,机器不要有外网ip,机器不要有外网ip,重要事情说三遍。怎么去外网ip请见之前写的文章 解决运维痛点服务器去外网ip

2. 审计日志

主机的日志审计包括:操作日志、登录日志/var/log/secure、系统运行日志/var/log/message,跳板机(比如:jumpserver)有操作日志记录,这些日志要保留180天以上。

或者通过如下方式记录操作日志

1. /etc/bashrc 配置

....
#Variable for login user

source /tmp/$(who am i |awk '{print $2}' |sed 's#/#_#g') &>/dev/null

#Variable for commands recording

export PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}";RETRN_VAL=$?;logger -p local6.debug "$(who am i |awk "{print \$1\" \"\$2\" \"\$3\" \"\$4\" \"\$5}") [$USER] [`whoami`] [$$] [`pwd`] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'


2. /etc/rsyslog.conf 配置

...
#记录远程一份
local6.* @xxx.xxx.xxx.xxx:514
#记录本地一份
local6.* /var/opt/opt.txt

注意:本地一份远程一份,防止被黑日志被清理。

3. HIDS部署

HIDS入侵检测系统,用于安全检查、安全策略执行、可见性和合规性监控。

如果是云厂商可以使用云厂商的HIDS产品,比如阿里云安骑士、腾讯云的云镜,还有开源的 OSSEC

4. 主机监控

主机监控检查各种agent端有没有启动,常规的主机基础监控、网络流量监控等。

5. 其他

a. 外联其他服务端口限制

限制外联端口,方便ACL时做网络流量控制

sysctl net.ipv4.ip_local_port_range  # 结果应该是 40000        65000

b. 注:k8s node 是否开启 net.ipv4.ip_forward,非k8s node禁止开启

c. DNS 配置是否正确 检查主机dns配置文件是否是期望的

cat /etc/resolv.conf

options timeout:2
nameserver your-dns-ip1
nameserver your-dns-ip2
nameserver your-dns-ip3

代理层

1. nginx

nginx是流量的出入口,也是接近用户较近的一层,这一层的安全也至关重要,最好独立VPC部署,针对nginx的交付检查如下:

a. 是否独立VPC VPC的策略是否最小化访问后端服务

b. 日志记录request header和response body,方便定位问题

执行:cat /apps/nginx/conf/nginx.conf|grep your_log_fromat|grep -E 'resp_body|request_body'

确认:log_fromat your_log_fromat 包含:$request_body 和 $resp_body

c. nginx 启动用户非root

执行:cat /apps/nginx/conf/nginx.conf | grep user
返回:user  www; 
执行:cat /etc/passwd | grep www
返回:www:x:1000:1000::/home/www:/sbin/nologin

d. 进程监听地址不要绑定 0.0.0.0

执行:
  pid=$(ps aux | grep nginx | grep master  | awk '{print $2}') && netstat -ntpl | grep  $pid
返回:非0.0.0.0监听

e. 最小化编译nginx,configure -V 每个模块为什么需要,要搞清楚

f. 是否隐藏nginx 标识和版本

执行:cat /apps/nginx/conf/nginx.conf | grep server_token
返回:server_tokens off;

g. nginx是否配置waf设置,如果你有waf这里交付检查要加上

f. 全站https配置,禁用TLS 1.0 和 1.1

执行如下命令检查是否禁用

nmap --script ssl-enum-ciphers -p 443 your.domain.com

h. ngnx访问日志保留180天以上

日志是否保留180天(日志要能体现remote addr 、访问资源、认证的用户信息如果有)

更多nginx安全相关的配置,请见之前的文章 史上最全nginx 安装升级安全配置

2. 增加域名,检查域名的漏洞报告

增加域名这里,必须是https访问,禁用TLS 1.0 和 1.1 ,域名要上线需要给出域名的漏洞扫描报告方可上线。 开源web漏洞扫描工具有:WASP ZapOpenVASNikto等。

逻辑层

1. 增加进程

进程检查方面注意:

a. 进程非root用户启动

b. 进程的管理配置不能对外暴露,比如tomcat的管理url

c. 进程通过nessus扫描后,方可上线

db层

1. mysql

Mysql 交付检查项: a. 是否设置密码

mysql -hlocalhost -uroot -p
显示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO),则表示root设置了密码

b. 是否有空口令

在mysql内执行:
select user,host,password from mysql.user;
如果password列有空值,则表示有空口令

c. 密码长度限制(至少8位包含大小写、特殊字符、数字)

d. 是否非root启动,且此用户的shell为 /sbin/nologin

ps aux|grep mysql
cat /etc/passwd | grep xxx   #xxx为启动mysql的用户

e. 进程非绑定0.0.0.0

netstat -nulpt|grep 3306|grep -v '0.0.0.0' 执行是否有值

f. 是否禁止外网ip

ping www.baidu.com  #检查是否ping 通

g. 是否有设置备份

查看离线库是否有备份脚本
检查是否有备份定时任务  crontab -l |grep backup_mysql

h. 监控相关检查

mysql exporter 是否安装

慢查询日志是否到远端,比如filebeat进程是否启动

主动同步告警、连接数过高告警

i. 是否有慢查询kill应急脚本

检查kill慢查询脚本或者工具pt-kill是否存在

注:可以设置max_execution_timemax_allowed_packet来保护mysql的稳定性。

如果有其他db相关的安全检查可以参考mysql的检查项

网络层

边界安全

1. 防火墙的检查

a. 默认拒绝所有

b. 只允许知道的端口出去

c. 对外部开放端口需要经过审批通过后方可增加策略

d. 所有规则要有明确清晰的备注

2. 网关

网关是服务器出网的出口

a. 网关出口配置白名单模式,只允许知道的流量出去

b. 所有规则要有明确清晰的备注

3. VPC/ACL

a. 一条业务线一个VPC,特殊场景可以增加VPC

b. VPC其他VPC不能打通

c. ACL出入默认拒绝所有协议

d. ACL精细化控制出入协议

e. VPC 只和必要的基础设施VPC打通,只放心部分流量或者单向放行,比如监控、日志搜集、salt-master等

f. 所有规则要有明确清晰的备注

总结

上述运维交付安全检查点,可以集成到机器初始化,模块初始化和CICD中完成。然后让自动化来帮我们做二次的检查,给出检查报告。

安全无小事,所以在业务上线前,我们要把好关,把安全问题消灭在事故前。

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Linux运维常见面试题之精华收录
Linux运维常见面试题之精华收录1、什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术运维又包括很多种,有DBA运维、网站运维、虚
Wesley13 Wesley13
3年前
MySQL数据安全策略
0、导读MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全?MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全。数据安全如果只靠MySQL应用层面显然是不够的,是需要在多个层面来保护的,包括网络、系统、逻辑应用层、数据库层等。
玩转云端| 一文读懂天翼云CDN升级重点
信息时代,高效、安全地把丰富内容交付给不同地区的用户,对于许多政企单位来说至关重要。然而,随着内容交付场景规模不断扩大,交付复杂程度提高,安全需求提升,内容分发工作也迎来新的挑战。在刚刚结束的天翼云4.0创新成果发布会上,天翼云CDN在资源能力、业务承载量、客户体验、安全、效率等方面全面升级,满足客户在数字时代高标准的内容交付需求,助推客户业务飞速发展。天翼
DevOpSec DevOpSec
1年前
解决运维痛点服务器去外网ip
在我们做业务或网络运维的过程中肯定会接触到外网ip,外网ip是服务和外界连接的桥梁,由此可见外网ip很重要,但与此同时它的存在也同样会带来安全上的隐患。下面我们来看看常见的安全问题。
构建一体化云原生安全防御体系,京东云云原生安全平台重磅发布
当用户充分利用原生云能力进行应用设计、部署和运维时,云原生也面临新的安全挑战,例如镜像漏洞与投毒、编排软件漏洞、不安全配置利用、容器逃逸等。面对这样的风险,京东云重磅发布云原生安全平台,包含资产清点、镜像安全、运行时安全、网络安全、集群安全、节点安全等安全
等保合规有妙招!安全又省心!
近年来,上云已成为企业数字化转型的必然选择,安全也成为了企业上云考虑的关键问题。《信息安全技术网络安全等级保护基本要求》规定了网络安全等级保护的第一级到第四级等级保护对象的安全通用要求和安全扩展要求。那么,企业该如何高效、平稳地满足等保合规,并将安全转化为自身的发展助力?
京东云开发者 京东云开发者
3个月前
【案例分享】如何利用京东云建设高可用业务架构
本文以2022年一个实际项目为基础,来演示在京东云上构建高可用业务的整个过程。公有云及私有云客户可通过使用京东云的弹性IAAS、PAAS服务,创建高可用、高弹性、高可扩展、高安全的云上业务环境,提升业务SLA,提升运维自动化水平,降低资源成本及运维成本。有
数字先锋 | 双十一来了,零售企业如何备战?
在搭建统一云管平台方面,天翼云将多云并行的异云迁移、整合到天翼云平台中,实现统一运维管理,有效降低了大商集团云中台的运维负担。在安全能力打造方面,天翼云提供Web应用防火墙、服务安全卫士等丰富产品,可满足企业合规安全要求,护航企业平稳健康发展。
DevOpSec
DevOpSec
Lv1
懂开发的运维,懂安全的运维。公众号:DevOpSec
文章
57
粉丝
6
获赞
26