Hi all,
I attached a patch that solve this problem. I will send a PR as soon as possible.

Instructions:

Patch the follow files:

/usr/src/sbin/ipfw/ipfw2.c (patch is ipfw2.c.diff)
/usr/src/sbin/ipfw/ipfw2.h (patch is ipfw2.h.diff)
/usr/src/sbin/ipfw/ipv6.c (patch is ipv6.c.diff)

This patch was tested on FreeBSD 8 Beta 2 AMD64 and official FreeBSD 8 BETA 2 Sources.

Let me know any suggestion or problem.

Regards
Raffaele

On Jul 22, 2009, at 5:12 PM, Willem Jan Withagen wrote:

Reply below, and an also reorganised the yours...
raffaele.delore...@libero.it wrote:
Hi,

Running 7.2 I tried to insert
this into my IPFW rules
# ipfw add allow udp from any to 2001:xxx:3::
113,2001:xxxx:3::116 \
        dst-port 10001-10100 keep-state
ipfw: bad netmask
``xxxx:3::113''
also:
# ipfw add allow udp from any to trixbox.ip6 dst-port
10001-10100 keep-state
ipfw: hostname ``trixbox.ip6'' unknown
Exit 68
# host
trixbox.ip6
trixbox.ip6.digiware.nl has IPv6 address 2001:4cb8:3::116

So it
looks like what is in the manual is overly optimistic:
----
    addr6-list:
ip6-addr[,addr6-list]
    ip6-addr:
            A host or subnet
specified one of the following ways:
            numeric-ip | hostname
Matches a single IPv6 address as allowed by inet_pton(3) or a hostname. Hostnames are resolved at the time the
                    rule is added to the firewall list.


addr/masklen
                    Matches all IPv6 addresses with base addr
(specified as
                    allowed by inet_pton or a hostname) and
mask width of
                    masklen bits.

            No support
for sets of IPv6 addresses is provided because IPv6
            addresses
are typically random past the initial prefix.
----

Anybody else ran into
this?
Or should I file this as a PR.

> Hi all,
> You has found a parser bug.
> When the protocol is "ipv6" and you are a
> comma separated ipv6 addresses, the parser work fine because the "add_srcip6"
> function is called and recognize all addresses.
> When the protocol is "!=ipv6"
> (like TCP,UDP,ICMP6) the "add_src" fuction is called and it cause troubles > because the "inet_pton()" fails and erroneously is called the "add_srcip"
> function (see the code below).
>
> (from "ipfw2.c")
>  add_src(ipfw_insn *cmd, char
> *av, u_char proto)
> {
>    struct in6_addr a;
>    char *host, *ch;
>    ipfw_insn *ret =
> NULL;
>
>    if ((host = strdup(av)) == NULL)
>            return NULL;
>    if ((ch = strrchr
> (host, '/')) != NULL)
>            *ch = '\0';
>
>    if (proto == IPPROTO_IPV6  || strcmp(av,
> "me6") == 0 ||
>        inet_pton(AF_INET6, host, &a))
>            ret = add_srcip6(cmd, av);
>
>    /* XXX: should check for IPv4, not !IPv6 */
>    if (ret == NULL && (proto ==
> IPPROTO_IP || strcmp(av, "me") == 0 ||
>        !inet_pton(AF_INET6, host, &a)))
>            
> ret = add_srcip(cmd, av);
>    if (ret == NULL && strcmp(av, "any") != 0)
>            ret =
> cmd;
>
>    free(host);
>    return ret;
> }
>
> I think that possibles solutions are the
> follows:
>
> 1) Create a new protocols types UPD6,TCP6 only for IPv6 rules to
> avoid parser confusions, and check about this protocol inside the "add_src"
> fuction (easy to implement).
> 2) Check the comma separated ip/ipv6 addresses
> inside the "add_src" function (a little too hard to implement).
>
> I appreciate
> suggestions from the community experts about this problem.

I would prefer not to make seperate tcp6 and udp6 items, since what i would like to do is things like:

hostlist="a.b.c.d,A:B:C:D::F"

and then in the firewall something like
        ipfw add allow tcp from any to ${hostlist} dst-port 80 setup

and if tcp now goes into tcp and tcp6 I need to double my rules etc.

Which raises one other point:
        using a FQDN with more A and AAAA records also just inserts the
        first reply in the list.
        Now I don't use FQDN since most of the time in the Firewall DNS
        is not quite up yet.

--WjW
_______________________________________________
freebsd-i...@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ipfw
To unsubscribe, send any mail to "freebsd-ipfw- unsubscr...@freebsd.org"

_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to