"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2023-12-29 Fri 14:26 -->
+<!-- 2023-12-30 Sat 14:12 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>A Small Institute</title>
members off campus.
</p>
-<pre class="example" id="orgb84bde2">
+<pre class="example" id="orgee983ec">
=
_|||_
=-The-Institute-=
| |
============== Gate ================================================
| Private
- +----Ethernet switch
+ +----(Ethernet switch)
|
+----Core
+----Servers (NAS, DVR, etc.)
<div class="org-src-container">
<a href="public/vars.yml"><q>public/vars.yml</q></a><pre class="src src-conf">---
domain_name: small.example.org
-domain_priv: small.private
</pre>
</div>
<p>
-The private version of the institute's domain name should end with one
-of the top-level domains expected for this purpose: <code>.intranet</code>,
-<code>.internal</code>, <code>.private</code>, <code>.corp</code>, <code>.home</code> or <code>.lan</code>.<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>
+The institute's private domain is treated as sensitive information,
+and so is "tangled" into the example file <a href="private/vars.yml"><q>private/vars.yml</q></a> rather
+than <a href="public/vars.yml"><q>public/vars.yml</q></a>. The example file is used for testing, and
+serves as the template for an actual, private, <q>private/var.yml</q> file
+that customizes this Ansible code for an actual, private, small
+institute.
+</p>
+
+<p>
+The institute's private domain name should end with one of the
+top-level domains set aside for this purpose: <code>.intranet</code>,
+<code>.internal</code>, <code>.private</code>, <code>.corp</code>, <code>.home</code> or <code>.lan</code>.<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> It is
+hoped that doing so will increase that chances that some abomination
+like DNS-over-HTTPS will pass us by.
</p>
+
+<div class="org-src-container">
+<a href="private/vars.yml"><q>private/vars.yml</q></a><pre class="src src-conf">---
+domain_priv: small.private
+</pre>
+</div>
</div>
</div>
<div id="outline-container-orgda60362" class="outline-3">
</pre>
</div>
-<div class="TEXT" id="org0021adc">
+<div class="TEXT" id="orgb3b7bab">
<p>
=> 10.62.17.0/24
</p>
<p>
The four private networks are named and given example CIDRs in the
code block below. The small institute treats these addresses as
-sensitive information so the code block below "tangles" into
+sensitive information so again the code block below "tangles" into
<a href="private/vars.yml"><q>private/vars.yml</q></a> rather than <a href="public/vars.yml"><q>public/vars.yml</q></a>. Two of the
addresses are in <code>192.168</code> subnets because they are part of a test
configuration using mostly-default VirtualBoxes (described <a href="#org74b454f">here</a>).
</p>
<div class="org-src-container">
-<a href="private/vars.yml"><q>private/vars.yml</q></a><pre class="src src-conf">---
+<a href="private/vars.yml"><q>private/vars.yml</q></a><pre class="src src-conf">
private_net_cidr: 192.168.56.0/24
public_vpn_net_cidr: 10.177.86.0/24
campus_vpn_net_cidr: 10.84.138.0/24
campground Wi-Fi access point, etc.</li>
</ol>
-<pre class="example" id="org16dbe19">
+<pre class="example" id="org1547ba5">
=============== | ==================================================
| Premises
(Campus ISP)
following topology.
</p>
-<pre class="example" id="orga5f2d99">
+<pre class="example" id="org547d050">
=============== | ==================================================
| Premises
(House ISP)
certificates signed by the institute CA.
</p>
</div>
-<div id="outline-container-org9d81c0f" class="outline-3">
-<h3 id="org9d81c0f"><span class="section-number-3">6.1.</span> Include Particulars</h3>
+<div id="outline-container-org0b6eaeb" class="outline-3">
+<h3 id="org0b6eaeb"><span class="section-number-3">6.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-6-1">
<p>
The <code>front</code> role's tasks contain references to several common
</div>
</div>
</div>
-<div id="outline-container-orgcc676de" class="outline-3">
-<h3 id="orgcc676de"><span class="section-number-3">6.2.</span> Configure Hostname</h3>
+<div id="outline-container-org53f705c" class="outline-3">
+<h3 id="org53f705c"><span class="section-number-3">6.2.</span> Configure Hostname</h3>
<div class="outline-text-3" id="text-6-2">
<p>
This task ensures that Front's <q>/etc/hostname</q> and <q>/etc/mailname</q> are
</div>
</div>
</div>
-<div id="outline-container-orga3a919f" class="outline-3">
-<h3 id="orga3a919f"><span class="section-number-3">6.4.</span> Add Administrator to System Groups</h3>
+<div id="outline-container-org0432f89" class="outline-3">
+<h3 id="org0432f89"><span class="section-number-3">6.4.</span> Add Administrator to System Groups</h3>
<div class="outline-text-3" id="text-6-4">
<p>
The administrator often needs to read (directories of) log files owned
</div>
</div>
</div>
-<div id="outline-container-org718cfbd" class="outline-3">
-<h3 id="org718cfbd"><span class="section-number-3">6.6.</span> Configure Monkey</h3>
+<div id="outline-container-org41d0afc" class="outline-3">
+<h3 id="org41d0afc"><span class="section-number-3">6.6.</span> Configure Monkey</h3>
<div class="outline-text-3" id="text-6-6">
<p>
The small institute runs cron jobs and web scripts that generate
</div>
</div>
</div>
-<div id="outline-container-orgb504c59" class="outline-3">
-<h3 id="orgb504c59"><span class="section-number-3">6.8.</span> Install Unattended Upgrades</h3>
+<div id="outline-container-org98f9cd5" class="outline-3">
+<h3 id="org98f9cd5"><span class="section-number-3">6.8.</span> Install Unattended Upgrades</h3>
<div class="outline-text-3" id="text-6-8">
<p>
The institute prefers to install security updates as soon as possible.
</div>
</div>
</div>
-<div id="outline-container-org55ba8e2" class="outline-3">
-<h3 id="org55ba8e2"><span class="section-number-3">6.9.</span> Configure User Accounts</h3>
+<div id="outline-container-orged63f05" class="outline-3">
+<h3 id="orged63f05"><span class="section-number-3">6.9.</span> Configure User Accounts</h3>
<div class="outline-text-3" id="text-6-9">
<p>
User accounts are created immediately so that Postfix and Dovecot can
</div>
</div>
</div>
-<div id="outline-container-orgfab713c" class="outline-3">
-<h3 id="orgfab713c"><span class="section-number-3">6.10.</span> Trust Institute Certificate Authority</h3>
+<div id="outline-container-orge3e0d1d" class="outline-3">
+<h3 id="orge3e0d1d"><span class="section-number-3">6.10.</span> Trust Institute Certificate Authority</h3>
<div class="outline-text-3" id="text-6-10">
<p>
Front should recognize the institute's Certificate Authority as
</div>
</div>
</div>
-<div id="outline-container-org203c172" class="outline-3">
-<h3 id="org203c172"><span class="section-number-3">6.11.</span> Install Server Certificate</h3>
+<div id="outline-container-orgd63b568" class="outline-3">
+<h3 id="orgd63b568"><span class="section-number-3">6.11.</span> Install Server Certificate</h3>
<div class="outline-text-3" id="text-6-11">
<p>
The servers on Front use the same certificate (and key) to
</div>
</div>
</div>
-<div id="outline-container-org49d8726" class="outline-3">
-<h3 id="org49d8726"><span class="section-number-3">6.14.</span> Configure Dovecot IMAPd</h3>
+<div id="outline-container-orgeaf598f" class="outline-3">
+<h3 id="orgeaf598f"><span class="section-number-3">6.14.</span> Configure Dovecot IMAPd</h3>
<div class="outline-text-3" id="text-6-14">
<p>
Front uses Dovecot's IMAPd to allow user Fetchmail jobs on Core to
</div>
</div>
</div>
-<div id="outline-container-org760a95a" class="outline-3">
-<h3 id="org760a95a"><span class="section-number-3">6.16.</span> Configure OpenVPN</h3>
+<div id="outline-container-orgb68db3f" class="outline-3">
+<h3 id="orgb68db3f"><span class="section-number-3">6.16.</span> Configure OpenVPN</h3>
<div class="outline-text-3" id="text-6-16">
<p>
Front uses OpenVPN to provide the institute's public VPN service. The
account. (For details, see <a href="#org8d60b7b">The Core Machine</a>.)
</p>
</div>
-<div id="outline-container-org2f3c047" class="outline-3">
-<h3 id="org2f3c047"><span class="section-number-3">7.1.</span> Include Particulars</h3>
+<div id="outline-container-org271236c" class="outline-3">
+<h3 id="org271236c"><span class="section-number-3">7.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-7-1">
<p>
The first task, as in <a href="#org9240129">The Front Role</a>, is to include the institute
</div>
</div>
</div>
-<div id="outline-container-orgef1bdc1" class="outline-3">
-<h3 id="orgef1bdc1"><span class="section-number-3">7.2.</span> Configure Hostname</h3>
+<div id="outline-container-org6602011" class="outline-3">
+<h3 id="org6602011"><span class="section-number-3">7.2.</span> Configure Hostname</h3>
<div class="outline-text-3" id="text-7-2">
<p>
This task ensures that Core's <q>/etc/hostname</q> and <q>/etc/mailname</q> are
</div>
</div>
</div>
-<div id="outline-container-orge776843" class="outline-3">
-<h3 id="orge776843"><span class="section-number-3">7.3.</span> Enable Systemd Resolved</h3>
+<div id="outline-container-org7dcd4cf" class="outline-3">
+<h3 id="org7dcd4cf"><span class="section-number-3">7.3.</span> Enable Systemd Resolved</h3>
<div class="outline-text-3" id="text-7-3">
<p>
Core starts the <code>systemd-networkd</code> and <code>systemd-resolved</code> service
</div>
</div>
</div>
-<div id="outline-container-org85c46f2" class="outline-3">
-<h3 id="org85c46f2"><span class="section-number-3">7.4.</span> Configure Systemd Resolved</h3>
+<div id="outline-container-org1951472" class="outline-3">
+<h3 id="org1951472"><span class="section-number-3">7.4.</span> Configure Systemd Resolved</h3>
<div class="outline-text-3" id="text-7-4">
<p>
Core runs the campus name server, so Resolved is configured to use it
</div>
</div>
</div>
-<div id="outline-container-orgd3224ac" class="outline-3">
-<h3 id="orgd3224ac"><span class="section-number-3">7.8.</span> Add Administrator to System Groups</h3>
+<div id="outline-container-org642538c" class="outline-3">
+<h3 id="org642538c"><span class="section-number-3">7.8.</span> Add Administrator to System Groups</h3>
<div class="outline-text-3" id="text-7-8">
<p>
The administrator often needs to read (directories of) log files owned
</div>
</div>
</div>
-<div id="outline-container-org41d0afc" class="outline-3">
-<h3 id="org41d0afc"><span class="section-number-3">7.9.</span> Configure Monkey</h3>
+<div id="outline-container-orgcd7d36c" class="outline-3">
+<h3 id="orgcd7d36c"><span class="section-number-3">7.9.</span> Configure Monkey</h3>
<div class="outline-text-3" id="text-7-9">
<p>
The small institute runs cron jobs and web scripts that generate
</div>
</div>
</div>
-<div id="outline-container-orged63f05" class="outline-3">
-<h3 id="orged63f05"><span class="section-number-3">7.12.</span> Configure User Accounts</h3>
+<div id="outline-container-orge46b03e" class="outline-3">
+<h3 id="orge46b03e"><span class="section-number-3">7.12.</span> Configure User Accounts</h3>
<div class="outline-text-3" id="text-7-12">
<p>
User accounts are created immediately so that backups can begin
</div>
</div>
</div>
-<div id="outline-container-org7a2d68e" class="outline-3">
-<h3 id="org7a2d68e"><span class="section-number-3">7.13.</span> Trust Institute Certificate Authority</h3>
+<div id="outline-container-orgee4deb9" class="outline-3">
+<h3 id="orgee4deb9"><span class="section-number-3">7.13.</span> Trust Institute Certificate Authority</h3>
<div class="outline-text-3" id="text-7-13">
<p>
Core should recognize the institute's Certificate Authority as
</div>
</div>
</div>
-<div id="outline-container-org3f537e9" class="outline-3">
-<h3 id="org3f537e9"><span class="section-number-3">7.14.</span> Install Server Certificate</h3>
+<div id="outline-container-orgcb67daf" class="outline-3">
+<h3 id="orgcb67daf"><span class="section-number-3">7.14.</span> Install Server Certificate</h3>
<div class="outline-text-3" id="text-7-14">
<p>
The servers on Core use the same certificate (and key) to authenticate
</div>
</div>
</div>
-<div id="outline-container-orgeaf598f" class="outline-3">
-<h3 id="orgeaf598f"><span class="section-number-3">7.18.</span> Configure Dovecot IMAPd</h3>
+<div id="outline-container-org0bf70c2" class="outline-3">
+<h3 id="org0bf70c2"><span class="section-number-3">7.18.</span> Configure Dovecot IMAPd</h3>
<div class="outline-text-3" id="text-7-18">
<p>
Core uses Dovecot's IMAPd to store and serve member emails. As on
configurations, etc.
</p>
</div>
-<div id="outline-container-orgc5bdd96" class="outline-3">
-<h3 id="orgc5bdd96"><span class="section-number-3">8.1.</span> Include Particulars</h3>
+<div id="outline-container-org87223bf" class="outline-3">
+<h3 id="org87223bf"><span class="section-number-3">8.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-8-1">
<p>
The following should be familiar boilerplate by now.
</div>
</div>
</div>
-<div id="outline-container-orgd63b568" class="outline-3">
-<h3 id="orgd63b568"><span class="section-number-3">8.6.</span> Install Server Certificate</h3>
+<div id="outline-container-orge1c2554" class="outline-3">
+<h3 id="orge1c2554"><span class="section-number-3">8.6.</span> Install Server Certificate</h3>
<div class="outline-text-3" id="text-8-6">
<p>
The (OpenVPN) server on Gate uses an institute certificate (and key)
</div>
</div>
</div>
-<div id="outline-container-orgb68db3f" class="outline-3">
-<h3 id="orgb68db3f"><span class="section-number-3">8.7.</span> Configure OpenVPN</h3>
+<div id="outline-container-orge8ed770" class="outline-3">
+<h3 id="orge8ed770"><span class="section-number-3">8.7.</span> Configure OpenVPN</h3>
<div class="outline-text-3" id="text-8-7">
<p>
Gate uses OpenVPN to provide the institute's campus VPN service. Its
configured manually.
</p>
</div>
-<div id="outline-container-org0b6eaeb" class="outline-3">
-<h3 id="org0b6eaeb"><span class="section-number-3">9.1.</span> Include Particulars</h3>
+<div id="outline-container-orga19a7f7" class="outline-3">
+<h3 id="orga19a7f7"><span class="section-number-3">9.1.</span> Include Particulars</h3>
<div class="outline-text-3" id="text-9-1">
<p>
The following should be familiar boilerplate by now.
</div>
</div>
</div>
-<div id="outline-container-org53f705c" class="outline-3">
-<h3 id="org53f705c"><span class="section-number-3">9.2.</span> Configure Hostname</h3>
+<div id="outline-container-org17efad4" class="outline-3">
+<h3 id="org17efad4"><span class="section-number-3">9.2.</span> Configure Hostname</h3>
<div class="outline-text-3" id="text-9-2">
<p>
Clients should be using the expected host name.
</div>
</div>
</div>
-<div id="outline-container-org7dcd4cf" class="outline-3">
-<h3 id="org7dcd4cf"><span class="section-number-3">9.3.</span> Enable Systemd Resolved</h3>
+<div id="outline-container-org3d1f119" class="outline-3">
+<h3 id="org3d1f119"><span class="section-number-3">9.3.</span> Enable Systemd Resolved</h3>
<div class="outline-text-3" id="text-9-3">
<p>
Campus machines start the <code>systemd-networkd</code> and <code>systemd-resolved</code>
</div>
</div>
</div>
-<div id="outline-container-org1951472" class="outline-3">
-<h3 id="org1951472"><span class="section-number-3">9.4.</span> Configure Systemd Resolved</h3>
+<div id="outline-container-org0612ed1" class="outline-3">
+<h3 id="org0612ed1"><span class="section-number-3">9.4.</span> Configure Systemd Resolved</h3>
<div class="outline-text-3" id="text-9-4">
<p>
Campus machines use the campus name server on Core (or <code>dns.google</code>),
</div>
</div>
</div>
-<div id="outline-container-org0432f89" class="outline-3">
-<h3 id="org0432f89"><span class="section-number-3">9.6.</span> Add Administrator to System Groups</h3>
+<div id="outline-container-orgd9de325" class="outline-3">
+<h3 id="orgd9de325"><span class="section-number-3">9.6.</span> Add Administrator to System Groups</h3>
<div class="outline-text-3" id="text-9-6">
<p>
The administrator often needs to read (directories of) log files owned
</div>
</div>
</div>
-<div id="outline-container-orge3e0d1d" class="outline-3">
-<h3 id="orge3e0d1d"><span class="section-number-3">9.7.</span> Trust Institute Certificate Authority</h3>
+<div id="outline-container-org24c5c7d" class="outline-3">
+<h3 id="org24c5c7d"><span class="section-number-3">9.7.</span> Trust Institute Certificate Authority</h3>
<div class="outline-text-3" id="text-9-7">
<p>
Campus hosts should recognize the institute's Certificate Authority as
</div>
</div>
</div>
-<div id="outline-container-org98f9cd5" class="outline-3">
-<h3 id="org98f9cd5"><span class="section-number-3">9.8.</span> Install Unattended Upgrades</h3>
+<div id="outline-container-org6e09cb9" class="outline-3">
+<h3 id="org6e09cb9"><span class="section-number-3">9.8.</span> Install Unattended Upgrades</h3>
<div class="outline-text-3" id="text-9-8">
<p>
The institute prefers to install security updates as soon as possible.
The current network monitoring is rudimentary. It could use some
love, like intrusion detection via Snort or similar. Services on
Front are not monitored except that the <q>webupdate</q> script should be
-emailing <code>sysadm</code> whenever it cannot update Front.
+emailing <code>sysadm</code> whenever it cannot update Front (every 15 minutes!).
</p>
<p>
Pro-active monitoring might include notifying <code>root</code> of any vandalism
corrected by Monkey's quarter-hourly web update. This is a
-non-trivial task that must ignore intentional changes and save suspect
-changes.
+non-trivial task that must ignore intentional changes.
</p>
<p>
-Monkey's <code>cron</code> jobs on Core should presumably become <code>systemd.timer</code>
-and <code>.service</code> units.
+Monkey's <code>cron</code> jobs on Core should be <code>systemd.timer</code> and <code>.service</code>
+units.
</p>
<p>
<p>
The <code>./inst client android dick-phone dick</code> command generates <q>.ovpn</q>
files that require the member to remember to check the "Use this
-connection only for resources on its network" box in the IPv4 tab of
-the Add VPN dialog. The <code>./inst client</code> command should include a
-setting in the Debian <q>.ovpn</q> files that NetworkManager will recognize
-as the desired setting.
+connection only for resources on its network" box in the IPv4 (and
+IPv6) tab(s) of the Add VPN dialog. The command should include an
+OpenVPN setting that the NetworkManager file importer recognizes as
+the desired setting.
</p>
<p>
The VPN service is overly complex. The OpenVPN 2.4.7 clients allow
multiple server addresses, but the <code>openvpn(8)</code> manual page suggests
-per connection parameters are a restricted set that does <i>not</i> include
-the essential <code>verify-x509-name</code>. Use the same name on separate
-certificates for Gate and Front? Use the same certificate and key on
-Gate and Front?
+per connection parameters are restricted to a set that does <i>not</i>
+include the essential <code>verify-x509-name</code>. Use the same name on
+separate certificates for Gate and Front? Use the same certificate
+and key on Gate and Front?
</p>
<p>
</div></div>
<div id="postamble" class="status">
<p class="author">Author: Matt Birkholz</p>
-<p class="date">Created: 2023-12-29 Fri 14:26</p>
+<p class="date">Created: 2023-12-30 Sat 14:12</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>