Monitor - create monitoring qube

This commit is contained in:
unman 2024-07-26 15:09:27 +00:00
parent aceb67d69d
commit 5078086f63
No known key found for this signature in database
GPG Key ID: FDD1B8244731B36C
8 changed files with 193 additions and 0 deletions

68
monitor/README.md Normal file
View File

@ -0,0 +1,68 @@
# Introduction
These files create a template, with tools installed for network monitoring.
An AppVM named sys-monitor, is created from that template.
## Template
The template, template-monitor, is cloned from the debian-12-minimal template.
If the debian-12-minimal template is not present, it will be downloaded
and installed - this may take some time depending on your net connection.
The template has passwordless root installed, so you can run packet captures using `sudo..`.
If you want to run wireshark as an ordinary user, open a terminal in template-monitor and run
`sudo dpkg-reconfigure wireshark-common`.
Answer `Yes` to the question, "should non-superusers be able to capture packets?"
Run `sudo usermod -a -G wireshark user`.
Shut down the template.
## Usage
sys-monitor is created with `provides_network` set, so you can attach qubes to it, setting it as netvm.
Wireshark, suricata, tcpdump, and tcpflow are installed and ready to run.
For wireshark see the note above about running as an ordinary user - useful if you want to start from the Q Menu.
As with all Debian templates, services are masked in the template.
This is done in `create.sls`
The suricata service is *unmasked* in the qube, by an entry in `/rw/config/rc.local` which is created in `config.sls`.
This means that you can simply run `sudo systemctl start suricata` to have suricata running with default settings.
Alternatively you can start the service with a custom configuration, as you will.
By default sys-monitor has sys-net as netvm, but you can change this if you wish.
You can monitor traffic at eth0 or at any of the vif interfaces to downstream qubes.
You can, of course, use template-monitor to create other qubes for monitoring at different positions in the Qubes networking structure..
## Installation
Copy the monitor folder to /srv/salt.
```
qubesctl state.apply monitor.create
qubesctl --skip-dom0 --targets=template-monitor state.apply monitor.install
qubesctl --skip-dom0 --targets=sys-monitor state.apply monitor.configure
```
### Template creation
Clone the debian-12-minimal template - note the use of `qvm.template_installed` which will install the template if it is not already present
```
sudo qubesctl state.apply monitor.clone
```
`clone.sls` uses `qvm.features` to set the menu. Note that you can do this *before* the relevant packages are installed.
### Qube creation
`create.sls` is a standard way of creating `sys-monitor` - qvm.present is used to create the qube, and preferences and features are set.
Note the use of an `include` statement at the head of the file. This allows a single state execution to call other states.
So `qubesctl state.apply monitor.create` will call and run `monitor.clone`.
### Package installation
```
sudo qubesctl --skip-dom0 --targets=template-monitor state.apply monitor.install
```
This state uses `pkg.installed` to install necessary packages in the template.
Note the use of `pillar.get` to check if a caching proxy is present: the necessary changes to repository definitions are made using `file.replace` within a jinja command structure.
### Configuration
```
sudo qubesctl --skip-dom0 --targets=sys-monitor state.apply monitor.configure
```
This state uses `file.append` to make sure that the suricata service is unmasked in the qube.
The command is run from /rw/config/rc.local: file.append` is used to alter that file.
`file.append` will only add the text if it is not already present.

16
monitor/clone.sls Normal file
View File

@ -0,0 +1,16 @@
monitor_precursor:
qvm.template_installed:
- name: debian-12-minimal
qvm-clone-monitor:
qvm.clone:
- name: template-monitor
- source: debian-12-minimal
qvm-features-template-monitor:
qvm.features:
- name: template-monitor
- set:
- menu-items: "org.wireshark.Wireshark.desktop debian-uxterm.desktop"
- default-menu-items: "org.wireshark.Wireshark.desktop debian-uxterm.desktop"

4
monitor/clone.top Normal file
View File

@ -0,0 +1,4 @@
base:
dom0:
- match: nodegroup
- monitor.clone

9
monitor/configure.sls Normal file
View File

@ -0,0 +1,9 @@
# vim: set syntax=yaml ts=2 sw=2 sts=2 et :
{% if grains['nodename'] != 'dom0' %}
/rw/config/rc.local:
file.append:
- text: systemctl unmask suricata
{% endif %}

31
monitor/create.sls Normal file
View File

@ -0,0 +1,31 @@
include:
- monitor.clone
qvm-present-monitor:
qvm.present:
- name: sys-monitor
- template: template-monitor
- label: green
qvm-prefs-monitor:
qvm.prefs:
- name: sys-monitor
- netvm: sys-net
- memory: 400
- maxmem: 1500
- vcpus: 2
- provides-network: True
qvm-features-monitor:
qvm.features:
- name: sys-monitor
- ipv6: ''
- disable:
- service.cups
- service.cups-browsed
- service.tinyproxy
- set:
- menu-items: "org.wireshark.Wireshark.desktop debian-uxterm.desktop"
'qvm-volume extend sys-monitor:private 40G' :
cmd.run

4
monitor/create.top Normal file
View File

@ -0,0 +1,4 @@
base:
dom0:
- match: nodegroup
- monitor.create

56
monitor/install.sls Normal file
View File

@ -0,0 +1,56 @@
# vim: set syntax=yaml ts=2 sw=2 sts=2 et :
#
#
#
{% if salt['pillar.get']('update_proxy:caching') %}
{% set proxy = 'cacher' %}
{% endif %}
{% if grains['nodename'] != 'dom0' %}
{% if grains['os_family']|lower == 'debian' %}
{% if grains['nodename']|lower != 'host' %}
{% if proxy == 'cacher' %}
{% for repo in salt['file.find']('/etc/apt/sources.list.d/', name='*list') %}
{{ repo }}_baseurl:
file.replace:
- name: {{ repo }}
- pattern: 'https://'
- repl: 'http://HTTPS///'
- flags: [ 'IGNORECASE', 'MULTILINE' ]
- backup: False
{% endfor %}
/etc/apt/sources.list:
file.replace:
- name: /etc/apt/sources.list
- pattern: 'https:'
- repl: 'http://HTTPS/'
- flags: [ 'IGNORECASE', 'MULTILINE' ]
- backup: False
{% endif %}
installed:
pkg.installed:
- pkgs:
- qubes-core-agent-networking
- qubes-core-agent-passwordless-root
- mate-notification-daemon
- suricata
- tcpdump
- tcpflow
- wireshark
systemd-disable-suricata:
cmd.run:
- name: systemctl disable suricata
systemd-mask-suricata:
cmd.run:
- name: systemctl mask suricata
{% endif %}
{% endif %}
{% endif %}

5
monitor/install.top Normal file
View File

@ -0,0 +1,5 @@
# vim: set syntax=yaml ts=2 sw=2 sts=2 et :
base:
template-monitor:
- monitor.install