On Wed, Jun 22, 2016 at 3:26 PM, Jeremy <open...@smartpoint.co.nz> wrote:

> I have a SOHO firewall in production which has been connected to the
> net via an ADSL line. We have a new fibre connection which will replace
> the ADSL connection once I get the system switched over. I am having
> trouble with the pf configuration during the transition period.
>
> What I would like to achieve is that connections come in on either
> external interface and are routed appropriately to the internal network,
> where I'm running a mail and web server etc. Outgoing connections should
> also be handled via either interface, but this is less important.
>
> Complicating the situation is that this is a remote setup and I need to
> modify the configuration without losing connectivity to the server in
> the meantime. (It's a long drive if I need to go on-site to correct any
> mistakes.) I've been making changes on the fly and rebooting (which
> restores defaults) if anything goes wrong.
>
> I have attached my pf.conf where I have attempted to update the
> config to handle this situation but I can't get it working correctly.
> The LAN is connected on em0. The original ADSL connection is on em1 and
> the new fibre link is on em2
>
> The original installation has /etc/mygate containing 172.16.8.1 (adsl
> modem)
>
> I'm not sure that I need to modify the routing to handle inbound
> connections on both interfaces but have attempted to do the following
> via the shell:
>
> # pfctl -f /etc/pf.conf.new
> # route add -mpath default 192.168.1.1
> # route add -mpath default 172.16.8.1
> # sysctl net.inet.ip.multipath=1
>
> I suspect I have issues with the "egress" keyword but I'm not sure how
> to correctly/safely activate my configuration without losing
> connectivity on one or both interfaces. Generally I can reach services
> on the firewall machine itself but cannot access the internal network
> services from outside. (Changing the default route usually brings
> connections via the associated link, down.)
>
> I don't actually *need* load-balancing or equal cost multipath
> routing. I just want a configuration where I have two external
> interfaces which both carry traffic and packets flow over the right
> interface (so this looks pretty much like the same thing.)
>
>
> Could someone please cast an eye over what I'm doing and point me in
> the right direction. Thanks. Much appreciated.
>
>
>
> =========/etc/pf.conf.new===================
> # macros
> int_if="em0"
> ext_if1="em1"
> ext_if2="em2"
> ext_gw1="172.16.8.1"
> ext_gw2="192.168.1.1"
>
> lan_net="192.168.7.0/24"
>
> tcp_services="{ 22, 113 }"
> udp_services="{ 161 }"
> mail_services="{ 587, 993, 995 }"
> web_services="{ 80, 443 }"
>
> icmp_types="echoreq"
>
> web_server = "192.168.7.77"
> mail_server = "192.168.7.77"
>
> # options
> set block-policy return
> set loginterface egress
> set skip on lo
>
> # match rules
> match in all scrub (no-df random-id max-mss 1440)
> #match out on egress inet from $int_if:network to any nat-to (egress:0)
> match out on $ext_if1 from $int_if:network nat-to ($ext_if1)
> match out on $ext_if2 from $int_if:network nat-to ($ext_if2)
>
> # filter rules
> block in log
>
> pass out quick
>
> # Balance two external interfaces
> pass in on $int_if from $int_if:network reply-to \
>    { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin
>
> pass out on $ext_if1 from $ext_if2 reply-to ($ext_if2 $ext_gw2)
> pass out on $ext_if2 from $ext_if1 reply-to ($ext_if1 $ext_gw1)
>
> # Allow access to services running on the firewall
> pass in on egress inet proto tcp from any to (egress) port \
>     $tcp_services flags S/SA keep state \
>     (max-src-conn-rate 5/300)
> pass in on egress inet proto udp from any to (egress) port $udp_services
>
> # Redirect traffic to the interior servers
> pass in on egress inet proto tcp from any to (egress) port \
>     $web_services rdr-to $web_server synproxy state \
>     (max-src-conn-rate 100/10)
> pass in on egress inet proto tcp from any to (egress) port \
>     $mail_services rdr-to $mail_server
>
> # Forward SNMP on alternative port through to internal server
> pass in on egress inet proto udp to (egress) port 162 \
>     rdr-to $web_server port 161
>
> pass in inet proto icmp all icmp-type $icmp_types
> pass in on $int_if
> pass in log on $ext_if2
>
>
I've setup a few OpenBSD machines to do failover with 2 internet
interfaces.  I didn't use multipath, pf will pass traffic without it.  I
did find it necessary to specify a reply-to for each of my pass in rules
for services on the 2nd interface.  For example I would need these 2 rules
to pass traffic in on both interfaces, ext_if has the default route and is
egress.

pass in on egress inet proto tcp from any to $server port 80
pass in on $ex2_if inet proto tcp from any to $server port 80 reply-to (
$ex2_if $ex2_gw )

Reply via email to