Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Aug 1999 01:57:59 -0500
From:      Carol Deihl <carol@tinker.com>
To:        Vincent Power <vince@MHA.ca>
Cc:        freebsd-security@FreeBSD.ORG
Subject:   Re: question about ipfw/natd
Message-ID:  <37B27077.C4021672@tinker.com>
References:  <71281E6E6644D311882F005004D16880395A@camel.local.mha.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Vincent,

The key to making this work is thinking about when the natd happens,
so that you'll know what addresses you're working with. Here's an
example of a setup I did some time ago, which may or may not match
your situation, but I hope it will shed some light for you.

We needed to translate addresses for some public servers. We placed
them behind a FreeBSD box with ipfw/natd, using redirect_address
statements in a natd.conf file. We did our natd on the *external*
interface. Our ipfw rules were (schematically) like this (we used
a shell file):

        $rule 1000 pass all from 127.0.0.1 to 127.0.0.1

# Anti-spoofing, block incoming with internal sources
        $rule deny log all from $i_net to any in via $oif

# Stop RFC1918 nets and loopback on the outside interface
        $rule deny log all from 192.168.0.0:255.255.0.0 to any in via
$oif
        $rule deny log all from 172.16.0.0:255.240.0.0  to any in via
$oif
        $rule deny log all from 10.0.0.0:255.0.0.0      to any in via
$oif
        $rule deny log all from 127.0.0.1               to any in via
$oif

# process through NAT
        $rule divert natd all from any to any via $oif

# Allow inbound to public web servers that require NAT
# Rule 1 for discussion below:
        $rule pass tcp from any $HIGH  to $t_public $HTTP   in  via $oif
# Rule 2
        $rule pass tcp from any $HIGH  to $t_public $HTTP   out via $iif
# Rule 3
        $rule pass tcp from $t_public  $HTTP to any $HIGH   in  via $iif
established
# Rule 4
        $rule pass tcp from $r_public  $HTTP to any $HIGH   out via $oif
established

# ditto 1-4 for other services and other blocks of addresses requiring
nat


The sequence of processing for a sample web connection is this:

	1. first packet comes in $oif (outside interface)
	2. packet examined for anti-spoofing
	3. packet translated by natd
	4. packet (with translated address) passed across $oif
		by Rule 1 above
	5. packet (still with translated address) passed across $iif
		(inside interface) by Rule 2
	6. packet received by web server, generates reply packet
	7. reply packet (with translated address) comes in $iif
	8. reply packet (with translated address) passed across $iif
		by Rule 3
	9. reply packet (with translated address) hits $oif on way out
	10. reply packet goes through nat, gets translated to *outside*
		address
	11. reply packet (with *outside* address) passed to outside
		across $oif by Rule 4

In our topology, note that Rules 1-3 refer to the translated (inside)
address, while Rule 4 refers to the *outside* address (since the nat
happens before that rule gets hit).

Note that even if you're using RFC1918 nets on the inside, the RFC1918
rules above won't cause a problem, since they are applied only to
packets that are coming *in* from the outside interface.

Another thing that took me some time to figure out originally is this:
The "in" and "out" are from the point of view of the *interface*
involved, *not* relative to the "inside" or "outside" network. So, for
packets that are transiting the gateway box headed into the internal
network, these packets will be going *out* the internal interface
to the internal network.

Hope I've shed light, not confusion...

Carol

Vincent Power wrote:
> 
> With ipfw/natd, I am having trouble blocking access to certain ports on
> the ip's I have redirected with "natd -redirect_address". Can it be
> done... and is there a reference to setting up this kind of
> configuration? or does someone have a sample configuration file for this
> type of setup?
-- 
Carol Deihl - principal, Shrier and Deihl - mailto:carol@tinker.com
Remote Unix Network Admin, Security, Internet Software Development
  Tinker Internet Services - Superior FreeBSD-based Web Hosting
                     http://www.tinker.com/


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-security" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?37B27077.C4021672>