雲伺服器禁用登入失敗的IP python指令碼實現

2021-09-28 23:59:13 字數 2329 閱讀 3250

這幾天登入阿里雲伺服器發現有幾次異常登入資訊。都是來自乙個固定ip的連線,分析應該是有指令碼在掃瞄我的伺服器。為了安全起見,用python指令碼寫個服務,發現登入失敗記錄就將這個ip加入到黑名單,禁止這個ip登入。

1.首先查詢一下 /var/log/secure 檔案,這個檔案是所有ssh連線的登入日誌檔案,裡面可以查詢到所有登入記錄。查詢記錄時發現有n多次來自乙個ip的ssh連線失敗記錄,而且發生的時間一秒之內。因此判定是有指令碼在嘗試登入我的伺服器。

2.將自己常用ip段放入到 /etc/hsots.allow 檔案中,這步比較關鍵!hsots.allow的判定優先順序高於hsots.deny,所以就算自己輸入密碼錯誤,指令碼將自己放置到hsots.deny中也不會出現自己登入不上去的問題。

3.將訪問異常的ip加入到 /etc/hosts.deny 檔案中禁止該ip再嘗試登入。

ps: 有一種更加簡潔的方案,將自己常用的ip放入到hsots.allow中,然後在hsots.deny中設定成 all:all 即拒絕所有白名單中的ip訪問任意服務。我沒有採用這種方式的原因是我不確定我自己的ip能夠固定下來,如果我ip換成不在白名單中的ip就沒辦法登入伺服器了~

指令碼如下:

# encoding=utf-8

import logging

import re

import os

import time

def findipinstr(string):

pattern = r"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"

result = re.findall(pattern, string)

if result:

return result[0]

else:

return none

# 獲取已經在黑名單的ip

def initlst():

lst =

with open("/etc/hosts.deny", "r") as f:

while true:

line = f.readline()

if line == "":

break

ip = findipinstr(line)

if ip:

return lst

# 將新的登入失敗的ip寫入黑名單

def main():

lst =

beforelst = initlst()

cmd = "cat /var/log/secure | grep 'failed'"

result = os.popen(cmd).read()

l = result.split("\n")

for i in l:

ip = findipinstr(i)

if ip is not none and ip not in beforelst:

setlst = set(lst)

if setlst:

logging.info("add filter ip: {}".format(setlst))

with open("/etc/hosts.deny", 'a') as f:

# with open("1.txt", 'a') as f:

for arg in setlst:

s = "sshd:" + arg + ":deny\n"

f.write(s)

def initlog():

mylogger = logging.getlogger()

mylogger.setlevel(logging.info)

streamhandler = logging.streamhandler()

formatter = logging.formatter(

"%(asctime)s - %(filename)s[line:%(lineno)d][%(threadname)s] - %(levelname)s: %(message)s")

streamhandler.setformatter(formatter)

mylogger.addhandler(streamhandler)

if __name__ == '__main__':

initlog()

while true:

main()

time.sleep(60)

雲伺服器ssh無法登入

用的華為雲伺服器,日常ssh登入時突然顯示 connection established.to escape to local shell,press ctrl alt connection closed by foreign host.但是在雲控制台可以遠端登入,估計是ip攔截之類的問題,輸入 t...

雲伺服器指北 登入篇

疫情期間,阿里雲開啟了高校 在家實踐 計畫,如果你是高校學生 教師或是科研工作者,均可通過簡單的測試來申請一台免費的雲伺服器 六個月 並在臨期時獲取一次六個月的免費續費。終於薅到了馬爸爸的羊毛。鏈結在此 阿里雲高校 在家實踐 計畫,截止時間未知。獲取成功後首次登入必須通過阿里雲控制台重置密碼 roo...

阿里雲伺服器mysql遠端登入

利用xshell登入伺服器 mysql u root p 回車鍵輸入資料庫密碼 mysql show databases mysql user mysql mysql update user set host where user root and host localhost mysql flus...