chiark / gitweb /
Mark Wooding [Tue, 8 Jan 2013 16:07:22 +0000 (16:07 +0000)]
bookends.m4: Better check for bridging.
Mark Wooding [Sat, 29 Dec 2012 01:35:52 +0000 (01:35 +0000)]
stratocaster.m4: Provide rsync service.
Mark Wooding [Fri, 28 Dec 2012 17:59:33 +0000 (17:59 +0000)]
{roadstar,jem,telecaster,stratocaster}.m4: Move Git to login servers.
This avoids lots of annoying messing about with NFS. Maybe when
wheezy is released I'll move these back.
Mark Wooding [Fri, 28 Dec 2012 17:55:00 +0000 (17:55 +0000)]
artist.m4: Moved the `rawk' server to artist.
Maybe for the second time.
Mark Wooding [Sat, 15 Dec 2012 18:52:57 +0000 (18:52 +0000)]
jazz.m4, local.m4: Make jazz be a TrIPE endpoint.
It's running the IP-over-DNS endpoint, and life becomes very tricky if
it's not also the VPN endpoint. There's knock-on stuff: jazz becomes
a router, and VPN traffic can flow over the colo and jump nets.
Mark Wooding [Fri, 14 Dec 2012 17:57:34 +0000 (17:57 +0000)]
numbers.m4: Add port number for IRC.
Not that it's used anywhere yet.
Mark Wooding [Thu, 13 Dec 2012 10:06:24 +0000 (10:06 +0000)]
Makefile: If the user overrides HOSTS, don't install locally anyway.
Mark Wooding [Thu, 13 Dec 2012 10:02:28 +0000 (10:02 +0000)]
local.m4: Add a prose commentary on address allocation.
The IPv4 allocation is summarized in the DNS zone repository; the IPv6
allocation wasn't described anywhere at all.
Mark Wooding [Tue, 11 Dec 2012 10:23:42 +0000 (10:23 +0000)]
functions.m4: Correctly clear `to' network field in packet mark.
I thibk this worked before anyway, but it's good to fix it properly.
Mark Wooding [Tue, 11 Dec 2012 09:43:34 +0000 (09:43 +0000)]
classify.m4: Dispatch on destination addresses to correct chains.
Mark Wooding [Tue, 11 Dec 2012 09:33:49 +0000 (09:33 +0000)]
classify.m4: Classify individual host routes correctly.
For some reason, were just using whatever value of `$class' was left
lying around. Not very clever, really.
Mark Wooding [Tue, 11 Dec 2012 09:30:15 +0000 (09:30 +0000)]
classify.m4: Clean up interface map tracing.
Remove duplicate dump of the interface, and only dump the list of known
networks once at the very end.
Mark Wooding [Tue, 11 Dec 2012 09:43:15 +0000 (09:43 +0000)]
functions.m4: Fix up commentary for `matchnets'.
Mark Wooding [Tue, 11 Dec 2012 09:32:36 +0000 (09:32 +0000)]
local.m4, jazz.m4: Move iodine endpoint to jazz.
Mark Wooding [Tue, 11 Dec 2012 09:33:04 +0000 (09:33 +0000)]
numbers.m4, vampire.m4: Expose print server to local untrusted hosts.
Let's hope they don't use up all of my paper.
Mark Wooding [Sun, 14 Oct 2012 19:41:58 +0000 (20:41 +0100)]
radius.m4: Allow external servers to contact the identd.
Otherwise all requests for NATted connections will fail.
Mark Wooding [Sun, 14 Oct 2012 16:25:25 +0000 (17:25 +0100)]
local.m4, radius.m4: radius is now the host gateway to the net.
The MTU is low because the PPPoE<->PPPoA modem uses 8 bytes from the
ethernet frame size limit, and Demon has a tendency to be useless
about breaking path-MTU discovery; so apply TCP MSS clamping.
Mark Wooding [Wed, 12 Sep 2012 08:51:59 +0000 (09:51 +0100)]
local.m4: artist should expect untrusted source addrs on dmz and unsafe.
An untrusted device, not on the VPN, will be routed to artist through
radius.
Mark Wooding [Wed, 12 Sep 2012 08:51:05 +0000 (09:51 +0100)]
local.m4: Track VLAN renumbering in vampire's interface names.
Mark Wooding [Fri, 8 Jun 2012 00:51:05 +0000 (01:51 +0100)]
Rate limiting for incoming DNS queries over UDP.
We provide DNSsec-signed responses, and could be used as a DDoS
amplifier. Apply rate-limiting to incoming traffic to mitigate this
effect.
This should be removed if and when BIND acquires its own more
intelligent rate-limiting.
Mark Wooding [Fri, 8 Jun 2012 00:28:45 +0000 (01:28 +0100)]
radius.m4: Handy ipset hook for ad-hoc safe/unstrusted exceptions.
Mark Wooding [Fri, 8 Jun 2012 00:27:39 +0000 (01:27 +0100)]
local.m4: Refactor common SSH permission between safe/untrusted hosts.
Actually the same rules work for IPv4 and IPv6, so we should only write
them once.
Mark Wooding [Thu, 3 May 2012 11:45:39 +0000 (12:45 +0100)]
local.m4: Packets can be routed over the safe network.
Mark Wooding [Wed, 25 Apr 2012 17:07:48 +0000 (18:07 +0100)]
local.m4: Add the colocated servers to the VPN.
Mark Wooding [Mon, 23 Apr 2012 00:20:28 +0000 (01:20 +0100)]
local.m4: Untrusted source addresses appear on the backbone.
This happens because of router redundancy. Case in point: suppose
vampire is selected via IPv6 router discovery, but radius owns the
external tunnel. Then vampire will forward the packet over the
backbone to radius, which mustn't reject it.
(This isn't a security problem because the untrusted network isn't (by
definition) trusted very much for anything.
Mark Wooding [Mon, 23 Apr 2012 00:20:10 +0000 (01:20 +0100)]
bookends.m4: Allow redirects to (non-routing) hosts.
Mark Wooding [Fri, 20 Apr 2012 20:57:24 +0000 (21:57 +0100)]
Configuration for new colocated virtual servers.
Mark Wooding [Fri, 20 Apr 2012 20:55:48 +0000 (21:55 +0100)]
local.m4: More interfaces for artist.
Firstly, artist needs an interface on the untrusted network so that it
can provide convincing SMB. Secondly, it will eventually provide the
iodine gateway, and will need to forward packets appropriately.
Mark Wooding [Fri, 20 Apr 2012 20:54:22 +0000 (21:54 +0100)]
local.m4: Default addresses reach the IPv6 tunnel interface.
Mark Wooding [Fri, 20 Apr 2012 20:53:33 +0000 (21:53 +0100)]
jem.m4, artist.m4: Allow answers to DNS queries.
Mark Wooding [Fri, 20 Apr 2012 20:44:14 +0000 (21:44 +0100)]
radius.m4: Load NAT helpers (from
d119795).
Mark Wooding [Thu, 15 Mar 2012 02:48:33 +0000 (02:48 +0000)]
bookends.m4: Configure IPv6 router advertisement stuff.
Servers are expected to listen in on the routing protocols, so even
though they aren't actually routers, they still shouldn't listen to
the advertisements.
Mark Wooding [Thu, 15 Mar 2012 02:47:52 +0000 (02:47 +0000)]
functions.m4, local.m4: Introduce more kinds of hosts.
Mark Wooding [Thu, 15 Mar 2012 02:39:08 +0000 (02:39 +0000)]
functions.m4: Actually set the IPv6 options.
Mark Wooding [Fri, 30 Mar 2012 16:30:42 +0000 (17:30 +0100)]
fender.m4: Define an address to be a guaranteed black hole.
Mark Wooding [Fri, 23 Mar 2012 16:04:22 +0000 (16:04 +0000)]
local.m4: A new network for the SGO VPN.
Mark Wooding [Fri, 23 Mar 2012 16:02:25 +0000 (16:02 +0000)]
functions.m4, classify.m4: Handle negative address ranges.
That is, a network can explicitly exclude an address range. Ranges are
checked in order, so you carve out a hole in the middle of a range by
putting a negative range first for the hole first, and the big network
afterwards.
This involves a fairly major rearrangement of the address classification
machinery. Again.
Mark Wooding [Fri, 23 Mar 2012 16:00:52 +0000 (16:00 +0000)]
Make FW_NOACT work properly.
Some calls to iptables(8) and friends weren't through `run', so fix
these. Also skip the initial flushing. We probably want to skip the
final dump, but don't do that yet.
Mark Wooding [Sat, 17 Mar 2012 16:02:59 +0000 (16:02 +0000)]
local.m4: Declare network for anycast services.
Mark Wooding [Sat, 17 Mar 2012 16:02:35 +0000 (16:02 +0000)]
local.m4: Reorder forwarding networks for `default'.
Makes it easier to read.
Mark Wooding [Sat, 17 Mar 2012 16:02:03 +0000 (16:02 +0000)]
local.m4: Move `vpn' to the common networks section.
It's not really geographical.
Mark Wooding [Sun, 11 Mar 2012 23:58:09 +0000 (23:58 +0000)]
Overhaul address classification for link-local and non-unicast addresses.
The previous attempts just weren't working. Intead, assign them their
own classes, and work things using the forwarding masks. There's a
minor wrinkle, that we must handle forwarded packets differently from
inbound ones if they involve link-local addresses, but this is handled
with a fixup in the mangle INPUT chain.
The other significant change here is that the mangle table is now
responsible for selecting packets with bogus destination addresses for
rejection -- though it can't do the rejection itself because of a
kernel restriction.
Mark Wooding [Mon, 12 Mar 2012 00:02:05 +0000 (00:02 +0000)]
functions.m4: Publish the per-class forwarding bitmasks.
Just a matter of renaming the variables which hold them.
Mark Wooding [Sun, 11 Mar 2012 19:51:57 +0000 (19:51 +0000)]
functions.m4: The mark-{from,to}-* rules no longer own the packet marks.
These rules now have to be more careful about exactly which parts of
the mark field they clobber.
Mark Wooding [Sun, 11 Mar 2012 16:35:37 +0000 (16:35 +0000)]
classify.m4: Use canonical forms for IPv6 addresses.
Mark Wooding [Sun, 11 Mar 2012 16:34:38 +0000 (16:34 +0000)]
local.m4: Actually use the IPv6 fragmentation forbidding filter.
Mark Wooding [Sun, 11 Mar 2012 16:33:25 +0000 (16:33 +0000)]
Extend proper ICMP handling to IPv6.
Take the opportunity to use the `icmpv6' protocol name throughout.
Fortunately, in a few places where we use `ip46tables', it's actually
possible to use plain `-p icmp'.
Mark Wooding [Sun, 11 Mar 2012 16:30:08 +0000 (16:30 +0000)]
bookends.m4: Optimize checking for forwarding IPv6 link-local multicast.
Apply a coarse filter to detect all multicast, and dispatch to a
finer-grained one to detect link-local multicast addresses. This
would be much easier if the flags and scope fields were the other way
around.
Also fix it to use the correct address range.
Mark Wooding [Sun, 11 Mar 2012 16:19:17 +0000 (16:19 +0000)]
vampire.m4: Extend services to untrusted hosts over IPv6.
Mark Wooding [Sun, 11 Mar 2012 16:18:12 +0000 (16:18 +0000)]
Introduce variable for expected input chains.
Saves lots of messing with $forward.
Mark Wooding [Sun, 11 Mar 2012 05:12:37 +0000 (05:12 +0000)]
local.m4: Fix the `safe' network prefix length.
Mark Wooding [Sun, 11 Mar 2012 05:10:12 +0000 (05:10 +0000)]
local.m4: Define the IPv6 network structure.
Mark Wooding [Sun, 11 Mar 2012 05:09:34 +0000 (05:09 +0000)]
local.m4: Add routes to/from the `safe' network.
Mark Wooding [Sun, 11 Mar 2012 05:05:29 +0000 (05:05 +0000)]
local.m4: The VPN will be available through the colo.
Mark Wooding [Sun, 11 Mar 2012 05:03:21 +0000 (05:03 +0000)]
functions.m4: Correct defaulting of IPv6 host addresses.
Mark Wooding [Thu, 8 Mar 2012 18:56:48 +0000 (18:56 +0000)]
classify.m4: Reject the RFC5737 documentation-only addresses.
Mark Wooding [Wed, 7 Mar 2012 03:06:01 +0000 (03:06 +0000)]
Move per-host filtering to diversion 86 as promised.
For some reason, most of them were on 84, and fender was on 82.
Mark Wooding [Wed, 7 Mar 2012 03:04:00 +0000 (03:04 +0000)]
local.m4: Add `unsafe' to ibanez `br-dmz' interface.
Accidentally omitted from the earlier change.
Mark Wooding [Wed, 7 Mar 2012 02:52:25 +0000 (02:52 +0000)]
functions: Move NTP server list out of line.
Makes the `inbound' chain slightly more efficient in the common case.
Mark Wooding [Tue, 6 Mar 2012 23:26:10 +0000 (23:26 +0000)]
local.m4: Allow dmz/jump packets on unsafe/colo networks and vice versa.
The routing asymmetry is too grim otherwise. Consider:
* ibanez and vampire are both on dmz and unsafe;
* vampire is a router on dmz, unsafe, and vpn, while ibanez is not a
router;
* crybaby is on vpn;
* crybaby attempts to connect to ibanez.dmz.
Now ibanez will respond with its dmz address as the source, and
crybaby's vpn address as the destination. Based on the destination, it
will choose to route the packet over the unsafe network. We must
therefore let vampire know that this is a possibility.
Similarly, ibanez must be prepared to allow packets from unsafe
on its dmz interface because it's not a router: hence, to reach their
destination, they'll have to be pushed over dmz by a router.
It's therefore inevitable that we must abandon separation between these
two networks (or start fiddling with policy routing, which just seems
like more pain than it's worth).
Mark Wooding [Tue, 6 Mar 2012 10:42:58 +0000 (10:42 +0000)]
radius.m4: Forbid traffic directly to the NAT address.
It should only be for forwarded traffic.
Mark Wooding [Tue, 6 Mar 2012 10:41:59 +0000 (10:41 +0000)]
radius.m4: Use the correct interface name for NAT.
This is the last of the network declaration switchover debris.
Mark Wooding [Tue, 6 Mar 2012 10:38:07 +0000 (10:38 +0000)]
local.m4: Fix IGMP acceptance (debris from old interface declarations).
The rules which allowed incoming IGMP were written in terms of (a) the
old $if_... variables which have now disappeared, and (b) an explicit
list of the `trusted' networks. Fix this to use the new system: walk
the list of networks, examine their classes, and determine the
interfaces.
Mark Wooding [Mon, 5 Mar 2012 23:51:44 +0000 (23:51 +0000)]
functions.m4: Write the netclass ids to the trace output.
Mark Wooding [Mon, 5 Mar 2012 23:51:00 +0000 (23:51 +0000)]
bookends.m4: If debugging, dump the final tables.
This makes it rather easier to see what's gone wrong when the update
times out.
Mark Wooding [Mon, 5 Mar 2012 23:39:23 +0000 (23:39 +0000)]
Determine forwarding and reverse-path filtering from host definitions.
There's an explicit declaration for routers. Reverse-path filtering is
just turned off: the routing asymmetries break things too badly on
multi-homed hosts, and it's useless for single-homed hosts.
Mark Wooding [Mon, 5 Mar 2012 23:16:25 +0000 (23:16 +0000)]
Overhaul address classification.
The current system isn't scaling. Adding new networks in particular is
very difficult, and requires subtle changes to all of the host
definitions -- which is also rather tedious.
This new version overhauls the way that the classification chains are
constructed. The important part is that they're now derived from a
single description of the entire network. (This isn't necessary: the
network and hosts could be scattered arbitrarily, but it makes
management easier for me.)
The critical bit is the algorithm in `net_interfaces' which computes
which networks' source addresses can arrive at a particular interface.
This algorithm isn't especially clever (what with being written in
Bourne shell and all) but seems to do the job fairly well, and it has
enough knobs to tweak that getting the right answer isn't too hard.
Mark Wooding [Mon, 5 Mar 2012 23:27:37 +0000 (23:27 +0000)]
local.m4: Promote the NTP server configuration to a proper variable.
Mark Wooding [Mon, 5 Mar 2012 22:35:27 +0000 (22:35 +0000)]
Renumber the diversions.
Move the function definitions together; shift the host interface
definitions near the beginning of the file; and move the local filter
rules later to allow more room for built-in filtering.
Mark Wooding [Mon, 5 Mar 2012 22:34:59 +0000 (22:34 +0000)]
fixup! WIP on emergency:
7a108d1 Makefile: New target for tracking diversions.
Mark Wooding [Mon, 5 Mar 2012 10:40:30 +0000 (10:40 +0000)]
Makefile: New target for tracking diversions.
Mark Wooding [Mon, 5 Mar 2012 09:46:35 +0000 (09:46 +0000)]
Makefile, base.m4: Inject the target hostname into the generated script.
This means we can identify the target in the comment header. It will be
even more useful later.
Mark Wooding [Sun, 12 Feb 2012 01:53:23 +0000 (01:53 +0000)]
numbers.m4, gibson.m4: Allow gibson to receive IPMI responses.
Useful for managing fancy server boxes.
Mark Wooding [Sun, 12 Feb 2012 01:52:29 +0000 (01:52 +0000)]
bookends.m4: Open up tables we clobbered at exit.
Otherwise the `raw' table gets left dropping everything. I've no idea
why this didn't actually break everything for ages.
Mark Wooding [Sat, 11 Feb 2012 19:22:05 +0000 (19:22 +0000)]
fender: New host, with basic firewall.
Eventually fender will live elsewhere and have totally different
routing. For now, though, this will do.
Mark Wooding [Sat, 11 Feb 2012 18:30:05 +0000 (18:30 +0000)]
numbers.m4, vampire.m4: Serve TFTP to the untrusted network.
Refactor the untrusted-services stuff to make this less grim.
Mark Wooding [Sat, 11 Feb 2012 18:26:12 +0000 (18:26 +0000)]
numbers.m4, gibson.m4: Allow gibson public SIP access.
Mark Wooding [Sat, 23 Jul 2011 10:19:59 +0000 (11:19 +0100)]
jem.m4: Add a hook for SAUCE.
Use ipsets rather than SAUCE's defaults.
Mark Wooding [Sat, 23 Jul 2011 11:49:59 +0000 (12:49 +0100)]
functions.m4: New function for arranging that an ipset exists.
Mark Wooding [Sat, 23 Jul 2011 11:45:38 +0000 (12:45 +0100)]
functions.m4: Make clearchain tolerant of existing chains.
It's a handy way to make chains which are populated elsewhere, e.g., by
fail2ban.
Mark Wooding [Sat, 23 Jul 2011 11:44:00 +0000 (12:44 +0100)]
bookends.m4: Much more intelligent initialization.
Rather than clobbering all of the chains, clear them out one at a time,
preserving some which are known to be maintained elsewhere.
Mark Wooding [Sat, 23 Jul 2011 10:19:29 +0000 (11:19 +0100)]
jem.m4: Remove SMB for untrusted hosts.
Leave that as a job for artist.
Mark Wooding [Sat, 23 Jul 2011 10:18:26 +0000 (11:18 +0100)]
functions.m4: Rate-limit rejections on error chains.
This reduces our workload under attack, without severely affecting
diagnostic capability.
Mark Wooding [Sun, 17 Jul 2011 12:43:16 +0000 (13:43 +0100)]
bookends.m4: Provide a hook chain for fail2ban.
Otherwise it does its filtering before we've permitted loopback, and
stuff could get very bad.
Mark Wooding [Fri, 15 Jul 2011 15:41:56 +0000 (16:41 +0100)]
radius.m4: Allow IPv6 tunnel from Hurricane Electric UK endpoint.
Mark Wooding [Fri, 15 Jul 2011 15:41:06 +0000 (16:41 +0100)]
functions.m4, numbers.m4: Define protocol number for IPv6 tunnelling.
Mark Wooding [Fri, 15 Jul 2011 08:44:18 +0000 (09:44 +0100)]
bookend.m4: Finish off the IPv6 chains.
Mark Wooding [Wed, 13 Jul 2011 22:41:33 +0000 (23:41 +0100)]
hosts: Allow incoming ident requests.
Mark Wooding [Sun, 10 Jul 2011 21:03:14 +0000 (22:03 +0100)]
radius.m4: Take over NAT duties.
As the main internal router, radius now takes responsibility for appling
SNAT to outbound connections from internal hosts.
Mark Wooding [Sun, 10 Jul 2011 20:57:12 +0000 (21:57 +0100)]
Major network restructuring.
We now have a globally routable /28. Use this as the DMZ and the
network backbone. The main servers (ibanez, radius, roadstar, jem,
artist and vampire) are on both the DMZ and the unsafe network.
radius is now the main internal router, though vampire is still on
several networks because it provides DHCP and DNS services.
This new configuration makes essential use of the ability (added to
defiface) to accept multiple interface names by setting lists of names
into the interface variables if_FOO.
There's another aspect of the routing complexity which we must address
here: multicasts can arrive on any of several trusted networks, and we
should accept them all. (We must cope with interface name lists in the
interface variables here, and deduplicate.)
Mark Wooding [Sun, 10 Jul 2011 20:53:43 +0000 (21:53 +0100)]
bookends.m4, config.m4: Allow configuration of reverse-path filtering.
We'll need to turn it off in some hosts because there are routing
asymmetries.
Mark Wooding [Sun, 10 Jul 2011 20:49:44 +0000 (21:49 +0100)]
functions.m4: Set IPv6 options in setopt and setdevopt.
Also allow selection of interfaces in setdevopt. We don't need this
yet, but it will allow selective enabling of reverse-path filtering and
similar should that turn out to be useful.
Mark Wooding [Sun, 10 Jul 2011 20:47:27 +0000 (21:47 +0100)]
bookends.m4: Only disable filtering on bridges if we have bridges.
Actually, we're too early in the boot process to tell whether there are
bridges; but we can try to load the applicable module and only do the
hacking if it's available. This probably bloats some kernels a bit, but
it's not too bad.
Mark Wooding [Sun, 10 Jul 2011 20:46:41 +0000 (21:46 +0100)]
bookends.m4: Allow responding to broadcast and multicast ping.
This way, I can see which things are responding to multicasts.
Mark Wooding [Sun, 10 Jul 2011 20:42:38 +0000 (21:42 +0100)]
classify.m4, functions.m4: Multiple interfaces can have default nets.
Following on from the last change: if a net can be reachable through
several interfaces, then logically the default net might be reachable
through several interfaces too. Therefore, we must be able to cope with
this situation.
Mark Wooding [Sun, 10 Jul 2011 20:35:54 +0000 (21:35 +0100)]
functions.m4: Allow multiple interfaces to be defined by defiface.
With the upcoming network reorganization, it will be possible for
particular networks to be routed over several different interfaces. It
will make describing the individual routers easier if we can get
defiface to deal with the commonality.
Mark Wooding [Sun, 10 Jul 2011 20:19:47 +0000 (21:19 +0100)]
functions.m4, local.m4: Workaround for option parser fragmentation bugs.
There are some nasty option parser bugs in iptables 1.4.11.1. Most
obviously, it refuses to accept `! -f' even though it always used to
work. (This is Debian #632695.) Secondly, it sees that ip6tables has
stopped accepting `! --fragfirst'. I'm not sure this is unintentional,
though it's certainly annoying.
Work around both of these problems by introducing additional chains.
That is, we replace
iptables -A chain -j action ! --test
by
iptables -A newchain -j RETURN --test
iptables -A newchain -j action
iptables -A chain -j newchain
which is rather unpleasant, really.
Mark Wooding [Sun, 10 Jul 2011 20:52:07 +0000 (21:52 +0100)]
base.m4: Fix LSB init-script ordering.
We were coming up too early in the boot sequence, and sysctl wasn't
working. Fix this.
Mark Wooding [Sun, 19 Jun 2011 18:01:34 +0000 (19:01 +0100)]
bookends, classify, local: Fixes for IP multicasting.
* Allow reception of multicast packets.
* Ensure that link-local multicasts aren't forwarded. (Though
currently no multicasts are forwarded, this isn't necessarily always
going to be the case).
* Turn /off/ iptables filtering of bridged packets. I'm currently
taking the view that the bridges are a hack introduced because I
can't just plug all of the guests into a physical switch. If I need
to do better filtering, I'll either use ebtables or do something
more complicated later.
Mark Wooding [Sun, 19 Jun 2011 17:53:22 +0000 (18:53 +0100)]
local, vampire, ibanez: Centralize definition of NTP servers.
We now have multiple independent NTP servers, so it makes sense to
have the list of upstream servers in only one place. Make it so.