伺服器訪問控制——基於組網結構前端有防火牆,伺服器都在防火牆內,內部使用內網ip的架構
阿新 • • 發佈:2018-12-15
#!/usr/bin/env python#-*- coding: utf-8 -*-'''Create date: 2018-10-17Last update:Version: 1.0Description:登陸限制需求: X.X網段不允許訪問外網 root使用者登陸可以訪問外網 root使用者登陸情況下普通使用者無法禁止訪問外網,除非root使用者也不訪問外網 普通使用者登陸不允許訪問外網 普通使用者可以申請一段時間訪問外網Usage method:放入crontab中自定義執行間隔,不給引數時,除非root使用者登陸,否則不允許自行訪問外網, 可以傳遞1個引數,必須是數字,可以是浮點數,表示普通使用者可以訪問外網的時間,單位為小時。Author: Yefei'''import psutilimport osimport sysimport datetime#閘道器ip地址設定GW_IP="10.0.3.1"#路由列表為list型別。routList = []#刪除閘道器函式def delGateWay(): CMD = 'route del default gw %s'%(GW_IP) os.popen(CMD)#新增閘道器函式def addGateWay(): CMD = 'route add default gw %s'%(GW_IP) os.popen(CMD)#檢查閘道器是否存在def gateWayCheck(): flag = False for line in routList: if GW_IP in line: flag = True return flag#檢查使用者是否是rootdef userCheck(): flag = False for User in userList: if User.name == "root": print("使用者是root") flag = True return flag#閘道器新增def userOnline(flag): print(flag) if flag: print("檢測閘道器已存在,退出程式") sys.exit() else: print("新增閘道器") addGateWay()#閘道器刪除def userOffline(flag): if flag: print("檢測閘道器已存在,刪除閘道器") delGateWay() else: print("檢測閘道器不存在,退出程式") sys.exit()#將普通使用者訪問外網的時間節點寫入檔案,當到達此事件後去掉閘道器def FileForTime(scheme,*args): if scheme == "w": with open("/root/controltime","w") as recordTime: now = datetime.datetime.now() endTime = now + datetime.timedelta(hours=args[0]) endStrTime = endTime.strftime('%Y-%m-%d %H:%M:%S') recordTime.write(endStrTime) if now < endTime: return True else: return False elif scheme == "r": with open("/root/controltime","r") as recordTime: endStrTime = recordTime.readline() endStrTime = endStrTime.strip() if len(endStrTime) > 10: endTime = datetime.datetime.strptime(endStrTime,'%Y-%m-%d %H:%M:%S') now = datetime.datetime.now() if now < endTime: return True else: return False else: return Falseif __name__ == '__main__': routList = os.popen("route -n") userList = psutil.users() if len(sys.argv) == 2: hoursLen = float(sys.argv[1]) print(hoursLen) if FileForTime('w',hoursLen): print("使用者可以上網") userOnline(gateWayCheck()) else: print("使用者不可以上網") userOffline(gateWayCheck()) else: if len(userList) > 0 and userCheck(): userOnline(gateWayCheck()) elif os.path.exists("/root/controltime"): if FileForTime("r"): userOnline(gateWayCheck()) else: userOffline(gateWayCheck()) else: userOffline(gateWayCheck())