def create(request): #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) is_superuser = perms.get_is_superuser(request.user) if 'name' in request.POST: cmd = {"op": "set", "path": ["firewall", "name", request.POST['name']]} result1 = vyos.set_config(hostname_default, cmd) print(result1) if 'description' in request.POST: cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "description", request.POST['description']]} result2 = vyos.set_config(hostname_default, cmd) print(result2) if 'action' in request.POST: cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "default-action", request.POST['action']]} result3 = vyos.set_config(hostname_default, cmd) print(result3) return redirect('firewall:firewall-list') template = loader.get_template('firewall/create.html') context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'username': request.user, 'is_superuser' : is_superuser, } return HttpResponse(template.render(context, request))
def instance_conntry(request, hostname): is_superuser = perms.get_is_superuser(request.user) all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) if perms.user_has_hostname_access(request.user, hostname) == False: return redirect('config:instances') # permcheck instance = Instance.objects.get(hostname=hostname) connected = vyos.conntry(hostname) if connected == True: request.session['hostname'] = hostname template = loader.get_template('config/instance_conntry.html') context = { 'instance': instance, "connected": connected, 'instances': all_instances, 'hostname_default': hostname_default, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def instance_change(request, hostname=False): all_instances = vyos.instance_getall() #method = None if hostname != "__none__": #method = "param" pass elif hostname == "__none__": #method = "get" hostname = request.POST.get('vyos-id', False) # permcheck if hostname != False: if perms.user_has_hostname_access(request.user, hostname) == False: return redirect('config:instances') try: instance = Instance.objects.get(hostname=hostname) except Instance.DoesNotExist: print("instance not exists: " + str(hostname)) return redirect('config:instances') if instance: connected = vyos.conntry(hostname) # show some error when not connected if connected == True: request.session['hostname'] = hostname instance.main = True instance.save() return redirect('config:instances')
def xeditrule(request, firewall_name, rulenumber): #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) is_superuser = perms.get_is_superuser(request.user) firewall = vyos.get_firewall(hostname_default, firewall_name) # remove firewall_networkgroup = vyos.get_firewall_networkgroup(hostname_default) firewall_addressgroup = vyos.get_firewall_addressgroup(hostname_default) firewall_networkgroup_js = json.dumps(firewall_networkgroup['network-group']) firewall_addressgroup_js = json.dumps(firewall_addressgroup['address-group']) netservices = network.get_services() netservices_js = json.dumps(netservices) portgroups = vyos.get_firewall_portgroup(hostname_default) template = loader.get_template('firewall/editrule.html') context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'firewall_name': firewall_name, 'firewall_name': firewall_name, 'username': request.user, 'is_superuser' : is_superuser, 'services' : netservices['services'], 'services_common' : netservices['common'], 'firewall_networkgroup': firewall_networkgroup['network-group'], 'firewall_addressgroup': firewall_addressgroup['address-group'], 'firewall_networkgroup_js': firewall_networkgroup_js, 'firewall_addressgroup_js': firewall_addressgroup_js, 'netservices_js' : netservices_js, }
def instance_add(request): is_superuser = perms.get_is_superuser(request.user) #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) if len(request.POST) > 0: instance = Instance() instance.alias = request.POST['alias'] instance.hostname = request.POST['hostname'] instance.port = request.POST['port'] instance.key = request.POST['key'] if 'https' in request.POST: instance.https = request.POST['https'] else: instance.https = False instance_id = instance.save() return redirect('config:instances') else: instance_id = 0 template = loader.get_template('config/instance_add.html') context = { 'hostname_default': hostname_default, 'instance_id': instance_id, 'instances': all_instances, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def group_add(request): is_superuser = perms.get_is_superuser(request.user) #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) error_message = None if len(request.POST) > 0 and 'name' in request.POST: try: group_get = Group.objects.get(name=request.POST['name']) error_message = 'Group already exists' except Group.DoesNotExist: group_create = Group(name=request.POST['name']) group_create.save() return redirect('config:groups-list') else: instance_id = 0 template = loader.get_template('config/group_add.html') context = { 'hostname_default': hostname_default, 'instance_id': instance_id, 'instances': all_instances, 'error_message': error_message, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def static_add(request): msg = vmsg.msg() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) static_list = vyos.get_route_static(hostname_default) is_superuser = perms.get_is_superuser(request.user) if 'subnet' in request.POST and 'nexthop' in request.POST: v = vapi.set_route_static(hostname_default, request.POST['subnet'], request.POST['nexthop']) if v.success == False: msg.add_error("Static route add fail - " + v.reason) else: msg.add_success("Static route added") ippath = vyos.ip_route(hostname_default) template = loader.get_template('static/add.html') context = { 'instances': all_instances, 'hostname_default': hostname_default, 'static_list': static_list, 'username': request.user, 'is_superuser': is_superuser, 'msg': msg.get_all(), } return HttpResponse(template.render(context, request))
def static_add(request): all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) static_list = vyos.get_route_static(hostname_default) is_superuser = perms.get_is_superuser(request.user) error_message = None if 'subnet' in request.POST and 'nexthop' in request.POST: return1 = vyos.set_route_static(hostname_default, request.POST['subnet'], request.POST['nexthop']) if return1 == False: error_message = 'Cannot add static route.' else: return redirect('static:static-list') ippath = vyos.ip_route(hostname_default) template = loader.get_template('static/add.html') context = { 'instances': all_instances, 'hostname_default': hostname_default, 'static_list' : static_list, 'error_message' : error_message, 'username': request.user, 'is_superuser' : is_superuser, } return HttpResponse(template.render(context, request))
def firewall_remove(request, firewall_name): #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) firewall = vyos.delete_firewall(hostname_default, firewall_name) return redirect('firewall:firewall-list')
def index(request): all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) template = loader.get_template('wanlb/list.html') context = { 'instances': all_instances, 'hostname_default': hostname_default, } return HttpResponse(template.render(context, request))
def user_add(request): is_superuser = perms.get_is_superuser(request.user) #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) error_message = None count = 0 name = '' if 'name' in request.POST: name = request.POST['name'] count += 1 username = '' if 'username' in request.POST: username = request.POST['username'] count += 1 password = '' if 'password' in request.POST: password = request.POST['password'] count += 1 email = '' if 'email' in request.POST: email = request.POST['email'] count += 1 if count >= 4: try: user = User.objects.get(username=username) error_message = 'Username already exists' except User.DoesNotExist: user_create = User(username=username, email=email, password=password, last_name=name) user_create.save() return redirect('config:users-list') template = loader.get_template('config/user_add.html') context = { 'hostname_default': hostname_default, 'instances': all_instances, 'error_message': error_message, 'name': name, 'username': username, 'password': password, 'email': email, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def firewall_removerule(request, firewall_name, firewall_rulenumber): all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) firewall = vyos.get_firewall(hostname_default, firewall_name) firewall_rule = vyos.get_firewall_rule(hostname_default, firewall_name, firewall_rulenumber) if firewall_rule and firewall: vyos.delete_route_rule(hostname_default, firewall_name, firewall_rulenumber) return redirect('firewall:show', firewall_name)
def index(request): if not request.user.is_authenticated: return redirect('%s?next=%s' % (reverse('registration-login'), request.path)) all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) template = loader.get_template('ipsec/list.html') context = { 'instances': all_instances, 'hostname_default': hostname_default, } return HttpResponse(template.render(context, request))
def instance_remove(request, hostname): all_instances = vyos.instance_getall() # permcheck instance = Instance.objects.get(hostname=hostname) hostname_default = vyos.get_hostname_prefered(request) #if hostname_default != hostname: instance.delete() return redirect('config:instances')
def static_remove(request, route, nexthop): all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) static_list = vyos.get_route_static(hostname_default) print(route) print(routeunpack(route)) if route and nexthop: return1 = vyos.delete_route_static(hostname_default, routeunpack(route), nexthop) return redirect('static:static-list')
def instance_changegroup(request, hostname): all_instances = vyos.instance_getall() group_name = request.POST.get('group') print(group_name, hostname) if group_name == "__admin__": instance = Instance.objects.get(hostname=hostname) instance.group = None instance.save() else: group = Group.objects.get(name=group_name) instance = Instance.objects.get(hostname=hostname) instance.group = group instance.save() return redirect('config:instances')
def firewall_global(request): #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) if int(request.POST.get('allping', 0)) == 1: vyos.set_firewall_allping_enable(hostname_default) else: vyos.set_firewall_allping_disable(hostname_default) if int(request.POST.get('syncookies', 0)) == 1: vyos.set_firewall_syncookies_enable(hostname_default) else: vyos.set_firewall_syncookies_disable(hostname_default) return redirect('firewall:firewall-list')
def groups_list(request): is_superuser = perms.get_is_superuser(request.user) #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) groups = Group.objects.all() template = loader.get_template('config/groups_list.html') context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'groups': groups, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def index(request): all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) is_superuser = perms.get_is_superuser(request.user) ntp_srv = vapi.get_ntp(hostname_default) ntp_servers = {} if ntp_srv.success: if ntp_srv.data['server'] != None: ntp_servers = ntp_srv.data['server'] context = { 'instances': all_instances, 'hostname_default': hostname_default, 'ntp_servers': ntp_servers, 'is_superuser': is_superuser, } return render(request, 'ntp/list.html', context)
def firewall_config(request, firewall_name): #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) is_superuser = perms.get_is_superuser(request.user) firewall = vyos.get_firewall(hostname_default, firewall_name) template = loader.get_template('firewall/show.html') context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'firewall': firewall, 'firewall_name': firewall_name, 'username': request.user, 'is_superuser' : is_superuser, } return HttpResponse(template.render(context, request))
def index(request): is_superuser = perms.get_is_superuser(request.user) #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() for instance in all_instances: if group == None: all_instance[instance]['group'] = "admin" hostname_default = vyos.get_hostname_prefered(request) template = loader.get_template('config/instance.html') context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def interfacefirewall(request, interface_type, interface_name): all_instances = vyos.instance_getall() is_superuser = perms.get_is_superuser(request.user) hostname_default = vyos.get_hostname_prefered(request) interface = vyos.get_interface(interface_type, interface_name, hostname=hostname_default) template = loader.get_template('interface/show.html') context = { 'interface': interface, 'instances': all_instances, 'hostname_default': hostname_default, 'interface_type': interface_type, 'interface_name': interface_name, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def static_list(request): all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) static_dict = vyos.get_route_static(hostname_default) is_superuser = perms.get_is_superuser(request.user) static_list = [] for s in static_dict['route']: static_list.append({ 'route': s, 'nexthop': static_dict['route'][s]['next-hop'], }) template = loader.get_template('static/list.html') context = { 'instances': all_instances, 'hostname_default': hostname_default, 'static_list' : static_list, 'username': request.user, 'is_superuser' : is_superuser, } return HttpResponse(template.render(context, request))
def firewall_edit(request, firewall_name): #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) firewall = vyos.get_firewall(hostname_default, firewall_name) firewall['defaultaction'] = firewall['default-action'] is_superuser = perms.get_is_superuser(request.user) changed = False if 'description' in request.POST: cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "description", request.POST['description']]} result2 = vyos.set_config(hostname_default, cmd) print(result2) changed = True if 'action' in request.POST: cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "default-action", request.POST['action']]} result3 = vyos.set_config(hostname_default, cmd) print(result3) changed = True if changed == True: return redirect('firewall:firewall-list') template = loader.get_template('firewall/edit.html') context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'firewall_name': firewall_name, 'firewall': firewall, 'username': request.user, 'is_superuser' : is_superuser, } return HttpResponse(template.render(context, request))
def index(request): hostname_default = vyos.get_hostname_prefered(request) all_instances = vyos.instance_getall() firewall_all = vyos.get_firewall_all(hostname_default) interfaces = vyos.get_interfaces(hostname_default) is_superuser = perms.get_is_superuser(request.user) interfaces_all_names = vyos.get_interfaces_all_names(hostname_default) interface_firewall_in = {} interface_firewall_out = {} interface_address = {} firewall_names = [] # set interface_alias in format eth0 if has not vif and eth0.vlan if has vlan for iname in interfaces_all_names: if 'vif' in iname: iname['interface_alias'] = "{interface_name}.{vif}".format( interface_name=iname['interface_name'], vif=iname['vif']) else: iname['interface_alias'] = iname['interface_name'] # create firewall_in and firewall_out vars for interface_type in interfaces: for interface_name in interfaces[interface_type]: try: interface_firewall_in[interface_name] = interfaces[ interface_type][interface_name]['firewall']['in']['name'] except: pass try: interface_firewall_out[interface_name] = interfaces[ interface_type][interface_name]['firewall']['out']['name'] except: pass if interface_name not in interface_address: interface_address[interface_name] = [] try: interface_address[interface_name].append( interfaces[interface_type][interface_name]['address']) except: pass if 'vif' in interfaces[interface_type][interface_name]: for vif in interfaces[interface_type][interface_name]['vif']: interface_name_full = "{interface_name}.{vif}".format( interface_name=interface_name, vif=vif) try: interface_firewall_in[ interface_name_full] = interfaces[interface_type][ interface_name]['vif'][vif]['firewall']['in'][ 'name'] except: pass try: interface_firewall_out[ interface_name_full] = interfaces[interface_type][ interface_name]['vif'][vif]['firewall']['out'][ 'name'] except: pass if interface_name_full not in interface_address: interface_address[interface_name_full] = [] try: interface_address[interface_name_full].append( interfaces[interface_type][interface_name]['vif'] [vif]['address']) except: pass # put all information in a single var: interface_all_names for iname in interfaces_all_names: if 'vif' in iname: ialias = "{interface_name}.{vif}".format( interface_name=iname['interface_name'], vif=iname['vif']) else: ialias = iname['interface_name'] if ialias in interface_firewall_out: iname['firewall_out'] = interface_firewall_out[ialias] if ialias in interface_firewall_in: iname['firewall_in'] = interface_firewall_in[ialias] if ialias in interface_address: iname['address'] = interface_address[ialias] if 'name' in firewall_all: for fname in firewall_all['name']: firewall_names.append(fname) # create a dict interfaces_all_names_dict = {} for iname in interfaces_all_names: if 'vif' in iname: ialias = "{interface_name}.{vif}".format( interface_name=iname['interface_name'], vif=iname['vif']) else: ialias = iname['interface_name'] interfaces_all_names_dict[ialias] = iname fw_changed = False for el in request.POST: interface_vif = None if el.startswith('firewall-ipv4-in'): pos = el.split(".") interface_type = pos[1] interface_name = pos[2] if len(pos) >= 4: interface_vif = pos[3] ialias = "{interface_name}.{vif}".format( interface_name=interface_name, vif=interface_vif) else: ialias = interface_name firewall_name = request.POST[el] if firewall_name == "--remove--": if 'firewall_in' in interfaces_all_names_dict[ialias]: v = vapi.delete_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "in", interface_vif) #print("@@@@@@@@@@@@@@@@@ in delete", hostname_default, interface_type, interface_name, "in", firewall_name, interface_vif) else: pass #print("@@@@@ not 1", interfaces_all_names_dict[ialias], firewall_name) else: if 'firewall_in' not in interfaces_all_names_dict[ ialias] or interfaces_all_names_dict[ialias][ 'firewall_in'] != firewall_name: v = vapi.set_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "in", firewall_name, interface_vif) #print("@@@@@@@@@@@@@@@@@ in add", hostname_default, interface_type, interface_name, "in", firewall_name, interface_vif) else: pass #print("@@@@@ not 2", interfaces_all_names_dict[ialias], firewall_name ) fw_changed = True elif el.startswith('firewall-ipv4-out'): pos = el.split(".") interface_type = pos[1] interface_name = pos[2] if len(pos) >= 4: interface_vif = pos[3] ialias = "{interface_name}.{vif}".format( interface_name=interface_name, vif=interface_vif) else: ialias = interface_name firewall_name = request.POST[el] if firewall_name == "--remove--": if 'firewall_out' in interfaces_all_names_dict[ialias]: v = vapi.delete_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "out", interface_vif) #print("@@@@@@@@@@@@@@@@@ out delete", hostname_default, interface_type, interface_name, "out", firewall_name, interface_vif) else: #print("@@@@@ not 3", interfaces_all_names_dict[ialias], firewall_name) pass else: if 'firewall_out' not in interfaces_all_names_dict[ ialias] or interfaces_all_names_dict[ialias][ 'firewall_out'] != firewall_name: v = vapi.set_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "out", firewall_name, interface_vif) #print("@@@@@@@@@@@@@@@@@ out add", hostname_default, interface_type, interface_name, "out", firewall_name, interface_vif) else: #print("@@@@@ not 4", interfaces_all_names_dict[ialias], firewall_name) pass fw_changed = True if fw_changed == True: return redirect('interface:interface-list') template = loader.get_template('interface/index.html') context = { 'interfaces': interfaces, 'interfaces_pretty': pprint.pformat(interfaces, indent=4, width=120), 'interfaces_all_names': interfaces_all_names, 'interfaces_all_names_pretty': pprint.pformat(interfaces_all_names, indent=4, width=120), 'instances': all_instances, 'hostname_default': hostname_default, 'firewall_all': firewall_all, 'firewall_names': firewall_names, 'interface_firewall_in': interface_firewall_in, 'interface_firewall_out': interface_firewall_out, 'interface_firewall_in_pretty': pprint.pformat(interface_firewall_in, indent=4, width=120), 'interface_firewall_out_pretty': pprint.pformat(interface_firewall_out, indent=4, width=120), 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def users_list(request): is_superuser = perms.get_is_superuser(request.user) #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) users = User.objects.all() groups = Group.objects.all() group_show = [] for group in groups: if group.name != "admin": group_show.append(group.name) has_group_add = False for el in request.POST: if el.startswith('group-') and request.POST[el]: pos = el.split("-", 1) el_username = pos[1] el_groupname = request.POST[el] # test also if username is member of admin or superuser, than this one should not being no group if el_groupname not in ['admin']: try: el_userid = User.objects.get(username=el_username) except User.DoesNotExist: print("zerou") return redirect('config:users_list') try: if el_userid.groups.exists(): for g in el_userid.groups.all(): el_userid.groups.remove(g) except Group.DoesNotExist: print("zerou2") return redirect('config:users_list') print("kkk", el_groupname, el_username) if el_groupname == "--remove--": has_group_add = has_group_add + 1 else: el_groupadd = Group.objects.get(name=el_groupname) el_groupadd.user_set.add(el_userid) has_group_add = has_group_add + 1 if has_group_add > 0: return redirect('config:users-list') user_groups = {} for user in users: user_groups_list = user.groups.all() if len(user_groups_list) > 0: user_groups[str(user)] = str(user_groups_list[0]) else: user_groups[str(user)] = None template = loader.get_template('config/users_list.html') context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'users': users, 'groups': group_show, 'user_groups': user_groups, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def index(request): hostname_default = vyos.get_hostname_prefered(request) all_instances = vyos.instance_getall() firewall_all = vyos.get_firewall_all(hostname_default) interfaces = vyos.get_interfaces(hostname_default) is_superuser = perms.get_is_superuser(request.user) interface_firewall_in = {} interface_firewall_out = {} for interface_type in interfaces: for interface_name in interfaces[interface_type]: pprint.pprint(interface_name) try: interface_firewall_in[interface_name] = interfaces[ interface_type][interface_name]['firewall']['in']['name'] except: pass try: interface_firewall_out[interface_name] = interfaces[ interface_type][interface_name]['firewall']['out']['name'] except: pass fw_changed = False for el in request.POST: pprint.pprint(request.POST) if el.startswith('firewall-ipv4-in') and request.POST[el]: pos = el.split(".") interface_type = pos[1] interface_name = pos[2] firewall_name = request.POST[el] if firewall_name == "--remove--": result1 = vyos.delete_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "in") else: result1 = vyos.set_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "in", firewall_name) pprint.pprint(result1) fw_changed = True elif el.startswith('firewall-ipv4-out') and request.POST[el]: pos = el.split(".") interface_type = pos[1] interface_name = pos[2] firewall_name = request.POST[el] if firewall_name == "--remove--": result1 = vyos.delete_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "out") else: result1 = vyos.set_interface_firewall_ipv4( hostname_default, interface_type, interface_name, "out", firewall_name) pprint.pprint(result1) fw_changed = True if fw_changed == True: return redirect('interface:interface-list') """ if 'name' in request.POST: result1 = vyos.set_config(hostname_default, cmd) print(result1) if 'description' in request.POST: cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "description", request.POST['description']]} result2 = vyos.set_config(hostname_default, cmd) print(result2) if 'action' in request.POST: cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "default-action", request.POST['action']]} result3 = vyos.set_config(hostname_default, cmd) print(result3) return redirect('firewall:firewall-list') """ template = loader.get_template('interface/index.html') context = { 'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'firewall_all': firewall_all, 'interface_firewall_in': interface_firewall_in, 'interface_firewall_out': interface_firewall_out, 'username': request.user, 'is_superuser': is_superuser, } return HttpResponse(template.render(context, request))
def changerule(request, firewall_name, mode, template_name="firewall/addrule.html", rulenumber = None): #interfaces = vyos.get_interfaces() all_instances = vyos.instance_getall() hostname_default = vyos.get_hostname_prefered(request) is_superuser = perms.get_is_superuser(request.user) # get all selected firewall data firewall = vyos.get_firewall(hostname_default, firewall_name) # get all firewall groups firewall_group = {} firewall_group['network-group'] = {} firewall_group['address-group'] = {} firewall_group['port-group'] = {} firewall_group_raw = vycommon.get_firewall_group(hostname_default) if firewall_group_raw.success: if 'network-group' in firewall_group_raw.data: for g in firewall_group_raw.data['network-group']: firewall_group['network-group'][g] = firewall_group_raw.data['network-group'][g] if 'address-group' in firewall_group_raw.data: for g in firewall_group_raw.data['address-group']: firewall_group['address-group'][g] = firewall_group_raw.data['address-group'][g] if 'port-group' in firewall_group_raw.data: for g in firewall_group_raw.data['port-group']: firewall_group['port-group'][g] = firewall_group_raw.data['port-group'][g] firewall_networkgroup_js = json.dumps(firewall_group['network-group']) firewall_addressgroup_js = json.dumps(firewall_group['address-group']) netservices = network.get_services() netservices_js = json.dumps(netservices) portgroups = vyos.get_firewall_portgroup(hostname_default) ruledata = vycommon.get_firewall_rulenumber(hostname_default, firewall_name, rulenumber) ruledata_json = json.dumps(ruledata.data) vyos2.log("json", ruledata_json) if portgroups != False: portgroups_groups = portgroups['port-group'] else: portgroups_groups = [] changed = False # edit rule without valid rulenumber if ( mode == "editrule" and rulenumber == None): return redirect('firewall:show', firewall_name) # mode add rule if mode == "addrule": rulenumber = request.POST.get('rulenumber') vyos2.log("mode addrule", rulenumber) # mode add rule without valid rulenumber if ( request.POST.get('rulenumber', None) == None or int(request.POST.get('rulenumber')) <= 0): return redirect('firewall:show', firewall_name) else: rulenumber = request.POST.get('rulenumber') vyos2.log("mode editrule", rulenumber) # verifing basic informations, should have rulenumber, status and ruleaction if ( request.POST.get('status', None) != None and request.POST.get('status') in ["enabled", "disabled"] and request.POST.get('ruleaction', None) != None and request.POST.get('ruleaction') in ["accept", "drop", "reject"] ): vyos2.log("pass basic validations") v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "action", request.POST.get('ruleaction')], description = "set rule action", ) # rule created, continue to configure firewall rule according his criterias if v.success: changed = True # if status disabled, save it if request.POST.get('status') == "disabled": v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "disable"], description = "set rule disable", ) if v.success: changed = True elif request.POST.get('status') == "enabled" and mode == "editrule": v = vyos2.api ( hostname= hostname_default, api = "post", op = "delete", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "disable"], description = "delete rule disable", ) if v.success: changed = True # if status set, save it if request.POST.get('description', None) != None: v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "description", request.POST.get('description')], description = "set rule description", ) if v.success: changed = True # if criteria_protocol set, save it if request.POST.get('criteria_protocol', None) == "1": # other protocol - todo validate data if request.POST.get('protocol_criteria', None) == "other": if request.POST.get('protocol_custom', None) != None: protocol_criteria = request.POST.get('protocol_custom') # common protocols elif request.POST.get('protocol_criteria', None) in ['all', 'tcp', 'udp', 'tcp_udp', 'icmp']: protocol_criteria = request.POST.get('protocol_criteria') # other cases did not checked anything else: protocol_criteria = None # negate protocol if request.POST.get('protocol_negate', None) == "1": protocol_negate = "!" else: protocol_negate = "" # run vyos command if protocol_criteria != None: protocol_criteria_txt = protocol_negate + protocol_criteria v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "protocol", protocol_criteria_txt], description = "set rule protocol", ) if v.success: changed = True # if criteria+port set, save it if request.POST.get('criteria_port', None) == "1": destinationport_json = request.POST.get('destinationport_json', None) sourceport_json = request.POST.get('sourceport_json', None) if destinationport_json != None: try: destinationport = json.loads(destinationport_json) except ValueError: destinationport = {} vyos2.log("destinationport_json", destinationport) destinationport_text = ','.join(destinationport) v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "port", destinationport_text], description = "set destination port", ) if v.success: changed = True if sourceport_json != None: try: sourceport = json.loads(sourceport_json) except ValueError: sourceport = {} vyos2.log("sourceport_json", sourceport) sourceport_text = ','.join(sourceport) v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "port", sourceport_text], description = "set sourceport port", ) if v.success: changed = True # if criteria_address set, save it if request.POST.get('criteria_address', None) == "1": # negate sdaddress_source if request.POST.get('sdaddress_source_negate', None) == "1": sdaddress_source_negate = "!" else: sdaddress_source_negate = "" # negate sdaddress_destination_negate if request.POST.get('sdaddress_destination_negate', None) == "1": sdaddress_destination_negate = "!" else: sdaddress_destination_negate = "" if request.POST.get('sdaddress_source', None) != None: sdaddress_source = request.POST.get('sdaddress_source') sdaddress_source_txt = sdaddress_source_negate + sdaddress_source v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "address", sdaddress_source_txt], description = "set sdaddress_source", ) if v.success: changed = True if request.POST.get('sdaddress_destination', None) != None: sdaddress_destination = request.POST.get('sdaddress_destination') sdaddress_destination_txt = sdaddress_destination_negate + sdaddress_destination v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "address", sdaddress_destination_txt], description = "set sdaddress_destination_txt", ) if v.success: changed = True # if criteria_addressgroup set, save it if request.POST.get('criteria_addressgroup', None) == "1": if request.POST.get('sdaddressgroup_source', None) != None: sdaddressgroup_source = request.POST.get('sdaddressgroup_source') v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "address-group", sdaddressgroup_source], description = "set sdaddressgroup_source", ) vyos2.log("set sdaddressgroup_source", v.data) if v.success: changed = True if request.POST.get('sdaddressgroup_destination', None) != None: sdaddressgroup_destination = request.POST.get('sdaddressgroup_destination') v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "address-group", sdaddressgroup_destination], description = "set sdaddressgroup_destination", ) vyos2.log("set sdaddressgroup_destination", v.data) if v.success: changed = True # if criteria_networkgroup set, save it if request.POST.get('criteria_networkgroup', None) == "1": if request.POST.get('sdnetworkgroup_source', None) != None: sdnetworkgroup_source = request.POST.get('sdnetworkgroup_source') v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "network-group", sdnetworkgroup_source], description = "set sdnetworkgroup_source", ) if v.success: changed = True else: vyos2.log("sdnetworkgroup_source", v.error) if request.POST.get('sdnetworkgroup_destination', None) != None: sdnetworkgroup_destination = request.POST.get('sdnetworkgroup_destination') v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "network-group", sdnetworkgroup_destination], description = "set sdnetworkgroup_destination", ) if v.success: changed = True else: vyos2.log("sdnetworkgroup_source", v.error) # if criteria_sourcemac set, save it if request.POST.get('criteria_sourcemac', None) == "1": # negate sdaddress_source if request.POST.get('smac_source_negate', None) == "1": sourcemac_negate = "!" else: sourcemac_negate = "" if request.POST.get('smac_source', None) != None: sourcemac = request.POST.get('smac_source') sourcemac = sourcemac.replace("-",":") sourcemac = sourcemac.lower() sourcemac_txt = sourcemac_negate + sourcemac v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "mac-address", sourcemac_txt], description = "set source mac", ) if v.success: changed = True # if criteria_packetstate set, save it if request.POST.get('criteria_packetstate', None) == "1": packetstates = [] if request.POST.get('packetstate_established', None) == "1": packetstates.append('established') if request.POST.get('packetstate_invalid', None) == "1": packetstates.append('invalid') if request.POST.get('packetstate_new', None) == "1": packetstates.append('new') if request.POST.get('packetstate_related', None) == "1": packetstates.append('related') if len(packetstates) > 0: for packetstate in packetstates: v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "state", packetstate, "enable"], description = "set criteria_packetstate", ) if v.success: changed = True # if criteria_tcpflags set, save it if request.POST.get('criteria_tcpflags', None) == "1": tcpflags = [] if request.POST.get('tcpflags_syn', None) == "1": tcpflags.append('SYN') if request.POST.get('tcpflags_isyn', None) == "1": tcpflags.append('!SYN') if request.POST.get('tcpflags_ack', None) == "1": tcpflags.append('ACK') if request.POST.get('tcpflags_iack', None) == "1": tcpflags.append('!ACK') if request.POST.get('tcpflags_fin', None) == "1": tcpflags.append('FIN') if request.POST.get('tcpflags_ifin', None) == "1": tcpflags.append('!FIN') if request.POST.get('tcpflags_rst', None) == "1": tcpflags.append('RST') if request.POST.get('tcpflags_irst', None) == "1": tcpflags.append('!RST') if request.POST.get('tcpflags_urg', None) == "1": tcpflags.append('URG') if request.POST.get('tcpflags_iurg', None) == "1": tcpflags.append('!URG') if request.POST.get('tcpflags_psh', None) == "1": tcpflags.append('PSH') if request.POST.get('tcpflags_ipsh', None) == "1": tcpflags.append('!PSH') if request.POST.get('tcpflags_all', None) == "1": tcpflags.append('ALL') if request.POST.get('tcpflags_iall', None) == "1": tcpflags.append('!ALL') vyos2.log("tcp flags", tcpflags) if len(tcpflags) > 0: tcpflags_txt = ",".join(tcpflags) v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "tcp", "flags", tcpflags_txt], description = "set criteria_tcpflags", ) if v.success: changed = True # if criteria_portgroup set, save it if request.POST.get('criteria_portgroup', None) == "1": if request.POST.get('sdportgroup_source', None) != None: v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "source", "group", "port-group", request.POST.get('sdportgroup_source')], description = "set sdportgroup_source", ) if v.success: changed = True if request.POST.get('sdportgroup_destination', None) != None: v = vyos2.api ( hostname= hostname_default, api = "post", op = "set", cmd = ["firewall", "name", firewall_name, "rule", rulenumber, "destination", "group", "port-group", request.POST.get('sdportgroup_destination')], description = "set sdportgroup_destination", ) if v.success: changed = True if changed == True: return redirect('firewall:show', firewall_name) template = loader.get_template(template_name) context = { #'interfaces': interfaces, 'instances': all_instances, 'hostname_default': hostname_default, 'firewall': firewall, 'firewall_name': firewall_name, 'username': request.user, 'is_superuser' : is_superuser, 'services' : netservices['services'], 'services_common' : netservices['common'], 'firewall_networkgroup': firewall_group['network-group'], 'firewall_addressgroup': firewall_group['address-group'], 'firewall_networkgroup_js': firewall_networkgroup_js, 'firewall_addressgroup_js': firewall_addressgroup_js, 'netservices_js' : netservices_js, 'portgroups_groups': portgroups_groups, 'mode' : mode } if mode == "editrule": context['ruledata'] = ruledata.data context['ruledata_json'] = ruledata_json context['rulenumber'] = rulenumber return HttpResponse(template.render(context, request))