feat(jeeves): centralize firewall configuration
test ebook search / test-ebook-search (pull_request) Successful in 34s
build_systems / build-brain (pull_request) Successful in 48s
build_systems / build-bob (pull_request) Successful in 49s
build_systems / build-jeeves (pull_request) Successful in 2m11s
treefmt / nix fmt (pull_request) Successful in 5s
pytest / pytest (pull_request) Successful in 29s
build_systems / build-rhapsody-in-green (pull_request) Successful in 1m1s
build_systems / build-bob (push) Successful in 9s
pytest / pytest (push) Successful in 28s
test ebook search / test-ebook-search (push) Successful in 34s
build_systems / build-jeeves (push) Successful in 1m59s
treefmt / nix fmt (push) Successful in 6s
build_systems / build-brain (push) Successful in 33s
build_systems / build-rhapsody-in-green (push) Successful in 46s
test ebook search / test-ebook-search (pull_request) Successful in 34s
build_systems / build-brain (pull_request) Successful in 48s
build_systems / build-bob (pull_request) Successful in 49s
build_systems / build-jeeves (pull_request) Successful in 2m11s
treefmt / nix fmt (pull_request) Successful in 5s
pytest / pytest (pull_request) Successful in 29s
build_systems / build-rhapsody-in-green (pull_request) Successful in 1m1s
build_systems / build-bob (push) Successful in 9s
pytest / pytest (push) Successful in 28s
test ebook search / test-ebook-search (push) Successful in 34s
build_systems / build-jeeves (push) Successful in 1m59s
treefmt / nix fmt (push) Successful in 6s
build_systems / build-brain (push) Successful in 33s
build_systems / build-rhapsody-in-green (push) Successful in 46s
- split networking into interface and firewall modules - define named service ports in one location - remove scattered service-level firewall rules
This commit was merged in pull request #61.
This commit is contained in:
@@ -20,7 +20,7 @@ in
|
|||||||
./docker
|
./docker
|
||||||
./services
|
./services
|
||||||
./hardware.nix
|
./hardware.nix
|
||||||
./networking.nix
|
./networking
|
||||||
./programs.nix
|
./programs.nix
|
||||||
./runners
|
./runners
|
||||||
./syncthing.nix
|
./syncthing.nix
|
||||||
|
|||||||
@@ -2,9 +2,6 @@ let
|
|||||||
vars = import ../vars.nix;
|
vars = import ../vars.nix;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.allowedTCPPorts = [
|
|
||||||
8989
|
|
||||||
];
|
|
||||||
virtualisation.oci-containers.containers.signal_cli_rest_api = {
|
virtualisation.oci-containers.containers.signal_cli_rest_api = {
|
||||||
image = "bbernhard/signal-cli-rest-api:0.199-dev";
|
image = "bbernhard/signal-cli-rest-api:0.199-dev";
|
||||||
ports = [
|
ports = [
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./firewall.nix
|
||||||
|
./interfaces.nix
|
||||||
|
];
|
||||||
|
networking = {
|
||||||
|
hostName = "jeeves";
|
||||||
|
hostId = "0e15ce35";
|
||||||
|
useNetworkd = true;
|
||||||
|
# Without this, unconfigured NICs get a catch-all DHCP network and
|
||||||
|
# join the LAN uninvited (how the dead atlantic card ended up
|
||||||
|
# ARP-poisoning 192.168.99.14). Every interface must be configured
|
||||||
|
# explicitly below.
|
||||||
|
useDHCP = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
let
|
||||||
|
ports = {
|
||||||
|
audiobookshelf = 8000;
|
||||||
|
ebook_searcher = 8070;
|
||||||
|
gems = 8002;
|
||||||
|
gitea_http = 6443;
|
||||||
|
gitea_ssh = 2223;
|
||||||
|
grafana = 3000;
|
||||||
|
jellyfin_http = 8096;
|
||||||
|
nix_binary_cache = 5000;
|
||||||
|
nornsight = 8001;
|
||||||
|
ollama = 11434;
|
||||||
|
open_webui = 8080;
|
||||||
|
postgresql = 5432;
|
||||||
|
share = 8091;
|
||||||
|
signal_cli = 8989;
|
||||||
|
syncthing = 8384;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
networking.firewall = {
|
||||||
|
enable = true;
|
||||||
|
interfaces.br-nix-builder = {
|
||||||
|
allowedTCPPorts = [ ];
|
||||||
|
allowedUDPPorts = [ ];
|
||||||
|
};
|
||||||
|
interfaces.tailscale0.allowedTCPPorts = [
|
||||||
|
ports.audiobookshelf
|
||||||
|
ports.gems
|
||||||
|
ports.jellyfin_http
|
||||||
|
ports.nix_binary_cache
|
||||||
|
ports.nornsight
|
||||||
|
ports.share
|
||||||
|
];
|
||||||
|
allowedTCPPorts = [
|
||||||
|
ports.ebook_searcher
|
||||||
|
ports.gitea_http
|
||||||
|
ports.gitea_ssh
|
||||||
|
ports.grafana
|
||||||
|
ports.ollama
|
||||||
|
ports.open_webui
|
||||||
|
ports.postgresql
|
||||||
|
ports.signal_cli
|
||||||
|
ports.syncthing
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -8,36 +8,6 @@
|
|||||||
"net.bridge.bridge-nf-call-iptables" = 0;
|
"net.bridge.bridge-nf-call-iptables" = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
|
||||||
hostName = "jeeves";
|
|
||||||
hostId = "0e15ce35";
|
|
||||||
firewall = {
|
|
||||||
enable = true;
|
|
||||||
interfaces.br-nix-builder = {
|
|
||||||
allowedTCPPorts = [ ];
|
|
||||||
allowedUDPPorts = [ ];
|
|
||||||
};
|
|
||||||
interfaces.tailscale0.allowedTCPPorts = [
|
|
||||||
5000 # Nix binary cache
|
|
||||||
8000 # Audiobookshelf
|
|
||||||
8001 # Norn Sight
|
|
||||||
8002 # Gems
|
|
||||||
8091 # Share
|
|
||||||
8096 # Jellyfin HTTP
|
|
||||||
];
|
|
||||||
allowedTCPPorts = [
|
|
||||||
6443 # Gitea HTTP
|
|
||||||
8070 # ebook searcher
|
|
||||||
];
|
|
||||||
};
|
|
||||||
useNetworkd = true;
|
|
||||||
# Without this, unconfigured NICs get a catch-all DHCP network and
|
|
||||||
# join the LAN uninvited (how the dead atlantic card ended up
|
|
||||||
# ARP-poisoning 192.168.99.14). Every interface must be configured
|
|
||||||
# explicitly below.
|
|
||||||
useDHCP = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.network = {
|
systemd.network = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wait-online = {
|
wait-online = {
|
||||||
@@ -2,10 +2,6 @@ let
|
|||||||
vars = import ../vars.nix;
|
vars = import ../vars.nix;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.allowedTCPPorts = [
|
|
||||||
2223
|
|
||||||
];
|
|
||||||
|
|
||||||
services.gitea = {
|
services.gitea = {
|
||||||
enable = true;
|
enable = true;
|
||||||
appName = "TMM Workshop";
|
appName = "TMM Workshop";
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ let
|
|||||||
grafanaDataDir = "${vars.services}/grafana";
|
grafanaDataDir = "${vars.services}/grafana";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.allowedTCPPorts = [ 3000 ];
|
|
||||||
|
|
||||||
services.grafana = {
|
services.grafana = {
|
||||||
enable = true;
|
enable = true;
|
||||||
dataDir = grafanaDataDir;
|
dataDir = grafanaDataDir;
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ in
|
|||||||
{
|
{
|
||||||
services.jellyfin = {
|
services.jellyfin = {
|
||||||
enable = true;
|
enable = true;
|
||||||
openFirewall = false;
|
|
||||||
dataDir = "${vars.services}/jellyfin";
|
dataDir = "${vars.services}/jellyfin";
|
||||||
cacheDir = "${vars.services}/jellyfin/cache";
|
cacheDir = "${vars.services}/jellyfin/cache";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ in
|
|||||||
"qwen3.5:35b"
|
"qwen3.5:35b"
|
||||||
];
|
];
|
||||||
modelsDir = vars.ollama;
|
modelsDir = vars.ollama;
|
||||||
openFirewall = true;
|
|
||||||
};
|
};
|
||||||
systemd.services = {
|
systemd.services = {
|
||||||
ollama.serviceConfig = {
|
ollama.serviceConfig = {
|
||||||
|
|||||||
@@ -7,6 +7,5 @@ in
|
|||||||
package = pkgs.nix-serve-ng;
|
package = pkgs.nix-serve-ng;
|
||||||
enable = true;
|
enable = true;
|
||||||
secretKeyFile = "${vars.secrets}/services/nix-cache/cache-priv-key.pem";
|
secretKeyFile = "${vars.secrets}/services/nix-cache/cache-priv-key.pem";
|
||||||
openFirewall = false;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
services.open-webui = {
|
services.open-webui = {
|
||||||
enable = true;
|
enable = true;
|
||||||
host = "0.0.0.0";
|
host = "0.0.0.0";
|
||||||
openFirewall = true;
|
|
||||||
environment = {
|
environment = {
|
||||||
ANONYMIZED_TELEMETRY = "False";
|
ANONYMIZED_TELEMETRY = "False";
|
||||||
DO_NOT_TRACK = "True";
|
DO_NOT_TRACK = "True";
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ let
|
|||||||
vars = import ../vars.nix;
|
vars = import ../vars.nix;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.allowedTCPPorts = [ 5432 ];
|
|
||||||
|
|
||||||
# Symlink pg_wal to a ZFS dataset on the special (metadata) vdev for fast WAL writes
|
# Symlink pg_wal to a ZFS dataset on the special (metadata) vdev for fast WAL writes
|
||||||
# this is required for systemd sandboxing
|
# this is required for systemd sandboxing
|
||||||
systemd.services.postgresql.serviceConfig.ReadWritePaths = [ "/zfs/media/database/postgres-wal" ];
|
systemd.services.postgresql.serviceConfig.ReadWritePaths = [ "/zfs/media/database/postgres-wal" ];
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ let
|
|||||||
vars = import ./vars.nix;
|
vars = import ./vars.nix;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.interfaces.tailscale0.allowedTCPPorts = [ 8384 ];
|
|
||||||
|
|
||||||
services.syncthing = {
|
services.syncthing = {
|
||||||
overrideFolders = false;
|
overrideFolders = false;
|
||||||
guiAddress = "0.0.0.0:8384";
|
guiAddress = "0.0.0.0:8384";
|
||||||
|
|||||||
Reference in New Issue
Block a user