Пример #1
0
    def _read_rules(self):
        """Read in rules that were added by ufw."""
        rfns = [self.files["rules"]]
        if self.use_ipv6():
            rfns.append(self.files["rules6"])

        for f in rfns:
            try:
                orig = ufw.util.open_file_read(f)
            except Exception:
                err_msg = _("Couldn't open '%s' for reading") % (f)
                raise UFWError(err_msg)

            pat_tuple = re.compile(r"^### tuple ###\s*")
            for line in orig:
                if pat_tuple.match(line):
                    tupl = pat_tuple.sub("", line)
                    tmp = re.split(r"\s+", tupl.strip())
                    if len(tmp) < 6 or len(tmp) > 9:
                        warn_msg = _("Skipping malformed tuple (bad length): %s") % (tupl)
                        warn(warn_msg)
                        continue
                    else:
                        # set direction to "in" to support upgrades
                        # from old format, which only had 6 or 8 fields
                        type = "in"
                        interface = ""
                        if len(tmp) == 7 or len(tmp) == 9:
                            if "_" in tmp[-1]:
                                (type, interface) = tmp[-1].split("_")
                            else:
                                type = tmp[-1]
                        try:
                            if len(tmp) < 8:
                                rule = UFWRule(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], type)
                            else:
                                rule = UFWRule(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], type)
                                # Removed leading [sd]app_ and unescape spaces
                                pat_space = re.compile("%20")
                                if tmp[6] != "-":
                                    rule.dapp = pat_space.sub(" ", tmp[6])
                                if tmp[7] != "-":
                                    rule.sapp = pat_space.sub(" ", tmp[7])
                            if interface != "":
                                rule.set_interface(type, interface)

                        except UFWError:
                            warn_msg = _("Skipping malformed tuple: %s") % (tupl)
                            warn(warn_msg)
                            continue
                        if f == self.files["rules6"]:
                            rule.set_v6(True)
                            self.rules6.append(rule)
                        else:
                            rule.set_v6(False)
                            self.rules.append(rule)

            orig.close()
Пример #2
0
 def _get_rule_from_dialog(self):
     action = self._get_combobox_value('action_cbox').lower()
     if self.ui.protocol_cbox.get_sensitive():
         protocol = self._get_combobox_value('protocol_cbox').lower()
     else:
         protocol = 'any'
     rule = UFWRule(action, protocol)
     # position
     pos = self.ui.position_adjustment.get_value()
     rule.set_position(pos)
     # direction
     direction = ('in' if self.ui.in_rbutton.get_active() else 'out')
     rule.set_direction(direction)
     # logtype
     log_map = {'Off': '', 'New Connections': 'log', 'Packets': 'log-all'}
     logtype = log_map[self._get_combobox_value('rule_logging_cbox')]
     rule.set_logtype(logtype)
     # src
     if self.ui.src_addr_custom_rbutton.get_active():
         addr = self.ui.src_addr_custom_entry.get_text()
         rule.set_src(addr)
     # src port
     port = gfw.util.ANY_PORT
     if self.ui.src_port_custom_rbutton.get_active():
         port = self.ui.src_port_custom_entry.get_text()
     elif self.ui.src_app_rbutton.get_active():
         port = self._get_combobox_value('src_app_cbox')
         rule.sapp = port
     rule.set_port(port, 'src')
     # dst
     if self.ui.dst_addr_custom_rbutton.get_active():
         addr = self.ui.dst_addr_custom_entry.get_text()
         rule.set_dst(addr)
     # dst port
     port = gfw.util.ANY_PORT
     if self.ui.dst_port_custom_rbutton.get_active():
         port = self.ui.dst_port_custom_entry.get_text()
     elif self.ui.dst_app_rbutton.get_active():
         port = self._get_combobox_value('dst_app_cbox')
         rule.dapp = port
     rule.set_port(port, 'dst')
     return rule
Пример #3
0
def fromXml(str):
    elem = etree.XML(str)
    if elem.tag != 'rule':
        error("ERROR: Invalid XML, expected \'rule\' element", ERROR_INVALID_XML_NO_RULE)
    action=elem.get('action', '').lower()
    if action == '':
        error("ERROR: Invalid XML, no action specified", ERROR_INVALID_XML_NO_ACTION_XML)
    protocol=elem.get('protocol', ANY_PROTOCOL).lower()
    rule = UFWRule(action, protocol)
    rule.position=int(elem.get('position', 0))
    rule.direction=elem.get('direction', 'in').lower()
    rule.dapp=elem.get('dapp', '')
    rule.sapp=elem.get('sapp', '')
    rule.dport=elem.get('dport', ANY_PORT)
    rule.sport=elem.get('sport', ANY_PORT)
    rule.dst=elem.get('dst', ANY_ADDR)
    rule.src=elem.get('src', ANY_ADDR)
    rule.interface_in=elem.get('interface_in', '')
    rule.interface_out=elem.get('interface_out', '')
    rule.logtype=elem.get('logtype', '').lower()
    rule.v6=elem.get('v6', 'False').lower() == "true"
    return rule
Пример #4
0
    def _read_rules(self):
        '''Read in rules that were added by ufw'''
        rfns = [self.files['rules']]
        if self.use_ipv6():
            rfns.append(self.files['rules6'])

        for f in rfns:
            try:
                orig = ufw.util.open_file_read(f)
            except Exception:
                err_msg = _("Couldn't open '%s' for reading") % (f)
                raise UFWError(err_msg)

            pat_tuple = re.compile(r'^### tuple ###\s*')
            for line in orig:
                if pat_tuple.match(line):
                    tupl = pat_tuple.sub('', line)
                    tmp = re.split(r'\s+', tupl.strip())
                    if len(tmp) < 6 or len(tmp) > 9:
                        wmsg = _("Skipping malformed tuple (bad length): %s") \
                                 % (tupl)
                        warn(wmsg)
                        continue
                    else:
                        # set direction to "in" to support upgrades
                        # from old format, which only had 6 or 8 fields
                        dtype = "in"
                        interface = ""
                        if len(tmp) == 7 or len(tmp) == 9:
                            if '_' in tmp[-1]:
                                (dtype, interface) = tmp[-1].split('_')
                            else:
                                dtype = tmp[-1]
                        try:
                            if len(tmp) < 8:
                                rule = UFWRule(tmp[0], tmp[1], tmp[2], tmp[3],
                                               tmp[4], tmp[5], dtype)
                            else:
                                rule = UFWRule(tmp[0], tmp[1], tmp[2], tmp[3],
                                               tmp[4], tmp[5], dtype)
                                # Removed leading [sd]app_ and unescape spaces
                                pat_space = re.compile('%20')
                                if tmp[6] != "-":
                                    rule.dapp = pat_space.sub(' ', tmp[6])
                                if tmp[7] != "-":
                                    rule.sapp = pat_space.sub(' ', tmp[7])
                            if interface != "":
                                rule.set_interface(dtype, interface)

                        except UFWError:
                            warn_msg = _("Skipping malformed tuple: %s") % \
                                        (tupl)
                            warn(warn_msg)
                            continue
                        if f == self.files['rules6']:
                            rule.set_v6(True)
                            self.rules6.append(rule)
                        else:
                            rule.set_v6(False)
                            self.rules.append(rule)

            orig.close()