architect: Refactored firewall settings. Added architect.firewall option

This commit is contained in:
Giulio De Pasquale 2023-02-15 00:19:52 +01:00
parent 47d937e12d
commit 3321ec122a
10 changed files with 77 additions and 57 deletions

View File

@ -9,7 +9,7 @@ let
in in
{ {
imports = [ imports = [
# Include the results of the hardware scan. ./options.nix
./backup.nix ./backup.nix
./hardware.nix ./hardware.nix
./firewall.nix ./firewall.nix
@ -132,6 +132,11 @@ in
driSupport = true; driSupport = true;
}; };
architect.firewall = {
openTCP = [ 22 ];
openTCPVPN = [ 22 ];
};
services = { services = {
fwupd.enable = true; fwupd.enable = true;
das_watchdog.enable = true; das_watchdog.enable = true;

View File

@ -4,8 +4,15 @@ let
domain = "htdel.giugl.io"; domain = "htdel.giugl.io";
network = import ./network.nix; network = import ./network.nix;
auth_block = (import ./openid.nix { inherit lib; }).openresty_oidc_block; auth_block = (import ./openid.nix { inherit lib; }).openresty_oidc_block;
listenPorts = [ 51413 51414 ];
in in
{ {
architect.firewall = {
openTCP = listenPorts;
openUDP = listenPorts;
};
services = { services = {
deluge = { deluge = {
enable = true; enable = true;
@ -24,7 +31,7 @@ in
max_connections_global = 1000; max_connections_global = 1000;
max_active_limit = 100; max_active_limit = 100;
max_active_downloading = 100; max_active_downloading = 100;
listen_ports = [ 51413 51414 ]; listen_ports = listenPorts;
random_port = false; random_port = false;
enabled_plugins = [ "Label" "Extractor" ]; enabled_plugins = [ "Label" "Extractor" ];
}; };

View File

@ -6,6 +6,8 @@ let
dnscrypt_listen_port = "5353"; dnscrypt_listen_port = "5353";
in in
{ {
architect.firewall.openUDPVPN = [ 53 ];
services = { services = {
dnsmasq = { dnsmasq = {
enable = true; enable = true;

View File

@ -1,54 +1,13 @@
{ config, lib, ... }: { config, lib, ... }:
with import ./network.nix; with import ./network.nix;
with lib;
let let
# TCP services openTCP = concatMapStringsSep "," (x: toString x) config.architect.firewall.openTCP;
ssh_tcp = 22; openUDP = concatMapStringsSep "," (x: toString x) config.architect.firewall.openUDP;
http_tcp = 80; openTCPVPN = concatMapStringsSep "," (x: toString x) config.architect.firewall.openTCPVPN;
https_tcp = 443; openUDPVPN = concatMapStringsSep "," (x: toString x) config.architect.firewall.openUDPVPN;
synapse_tcp = 8448;
gitea_tcp = 10022;
prosody_tcp = 5222;
minecraft_tcp = 25565;
# UDP services
dns_udp = 53;
wireguard_udp = 1194;
# TCP/UDP services
torrent_a = 51413;
torrent_b = 51414;
# grouping
open_tcp_ports = lib.concatMapStringsSep "," (x: toString x) [
ssh_tcp
http_tcp
https_tcp
synapse_tcp
gitea_tcp
torrent_a
torrent_b
minecraft_tcp
];
open_udp_ports = lib.concatMapStringsSep "," (x: toString x) [
wireguard_udp
torrent_a
torrent_b
config.services.tailscale.port
];
open_tcp_ports_vpn = lib.concatMapStringsSep "," (x: toString x) [
ssh_tcp
http_tcp
https_tcp
prosody_tcp
minecraft_tcp
];
open_udp_ports_vpn = lib.concatMapStringsSep "," (x: toString x) [
dns_udp
wireguard_udp
];
in in
{ {
networking = { networking = {
@ -161,10 +120,11 @@ in
ip saddr ${tailscale-net} accept comment "tailscale > local" ip saddr ${tailscale-net} accept comment "tailscale > local"
ip saddr {${lib.concatStringsSep "," gdevices}} accept comment "vpn > local" ip saddr {${lib.concatStringsSep "," gdevices}} accept comment "vpn > local"
iifname ${wan-if} tcp dport {${open_tcp_ports}} accept iifname ${wan-if} tcp dport {${openTCP}} accept
iifname ${wan-if} udp dport {${open_udp_ports}} accept iifname ${wan-if} udp dport {${openUDP}} accept
iifname ${vpn-if} tcp dport {${open_tcp_ports_vpn}} accept iifname ${vpn-if} tcp dport {${openTCPVPN}} accept
iifname ${vpn-if} udp dport {${open_udp_ports_vpn}} accept iifname ${vpn-if} udp dport {${openUDPVPN}} accept
iifname ${vpn-if} icmp type echo-request accept iifname ${vpn-if} icmp type echo-request accept
iifname ${docker-if} udp dport 53 accept iifname ${docker-if} udp dport 53 accept
jump filter_drop jump filter_drop

View File

@ -1,11 +1,12 @@
{ lib, ... }: { config, lib, ... }:
let let
domain = "git.giugl.io"; domain = "git.giugl.io";
network = import ./network.nix; network = import ./network.nix;
auth_block = (import ./openid.nix { inherit lib; }).openresty_oidc_block;
in in
{ {
architect.firewall.openTCP = [ config.services.gitea.settings.server.SSH_PORT ];
services.gitea = { services.gitea = {
enable = true; enable = true;
database.type = "sqlite3"; database.type = "sqlite3";

View File

@ -5,6 +5,8 @@ let
network = import ./network.nix; network = import ./network.nix;
in in
{ {
architect.firewall.openTCP = [ 25565 ];
services.minecraft-server = { services.minecraft-server = {
enable = true; enable = true;
eula = true; eula = true;

View File

@ -1,6 +1,11 @@
{ services, pkgs, lib, ... }: { services, pkgs, lib, ... }:
{ {
architect.firewall = {
openTCP = [ 80 443 ];
openTCPVPN = [ 80 443 ];
};
services.nginx = { services.nginx = {
enable = true; enable = true;
package = pkgs.openresty; package = pkgs.openresty;

View File

@ -0,0 +1,25 @@
{ config, lib, ... }:
with lib;
{
options.architect.firewall = {
openTCP = mkOption {
type = types.listOf types.int;
default = [ ];
};
openUDP = mkOption {
type = types.listOf types.int;
default = [ ];
};
openTCPVPN = mkOption {
type = types.listOf types.int;
default = [ ];
};
openUDPVPN = mkOption {
type = types.listOf types.int;
default = [ ];
};
};
}

View File

@ -1,4 +1,4 @@
{ lib, ... }: { config, lib, ... }:
let let
network = import ./network.nix; network = import ./network.nix;
@ -6,6 +6,8 @@ let
ifname = "ts0"; ifname = "ts0";
in in
{ {
architect.firewall.openUDP = [ config.services.tailscale.port ];
services = { services = {
tailscale = { tailscale = {
enable = true; enable = true;

View File

@ -1,4 +1,14 @@
with import ./network.nix; { { config, lib, ... }:
with import ./network.nix;
let
listenPort = 1194;
in
{
architect.firewall = {
openUDP = lib.singleton listenPort;
openUDPVPN = lib.singleton listenPort;
};
networking = { networking = {
extraHosts = '' extraHosts = ''
${architect-wg} architect.devs.giugl.io ${architect-wg} architect.devs.giugl.io
@ -37,7 +47,8 @@ with import ./network.nix; {
wireguard = { wireguard = {
interfaces.${vpn-if} = { interfaces.${vpn-if} = {
listenPort = 1194; inherit listenPort;
ips = [ "10.3.0.1/24" ]; ips = [ "10.3.0.1/24" ];
privateKeyFile = "/secrets/wireguard/server.key"; privateKeyFile = "/secrets/wireguard/server.key";