linux服务器ssh登录安全规则中,理论上要做到:防火墙限制,hosts.allow限制,root禁止登录,用户权限分配,ssh端口修改,登录时间限制,堡垒机登录。
这里只讲登录时间限制和登录报警通知
登录超过10分钟无操作自动断开链接:
在/etc/profile.d/中新建脚本autologout.sh,内容如下:
TMOUT=600 readonly TMOUT export TMOUT
这样,用户超过600秒无操作就会断开链接。
登录报警:
在/etc/profile最后一行追加
/bin/bash /tmp/login.sh
这样,每个用户登录时候就会加载系统配置,发送微信通知我
weixin.sh脚本内容如下
#!/bin/bash # -*- coding: utf-8 -*- ###SCRIPT_NAME:weixin.sh### ###send message from weixin for monitoring### ###V1-2017-09-05 sender(){ ip=`curl ip.sb` message="用户`whoami`成功从`who am i |awk -F '[()]' '{print $2}'`登录${ip}_`hostname`服务器,时间`date '+%Y-%m-%d-%H:%M:%S'`" CropID='企业微信应用id' Secret='企业微信应用id密码' GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F " '{print $10}') PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" function body() { local int AppID=1 # 企业号中的应用id local UserID=$1 # 部门成员id,zabbix中定义的微信接收者 #local PartyID=$2 # 部门id,定义了范围,组内成员都可接收到消息 #local Msg="hello" # 过滤出zabbix中传递的第三个参数 printf '{ ' printf ' "touser": "'$UserID'", ' #printf ' "toparty": "$PartyID", ' printf ' "msgtype": "text", ' printf ' "agentid": "'$AppID'", ' printf ' "text": { ' printf ' "content": "'$message'" ' printf ' "safe":"0" ' } curl --data-ascii "$(body $1)" $PURL 1 > /dev/null 2>&1 printf ' ' }
在编写一个login.sh脚本调用weixin.sh脚本
下面这个方法不是很好,应该判断是否从A,B,C这些ip访问的服务器。如果不是从这些ip访问的服务器代表这被入侵了。
但是公司网络没有固定ip,服务器太少跳板机成本大一点。所以用下面方法。
#!/bin/bash hour=`date '+%H'` week=`date '+%w'` #如果是19点到10点之间则发送通知 if [ $hour -ge 18 ] || [ $hour -lt 9 ];then /bin/bash /tmp/weixin.sh guoyabin 1 > /dev/null 2>&1 fi #如果是周67 则发送通知 if [[ $week > 5 ]];then /bin/bash /tmp/weixin.sh guoyabin 1 > /dev/null 2>&1 fi
收到微信通知