簡單簡易實現伺服器遠端登陸傳送簡訊提示
隨著網路和資訊保安保護等級的普及以及網路安全法的實施,很多企業安全這一塊還很缺失,例如伺服器遠端登陸這一塊,大多數企業和維護人員由於成本昂貴和可管理性差也就很多沒有使用雙因子驗證。今天筆者就帶大家來了解一下簡單簡易的方法實現伺服器遠端登陸傳送簡訊提示(僅供參考,因為是簡易,所以可能不是那麼的專業,但一定是實用的方法)
通常情況運維開發會從幾方面下週進行改造遠端登陸提醒:
1、伺服器自帶的稽核訊息策略和伺服器遠端桌面管理策略(其實有條件的可以實現堡壘機)
2、自己寫程式或者指令碼,然後加入啟動/計劃任務專案,當有條件出發,就發出告警
3、通過開源或者免費收費的第三方軟體進行安裝部署和實施管理,這個看企業的成本預算
那麼筆者結合Windows和Linux伺服器的特徵
分別來介紹伺服器遠端登陸之後傳送簡訊提示的實施方案方法↓↓↓
一、Linux伺服器ssh遠端登陸實現傳送簡訊的方法
1、shell指令碼+簡訊API的方法實現傳送簡訊
今天下午在找監控資料的時候發現很多用簡訊報警之類的手法。發現中國移動提供了一個介面
飛信免費發簡訊API介面呼叫方式(通過HTTP訪問以下網址、支援GET和POST): http://sms.api.bz/fetion.php?username =您的移動飛信登入手機號&password=您的移動飛信登入密碼&sendto=接收簡訊的飛信好友手機號(也可以是你自己的手機號)&message=簡訊內容
注:需要互為移動飛信好友.簡訊內容最大長度為180個漢字,超過180個漢字不傳送。返回的資訊為UTF-8編碼的中文文字資訊。
在linux下可以使用curl post這一操作 curl "http://sms.api.bz/fetion.php?username=15802179011&password=123456& amp;sendto=15802179012&message=簡訊內容"
----------------------------------------------------------------------------------------------------------------------------------------
為了伺服器安全,防止被入侵,除了加強密碼之外,還可以監控伺服器的登陸情況
把登陸日誌記下來,當然系統也會有記錄,但不排除被人刪掉,所以把資料傳送到另外一臺伺服器比較保險,避免被刪除
在linux下面很簡單,只需要在/etc/ssh/目錄下面建立一個sshrc的檔案,然後給它執行許可權,那麼在有人通過ssh遠端登入這臺伺服器的時候,這段指令碼就會被執行
程式碼如下:
#!/bin/bash
#獲取登入者的使用者名稱
user=$USER
#獲取登入者的IP地址
ip=${SSH_CLIENT%% *}
#獲取登入的時間
time=$(date +%F%t%k:%M)
#伺服器的IP地址
server=`ifconfig eth1|sed -n '2p'|awk -F ":" '{print $2}'|awk '{print $1}'`
#這裡可以判斷如果登入者的IP地址不是指定的IP,則發郵件報警,我這裡直接就傳送,當然你也可以不傳送,直接記錄下日誌即可
curl "http://www.test.com/api/notify_login?content=$time,$user,$ip,$server" > /etc/ssh/log 2>/dev/null
這段指令碼會在使用者連上終端之前被執行,也就是說這段指令碼如果沒有被執行完,使用者是連結不上終端的,那就可以保證報警資訊肯定能收到,如果不是被人登陸趕緊登陸伺服器,修改密碼,斷開所有ssh連線。
-----------------------------------------------------------------------------------------------------------------------------
2、First Python-Linux SSH登入簡訊通知
指令碼語言目前發展很快,python流行度也越來越大,對我而言,指令碼語言主要作為系統的粘合劑,一般不做主體業務邏輯的開發,但作為系統管理,整合程式還是不錯的。因為有個小需求:linux下SSH遠端登入後,傳送簡訊通知管理員。原來一般使用shell直接完成,今天直接上python,純粹就當做技術練練手
#!/usr/bin/python
import time
import base64
import urllib
import httplib
import os
import sys
mobileNos=138xxxxxxxx
def sendSms(mobileNo,content):
url = "/api/......"
queryString=urllib.urlencode({"mobileNo": mobileNo, "content": content, "username":"aaaaa", "password":"xxxxxx"})
conn = httplib.HTTPConnection("192.168.xxx,xxx")
conn.request("GET",url+"?"+queryString)
response = conn.getresponse()
conn.close()
def logger(log):
f=open('lm.log','a+')
print >> f, log
f.close()
def loginNotify():
client = os.getenv("SSH_CLIENT")
if client is None:
return
clientInfo = client.split(' ')
ip = clientInfo[0]
now = time.strftime('%Y-%m-%d %H:%M:%S')
user = os.getenv("USER")
hostname = os.getenv("HOSTNAME")
log = now + " - " + user + " login " + hostname + " from " + ip
logger(log)
sendSms(mobileNos,log)
if __name__ == "__main__":
loginNotify()
3、Linux使用者登入就發微信提醒
有時候可能怕密碼共享了之後有人亂登陸隨意登陸或者客戶端中毒之後惡意登陸,檢視last時可能有點晚,以前做了個zabbix微信報警,想著就寫個登入的微信提醒
使用者登入用載入/etc/profile
所以命令寫這裡面,順便寫個微信報警的指令碼,主要模仿zabbix的原理.
#!/bin/bash
###SCRIPT_NAME:weixin.sh###
###send message from weixin for login monitor###
###cuiss###
###V1-2016-02-23###
CropID='xxxxxxxxx'
Secret='xxxxxxxxxxxxxxxxxxxx'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl $GURL -H "DNT: 1" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: zh-CN,zh;q=0.8" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 BIDUBrowser/8.1 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "X-DevTools-Emulate-Network-Conditions-Client-Id: B546FC80-414C-403F-95F0-EB0F70E58EF7" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" --compressed | awk -F \" '{print $4}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body() {
local int appId=1
local userId=$1
local partyId=2
local msg='有使用者上線請注意:\n主機名:'`hostname`'\n主機ip:'`curl ipecho.net/plain`'\n登入使用者:'`whoami`'\n登入時間:'`date`
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":"'"$msg"\"
printf '\n\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1)" $PURL
這裡為了方便 就讓指令碼後面跟使用者了,
<#root> bash weixin.sh monitor (注意執行指令碼許可權哈 chmod a+x)
為了方便識別,這裡主要獲取了主機名,因為部署環境通常以主機名區別功能
主機ip和使用者名稱和登入的時間
其他通過shell指令碼和企業微信實現實時報警功能 - 請參考資料→ https://blog.csdn.net/qqHJQS/article/details/79521630
二、Windows server伺服器遠端桌面實現傳送簡訊的方法
1、第三方軟體方法實現遠端桌面簡訊/二次登陸提示
攔截寶是一款伺服器安全防護軟體,主要針對伺服器被入侵、網站入侵被掛馬、伺服器被提權的防護作用。這款軟體能幫助使用者有效的攔截各種伺服器的攻擊,避免服務被惡意的入侵與掛馬,有效的保護伺服器上資料不被竊取。
碼字辛苦插播一條廣告牌AD:AnyTopOne 是一個開源軟體(Free and Open-Source Software)手機端ssh的最佳利器!!
2、使用簡訊貓實現伺服器遠端簡訊告警
在本地遠端登陸伺服器,然後在伺服器上執行程式用簡訊貓傳送簡訊。
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
RXTX Warning: Removing stale lock file. /var/lock/LCK..ttyS0
Jun 24, 2011 10:42:51 AM SendMsg IntSIM
INFO: 2011-6-24 10:42:51åˆ
Jun 24, 2011 10:42:51 AM SendMsg IntSIM
INFO: 2011-6-24 10:42:51ATZ
Jun 24, 2011 10:42:51 AM SendMsg IntSIM
INFO: 2011-6-24 10:42:51ATZ
Jun 24, 2011 10:42:51 AM SendMsg IntSIM
INFO: 2011-6-24 10:42:51åˆ
Jun 24, 2011 10:42:51 AM SendMsg sendMessage
INFO: 2011-6-24 10:42:51çŸä¿¡å†…容为:血压过高ï¼ï¼ï¼
Jun 24, 2011 10:42:51 AM SendMsg sendMessage
INFO: 2011-6-24 10:42:51目的手机å·ç 为: 138********
Jun 24, 2011 10:42:51 AM TestSendMsg get_ex
INFO: 2011-6-24 10:42:51 java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1931)
at java.lang.String.substring(String.java:1904)
at SendMsg.ConvertPhoneNumber(SendMsg.java:362)
at SendMsg.Sending(SendMsg.java:211)
at SendMsg.sendMessage(SendMsg.java:42)
at TestSendMsg.main(TestSendMsg.java:19)
3、指令碼+設定實現免費實現伺服器登入手機簡訊通知
如何讓配置伺服器有人登入時,立即給你傳送一個手機簡訊提醒你有人登入伺服器呢?
方法如下:
該方法支援支援聯通,移動,電信手機,且是免費簡訊。【乾貨】另外易信、139郵箱和飛信等都可以實現免費的簡訊和郵箱傳送,無需接入其他api/sdk即可實現登陸即可傳送簡訊(鑑於現在智慧手機都有簡訊攔截,注意使用時加白名單即可)
實現步驟:
1.聯通、移動、電信,手機免費開通手機郵箱,同時開通郵件短息提醒。
移動手機訪問以下網址開通手機郵箱:http://mail.10086.cn/
聯通手機訪問以下網址開通手機郵箱:http://mail.wo.com.cn/mail/login.action
電信手機訪問以下網址開通手機郵箱:http://webmail21.189.cn/webmail/
2.以下為傳送郵件的VBS指令碼,修改為你的手機號和郵箱密碼,將以下內容複製到記事本,儲存為副檔名為vbs的檔案。
NameSpace = "http://schemas.microsoft.com/cdo/configuration/"
Set Email = CreateObject("CDO.Message")
Email.From = "傳送郵箱"
Email.To = "接收郵箱"
Email.Subject = "有人登陸Web伺服器"
Email.Textbody = "注意檢查登陸者是否合法!"
With Email.Configuration.Fields
.Item(NameSpace&"sendusing") = 2
.Item(NameSpace&"smtpserver") = "smtp.139.com"
.Item(NameSpace&"smtpserverport") = 25
.Item(NameSpace&"smtpauthenticate") = 1
.Item(NameSpace&"sendusername") = "郵箱賬戶名"
.Item(NameSpace&"sendpassword") = "密碼"
.Update
End With
Email.Send
3.在伺服器上執行
到目前為止,你已經設定好了,伺服器登入指令碼,只要有人登陸你的伺服器,你的伺服器就會給你的手機郵箱傳送郵件,你的手機郵箱,就會給你的手機發簡訊通知。
4、使用Blat等外掛軟體+批處理的形式進行傳送郵件簡訊實現登陸告警
5、Windows Server檢視和記錄遠端登入資訊的方法
一、利用系統日誌檢視登入資訊
開啟控制皮膚——系統和安全——檢視事件日誌,就進入了事件檢視器
開啟左側事件檢視器(本地)——Windows日誌——安全,就能檢視所有安全日誌
點選右側篩選,篩選事件ID為4776的所有事件,即為所有遠端登入日誌
可以看到我的日誌中有他人登入,而且他還建立了登入賬戶User1
二、記錄登入資訊
上述檢視方法並不能檢視到對方的ip,為了檢視到ip需要進行一些設定
假設在C盤RDP資料夾下進行操作:
1、建立空檔案RDPlog.txt。建立批處理檔案RDPlog.bat,寫入程式碼
1 2 3 |
date /t >>RDPlog.txt time /t >>RDPlog.txt netstat -n -p tcp | find ":3389" >>RDPlog.txt |
2、在管理工具中開啟計劃任務,新建計劃任務,在觸發器選項中新建“當連線到使用者會話時”,在操作選項中新建操作,設定程式為C:\RDP\RDPlog.bat,起始於C:\RDP\
這樣在遠端登入後就會將登入的時間和ip記錄在RDPlog.txt檔案中。
但是有一個問題,會在登陸後跳出一個一閃而過的cmd視窗,要消除這個視窗,就再新建一個指令碼RDPlog.vbs,寫入程式碼
1 2 |
Set shell = Wscript.Createobject("wscript.shell") Call shell.run("C:\RDP\RDPLog.bat", 0) |
將計劃任務程式設定為C:\RDP\RDPlog.vbs即可,如下
試著登入兩次後結果如下圖
6、SecID錦佰安科技 | 身份識別綜合解決方案提供商 https://www.secid.cn/
行雲管家【官網】-領先的雲端計算管理平臺-雲安全,堡壘機,自動化運維 https://www.cloudbility.com/
總結:
無論採用哪種方法,科學的管理+軟體程式的寫法+平時的人工檢查才是王道。道高一尺魔高一丈,任何技術都不是萬能的,尤其是資訊保安沒有絕對而是相對,三份靠技術,七分靠管理。且行且珍惜!希望以上方法對大家有所幫助。歡迎分享和轉發。
相關文章
- SpringBoot 實現傳送簡訊Spring Boot
- 簡訊傳送機的實現
- Java Web簡單登陸功能的實現JavaWeb
- [Python]實現簡訊驗證碼的傳送Python
- 使用 Python 傳送簡訊?Python
- Laravel6 使用騰訊雲簡訊-傳送簡訊Laravel
- SSH 免密登陸 簡單版
- 簡易版的Spring框架之IOC簡單實現Spring框架
- Laravel SMS 簡訊傳送包Laravel
- 阿里雲簡訊傳送 sdk阿里
- 郵件和簡訊傳送
- java 阿里雲簡訊傳送Java阿里
- 在技術上如何實現傳送一條簡訊?
- 2020最新 使用阿里雲的簡訊服務傳送簡訊阿里
- Laravel 極簡使用傳送簡訊 支援阿里雲、騰訊雲Laravel阿里
- 阿里雲平臺傳送簡訊阿里
- namedtuple簡易實現
- 讓動畫實現更簡單,Flutter 動畫簡易教程!動畫Flutter
- 簡易撲克牌遊戲簡單實現,歡迎指正遊戲
- 簡易版的Spring框架之AOP簡單實現(對我來說不簡單啊)Spring框架
- 【node】檔案上傳功能簡易實現
- 簡單實現登陸註冊gui介面以及打包成exe檔案GUI
- 基於 Session 實現簡訊登入Session
- 基於 WebSocket 的 PPT 遠端控制器簡單實現Web
- Go 實現簡易的 Redis 客戶端GoRedis客戶端
- C/S(socket、執行緒 實現多個客戶端、伺服器端簡易通訊)執行緒客戶端伺服器
- SpringSceurity(5)---簡訊驗證碼登陸功能Spring
- 106傳送簡訊有哪些平臺?
- 二十一章 PHP傳送簡訊PHP
- 智慧家居簡單實現---使用ESP8266簡單實現和APP通訊APP
- 精簡版 koa 簡單實現
- 完整版通訊錄(實現簡單具體易上手!!)
- 簡易版 vue實現Vue
- php+nginx實現最簡單的遠端呼叫rpc(微服務)PHPNginxRPC微服務
- vue實現簡訊驗證碼登入Vue
- uniapp 實現簡訊驗證碼登入APP
- Java 語言實現簡易版掃碼登入Java
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端