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 '{\n' printf '\t"touser": "'$UserID'",\n' #printf '\t"toparty": "$PartyID",\n' printf '\t"msgtype": "text",\n' printf '\t"agentid": "'$AppID'",\n' printf '\t"text": {\n' printf '\t\t"content": "'$message'"\n' printf '\t"safe":"0"\n' } curl --data-ascii "$(body $1)" $PURL 1 > /dev/null 2>&1 printf '\n' }
在編寫一個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
收到微信通知