一、日志文件的备份和还原shell脚本:
客户机:
1、 通过修改配置文件,来实现发送日志到远程服务器
vim /etc/rsyslog.conf
*.* @@remote…
前面的*服务名称(日志文件)
后面的*代表等级
@@TCP协议发送
写入登录日志的服务
authpriv.* @@192.168.134.130:514 (远程服务器的ip和端口)
2.临时关闭防火墙,确保顺利发送
setenforce 0
getenforce 查看是否关闭
3、退出保存后,重启生效
service rsyslog restart 重启服务
二、服务器 (接受日志,存放日志,更改协议)
1.更改配置文件
vim /etc/rsyslog.conf
注意:
使用TCP协议接受
2.接受、存放日志:
按ip地址来接受日志(客户机ip 192.168.134.110)存放到/var/log/client/192.168.134.110.log
添加内容:
:fromhost-ip, isequal, “192.168.134.110” /var/log/client/192.168.134.110.log
3.退出保存后,重启生效
service rsyslog restart
4.查看端口是否开放:
ss -antpl | grep 514
t代表tcp协议,l代表监听
5.使用win10远程登录验证:
正确登陆后,用户端查看 cat /var/log/secure 看是否有登录成功的信息
服务器查看 cat /var/log/client/192.168.134.110.log
客户机:
服务器:
如果日志被删除,echo > /var/log/secure
服务器中仍有日志
能够还原日志文件
通过命令 echo > var/log/secure 来删除日志文件
客户机日志文件被删除,为空
服务器中仍有日志文件
二、监控系统运行情况shell脚本:
创建check.sh 脚本
#!/bin/bash
#计算cpu使用率, -n number:指定在结束前应该产生的最大迭代次数或帧数,一般迭代次数越大,获取到的cpu使用率越准确; 本脚本中是迭代了5次,"-n5"
cpu=`top -b -n5 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' '{split($1, vs, ","); v=vs[length(vs)]; sub(/\s+/, "", v);sub(/\s+/, "", v); printf "cpu使用率:%d", 100-v;}'`
echo $cpu'%'
#统计内存使用率
mem_used_persent=`free -m | awk -F '[ :]+' 'NR==2{printf "内存使用率:%d", ($3)/$2*100}'`
# -e参数是使 "\n"换行符生效进行输出换行的
echo -e $mem_used_persent'%\n'
#统计磁盘使用情况,df -P参数可以防止打印输出的内容换行
df -THP | awk -F '[ ]+' 'NR!=1{print $1","$6}'
执行check.sh脚本: sh check.sh
三、自动拒绝恶意IP登录shell脚本:
使用ubuntu远程登录centos7服务器,在centos7上将ubuntu的ip写入黑名单/etc/hosts.deny,并自动禁止该恶意IP登录
1、创建脚本,将恶意IP地址写入黑名单
vim /root/secure_ssh.sh
每次执行该脚本时,它会自动去扫描/var/log/secure日志文件,并把登录失败次数大于5次的IP自动写入到/etc/hosts.deny文件中去。
脚本内容:
#! /bin/bash
for i in $(grep "Failed password" /var/log/secure|awk '{print $(NF-3)}'|sort|uniq -c|sort -nr|awk '{if($1>=5) print $2}')
do
echo "sshd:$i:deny" >> /etc/hosts.deny
done
2 将脚本加入Crontab实现自动禁止恶意IP
设置定时任务,每天22:00自动执行secure_ssh.sh脚本
crontab -e
0 22 * * * sh /root/secure_ssh.sh
实验步骤:
在ubuntu使用ssh远程登录centos7服务器
ssh ‘登录目标机器的用户名’@’目标机器的ip地址’
ssh ‘gaotian’@‘192.168.134.110’
故意输错密码。默认输错三次退出,我们重复登录几次,输错五次以上。
在centos7查看登录日志
a.首先查看安全日志文件
cat /var/log/secure
b.过滤其它ip,只看登录失败的ip地址
grep "Failed password" /var/log/secure
在centos7运行secure_ssh.sh脚本文件
sh /root/secure_ssh.sh运行
cat /etc/hosts.deny查看黑名单,验证恶意ip是否被写入
此时再在ubuntu中试图登录centos7,被禁止登录
如果想使ubuntu重新可以登录centos7,在白名单中写入ubuntu的ip或者删除黑名单中ubuntu的ip
四、服务器的安全性测评shell脚本:
创建脚本文件safety_check.sh
1、检查用户账号是否安全、保证只有一个root用户;
#! /bin/bash
newuser_check=`grep "0:0" /etc/passwd | awk -F ':' '{print $1}'`
for i in ${newuser_check};do
if [[ ${i} != root ]];then #存在非root用户
echo "警告: 系统存在UID和GID为0的非root特权用户${i}"
else
echo "安全: 系统中不存在root以外的UID和GID为0的其它特权用户"
fi
done
2、检查用户密码复杂度
#密码的最小长度 pass_min_len=`cat /etc/login.defs | grep PASS_MIN_LEN | grep -v ^# | awk '{print $2}'`
#密码过期提醒时间
pass_warn_age=`cat /etc/login.defs | grep PASS_WARN_AGE | grep -v ^# | awk
'{print $2}'`
if [[ ${pass_min_len} -ge
9 ]];then #设置密码长度大于等于9为安全密码
echo "安全: 密码最小长度为${pass_min_len},密码较为安全"
else
echo "警告: 密码最小长度为${pass_min_len},密码不安全,建议大于9"
fi
if [[ ${pass_warn_age}
-ge 15 ]];then #设置密码过期时间大于等于15天为安全
echo "安全: 密码过期提醒时间为${pass_warn_age}天,符合密码策略"
else
echo "警告: 密码过期提醒时间为${pass_warn_age}天,不符合密码策略,建议大于15天"
fi
3、服务器的敏感文件检查
passwd_file_check=`ls -l
/etc/passwd | awk '{print $1}'` #检查passwd文件
shadow_file_check=`ls -l
/etc/shadow | awk '{print $1}'` #检查shadow文件
group_file_check=`ls
-l /etc/group | awk '{print $1}'` #检查group文件
#检查passwd文件权限是否为-rw-r--r-- if [[ ${passwd_file_check} != '-rw-r--r--' ]];then
echo "警告: 文件passwd的权限当前为${passwd_file_chececk},建议设置为\"-rw-r--r--\""
else
echo "安全: 文件passwd的权限当前为${passwd_file_chec},符合安全要求"
fi
#检查shadow文件权限是否为-r--------(只读)
if [[
${shadow_file_check} != '-r--------' ]];then
echo "警告: 文件shadow的权限当前为${shadow_file_check},建议设置为\"-r--------\""
else
echo "安全: 文件shadow的权限当前为${shadow_file_check},符合安全要求"
fi
#检查group文件是否为-rw-r--r--if [[ ${group_file_check} != '-rw-r--r--' ]];then
echo "警告: 文件group的权限当前为${group_file_check},建议设置为\"-rw-r--r--\""
else
echo "安全: 文件group的权限当前为${group_file_check},符合安全要求"
fi
4.磁盘使用检查
#查看磁盘占用率并发出警告
disk_space=`df -h | grep -v 'tmpfs' | grep '/dev/' | awk '+$5 > 80 {print $5}'`
if [[ ${disk_space} != '' ]];then
for i in ${disk_space};do
echo "警告: 当前某磁盘的使用率为${i}(大于80%),请扩充其容量或删除不必要的文件"
done
else
echo "安全: 当前各磁盘的使用率均小于80%,符合安全要求"
fi
执行结果: