On Wednesday 10 May 2006 09:07, NetNeanderthal wrote: > On 5/9/06, Ashley Moran <[EMAIL PROTECTED]> wrote: > You're way off on what you're trying to do and need to seriously > consider re-reading the PF FAQ and/or trying the examples. This being > said...
Thanks for the detailed reply. It was REALLY helpful. I'm not our network administrator here, although I seem to get lumbered with all the hard jobs. I'm also rushed to get the firewalls up and running so no wonder I've made a mess :-S > > udp_opts = "keep state" > > icmp_opts = "keep state" > > These are just making the waters muddy -- if you use 'flags S/SA > modulate state' for all connections, PF will interpret what you mean > for udp and icmp connections -- try it out. I wanted to avoid S/SA because we have two firewalls I want to redundantly cluster and don't want any service interuption when we pull one down (we have a lot of long-lived connections into our servers). > > nat_proto = "{ tcp, udp, icmp }" > > ew? Don't do this. Hmmm, I got this from Jacek Artymiak's Building Firewalls with OpenBSD and PF. I figured if anything was a good source of copy-and-paste that was it! > > > scrub all reassemble tcp > > scrub in all fragment reassemble > > scrub out all random-id > > > > nat on $ext_if proto $nat_proto \ > > from $webserv2_dmz_ad -> $webserv2_ext_ad > > rdr on { $ext_if, $int_if } proto tcp \ > > from any to $webserv2_ext_ad port www -> $webserv2_dmz_ad port www > > > > block in log (all) all > > block out log (all) all > > You can just use 'block log' to simplify this -- the rest is implied > and unnecessary. Ditto re source... > > > antispoof log quick for $antispoof_if > > $antispoof_if is undefined Sorry, forgot to copy it in the e-mail. I tried to exclude anything related to our internal network (ie not the DMZ or internet) > > > pass out on $ext_if proto tcp \ > > from any to any $tcp_opts > > pass out on $ext_if proto udp \ > > from any to any $udp_opts > > pass out on $ext_if inet proto icmp \ > > from any to any $icmp_opts > > Ok, so this whole mess could be rewritten as follows, though I wonder > why you would do it in such a fashion: > pass out on $ext_if proto {tcp, udp, icmp} from any to any modulate state > - or - > pass out on $ext_if proto {tcp, udp, icmp} modulate state > > > pass in on $dmz_if proto tcp \ > > from $dmz_ad to any port $dmz_tcp_services_out #$tcp_opts > > pass in on $dmz_if proto udp \ > > from $dmz_ad to any port $dmz_udp_services_out #$udp_opts > > pass in on $dmz_if proto icmp \ > > from $dmz_ad to any #$udp_opts > > Blah, don't use complicating macros while you're learning PF! > > > Call dig with this setup and it times out; uncomment the options > > (modulate/keep) state and you get a DNS result. I was under the > > impression that the state should be created as the packets leave $ext_if, > > so why is it necessary to put a state option in the DMZ interface rules? > > > > Hope someone can clear this up > > I'm just not sure what it is you're trying to accomplish. Is this > simply a two-interface firewall that is performing NAT for a web/dns > server to the outside world? No, this is a 3-interface firewall that seperates our corporate network from our DMZ from the internet. We will have webservers in the DMZ but no DNS servers. What I noticed initially was that SSH sessions were taking forever to connect which is a sure sign that DNS is down. So I used dig from the webserver and sure enough, I couldn't make a DNS query, despite the "pass out on $ext_if keep state" rule. However, when I added a "keep state" option to the $dmz_if on the pass *in* rule it worked. I couldn't see why a state wasn't being made as packets left the external interface. I've modified my rule set according to your examples and it's working fine now. > pfctl -sa is your friend -- examine the changes you make before and > after ruleset load so you can see how PF expands rules. The > policy-based routing tags will also simplify your life so you only > have to manage inbound traffic (excepting the firewall's requests > itself - ssh, ntp, dns, et al). I'm quite fond of tcpdump too! I got nowhere until I started examining the packets. And I hadn't used tags before but I can see how they can simplify the rules a lot. Regards Ashley -- "If you do it the stupid way, you will have to do it again" - Gregory Chudnovsky