Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Apr 2014 12:22:52 -0500
From:      CyberLeo Kitsana <cyberleo@cyberleo.net>
To:        Khairil Yusof <khairil.yusof@gmail.com>, freebsd-pf@freebsd.org
Subject:   Re: Firewall for IPv6 for ISP PPP connection
Message-ID:  <5346D36C.6050700@cyberleo.net>
In-Reply-To: <CAMkFsdmhf%2BBNN=XfRW8A%2B9c72Jm5B-NkC9xa5kOzexR4iVWjUQ@mail.gmail.com>
References:  <CAMkFsdmhf%2BBNN=XfRW8A%2B9c72Jm5B-NkC9xa5kOzexR4iVWjUQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 04/09/2014 11:07 PM, Khairil Yusof wrote:
> I have a home server that also acts as a router/firewall home network.
> 
> re0 is the main network interface connected to the rest of the network
> tun0 is the ipv4/ipv6 ppp tunnel connected to ISP via ppp.
> fxp0 is spare unused interface.
> 
> With ipv4, the rules were straight forward.
> 
> tun0 the ppp interface had an external ip and is easily identifiable as the
> external if.
> 
> The rules would nat non-local IP's going out via tun0, block incoming tcp
> via tun0 and set state for all outgoing tcp via tun0.
> 
> With ipv6 however, there is no external IPv6 address except link local on
> the tun0. All the IPv6 assigned addresses including the one on re0 are now
> also "external" too.
> 
> So  I can't block re0 in, as that would block all my internal ipv6 network
> too.
> 
> In this ipv6 case, what would be the simplest rule possible, where I would
> block all incoming ipv6 traffic (except key ones like route discovery) not
> from local network, set state for all outgoing and pass in all with state?
> 
> Most of the examples I see on the Internet show a dedicated external
> network interface for their IPv6 connection, which isn't too different from
> my ipv4 setup with ext ip on tun0.
> 
> I'm guessing, that something like?
> 
> block in all inet6 from !$ipv6addr_/64
> pass out all inet6 from !$ipv6addr_/64  keep state
> 
> Any pointers would be helpful, I can figure out how to right the rules
> myself later, but would like to be pointed to the right approach.

Should be able to be handled in pretty much the same way; especially if
you have native v6 routing from your ISP: just filter on tun0 instead of
gif0.

I have a /48 from TunnelBroker, and have assigned the routing subnet to
the gif0 interface and distributed the /48 amongst my various internal
networks.

Here are the simplified rules I have set up on my gif interface are as
follows:

----8<----
# Block v6 inbound by default, unless otherwise stated
block return quick on gif0 from !$my_nets_v6 to !$my_nets_v6
block return in on gif0 from any to !(gif0)
pass in on gif0 from any to (gif0)
pass out on gif0 from any to any keep state tag Q_DFLT
----8<----

And then individual rules loaded into anchors control arbitrary inbound
access to specific hosts:

----8<----
pass in on gif0 proto tcp from any to $sshgateway_v6 port 22 keep state
tag Q_SSH
...
pass in on gif0 proto tcp from any to $loadbalancer_v6 port { 80, 443 }
keep state tag Q_BULK
----8<----

Hope this helps!

-- 
Fuzzy love,
-CyberLeo
Technical Administrator
CyberLeo.Net Webhosting
http://www.CyberLeo.Net
<CyberLeo@CyberLeo.Net>

Furry Peace! - http://www.fur.com/peace/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5346D36C.6050700>