NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Block a single connection with npf



On dic 12 12:48, Greg Troxel wrote:

> First, you are talking about "gateway" so I am guessing you have the
> usual computer with two interfaces, one to your ISP with a single IPv4
> address and one that is your home LAN, where is is .1, does dhcp, and is
> running npf.  If not please explain.

You perfectly guessed and depicted the scenario. (I omitted this because
I took this typical configuration as granted, but maybe it was necessary
to briefly mention it).

> Normally, people set up nat from LAN to WAN

Yes, exactly, and that's my case, too.

> and a firewall for incoming
> WAN packets that blocks most things except for what they want, and
> usually a stateful pass out rule so that matching packets from outgoing
> things are allowed.

I jumped straight to the second step, not having (so far) specific needs
to block something from the outside (there are no services exposed to my
public IP address):

pass stateful out all

> I am not an npf expert yet -- still on the steep part of the learning
> curve

Me neither. I'm even behind you, probably, on the very beginning of that
steep part :).

> -- but I think stateful rules only on syn packets and then apply
> to others.

Sorry, I can't understand what you meant here.

> This is a normal desire, to stop "phoning home" and "exfiltration" by
> your adversary-controlled proprietary-software-infested IOT things :-)

Yes exactly! :)

> Steppping, back, the real goal is to stop the packet from going to the
> ISP and onwards to the destination.    So you can block the packet
> inbound to if_mylan or outbound on if_mywan.  But outbound on wan, you
> have to be careful about if NAT is applied when the rule is evaluated so
> you can match.   Or you can just block target_address entirely.

I think that blocking the packet inbound to $if_mylan is the best
solution. This action should be as narrow as possible, blocking only
this connection (blocking entirely <target_address> seems to be overkill).

> I would add
> 
>   block in family inet4 proto tcp from <not_nice_host> to <target_address> port 443
> 
> instead.  Basically you want to drop all packets on that port from
> <not_nice_host> to <target_address> and you don't care if the connection
> is open or not.
> Generally I find I want to use stateful rules only to allow a reverse flow,
> and this isn't one of those times.

Ok, so basically (comparing it with my solution) you would not use
`stateful'. This makes sense.

> Another strategy, that works with ipfilter, is to have (pseudocode for example)
> 
>   block out log on wan from 10.0.0.IOT1 to any
>   block out log on wan from 10.0.0.IOT1 to <unwanted-known-place>
>   pass out on wan from 10.0.0.IOT1 to [exactly what I want to allow]
> 
> With ipf, the rule is evaluated before nat.

I think that it would be before NAT even with npf.

> However, for block-all pass-some, you need to do it outbound, because
> you might want these devices to be able to do DNS or NTP to your router
> box, even if you don't want them to communicate externally in general.

This would be a very careful strategy. However, in this specific case I
don't want to block anything, so I prefer the "block-some" approach. 

Another issue I'm struggling with is to block not a single IP, but a
custom bunch of IPs, so not a ip/subnet couple, but a range:

block in family inet4 proto tcp from <not_nice_host> to <first_IP_of_range>-<last_IP_of_range>

This gives a syntax error in npf. Also, I would like to use the
namespace, for example:

block in family inet4 proto tcp from <not_nice_host> to *.netbsd.org

But this gives error as well. I still don't know if this is just a
syntax error, or if npf does not support these two features at all.

If you dealt with this, let me know.
Thanks for your thorough message.

Rocky


Home | Main Index | Thread Index | Old Index