Files
CyberPanel/firewall/views.py

508 lines
16 KiB
Python
Raw Normal View History

2017-10-24 19:16:36 +05:00
from django.shortcuts import render,redirect
from django.http import HttpResponse
import json
import shlex
import subprocess
from loginSystem.views import loadLoginPage
from plogical.virtualHostUtilities import virtualHostUtilities
2018-08-06 02:01:09 +05:00
from plogical.csf import CSF
2018-08-10 23:29:10 +05:00
import time
2018-08-18 00:39:10 +05:00
from plogical.acl import ACLManager
2018-08-26 04:55:51 +05:00
from plogical.firewallManager import FirewallManager
2017-10-24 19:16:36 +05:00
# Create your views here.
def securityHome(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.securityHome(request, userID)
2017-10-24 19:16:36 +05:00
except KeyError:
return redirect(loadLoginPage)
def firewallHome(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.firewallHome(request, userID)
2017-10-24 19:16:36 +05:00
except KeyError:
return redirect(loadLoginPage)
def getCurrentRules(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.getCurrentRules(userID)
2017-10-24 19:16:36 +05:00
except KeyError:
2018-08-26 04:55:51 +05:00
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def addRule(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.addRule(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def deleteRule(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.deleteRule(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def reloadFirewall(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.reloadFirewall(userID)
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def startFirewall(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.startFirewall(userID)
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def stopFirewall(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.stopFirewall(userID)
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def firewallStatus(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.firewallStatus(userID)
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def secureSSH(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.secureSSH(request, userID)
2017-10-24 19:16:36 +05:00
except KeyError:
return redirect(loadLoginPage)
def getSSHConfigs(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.getSSHConfigs(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def saveSSHConfigs(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.saveSSHConfigs(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def deleteSSHKey(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.deleteSSHKey(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def addSSHKey(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.addSSHKey(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def loadModSecurityHome(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.loadModSecurityHome(request, userID)
except KeyError:
return redirect(loadLoginPage)
def installModSec(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.installModSec(userID, json.loads(request.body))
except KeyError:
2018-08-26 04:55:51 +05:00
return redirect(loadLoginPage)
def installStatusModSec(request):
try:
2018-08-26 04:55:51 +05:00
userID = request.session['userID']
fm = FirewallManager()
return fm.installStatusModSec(userID)
except KeyError:
2018-08-26 04:55:51 +05:00
return redirect(loadLoginPage)
2018-03-21 03:04:56 +05:00
def fetchModSecSettings(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.fetchModSecSettings(userID, json.loads(request.body))
2018-03-21 03:04:56 +05:00
except KeyError:
return redirect(loadLoginPage)
def saveModSecConfigurations(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.saveModSecConfigurations(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def modSecRules(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.modSecRules(request, userID)
except KeyError:
return redirect(loadLoginPage)
def fetchModSecRules(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.fetchModSecRules(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
def saveModSecRules(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.saveModSecRules(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2018-04-04 02:17:12 +05:00
def modSecRulesPacks(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.modSecRulesPacks(request, userID)
2018-04-04 02:17:12 +05:00
except KeyError:
return redirect(loadLoginPage)
def getOWASPAndComodoStatus(request):
try:
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.getOWASPAndComodoStatus(userID, json.loads(request.body))
2018-04-04 02:17:12 +05:00
except KeyError:
return redirect(loadLoginPage)
def installModSecRulesPack(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.installModSecRulesPack(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2018-04-04 02:17:12 +05:00
def getRulesFiles(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.getRulesFiles(userID, json.loads(request.body))
except KeyError:
2018-08-26 04:55:51 +05:00
return redirect(loadLoginPage)
def enableDisableRuleFile(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-26 04:55:51 +05:00
fm = FirewallManager()
return fm.enableDisableRuleFile(userID, json.loads(request.body))
except KeyError:
return redirect(loadLoginPage)
2018-08-06 02:01:09 +05:00
def csf(request):
try:
userID = request.session['userID']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-08-06 02:01:09 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadError()
2018-08-06 02:01:09 +05:00
csfInstalled = 1
try:
command = 'sudo csf -h'
res = subprocess.call(shlex.split(command))
if res == 1:
csfInstalled = 0
except subprocess.CalledProcessError:
csfInstalled = 0
return render(request,'firewall/csf.html', {'csfInstalled' : csfInstalled})
except KeyError:
return redirect(loadLoginPage)
def installCSF(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-06 02:01:09 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
try:
2018-08-10 23:29:10 +05:00
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " installCSF"
subprocess.Popen(shlex.split(execPath))
time.sleep(2)
data_ret = {"installStatus": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-08-06 02:01:09 +05:00
except BaseException,msg:
final_dic = {'installStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'installStatus': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def installStatusCSF(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-06 02:01:09 +05:00
try:
if request.method == 'POST':
installStatus = unicode(open(CSF.installLogPath, "r").read())
if installStatus.find("[200]")>-1:
2018-08-10 23:29:10 +05:00
command = 'sudo rm -f ' + CSF.installLogPath
subprocess.call(shlex.split(command))
2018-08-06 02:01:09 +05:00
final_json = json.dumps({
'error_message': "None",
'requestStatus': installStatus,
'abort':1,
'installed': 1,
})
return HttpResponse(final_json)
elif installStatus.find("[404]") > -1:
2018-08-10 23:29:10 +05:00
command = 'sudo rm -f ' + CSF.installLogPath
subprocess.call(shlex.split(command))
2018-08-06 02:01:09 +05:00
final_json = json.dumps({
'abort':1,
'installed':0,
'error_message': "None",
'requestStatus': installStatus,
})
return HttpResponse(final_json)
else:
final_json = json.dumps({
'abort':0,
'error_message': "None",
'requestStatus': installStatus,
})
return HttpResponse(final_json)
except BaseException,msg:
final_dic = {'abort':1,'installed':0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'abort':1,'installed':0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2018-08-10 23:29:10 +05:00
def removeCSF(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-10 23:29:10 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
try:
2018-08-10 23:29:10 +05:00
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " removeCSF"
subprocess.Popen(shlex.split(execPath))
time.sleep(2)
data_ret = {"installStatus": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'installStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'installStatus': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def fetchCSFSettings(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-10 23:29:10 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('fetchStatus', 0)
try:
2018-08-10 23:29:10 +05:00
currentSettings = CSF.fetchCSFSettings()
data_ret = {"fetchStatus": 1, 'testingMode' : currentSettings['TESTING'],
'tcpIN' : currentSettings['tcpIN'],
'tcpOUT': currentSettings['tcpOUT'],
'udpIN': currentSettings['udpIN'],
'udpOUT': currentSettings['udpOUT'],
'firewallStatus': currentSettings['firewallStatus']
}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'fetchStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'fetchStatus': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def changeStatus(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-10 23:29:10 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
2018-08-10 23:29:10 +05:00
data = json.loads(request.body)
controller = data['controller']
status = data['status']
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " changeStatus --controller " + controller + " --status " + status
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
data_ret = {"status": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
2018-08-18 00:39:10 +05:00
final_dic = {'status': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
2018-08-10 23:29:10 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def modifyPorts(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-10 23:29:10 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
2018-08-10 23:29:10 +05:00
2018-08-18 00:39:10 +05:00
try:
2018-08-10 23:29:10 +05:00
data = json.loads(request.body)
protocol = data['protocol']
ports = data['ports']
execPath = "sudo " + virtualHostUtilities.cyberPanel + "/plogical/csf.py"
execPath = execPath + " modifyPorts --protocol " + protocol + " --ports " + ports
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
data_ret = {"status": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
2018-08-18 00:39:10 +05:00
final_dic = {'status': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
2018-08-10 23:29:10 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def modifyIPs(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-08-10 23:29:10 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
try:
2018-08-10 23:29:10 +05:00
data = json.loads(request.body)
mode = data['mode']
ipAddress = data['ipAddress']
if mode == 'allowIP':
CSF.allowIP(ipAddress)
elif mode == 'blockIP':
CSF.blockIP(ipAddress)
data_ret = {"status": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
2018-08-18 00:39:10 +05:00
final_dic = {'status': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
2018-08-10 23:29:10 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)