bookends.m4: Allow redirects to (non-routing) hosts.
[firewall] / local.m4
index 9d4d917..71c146f 100644 (file)
--- a/local.m4
+++ b/local.m4
@@ -35,10 +35,12 @@ m4_divert(-1)
 
 ## Define the available network classes.
 m4_divert(42)m4_dnl
 
 ## Define the available network classes.
 m4_divert(42)m4_dnl
-defnetclass untrusted untrusted trusted
-defnetclass trusted untrusted trusted safe noloop
-defnetclass safe trusted safe noloop
-defnetclass noloop trusted safe
+defnetclass untrusted untrusted trusted mcast
+defnetclass trusted untrusted trusted safe noloop mcast
+defnetclass safe trusted safe noloop mcast
+defnetclass noloop trusted safe mcast
+defnetclass link
+defnetclass mcast
 m4_divert(-1)
 
 m4_divert(26)m4_dnl
 m4_divert(-1)
 
 m4_divert(26)m4_dnl
@@ -47,22 +49,17 @@ m4_divert(26)m4_dnl
 
 ## House networks.
 defnet dmz trusted
 
 ## House networks.
 defnet dmz trusted
-       addr 62.49.204.144/28
+       addr 62.49.204.144/28 2001:470:1f09:1b98::/64
        forwards unsafe untrusted
 defnet unsafe trusted
        forwards unsafe untrusted
 defnet unsafe trusted
-       addr 172.29.199.0/25
+       addr 172.29.199.0/25 2001:470:9740:1::/64
        forwards househub
 defnet safe safe
        forwards househub
 defnet safe safe
-       addr 172.29.199.192/28
+       addr 172.29.199.192/27 2001:470:9740:4001::/64
        forwards househub
 defnet untrusted untrusted
        forwards househub
 defnet untrusted untrusted
-       addr 172.29.198.0/25
+       addr 172.29.198.0/25 2001:470:9740:8001::/64
        forwards househub
        forwards househub
-defnet vpn safe
-       addr 172.29.199.128/27
-       forwards househub colohub
-       host crybaby 1
-       host terror 2
 defnet iodine untrusted
        addr 172.29.198.128/28
 
 defnet iodine untrusted
        addr 172.29.198.128/28
 
@@ -74,11 +71,12 @@ defnet housebdry virtual
 
 ## House hosts.
 defhost radius
 
 ## House hosts.
 defhost radius
-       router
-       iface eth0 dmz unsafe safe
-       iface eth1 dmz unsafe safe
+       hosttype router
+       iface eth0 dmz unsafe safe default
+       iface eth1 dmz unsafe safe default
        iface eth2 safe
        iface eth2 safe
-       iface eth3 untrusted
+       iface eth3 untrusted default
+       iface t6-he default
 defhost roadstar
        iface eth0 dmz unsafe
        iface eth1 dmz unsafe
 defhost roadstar
        iface eth0 dmz unsafe
        iface eth1 dmz unsafe
@@ -86,30 +84,34 @@ defhost jem
        iface eth0 dmz unsafe
        iface eth1 dmz unsafe
 defhost artist
        iface eth0 dmz unsafe
        iface eth1 dmz unsafe
 defhost artist
+       hosttype router
        iface eth0 dmz unsafe
        iface eth1 dmz unsafe
        iface eth0 dmz unsafe
        iface eth1 dmz unsafe
+       iface eth3 untrusted
 defhost vampire
 defhost vampire
-       router
+       hosttype router
        iface eth0.0 dmz unsafe safe
        iface eth0.1 dmz unsafe safe
        iface eth0.2 safe
        iface eth0.3 untrusted
        iface eth0.0 dmz unsafe safe
        iface eth0.1 dmz unsafe safe
        iface eth0.2 safe
        iface eth0.3 untrusted
-       iface dns0 dns
-       iface vpn-+ vpn
+       iface dns0 iodine
        iface vpn-precision colobdry vpn
        iface vpn-precision colobdry vpn
+       iface vpn-chiark sgo
+       iface vpn-+ vpn
 defhost ibanez
        iface br-dmz dmz unsafe
        iface br-unsafe unsafe
 
 defhost gibson
 defhost ibanez
        iface br-dmz dmz unsafe
        iface br-unsafe unsafe
 
 defhost gibson
+       hosttype client
        iface eth0 unsafe
 
 ## Colocated networks.
 defnet jump trusted
        iface eth0 unsafe
 
 ## Colocated networks.
 defnet jump trusted
-       addr 212.13.198.64/28
+       addr 212.13.198.64/28 2001:ba8:0:1d9::/64
        forwards colohub
 defnet colo trusted
        forwards colohub
 defnet colo trusted
-       addr 172.29.199.176/28
+       addr 172.29.199.176/28 2001:ba8:1d9:2::/64
        forwards colohub
 defnet colohub virtual
        forwards colobdry jump colo
        forwards colohub
 defnet colohub virtual
        forwards colobdry jump colo
@@ -122,11 +124,12 @@ defhost fender
        iface br-jump jump colo
        iface br-colo jump colo
 defhost precision
        iface br-jump jump colo
        iface br-colo jump colo
 defhost precision
-       router
+       hosttype router
        iface eth0 jump colo
        iface eth1 jump colo
        iface eth0 jump colo
        iface eth1 jump colo
-       iface vpn-+ vpn
        iface vpn-vampire housebdry vpn
        iface vpn-vampire housebdry vpn
+       iface vpn-chiark sgo
+       iface vpn-+ vpn
 defhost telecaster
        iface eth0 jump colo
        iface eth1 jump colo
 defhost telecaster
        iface eth0 jump colo
        iface eth1 jump colo
@@ -140,10 +143,25 @@ defhost jazz
 ## Other networks.
 defnet hub virtual
        forwards housebdry colobdry
 ## Other networks.
 defnet hub virtual
        forwards housebdry colobdry
+defnet sgo noloop
+       addr !172.29.198.0/23
+       addr 10.0.0.0/8
+       addr 172.16.0.0/12
+       addr 192.168.0.0/16
+       forwards househub colohub
+defnet vpn safe
+       addr 172.29.199.128/27 2001:ba8:1d9:6000::/64
+       forwards househub colohub
+       host crybaby 1
+       host terror 2
+defnet anycast trusted
+       addr 172.29.199.224/27 2001:ba8:1d9:0::/64
+       forwards dmz unsafe safe untrusted jump colo vpn
 defnet default untrusted
 defnet default untrusted
-       addr 62.49.204.144/28
-       addr 212.13.198.64/28
-       forwards dmz untrusted unsafe jump colo
+       addr 62.49.204.144/28 2001:470:1f09:1b98::/64
+       addr 212.13.198.64/28 2001:ba8:0:1d9::/64
+       addr 2001:ba8:1d9::/48 #temporary
+       forwards dmz unsafe untrusted jump colo
 
 m4_divert(80)m4_dnl
 ###--------------------------------------------------------------------------
 
 m4_divert(80)m4_dnl
 ###--------------------------------------------------------------------------
@@ -160,7 +178,7 @@ case $forward in
     run iptables -A fwd-spec-nofrag -j RETURN --fragment
     run ip6tables -A fwd-spec-nofrag -j RETURN \
            -m ipv6header --soft --header frag
     run iptables -A fwd-spec-nofrag -j RETURN --fragment
     run ip6tables -A fwd-spec-nofrag -j RETURN \
            -m ipv6header --soft --header frag
-    run iptables -A FORWARD -j fwd-spec-nofrag
+    run ip46tables -A FORWARD -j fwd-spec-nofrag
 
     ## Allow ping from safe/noloop to untrusted networks.
     run iptables -A fwd-spec-nofrag -j ACCEPT \
 
     ## Allow ping from safe/noloop to untrusted networks.
     run iptables -A fwd-spec-nofrag -j ACCEPT \
@@ -171,10 +189,10 @@ case $forward in
            -m mark --mark $from_untrusted/$MASK_FROM \
            -m state --state ESTABLISHED
     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
            -m mark --mark $from_untrusted/$MASK_FROM \
            -m state --state ESTABLISHED
     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
-           -p ipv6-icmp --icmpv6-type echo-request \
+           -p icmpv6 --icmpv6-type echo-request \
            -m mark --mark $to_untrusted/$MASK_TO
     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
            -m mark --mark $to_untrusted/$MASK_TO
     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
-           -p ipv6-icmp --icmpv6-type echo-reply \
+           -p icmpv6 --icmpv6-type echo-reply \
            -m mark --mark $from_untrusted/$MASK_FROM \
            -m state --state ESTABLISHED
 
            -m mark --mark $from_untrusted/$MASK_FROM \
            -m state --state ESTABLISHED
 
@@ -235,22 +253,6 @@ run iptables -A inbound -j ACCEPT \
        -s 172.29.198.0/23 \
        -p udp --source-port $port_bootpc --destination-port $port_bootps
 
        -s 172.29.198.0/23 \
        -p udp --source-port $port_bootpc --destination-port $port_bootps
 
-## Incoming multicast on a network interface associated with a trusted
-## network is OK, since it must have originated there (or been forwarded, but
-## we don't do that yet).
-seen=:-:
-for net in $allnets; do
-  eval class=\$net_class_$net
-  case $class in trusted) ;; *) continue ;; esac
-  for iface in $(net_interfaces FWHOST $net); do
-    case "$seen" in *:$iface:*) continue ;; esac
-    seen=$seen$iface:
-    run iptables -A inbound -j ACCEPT \
-       -s 0.0.0.0 -d 224.0.0.0/24 \
-       -i $iface
-  done
-done
-
 ## Allow incoming ping.  This is the only ICMP left.
 run ip46tables -A inbound -j ACCEPT -p icmp
 
 ## Allow incoming ping.  This is the only ICMP left.
 run ip46tables -A inbound -j ACCEPT -p icmp
 
@@ -263,12 +265,9 @@ run ip46tables -A inbound -j forbidden
 run ip46tables -A INPUT -m mark --mark $from_untrusted/$MASK_FROM -g inbound
 
 ## Otherwise process as indicated by the mark.
 run ip46tables -A INPUT -m mark --mark $from_untrusted/$MASK_FROM -g inbound
 
 ## Otherwise process as indicated by the mark.
-run ip46tables -A INPUT -m mark ! --mark 0/$MASK_MASK -j ACCEPT
-case $forward in
-  1)
-    run ip46tables -A FORWARD -m mark ! --mark 0/$MASK_MASK -j ACCEPT
-    ;;
-esac
+for i in $inchains; do
+  run ip46tables -A $i -m mark ! --mark 0/$MASK_MASK -j ACCEPT
+done
 
 m4_divert(-1)
 ###----- That's all, folks --------------------------------------------------
 
 m4_divert(-1)
 ###----- That's all, folks --------------------------------------------------