chiark / gitweb /
local.m4: More interfaces for artist.
[firewall] / local.m4
1 ### -*-sh-*-
2 ###
3 ### Local firewall configuration
4 ###
5 ### (c) 2008 Mark Wooding
6 ###
7
8 ###----- Licensing notice ---------------------------------------------------
9 ###
10 ### This program is free software; you can redistribute it and/or modify
11 ### it under the terms of the GNU General Public License as published by
12 ### the Free Software Foundation; either version 2 of the License, or
13 ### (at your option) any later version.
14 ###
15 ### This program is distributed in the hope that it will be useful,
16 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ### GNU General Public License for more details.
19 ###
20 ### You should have received a copy of the GNU General Public License
21 ### along with this program; if not, write to the Free Software Foundation,
22 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
24 ###--------------------------------------------------------------------------
25 ### Local configuration.
26
27 m4_divert(6)m4_dnl
28 ## Default NTP servers.
29 defconf(ntp_servers,
30         "158.152.1.76 158.152.1.204 194.159.253.2 195.173.57.232")
31
32 m4_divert(-1)
33 ###--------------------------------------------------------------------------
34 ### Packet classification.
35
36 ## Define the available network classes.
37 m4_divert(42)m4_dnl
38 defnetclass untrusted untrusted trusted mcast
39 defnetclass trusted untrusted trusted safe noloop mcast
40 defnetclass safe trusted safe noloop mcast
41 defnetclass noloop trusted safe mcast
42 defnetclass link
43 defnetclass mcast
44 m4_divert(-1)
45
46 m4_divert(26)m4_dnl
47 ###--------------------------------------------------------------------------
48 ### Network layout.
49
50 ## House networks.
51 defnet dmz trusted
52         addr 62.49.204.144/28 2001:470:1f09:1b98::/64
53         forwards unsafe untrusted
54 defnet unsafe trusted
55         addr 172.29.199.0/25 2001:470:9740:1::/64
56         forwards househub
57 defnet safe safe
58         addr 172.29.199.192/27 2001:470:9740:4001::/64
59         forwards househub
60 defnet untrusted untrusted
61         addr 172.29.198.0/25 2001:470:9740:8001::/64
62         forwards househub
63 defnet iodine untrusted
64         addr 172.29.198.128/28
65
66 defnet househub virtual
67         forwards housebdry dmz unsafe safe untrusted
68 defnet housebdry virtual
69         forwards househub hub
70         noxit dmz
71
72 ## House hosts.
73 defhost radius
74         hosttype router
75         iface eth0 dmz unsafe safe default
76         iface eth1 dmz unsafe safe default
77         iface eth2 safe
78         iface eth3 untrusted default
79         iface t6-he default
80 defhost roadstar
81         iface eth0 dmz unsafe
82         iface eth1 dmz unsafe
83 defhost jem
84         iface eth0 dmz unsafe
85         iface eth1 dmz unsafe
86 defhost artist
87         hosttype router
88         iface eth0 dmz unsafe
89         iface eth1 dmz unsafe
90         iface eth3 untrusted
91 defhost vampire
92         hosttype router
93         iface eth0.0 dmz unsafe safe
94         iface eth0.1 dmz unsafe safe
95         iface eth0.2 safe
96         iface eth0.3 untrusted
97         iface dns0 iodine
98         iface vpn-precision colobdry vpn
99         iface vpn-chiark sgo
100         iface vpn-+ vpn
101 defhost ibanez
102         iface br-dmz dmz unsafe
103         iface br-unsafe unsafe
104
105 defhost gibson
106         hosttype client
107         iface eth0 unsafe
108
109 ## Colocated networks.
110 defnet jump trusted
111         addr 212.13.198.64/28 2001:ba8:0:1d9::/64
112         forwards colohub
113 defnet colo trusted
114         addr 172.29.199.176/28 2001:ba8:1d9:2::/64
115         forwards colohub
116 defnet colohub virtual
117         forwards colobdry jump colo
118 defnet colobdry virtual
119         forwards colohub hub
120         noxit jump
121
122 ## Colocated hosts.
123 defhost fender
124         iface br-jump jump colo
125         iface br-colo jump colo
126 defhost precision
127         hosttype router
128         iface eth0 jump colo
129         iface eth1 jump colo
130         iface vpn-vampire housebdry vpn
131         iface vpn-chiark sgo
132         iface vpn-+ vpn
133 defhost telecaster
134         iface eth0 jump colo
135         iface eth1 jump colo
136 defhost stratocaster
137         iface eth0 jump colo
138         iface eth1 jump colo
139 defhost jazz
140         iface eth0 jump colo
141         iface eth1 jump colo
142
143 ## Other networks.
144 defnet hub virtual
145         forwards housebdry colobdry
146 defnet sgo noloop
147         addr !172.29.198.0/23
148         addr 10.0.0.0/8
149         addr 172.16.0.0/12
150         addr 192.168.0.0/16
151         forwards househub colohub
152 defnet vpn safe
153         addr 172.29.199.128/27 2001:ba8:1d9:6000::/64
154         forwards househub colohub
155         host crybaby 1
156         host terror 2
157 defnet anycast trusted
158         addr 172.29.199.224/27 2001:ba8:1d9:0::/64
159         forwards dmz unsafe safe untrusted jump colo vpn
160 defnet default untrusted
161         addr 62.49.204.144/28 2001:470:1f09:1b98::/64
162         addr 212.13.198.64/28 2001:ba8:0:1d9::/64
163         addr 2001:ba8:1d9::/48 #temporary
164         forwards dmz unsafe untrusted jump colo
165
166 m4_divert(80)m4_dnl
167 ###--------------------------------------------------------------------------
168 ### Special forwarding exemptions.
169
170 case $forward in
171   1)
172
173     ## Only allow these packets if they're not fragmented.  (Don't trust safe
174     ## hosts's fragment reassembly to be robust against malicious fragments.)
175     ## There's a hideous bug in iptables 1.4.11.1 which botches the meaning
176     ## of `! -f', so we do the negation using early return from a subchain.
177     clearchain fwd-spec-nofrag
178     run iptables -A fwd-spec-nofrag -j RETURN --fragment
179     run ip6tables -A fwd-spec-nofrag -j RETURN \
180             -m ipv6header --soft --header frag
181     run ip46tables -A FORWARD -j fwd-spec-nofrag
182
183     ## Allow ping from safe/noloop to untrusted networks.
184     run iptables -A fwd-spec-nofrag -j ACCEPT \
185             -p icmp --icmp-type echo-request \
186             -m mark --mark $to_untrusted/$MASK_TO
187     run iptables -A fwd-spec-nofrag -j ACCEPT \
188             -p icmp --icmp-type echo-reply \
189             -m mark --mark $from_untrusted/$MASK_FROM \
190             -m state --state ESTABLISHED
191     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
192             -p icmpv6 --icmpv6-type echo-request \
193             -m mark --mark $to_untrusted/$MASK_TO
194     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
195             -p icmpv6 --icmpv6-type echo-reply \
196             -m mark --mark $from_untrusted/$MASK_FROM \
197             -m state --state ESTABLISHED
198
199     ## Allow SSH from safe/noloop to untrusted networks.
200     run iptables -A fwd-spec-nofrag -j ACCEPT \
201             -p tcp --destination-port $port_ssh \
202             -m mark --mark $to_untrusted/$MASK_TO
203     run iptables -A fwd-spec-nofrag -j ACCEPT \
204             -p tcp --source-port $port_ssh \
205             -m mark --mark $from_untrusted/$MASK_FROM \
206             -m state --state ESTABLISHED
207     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
208             -p tcp --destination-port $port_ssh \
209             -m mark --mark $to_untrusted/$MASK_TO
210     run ip6tables -A fwd-spec-nofrag -j ACCEPT \
211             -p tcp --source-port $port_ssh \
212             -m mark --mark $from_untrusted/$MASK_FROM \
213             -m state --state ESTABLISHED
214
215     ;;
216 esac
217
218 m4_divert(80)m4_dnl
219 ###--------------------------------------------------------------------------
220 ### Kill things we don't understand properly.
221 ###
222 ### I don't like having to do this, but since I don't know how to do proper
223 ### multicast filtering, I'm just going to ban it from being forwarded.
224
225 errorchain poorly-understood REJECT
226
227 ## Ban multicast destination addresses in forwarding.
228 case $forward in
229   1)
230     run iptables -A FORWARD -g poorly-understood \
231             -d 224.0.0.0/4
232     run ip6tables -A FORWARD -g poorly-understood \
233             -d ff::/8
234     ;;
235 esac
236
237 m4_divert(84)m4_dnl
238 ###--------------------------------------------------------------------------
239 ### Locally-bound packet inspection.
240
241 clearchain inbound
242
243 ## Track connections.
244 commonrules inbound
245 conntrack inbound
246
247 ## Allow incoming bootp.  Bootp won't be forwarded, so this is obviously a
248 ## local request.
249 run iptables -A inbound -j ACCEPT \
250         -s 0.0.0.0 -d 255.255.255.255 \
251         -p udp --source-port $port_bootpc --destination-port $port_bootps
252 run iptables -A inbound -j ACCEPT \
253         -s 172.29.198.0/23 \
254         -p udp --source-port $port_bootpc --destination-port $port_bootps
255
256 ## Allow incoming ping.  This is the only ICMP left.
257 run ip46tables -A inbound -j ACCEPT -p icmp
258
259 m4_divert(88)m4_dnl
260 ## Allow unusual things.
261 openports inbound
262
263 ## Inspect inbound packets from untrusted sources.
264 run ip46tables -A inbound -j forbidden
265 run ip46tables -A INPUT -m mark --mark $from_untrusted/$MASK_FROM -g inbound
266
267 ## Otherwise process as indicated by the mark.
268 for i in $inchains; do
269   run ip46tables -A $i -m mark ! --mark 0/$MASK_MASK -j ACCEPT
270 done
271
272 m4_divert(-1)
273 ###----- That's all, folks --------------------------------------------------