
- Add nginx stream configuration on reverse-proxy to forward port 2222 to apps:22 - Update firewall rules to allow port 2222 for Git SSH access - Configure Forgejo to use SSH_PORT = 2222 for Git operations - Add comprehensive SSH forwarding research documentation - Enable Git operations via git@git.geokkjer.eu:2222 Phase 1 implementation using nginx stream module complete. Ready for testing and potential Phase 2 migration to HAProxy.
106 lines
No EOL
2.7 KiB
Nix
106 lines
No EOL
2.7 KiB
Nix
{ pkgs, config, lib, ... }:
|
|
|
|
{
|
|
imports = [
|
|
./gandicloud.nix
|
|
../../modules/common/base.nix
|
|
../../modules/users/sma.nix
|
|
../../modules/security/ssh-keys.nix
|
|
];
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
neovim curl htop bottom fastfetch
|
|
tailscale git
|
|
];
|
|
|
|
# Hostname configuration
|
|
networking.hostName = "reverse-proxy";
|
|
|
|
# DMZ-specific firewall configuration - very restrictive
|
|
networking.firewall = {
|
|
enable = true;
|
|
# Allow HTTP/HTTPS from external network and Git SSH on port 2222
|
|
allowedTCPPorts = [ 80 443 2222 ];
|
|
allowedUDPPorts = [ ];
|
|
# SSH only allowed from Tailscale network (100.64.0.0/10)
|
|
extraCommands = ''
|
|
# Allow SSH only from Tailscale network
|
|
iptables -A nixos-fw -p tcp --dport 22 -s 100.64.0.0/10 -j ACCEPT
|
|
iptables -A nixos-fw -p tcp --dport 22 -j DROP
|
|
'';
|
|
# Explicitly block all other traffic
|
|
rejectPackets = true;
|
|
};
|
|
|
|
# Security services
|
|
services.fail2ban = {
|
|
enable = true;
|
|
# Extra aggressive settings for DMZ
|
|
bantime = "24h";
|
|
maxretry = 3;
|
|
};
|
|
|
|
# Tailscale for secure management access
|
|
services.tailscale.enable = true;
|
|
|
|
# SSH configuration - ONLY accessible via Tailscale (DMZ security)
|
|
services.openssh = {
|
|
enable = true;
|
|
settings = {
|
|
PermitRootLogin = lib.mkForce "no";
|
|
PasswordAuthentication = false;
|
|
PubkeyAuthentication = true;
|
|
AuthenticationMethods = "publickey";
|
|
MaxAuthTries = 3;
|
|
ClientAliveInterval = 300;
|
|
ClientAliveCountMax = 2;
|
|
};
|
|
# Let SSH listen on default port, firewall restricts to Tailscale interface
|
|
# This allows Tailscale to assign IP dynamically based on hostname
|
|
};
|
|
|
|
# nginx reverse proxy
|
|
services.nginx = {
|
|
enable = true;
|
|
recommendedGzipSettings = true;
|
|
recommendedOptimisation = true;
|
|
recommendedProxySettings = true;
|
|
recommendedTlsSettings = true;
|
|
|
|
virtualHosts = {
|
|
"git.geokkjer.eu" = {
|
|
addSSL = true;
|
|
enableACME = true;
|
|
locations."/".proxyPass = "http://apps:3000";
|
|
};
|
|
#"geokkjer.eu" = {
|
|
# default = true;
|
|
# forceSSL = true;
|
|
# enableACME = true;
|
|
# locations."/".proxyPass = "/var/wwww/homepage/";
|
|
#};
|
|
};
|
|
|
|
# Stream configuration for SSH forwarding to Git server
|
|
streamConfig = ''
|
|
upstream git_ssh_backend {
|
|
server apps:22;
|
|
}
|
|
|
|
server {
|
|
listen 2222;
|
|
proxy_pass git_ssh_backend;
|
|
proxy_timeout 300s;
|
|
proxy_connect_timeout 10s;
|
|
proxy_responses 1;
|
|
}
|
|
'';
|
|
};
|
|
# acme let's encrypt
|
|
security.acme = {
|
|
acceptTerms = true;
|
|
defaults = {
|
|
email = "geir@geokkjer.eu";
|
|
};
|
|
};
|
|
} |