Server IP : 103.169.32.36 / Your IP : 216.73.217.13 Web Server : Apache System : Linux web.dpmptsp 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : apache ( 48) PHP Version : 5.6.40 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib/python2.7/site-packages/firewall/core/ |
Upload File : |
| Current File : /lib/python2.7/site-packages/firewall/core/fw_ipset.py |
# -*- coding: utf-8 -*-
#
# Copyright (C) 2015-2016 Red Hat, Inc.
#
# Authors:
# Thomas Woerner <twoerner@redhat.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""ipset backend"""
__all__ = [ "FirewallIPSet" ]
from firewall.core.logger import log
from firewall.core.ipset import remove_default_create_options as rm_def_cr_opts
from firewall.core.io.ipset import IPSet
from firewall import errors
from firewall.errors import FirewallError
class FirewallIPSet(object):
def __init__(self, fw):
self._fw = fw
self._ipsets = { }
def __repr__(self):
return '%s(%r)' % (self.__class__, self._ipsets)
# ipsets
def cleanup(self):
self._ipsets.clear()
def check_ipset(self, name):
if name not in self.get_ipsets():
raise FirewallError(errors.INVALID_IPSET, name)
def query_ipset(self, name):
return name in self.get_ipsets()
def get_ipsets(self):
return sorted(self._ipsets.keys())
def has_ipsets(self):
return len(self._ipsets) > 0
def get_ipset(self, name, applied=False):
self.check_ipset(name)
obj = self._ipsets[name]
if applied:
self.check_applied_obj(obj)
return obj
def _error2warning(self, f, name, *args):
# transform errors into warnings
try:
f(name, *args)
except FirewallError as error:
msg = str(error)
log.warning("%s: %s" % (name, msg))
def backends(self):
backends = []
if self._fw.nftables_enabled:
backends.append(self._fw.nftables_backend)
if self._fw.ipset_enabled:
backends.append(self._fw.ipset_backend)
return backends
def add_ipset(self, obj):
if obj.type not in self._fw.ipset_supported_types:
raise FirewallError(errors.INVALID_TYPE,
"'%s' is not supported by ipset." % obj.type)
self._ipsets[obj.name] = obj
def remove_ipset(self, name, keep=False):
obj = self._ipsets[name]
if obj.applied and not keep:
try:
for backend in self.backends():
backend.set_destroy(name)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
log.debug1("Keeping ipset '%s' because of timeout option", name)
del self._ipsets[name]
def apply_ipsets(self):
for name in self.get_ipsets():
obj = self._ipsets[name]
obj.applied = False
log.debug1("Applying ipset '%s'" % name)
for backend in self.backends():
if backend.name == "ipset":
active = backend.set_get_active_terse()
if name in active and ("timeout" not in obj.options or \
obj.options["timeout"] == "0" or \
obj.type != active[name][0] or \
rm_def_cr_opts(obj.options) != \
active[name][1]):
try:
backend.set_destroy(name)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
if self._fw.individual_calls() \
or backend.name == "nftables":
try:
backend.set_create(obj.name, obj.type, obj.options)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
obj.applied = True
if "timeout" in obj.options and \
obj.options["timeout"] != "0":
# no entries visible for ipsets with timeout
continue
for entry in obj.entries:
try:
backend.set_add(obj.name, entry)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
try:
backend.set_restore(obj.name, obj.type,
obj.entries, obj.options,
None)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
obj.applied = True
# TYPE
def get_type(self, name):
return self.get_ipset(name, applied=True).type
# DIMENSION
def get_dimension(self, name):
return len(self.get_ipset(name, applied=True).type.split(","))
def check_applied(self, name):
obj = self.get_ipset(name)
self.check_applied_obj(obj)
def check_applied_obj(self, obj):
if not obj.applied:
raise FirewallError(
errors.NOT_APPLIED, obj.name)
# OPTIONS
def get_family(self, name):
obj = self.get_ipset(name, applied=True)
if "family" in obj.options:
if obj.options["family"] == "inet6":
return "ipv6"
return "ipv4"
# ENTRIES
def __entry_id(self, entry):
return entry
def __entry(self, enable, name, entry):
pass
def add_entry(self, name, entry):
obj = self.get_ipset(name, applied=True)
IPSet.check_entry(entry, obj.options, obj.type)
if entry in obj.entries:
raise FirewallError(errors.ALREADY_ENABLED,
"'%s' already is in '%s'" % (entry, name))
try:
for backend in self.backends():
backend.set_add(obj.name, entry)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
if "timeout" not in obj.options or obj.options["timeout"] == "0" \
and entry not in obj.entries:
# no entries visible for ipsets with timeout
obj.entries.append(entry)
def remove_entry(self, name, entry):
obj = self.get_ipset(name, applied=True)
# no entry check for removal
if entry not in obj.entries:
raise FirewallError(errors.NOT_ENABLED,
"'%s' not in '%s'" % (entry, name))
try:
for backend in self.backends():
backend.set_delete(obj.name, entry)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
if "timeout" not in obj.options or obj.options["timeout"] == "0" \
and entry not in obj.entries:
# no entries visible for ipsets with timeout
obj.entries.remove(entry)
def query_entry(self, name, entry):
obj = self.get_ipset(name, applied=True)
if "timeout" in obj.options and obj.options["timeout"] != "0":
# no entries visible for ipsets with timeout
raise FirewallError(errors.IPSET_WITH_TIMEOUT, name)
return entry in obj.entries
def get_entries(self, name):
obj = self.get_ipset(name, applied=True)
return obj.entries
def set_entries(self, name, entries):
obj = self.get_ipset(name, applied=True)
for entry in entries:
IPSet.check_entry(entry, obj.options, obj.type)
if "timeout" not in obj.options or obj.options["timeout"] == "0":
# no entries visible for ipsets with timeout
obj.entries = entries
try:
for backend in self.backends():
backend.set_flush(obj.name)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
obj.applied = True
try:
for backend in self.backends():
if self._fw.individual_calls() \
or backend.name == "nftables":
for entry in obj.entries:
backend.set_add(obj.name, entry)
else:
backend.set_restore(obj.name, obj.type, obj.entries,
obj.options, None)
except Exception as msg:
raise FirewallError(errors.COMMAND_FAILED, msg)
else:
obj.applied = True
return
| N4m3 |
5!z3 |
L45t M0d!f!3d |
0wn3r / Gr0up |
P3Rm!55!0n5 |
0pt!0n5 |
| .. |
-- |
December 20 2023 04:52:59 |
0 / 0 |
0755 |
|
| io |
-- |
December 20 2023 04:52:59 |
0 / 0 |
0755 |
|
| | | | | |
| __init__.py |
0 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| __init__.pyc |
0.142 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| __init__.pyo |
0.142 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| base.py |
1.936 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| base.pyc |
1.29 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| base.pyo |
1.29 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| ebtables.py |
9.128 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| ebtables.pyc |
9.036 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| ebtables.pyo |
9.036 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw.py |
43.706 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw.pyc |
30.673 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw.pyo |
30.673 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_config.py |
35.99 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_config.pyc |
30.686 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_config.pyo |
30.686 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_direct.py |
20.115 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_direct.pyc |
14.772 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_direct.pyo |
14.772 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_helper.py |
1.79 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_helper.pyc |
2.57 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_helper.pyo |
2.57 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_icmptype.py |
2.773 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_icmptype.pyc |
2.995 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_icmptype.pyo |
2.995 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_ifcfg.py |
2.502 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_ifcfg.pyc |
1.838 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_ifcfg.pyo |
1.838 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_ipset.py |
8.96 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_ipset.pyc |
9.018 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_ipset.pyo |
9.018 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_nm.py |
6.494 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_nm.pyc |
5.929 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_nm.pyo |
5.929 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_policies.py |
2.737 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_policies.pyc |
2.941 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_policies.pyo |
2.941 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_service.py |
1.601 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_service.pyc |
2.145 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_service.pyo |
2.145 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_test.py |
22.056 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_test.pyc |
17.445 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_test.pyo |
17.445 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_transaction.py |
10.539 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_transaction.pyc |
10.958 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_transaction.pyo |
10.958 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_zone.py |
75.604 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| fw_zone.pyc |
57.309 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| fw_zone.pyo |
57.309 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| helper.py |
0.785 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| helper.pyc |
0.217 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| helper.pyo |
0.217 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| icmp.py |
3.028 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| icmp.pyc |
2.894 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| icmp.pyo |
2.894 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| ipXtables.py |
47.679 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| ipXtables.pyc |
34.804 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| ipXtables.pyo |
34.804 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| ipset.py |
9.1 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| ipset.pyc |
9.15 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| ipset.pyo |
9.15 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| logger.py |
30.311 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| logger.pyc |
27.429 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| logger.pyo |
27.429 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| modules.py |
3.627 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| modules.pyc |
3.563 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| modules.pyo |
3.563 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| nftables.py |
60.549 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| nftables.pyc |
38.556 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| nftables.pyo |
38.556 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| prog.py |
1.475 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| prog.pyc |
0.965 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| prog.pyo |
0.965 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| rich.py |
29.336 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| rich.pyc |
23.73 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| rich.pyo |
23.73 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| watcher.py |
3.152 KB |
April 28 2021 13:31:12 |
0 / 0 |
0644 |
|
| watcher.pyc |
3.549 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|
| watcher.pyo |
3.549 KB |
April 28 2021 13:31:13 |
0 / 0 |
0644 |
|