1.修改密码长度及更换周期
查看默认的配置信息 chage -l root
参考:
root@localhost:/home# chage
用法:chage [选项] 登录
选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
设置:
vim /etc/login.defs
PASS_MAX_DAYS:90 密码最长有效期
PASS_MIN_DAYS:1 密码最短存留期
PASS_WARN_AEG:30 密码有效期警告快到30天收到警告
============
设置账户的过期时间
root@localhost:/home# chage -E 2019-05-21 haoxiaoyu
root@localhost:/home# chage -l haoxiaoyu
最近一次密码修改时间 :5月 15, 2019
密码过期时间 :5月 25, 2019
密码失效时间 :从不
帐户过期时间 :5月 21, 2019
两次改变密码之间相距的最小天数 :5
两次改变密码之间相距的最大天数 :10
在密码过期之前警告的天数 :6
============
密码复杂度检验处理:
安装插件:apt-get install libpam-cracklib
更改文件:
/etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=15 difok=1 lcredit=3 ucredit=-1
参数说明:
retry=3 最多重试三次
minlen=15 最短长度
difok=1 至少有一位的不同
lcredit=3 小写字母的个数
ucredit=-1 最少一个大写字母
2.登录异常设置
命令查看root的登录失败的次数:pam_tally2 --user root
======
root@localhost:~# pam_tally2 --user root
Login Failures Latest failure From
root 6 05/16/19 13:27:40 192.168.15.1
======
验证:
1、find /lib* -iname "pam_tally2.so"或find /lib* -iname "pam_tally.so"是否有改动态库
2、是否有以下参数:auth required pam_tally2.so onerr=fail deny=X unlock_time=Xeven_deny_root root_unlock_time=X(限制从终端登录)
3、/etc/pam.d/sshd文件中是否有以上相同参数(限制ssh登录)
建议整改:
Ubuntu:/etc/pam.d/common-password文件中添加:auth required pam_tally2.so onerr=fail deny=3 unlock_time=40 even_deny_rootroot_unlock_time=30
注意添加的位置,要写在第一行,即#%PAM-1.0的下面。
以上策略表示:普通帐户和 root 的帐户登录连续 3 次失败,就统一锁定 40 秒, 40 秒后可以解锁。
如果不想限制 root 帐户,可以把 even_deny_root root_unlock_time这两个参数去掉, root_unlock_time 表示 root 帐户的 锁定时间,onerr=fail 表示连续失败,deny=3,表示 超过3 次登录失败即锁定。
2、/etc/pam.d/sshd文件中添加相同参数
(备注:以上参数根据实际情况进行设置,至少配置/etc/pam.d/sshd文件限制ssh登录)
应采用两种或两种以上组合的鉴别技术对管理用户进行身份鉴别。
3.权限划分:
1.物理机房:采用双因子认证设备
2.上云服务器(如阿里云):云堡垒机
访问控制:
应启用访问控制功能,依据安全策略控制用户对资源的访问;
验证检查:
1.重命名系统默认帐户(root);
2.修改默认帐户的口令。
建议整改:
1.根据业务需求情况对root进行重命名,其口令必须进行修改
2.应对重要信息资源设置敏感标记;
整改方法:
vi /etc/passwd
修改第1行第1个root为新的用户名
vi /etc/shadow
修改第1行第1个root为新的用户名
验证检查:
1.询问主机管理员是否定义了主机中的重要信息资源;
2.询问主机管理员,是否为主机内的重要信息设置敏感标记。
验证检查:
1、询问主机管理员是否定义了敏感标记资源的访问策略;
2、查看有敏感标记的重要信息资源是否依据访问策略设置了严格的访问权限。
个人整改:用户家目录下设置的权限为700(用户进入一个文件夹必须有X的权限,否则无法进入)
4.安全审计
1.审计范围应覆盖到服务器上的每个操作系统用户和数据库用户;
2.审计内容应包括重要用户行为、系统资源的异常使用和重要系统命令的使用等系统内重要的安全相关事件;
3.审计记录应包括事件的日期、时间、类型、主体标识、客体标识和结果等;
4.应能够根据记录数据进行分析,并生成审计报表;
5.应保护审计进程,避免受到未预期的中断;
6.应保护审计记录,避免受到未预期的删除、修改或覆盖等。
验证检查:
1、输入service syslog/rsyslog status 、service auditd status查看进程是否存在。
备注: 服务器: sudo service syslog status 在运行
服务器: sudo service rsyslog status 在运行
service auditd status 进程不存在
2、(centos:cat /etc/syslog.conf或cat /etc/rsyslog.conf文件中应包含类似于以下值:*.info;mail.none;news.none;authpriv.none;cron.none/var/log/messages;)(Ubuntu:cat/etc/rsyslog.d/50-default.conf 文件中应包含类似于以下值:*.info;mail.none;news.none;authpriv.none;cron.none/var/log/messages;)
3、是否对审计日志定期查看、分析,生成审计分析报表
4、是否安全额外的审计进程保护
5、查看syslog.conf、audit.conf文件中日志信息所在文件的访问权限,如:
ls -l /var/log/messages;
(centos:ls -l/var/log/secure);(Ubuntu:ls -l/var/log/auth.log)
ls -l /var/log/audit/audit.log;
访谈并询问是否对审计日志进行保护
5.远程登录安全
禁止无密码登录
配置文件:
/etc/ssh/sshd_config
PermitEmptyPasswords no # 禁止无密码访问服务器
PermitRootLogin no # 是否禁止使用root登录(为方便管理,暂未收回权限)
/etc/init.d/ssh restart
限制用户认证次数
MaxAuthTries 4 # 等保三要求该值小于等于 4
ssh空闲超时
/etc/ssh/sshd_config(不可用)
ClientAliveInterval 300 # 小于等于300s
ClientAliveCountMax 3 # 存活用户数小于等于3
修改/etc/profile配置文件(可用)
# vi /etc/profile
增加:TMOUT=1800
这样30分钟没操作就自动LOGOUT
cat /var/log/apache2/access.log | awk '{ print $1 }' | sort | uniq -c | sort -rn | head -n 25 | \ awk '{ printf("%5d\t%-15s\t", $1, $2); system("geoiplookup " $2 " | cut -d \\: -f2 ") }'
在linux上统计ip次数和地域
先安装插件,如果需要精确ip的话需要下载数据库
apt-get install geoip-bin
geoiplookup 8.8.8.8 测试输出
=====
root@iZ8vb5krm4qppt5j0efts1Z:/home/jesse# geoiplookup 8.8.8.8
GeoIP Country Edition: US, United States
=====
再执行:
cat /var/log/apache2/access.log | awk '{ print $1 }' | sort | uniq -c | sort -rn | head -n 25 | awk '{ printf("%5d\t%-15s\t", $1, $2); system("geoiplookup " $2 " | cut -d \\: -f2 ") }'
=====
root@iZ8vb5krm4qppt5j0efts1Z:/home/jesse# cat /var/log/apache2/access.log | awk '{ print $1 }' | sort | uniq -c | sort -rn | head -n 25 | awk '{ printf("%5d\t%-15s\t", $1, $2); system("geoiplookup " $2 " | cut -d \\: -f2 ") }'
3 1.94.138.22 CN, China 次数 ip 地域
=====
grub加密
编辑配置文件 /etc/grub.d/40_custom 添加如下配置:
password xxxxxxxx
aide工具(有待研究)
AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。AIDE生产一个文件系统状态的快照,其中包括修改时间,权限和文件哈希值,然后可以其与文件系统的当前状态进行比较,以检测对系统的修改
apt install aide
6.内核优化
内核管理
检查可疑数据包是否被记录,内核配置如下:
# 在 /etc/sysctl.conf 文件中设置以下参数:
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
生效以上配置:
# 开启并记录欺骗,源路由和重定向包
$ sysctl -w net.ipv4.conf.all.log_martians=1
$ sysctl -w net.ipv4.conf.default.log_martians=1
# 清空路由缓存
$ sysctl -w net.ipv4.route.flush=1
# 更新系统内核配置
$ sysctl -p
杂项,技巧
查看访问者404 错误页面的请求次数以及请求页面,并按降序排列
[root@elk nginx]# cat /var/log/nginx/access.log | awk '($9 ~ /404/)' | awk '{ print $7 }' | sort | uniq -c | sort -rn | head -n 25
查看访问者使用的User-Agent,并统计排序
[root@elk nginx]# cat /var/log/nginx/access.log | awk -F\" '{ print $6 }' | sort | uniq -c |sort -frn | head -n 25
统计web服务器的 UV 量
[root@elk nginx]# cat /var/log/nginx/access.log | awk '{ print $1 }' | sort | uniq -c | wc -l
122
统计当天的uv访问量
[root@elk nginx]# cat /var/log/nginx/access.log | grep `date '+%d/%b/%G'` | awk '{ print $1 }' | sort | uniq -c | wc -l
10
统计当月的uv访问量
[root@elk nginx]# cat access.log | grep `date '+%b/%G'` | awk '{ print $1 }' | sort | uniq -c | wc -l
111
根据返回的响应码进行排序
[root@elk nginx]# cat /var/log/nginx/access.log | awk '{ print $9 }' | sort | uniq -c | sort -rn
8973 200
7304 401
720 304
79 404
49 400
10 502
10 "-"
7 201
4 499
4 409
4 173
1 405
快速列出点击量最多的请求页面
[root@elk nginx]# cat /var/log/nginx/access.log | awk '{ print $7 }' | sort | uniq -c | sort -rn | head -n 25
/elasticsearch/packetbeat-*/_field_stats?level=indices
/favicon.ico
/bundles/src/ui/public/images/elk.ico
/
/elasticsearch/logstash-*/_field_stats?level=indices
/elasticsearch/.kibana/_refresh
/app/kibana
/elasticsearch/_msearch?timeout=0&ignore_unavailable=true&preference=1472786252222
/elasticsearch/_msearch?timeout=0&ignore_unavailable=true&preference=1472784429830
/elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472746017033
/elasticsearch/.kibana/index-pattern/_search?fields=
/bundles/src/ui/public/images/kibana.svg
/bundles/kibana.bundle.js?v=10000
/bundles/node_modules/font-awesome/fonts/fontawesome-webfont.woff2
/bundles/commons.style.css?v=10000
/bundles/commons.bundle.js?v=10000
/bundles/kibana.style.css?v=10000
/elasticsearch/topbeat-*/_field_stats?level=indices
/elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472744909049
/elasticsearch/.kibana/visualization/_search?size=100
/elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472749929499
/elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472750405461
/elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472750160122
/elasticsearch/.kibana/dashboard/_search?size=100
/elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472743171471
实时的查看请求者ip、http方法、响应码、请求的页面
[root@elk nginx]# tailf /var/log/nginx/access.log | awk '{ printf("%-15s\t%s\t%s\t%s\n", $1, $6, $9,$7) }'
60.191.52.254 "HEAD 401 http://115.236.176.134:3434/
141.212.122.160 "GET 401 /
101.200.215.149 "GET 401 /manager/html
114.44.57.4 "CONNECT 400 126mx01.mxmail.netease.com:25
187.160.7.218 "GET 401 /cgi/common.cgi
187.160.7.218 "GET 401 /stssys.htm
187.160.7.218 "GET 401 /
187.160.7.218 "POST 401 /command.php
218.75.70.3 "GET 401 /
163.172.173.181 "GET 401 http://www.baidu.com/cache/global/img/gs.gif
123.125.2.108 "GET 200 /
123.125.2.108 "GET 200 /app/kibana
123.125.2.108 "GET 304 /bundles/commons.style.css?v=10000
跟上面的类似,只是在第四个字段加了个GeoIP解析归属地,如下:
[root@elk nginx]# tailf /var/log/nginx/access.log | awk '{
"geoiplookup " $1 " | cut -d \\: -f2 " | getline geo
printf("%-15s\t%s\t%s\t%-20s\t%s\n", $1, $6, $9, geo, $7);}'
123.125.2.108 "GET 304 CN, China /bundles/src/ui/public/images/kibana.svg
123.125.2.108 "POST 200 CN, China /elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472922034187
123.125.2.108 "POST 200 CN, China /elasticsearch/.kibana/index-pattern/_search?fields=
123.125.2.108 "GET 200 CN, China /elasticsearch/.kibana/_mapping/*/field/_source?_=1472922034556
123.125.2.108 "POST 200 CN, China /elasticsearch/_mget?timeout=0&ignore_unavailable=true&preference=1472922034187
123.125.2.108 "GET 304 CN, China /bundles/node_modules/font-awesome/fonts/fontawesome-webfont.woff2
显示非法代理的访问者
[root@elk nginx]# awk -F\" '($6 ~ /^-?$/)' /var/log/nginx/access.log | awk '{ print $1 }' | sort | uniq
114.44.57.4
183.129.160.229
218.75.70.3
61.231.3.98
模拟CPU升高
模拟cpu升高(可后台运行n次,每个进程的使用率*n 就是总的cpu利用率)
dd if=/dev/zero of=/dev/null
curl 构造参数,传参,提交请求
curl -d 'Key=xxx&phone=xxx&sms=xxx' -X POST -v api接口地址