mu
change
commit 7d1b92a9da42dc18230be71781098fd63755f1e8
author Alpha Chen <alpha@kejadlen.dev>
date
parent dbe8bd5f
diff --git a/lotus-land-story/miniflux.yml b/lotus-land-story/miniflux.yml
index 28030e8..ab73413 100644
--- a/lotus-land-story/miniflux.yml
+++ b/lotus-land-story/miniflux.yml
@@ -53,8 +53,7 @@
 
     - name: Run Miniflux
       community.docker.docker_container:
-        # recreate: true
-        # restart: true
+        restart: true
         name: miniflux
         image: miniflux/miniflux:{{ miniflux.version }}
         env:
@@ -72,4 +71,8 @@
         etc_hosts:
           host.docker.internal: host-gateway
 
+  handlers:
+    - name: Import restarts
+      ansible.builtin.import_tasks: restarts.yml
+
 # vim: ft=yaml.ansible
diff --git a/lotus-land-story/postgres.yml b/lotus-land-story/postgres.yml
index c5b0f58..5a5b56a 100644
--- a/lotus-land-story/postgres.yml
+++ b/lotus-land-story/postgres.yml
@@ -25,6 +25,30 @@
         state: present
       notify: Restart postgres
 
+    - name: Allow access from localhost
+      community.general.ufw:
+        rule: allow
+        port: 5432
+        proto: tcp
+        from_ip: 127.0.0.1
+      notify: Reload ufw
+
+    - name: Allow access from docker
+      notify: Reload ufw
+      block:
+
+        - name: Get docker network
+          community.docker.docker_network:
+            name: lotus_land_story
+          register: docker_network
+        - name: Allow access from docker network
+          community.general.ufw:
+            rule: allow
+            port: 5432
+            proto: tcp
+            from_ip: "{{ docker_network.network.IPAM.Config[0].Subnet }}"
+          notify: Reload ufw
+
   handlers:
     - name: Import restarts
       ansible.builtin.import_tasks: restarts.yml
diff --git a/lotus-land-story/restarts.yml b/lotus-land-story/restarts.yml
index 27b44ff..4ef4e97 100644
--- a/lotus-land-story/restarts.yml
+++ b/lotus-land-story/restarts.yml
@@ -8,4 +8,13 @@
     name: docker
     state: restarted
 
+- name: Reload ufw
+  community.general.ufw:
+    state: reloaded
+
+- name: Restart ssh
+  ansible.builtin.service:
+    name: ssh
+    state: restarted
+
 # vim: ft=yaml.ansible
diff --git a/on-fire-within/main.yml b/on-fire-within/main.yml
index 852c057..e7018fd 100644
--- a/on-fire-within/main.yml
+++ b/on-fire-within/main.yml
@@ -1,9 +1,10 @@
 - import_playbook: pi.yml
+- import_playbook: tailscale.yml
 - import_playbook: hass-io.yml
 - import_playbook: pi-hole.yml
 
+  become: true
 - hosts: on-fire-within
-  become: yes
   vars_files:
     - vars.private
   tasks:
diff --git a/on-fire-within/pi-hole.yml b/on-fire-within/pi-hole.yml
new file mode 100644
index 0000000..df927b4
--- /dev/null
+++ b/on-fire-within/pi-hole.yml
@@ -0,0 +1,66 @@
+- hosts: on-fire-within
+  become: yes
+  vars_files:
+    - vars.private
+  tasks:
+
+    # Workaround for https://github.com/pi-hole/docker-pi-hole/issues/1048
+    # - https://github.com/pi-hole/docker-pi-hole/issues/1042#issuecomment-1086728157
+    # - https://github.com/pi-hole/docker-pi-hole/issues/1043#issuecomment-1086936352
+    - name: Work around a Docker libseccomp issue w/Pi-Hole
+      block:
+        - apt_key:
+            keyserver: keyserver.ubuntu.com
+            id: "{{ item }}"
+          loop:
+            - 0E98404D386FA1D9
+            - 6ED0E7B82643E131
+        - apt_repository:
+            repo: deb http://deb.debian.org/debian buster-backports main
+            filename: buster-backports
+            state: present
+        - shell: apt-cache policy libseccomp2 | grep buster-backports -B1 | head -n1 | sed -e 's/^\s*\**\s*\(\S*\).*/\1/'
+          register: libseccomp2_version
+        - apt:
+            update_cache: yes
+            name: libseccomp2={{ libseccomp2_version.stdout_lines[0] }}
+
+    # https://docs.pi-hole.net/guides/dns/unbound/
+    - name: Set up Pi-hole as recursive DNS server
+      block:
+        - name: Install unbound
+          apt:
+            name: unbound
+        - name: Configure unbound
+          ansible.builtin.copy:
+            src: unbound.conf
+            dest: /etc/unbound/unbound.conf.d/pi-hole.conf
+          notify: Restart unbound
+        - name: Use the same limit for FTL as unbound
+          ansible.builtin.lineinfile:
+            path: /etc/dnsmasq.d/99-edns.conf
+            line: edns-packet-max=1232
+            create: true
+
+        - name: Disable resolvconf.conf entry for unbound
+          block:
+            - name: Disable unbound-resolvconf.service
+              service:
+                name: unbound-resolvconf
+                enabled: false
+            - name: Disable resolvconf_resolvers.conf from being generated
+              ansible.builtin.replace:
+                path: /etc/resolvconf.conf
+                regexp: '^unbound_conf='
+                replace: '#unbound_conf='
+            - name: Remove resolvconf_resolvers.conf
+              ansible.builtin.file:
+                path: /etc/unbound/unbound.conf.d/resolvconf_resolvers.conf
+                state: absent
+          notify: Restart unbound
+
+  handlers:
+    - name: Restart unbound
+      ansible.builtin.service:
+          name: unbound
+          state: restarted
diff --git a/on-fire-within/tailscale.yml b/on-fire-within/tailscale.yml
index 4d74ed5..9e64972 100644
--- a/on-fire-within/tailscale.yml
+++ b/on-fire-within/tailscale.yml
@@ -1,5 +1,6 @@
 # https://tailscale.com/download/linux/rpi
 
+# TODO Conditionalize this on the OS and merge into ../playbooks/tailscale.yml
 - name: Install Tailscale
   hosts: on-fire-within
   become: true
@@ -18,7 +19,7 @@
         state: present
 
     # curl -fsSL https://pkgs.tailscale.com/stable/raspbian/buster.list | sudo tee /etc/apt/sources.list.d/tailscale.list
-    - name: Add Tailsale apt repo
+    - name: Add Tailscale apt repo
       ansible.builtin.apt_repository:
         repo: deb https://pkgs.tailscale.com/stable/raspbian buster main
         state: present
@@ -34,3 +35,33 @@
       ansible.builtin.package:
         name: tailscale
         state: present
+
+- name: Restrict tailscaled logging
+  hosts: on-fire-within
+  become: true
+  tasks:
+
+    - name: Create systemd override dir for tailscaled
+      ansible.builtin.file:
+        path: /etc/systemd/system/tailscaled.service.d
+        state: directory
+        mode: "0644"
+
+    - name: Create systemd override
+      ansible.builtin.copy:
+        content: |
+          [Service]
+          LogLevelMax=notice
+        dest: /etc/systemd/system/tailscaled.service.d/override.conf
+        mode: "0644"
+      notify:
+        - Restart Tailscale
+
+  handlers:
+
+    - name: Restart Tailscale
+      ansible.builtin.systemd:
+        name: tailscaled
+        state: restarted
+        daemon_reload: true
+
diff --git a/on-fire-within/unbound.conf b/on-fire-within/unbound.conf
new file mode 100644
index 0000000..cb2ee53
--- /dev/null
+++ b/on-fire-within/unbound.conf
@@ -0,0 +1,66 @@
+server:
+    # If no logfile is specified, syslog is used
+    # logfile: "/var/log/unbound/unbound.log"
+    verbosity: 1
+
+    interface: 127.0.0.1
+    port: 5335
+    do-ip4: yes
+    do-udp: yes
+    do-tcp: yes
+
+    # May be set to yes if you have IPv6 connectivity
+    do-ip6: no
+
+    # You want to leave this to no unless you have *native* IPv6. With 6to4 and
+    # Terredo tunnels your web browser should favor IPv4 for the same reasons
+    prefer-ip6: no
+
+    # Use this only when you downloaded the list of primary root servers!
+    # If you use the default dns-root-data package, unbound will find it automatically
+    #root-hints: "/var/lib/unbound/root.hints"
+
+    # Trust glue only if it is within the server's authority
+    harden-glue: yes
+
+    # Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
+    harden-dnssec-stripped: yes
+
+    # Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
+    # see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
+    use-caps-for-id: no
+
+    # Reduce EDNS reassembly buffer size.
+    # IP fragmentation is unreliable on the Internet today, and can cause
+    # transmission failures when large DNS messages are sent via UDP. Even
+    # when fragmentation does work, it may not be secure; it is theoretically
+    # possible to spoof parts of a fragmented DNS message, without easy
+    # detection at the receiving end. Recently, there was an excellent study
+    # >>> Defragmenting DNS - Determining the optimal maximum UDP response size for DNS <<<
+    # by Axel Koolhaas, and Tjeerd Slokker (https://indico.dns-oarc.net/event/36/contributions/776/)
+    # in collaboration with NLnet Labs explored DNS using real world data from the
+    # the RIPE Atlas probes and the researchers suggested different values for
+    # IPv4 and IPv6 and in different scenarios. They advise that servers should
+    # be configured to limit DNS messages sent over UDP to a size that will not
+    # trigger fragmentation on typical network links. DNS servers can switch
+    # from UDP to TCP when a DNS response is too big to fit in this limited
+    # buffer size. This value has also been suggested in DNS Flag Day 2020.
+    edns-buffer-size: 1232
+
+    # Perform prefetching of close to expired message cache entries
+    # This only applies to domains that have been frequently queried
+    prefetch: yes
+
+    # One thread should be sufficient, can be increased on beefy machines. In reality for most users running on small networks or on a single machine, it should be unnecessary to seek performance enhancement by increasing num-threads above 1.
+    num-threads: 1
+
+    # Ensure kernel buffer is large enough to not lose messages in traffic spikes
+    so-rcvbuf: 1m
+
+    # Ensure privacy of local IP ranges
+    private-address: 192.168.0.0/16
+    private-address: 169.254.0.0/16
+    private-address: 172.16.0.0/12
+    private-address: 10.0.0.0/8
+    private-address: fd00::/8
+    private-address: fe80::/10
diff --git a/playbooks/tailscale.yml b/playbooks/tailscale.yml
index bf80080..0dfb9b6 100644
--- a/playbooks/tailscale.yml
+++ b/playbooks/tailscale.yml
@@ -9,6 +9,7 @@
       ansible.builtin.get_url:
         url: https://pkgs.tailscale.com/stable/debian/bullseye.noarmor.gpg
         dest: /usr/share/keyrings/tailscale-archive-keyring.gpg
+        mode: "0644"
 
     # curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
     - name: Add Tailscale repository
@@ -27,61 +28,33 @@
         name: tailscale
         state: present
 
-# https://tailscale.com/kb/1077/secure-server-ubuntu-18-04/
-- name: Only allow connections over Tailscale
+- name: Restrict tailscaled logging
   hosts: all
   become: true
   tasks:
 
-    - name: Get Tailscale status
-      ansible.builtin.command: tailscale status --json
-      register: tailscale_status
-      changed_when: false
-
-    - name: Only allow connections over Tailscale
-      when: _tailscale_status.BackendState == "Running"
-      vars:
-        _tailscale_status: "{{ tailscale_status.stdout | from_json }}"
-      block:
-
-        - name: Install ufw
-          ansible.builtin.package:
-            name: ufw
-            state: present
-
-        - name: Allow access over tailscale
-          community.general.ufw:
-            state: enabled
-            rule: allow
-            interface_in: tailscale0
-
-        - name: Restrict incoming traffic
-          community.general.ufw:
-            default: deny
-            direction: "{{ item }}"
-          loop:
-            - incoming
-
-        - name: Allow access to HTTP(S)
-          community.general.ufw:
-            rule: allow
-            port: "{{ item }}"
-            proto: tcp
-          loop:
-            - http
-            - https
-
+    - name: Create systemd override dir for tailscaled
+      ansible.builtin.file:
+        path: /etc/systemd/system/tailscaled.service.d
+        state: directory
+        mode: "0644"
+
+    - name: Create systemd override
+      ansible.builtin.copy:
+        content: |
+          [Service]
+          LogLevelMax=notice
+        dest: /etc/systemd/system/tailscaled.service.d/override.conf
+        mode: "0644"
       notify:
-        - Reload ufw
-        - Restart ssh
+        - Restart Tailscale
 
   handlers:
-    - name: Reload ufw
-      ansible.builtin.service:
-        name: ufw
-        state: reloaded
 
-    - name: Restart ssh
-      ansible.builtin.service:
-        name: ssh
+    - name: Restart Tailscale
+      ansible.builtin.systemd:
+        name: tailscaled
         state: restarted
+        daemon_reload: true
+
+# vim: ft=yaml.ansible