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>
