Date: Mon, 6 Jan 97 17:45:44 CST From: Joe Greco <jgreco@solaria.sol.net> To: brandon@cold.org (Brandon Gillespie) Cc: security@freebsd.org, hackers@freebsd.org Subject: Re: FreeBSD as a cleanwall Message-ID: <199701062345.RAA02007@solaria.sol.net> In-Reply-To: <no.id> from "Brandon Gillespie" at Jan 6, 97 02:39:20 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> Does anybody have a configuration for packet filtering through a FreeBSD
> router to run a cleanwall? Basically to keep all addresses of a specific
> IP set (say a class C) on the right sides. I.e. only set addresses of
> that set leave the network and don't allow any addresses of that set onto
> the network? I'm mulling through the docs now, but figured to look here
> for any possible pointers, as this seems like it would be a common enough
> operation..
It's called "via" :-)
You want something like this.
This is designed to run on a gateway router. You have a P2P circuit
between you and ISP ("Internet"), and your gateway is on an ethernet.
Not that that's required, but just to explain this particular setup.
---- --------- --------------
ISP|<----------->|Gateway|--------|Internal Net|
---- --------- --------------
^^^ ^^^ ^^^
LINK_IFC GATEWAY_IFC ADDRESS_BLOCK
204.95.219.2 206.55.64.1 206.55.64.0/25
On Gateway, do the following:
ipfw f
echo "Installing Firewall"
#
# ----- IP Bad Address Prevention Section -----
# Block RFC1597 "Private Internets" (inbound)
ipfw addf deny all from 10.0.0.0/8 to 0/0 via ${LINK_IFC}
ipfw addf deny all from 172.16.0.0/12 to 0/0 via ${LINK_IFC}
ipfw addf deny all from 192.168.0.0/16 to 0/0 via ${LINK_IFC}
# Block other "Shouldn't Exist" Internets (inbound)
ipfw addf deny all from 127.0.0.0/8 to 0/0 via ${LINK_IFC}
ipfw addf deny all from 0.0.0.0/8 to 0/0 via ${LINK_IFC}
# Block RFC1597 "Private Internets" as Source Address (outbound)
ipfw addf deny all from 10.0.0.0/8 to 0/0 via ${GATEWAY_IFC}
ipfw addf deny all from 172.16.0.0/12 to 0/0 via ${GATEWAY_IFC}
ipfw addf deny all from 192.168.0.0/16 to 0/0 via ${GATEWAY_IFC}
# Block RFC1597 "Private Internets" as Destination Address (outbound)
ipfw addf deny all from 0/0 to 10.0.0.0/8 via ${GATEWAY_IFC}
ipfw addf deny all from 0/0 to 172.16.0.0/12 via ${GATEWAY_IFC}
ipfw addf deny all from 0/0 to 192.168.0.0/16 via ${GATEWAY_IFC}
# Block other "Shouldn't Exist" Internets as Source Address (outbound)
ipfw addf deny all from 0/0 to 127.0.0.0/8 via ${GATEWAY_IFC}
ipfw addf deny all from 0/0 to 0.0.0.0/8 via ${GATEWAY_IFC}
# Block other "Shouldn't Exist" Internets as Destination Address (outbound)
ipfw addf deny all from 127.0.0.0/8 to 0/0 via ${GATEWAY_IFC}
ipfw addf deny all from 0.0.0.0/8 to 0/0 via ${GATEWAY_IFC}
#
# ----- IP Spoofing Prevention Section -----
# Block inbound pkts from addresses "on" my net (inbound)
# (add as many lines as needed)
ipfw addf deny all from ${ADDRESS_BLOCK} to 0/0 via ${LINK_IFC}
#
# Disallow all Source Addresses (outbound)
ipfw addf deny all from 0/0 to 0/0 via ${GATEWAY_IFC}
# Only allow outbound pkts from addresses "on" my net (outbound)
# (add as many lines as needed)
ipfw addf accept all from ${ADDRESS_BLOCK} to 0/0 via ${GATEWAY_IFC}
#
# Disallow all Destination Addresses (inbound)
ipfw addf deny all from 0/0 to 0/0 via ${LINK_IFC}
# Only allow inbound pkts to addresses "on" my net (inbound)
# (add as many lines as needed)
ipfw addf accept all from 0/0 to ${LINK_IFC} via ${LINK_IFC}
ipfw addf accept all from 0/0 to ${ADDRESS_BLOCK} via ${LINK_IFC}
#
This was clearly designed for use on a low speed (SLIP) router, there
are lots of optimizations. I wrote it for clarity. I also wrote it
under 2.1.0R, so there may be some syntax differences.
This will do a pretty thorough job of preventing bogus addresses; it
is certainly a good starting point for a "cleanwall" :-)
The comments were what I had in the file. If any of it is unclear
after inspection, let me know and I will try to clarify.
The router itself is mildly trusted to DTRT, by the way, and there
are some minor holes. In particular, it is possible for a remote
host to send packets with a source address of ${LINK_IFC} which
could be fixed by
ipfw addf deny all from ${LINK_IFC} to 0/0 via ${LINK_IFC}
Some folks will say that this is the long way of doing this. They
are right. But it was meant to potentially deal with multiple
interfaces...
... Joe
-------------------------------------------------------------------------------
Joe Greco - Systems Administrator jgreco@ns.sol.net
Solaria Public Access UNIX - Milwaukee, WI 414/342-4847
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701062345.RAA02007>
