You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.6 KiB
52 lines
1.6 KiB
# -*- coding:utf-8 -*-
|
|
from agent.models import Abonent, Tariff
|
|
|
|
|
|
class FirewallManager(object):
|
|
f = r'/sbin/ipfw -q'
|
|
|
|
# вызывает комманду shell
|
|
def exec_cmd(self, cmd):
|
|
print cmd
|
|
# os.execv(cmd, [''])
|
|
|
|
# ставит заглушку на абонента
|
|
def set_cap(self, user):
|
|
pass
|
|
|
|
# Открывает доступ в интернет
|
|
def open_inet_door(self, user):
|
|
assert isinstance(user, Abonent)
|
|
if not user.tariff:
|
|
print u'WARNING: User does not have a tariff'
|
|
return
|
|
cmd = r"%s table 12 add %s/32 %d && %s table 13 add %s/32 %d" % (
|
|
self.f, user.ip_str(), user.tariff.tid,
|
|
self.f, user.ip_str(), user.tariff.tid + 1000
|
|
)
|
|
self.exec_cmd(cmd)
|
|
|
|
# Закрывает доступ в интернет
|
|
def close_inet_door(self, user):
|
|
assert isinstance(user, Abonent)
|
|
cmd = r"%s table 12 del %s/32 && %s table 13 del %s/32" % (
|
|
self.f, user.ip_str(),
|
|
self.f, user.ip_str()
|
|
)
|
|
self.exec_cmd(cmd)
|
|
|
|
# Создаёт тариф (пайпы, режущие скорость
|
|
def make_tariff(self, tariff):
|
|
assert isinstance(tariff, Tariff)
|
|
cmd = r"make ipfw tariff :)"
|
|
self.exec_cmd(cmd)
|
|
|
|
# Убирает тариф из фаервола
|
|
def destroy_tariff(self, tariff):
|
|
assert isinstance(tariff, Tariff)
|
|
cmd = r"destroy ipfw tariff :)"
|
|
self.exec_cmd(cmd)
|
|
|
|
def reset(self):
|
|
cmd = r"%s -f flush && %s table all flush" % (self.f, self.f)
|
|
self.exec_cmd(cmd)
|