diff --git a/nginx-proxy-acme/conf/conf.d/block-exploits.conf b/nginx-proxy-acme/conf/conf.d/block-exploits.conf new file mode 100644 index 0000000..b3287af --- /dev/null +++ b/nginx-proxy-acme/conf/conf.d/block-exploits.conf @@ -0,0 +1,134 @@ +# Block SQL injections +set $block_sql_injections 0; + +if ($query_string ~ "union.*select.*\(") { + set $block_sql_injections 1; +} + +if ($query_string ~ "union.*all.*select.*") { + set $block_sql_injections 1; +} + +if ($query_string ~ "concat.*\(") { + set $block_sql_injections 1; +} + +if ($block_sql_injections = 1) { + return 403; +} + +# Block file injections +set $block_file_injections 0; + +if ($query_string ~ "[a-zA-Z0-9_]=http://") { + set $block_file_injections 1; +} + +if ($query_string ~ "[a-zA-Z0-9_]=(\.\.//?)+") { + set $block_file_injections 1; +} + +if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") { + set $block_file_injections 1; +} + +if ($block_file_injections = 1) { + return 403; +} + +# Block common exploits +set $block_common_exploits 0; + +if ($query_string ~ "(<|%3C).*script.*(>|%3E)") { + set $block_common_exploits 1; +} + +if ($query_string ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") { + set $block_common_exploits 1; +} + +if ($query_string ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") { + set $block_common_exploits 1; +} + +if ($query_string ~ "proc/self/environ") { + set $block_common_exploits 1; +} + +if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") { + set $block_common_exploits 1; +} + +if ($query_string ~ "base64_(en|de)code\(.*\)") { + set $block_common_exploits 1; +} + +if ($block_common_exploits = 1) { + return 403; +} + +# Block spam +set $block_spam 0; + +if ($query_string ~ "\b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)\b") { + set $block_spam 1; +} + +if ($query_string ~ "\b(erections|hoodia|huronriveracres|impotence|levitra|libido)\b") { + set $block_spam 1; +} + +if ($query_string ~ "\b(ambien|blue\spill|cialis|cocaine|ejaculation|erectile)\b") { + set $block_spam 1; +} + +if ($query_string ~ "\b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)\b") { + set $block_spam 1; +} + +if ($block_spam = 1) { + return 403; +} + +# Block user agents +set $block_user_agents 0; + +if ($http_user_agent ~ "Indy Library") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "libwww-perl") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "GetRight") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "GetWeb!") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "Go!Zilla") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "Download Demon") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "Go-Ahead-Got-It") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "TurnitinBot") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "GrabNet") { + set $block_user_agents 1; +} + +if ($block_user_agents = 1) { + return 403; +} diff --git a/nginx-proxy-acme/conf/conf.d/static-upstreams.conf b/nginx-proxy-acme/conf/conf.d/static-upstreams.conf new file mode 100644 index 0000000..ce8ebbe --- /dev/null +++ b/nginx-proxy-acme/conf/conf.d/static-upstreams.conf @@ -0,0 +1,219 @@ +# Static upstream configurations for non-container backends +# These hosts forward to IP addresses instead of Docker containers + +# ------------------------------------------------------------------------------ +# portainer.kolpacksoftware.com -> 172.17.0.1:9443 (HTTPS backend via Docker bridge) +# ------------------------------------------------------------------------------ +upstream portainer-backend { + server 172.17.0.1:9443; +} + +server { + listen 80; + server_name portainer.kolpacksoftware.com; + + location /.well-known/acme-challenge/ { + root /usr/share/nginx/html; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name portainer.kolpacksoftware.com; + + ssl_certificate /etc/nginx/certs/portainer.kolpacksoftware.com.crt; + ssl_certificate_key /etc/nginx/certs/portainer.kolpacksoftware.com.key; + + include /etc/nginx/vhost.d/default; + include /etc/nginx/vhost.d/private; + + location / { + proxy_pass https://portainer-backend; + proxy_ssl_verify off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + +# ------------------------------------------------------------------------------ +# btt-cb1.kolpacksoftware.com -> 192.168.1.173:80 +# ------------------------------------------------------------------------------ +upstream btt-cb1-backend { + server 192.168.1.173:80; +} + +server { + listen 80; + server_name btt-cb1.kolpacksoftware.com; + + location /.well-known/acme-challenge/ { + root /usr/share/nginx/html; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name btt-cb1.kolpacksoftware.com; + + ssl_certificate /etc/nginx/certs/btt-cb1.kolpacksoftware.com.crt; + ssl_certificate_key /etc/nginx/certs/btt-cb1.kolpacksoftware.com.key; + + include /etc/nginx/vhost.d/default; + include /etc/nginx/vhost.d/private; + + location / { + proxy_pass http://btt-cb1-backend; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + +# ------------------------------------------------------------------------------ +# hats.kolpacksoftware.com -> 192.168.1.66:9999 +# ------------------------------------------------------------------------------ +upstream hats-backend { + server 192.168.1.66:9999; +} + +server { + listen 80; + server_name hats.kolpacksoftware.com; + + location /.well-known/acme-challenge/ { + root /usr/share/nginx/html; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name hats.kolpacksoftware.com; + + ssl_certificate /etc/nginx/certs/hats.kolpacksoftware.com.crt; + ssl_certificate_key /etc/nginx/certs/hats.kolpacksoftware.com.key; + + include /etc/nginx/vhost.d/default; + include /etc/nginx/vhost.d/private; + + location / { + proxy_pass http://hats-backend; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + +# ------------------------------------------------------------------------------ +# pve-nas.kolpacksoftware.com -> 192.168.1.245:8006 (HTTPS backend - Proxmox) +# ------------------------------------------------------------------------------ +upstream pve-nas-backend { + server 192.168.1.245:8006; +} + +server { + listen 80; + server_name pve-nas.kolpacksoftware.com; + + location /.well-known/acme-challenge/ { + root /usr/share/nginx/html; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name pve-nas.kolpacksoftware.com; + + ssl_certificate /etc/nginx/certs/pve-nas.kolpacksoftware.com.crt; + ssl_certificate_key /etc/nginx/certs/pve-nas.kolpacksoftware.com.key; + + include /etc/nginx/vhost.d/default; + include /etc/nginx/vhost.d/private; + + # Proxmox needs larger buffers + proxy_buffer_size 128k; + proxy_buffers 4 256k; + proxy_busy_buffers_size 256k; + + location / { + proxy_pass https://pve-nas-backend; + proxy_ssl_verify off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + +# ------------------------------------------------------------------------------ +# unraid.kolpacksoftware.com -> 192.168.1.192:80 +# ------------------------------------------------------------------------------ +upstream unraid-backend { + server 192.168.1.192:80; +} + +server { + listen 80; + server_name unraid.kolpacksoftware.com; + + location /.well-known/acme-challenge/ { + root /usr/share/nginx/html; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name unraid.kolpacksoftware.com; + + ssl_certificate /etc/nginx/certs/unraid.kolpacksoftware.com.crt; + ssl_certificate_key /etc/nginx/certs/unraid.kolpacksoftware.com.key; + + include /etc/nginx/vhost.d/default; + include /etc/nginx/vhost.d/private; + + location / { + proxy_pass http://unraid-backend; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} diff --git a/nginx-proxy-acme/conf/vhost.d/calibre.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/calibre.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/calibre.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/chd.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/chd.kolpacksoftware.com new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/chd.kolpacksoftware.com @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/nginx-proxy-acme/conf/vhost.d/code-server.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/code-server.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/code-server.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/couchdb.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/couchdb.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/couchdb.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/dashy.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/dashy.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/dashy.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/default b/nginx-proxy-acme/conf/vhost.d/default new file mode 100644 index 0000000..3150af0 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/default @@ -0,0 +1,12 @@ +# Default configuration applied to all virtual hosts +# Security headers and WAF rules - applied to ALL hosts (public and private) + +# Security headers +add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; +add_header X-Content-Type-Options "nosniff" always; +add_header X-Frame-Options "SAMEORIGIN" always; +add_header X-XSS-Protection "1; mode=block" always; +add_header Referrer-Policy "strict-origin-when-cross-origin" always; + +# Include block-exploits rules +include /etc/nginx/conf.d/block-exploits.conf; diff --git a/nginx-proxy-acme/conf/vhost.d/docker-registry-ui.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/docker-registry-ui.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/docker-registry-ui.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/docker-registry.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/docker-registry.kolpacksoftware.com new file mode 100644 index 0000000..1070353 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/docker-registry.kolpacksoftware.com @@ -0,0 +1,6 @@ +# Docker registry needs Authorization header passthrough +proxy_set_header Authorization $http_authorization; +proxy_pass_header Authorization; + +# Private access control +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/gitea.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/gitea.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/gitea.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/homebox.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/homebox.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/homebox.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/immich.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/immich.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/immich.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/linkding.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/linkding.kolpacksoftware.com new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/linkding.kolpacksoftware.com @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/nginx-proxy-acme/conf/vhost.d/logseq.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/logseq.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/logseq.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/nginx.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/nginx.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/nginx.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/obsidian.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/obsidian.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/obsidian.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/organizer.rmstsa.org b/nginx-proxy-acme/conf/vhost.d/organizer.rmstsa.org new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/organizer.rmstsa.org @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/nginx-proxy-acme/conf/vhost.d/popcyclical.com b/nginx-proxy-acme/conf/vhost.d/popcyclical.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/popcyclical.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/private b/nginx-proxy-acme/conf/vhost.d/private new file mode 100644 index 0000000..66c46ce --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/private @@ -0,0 +1,7 @@ +# Access control for private hosts +# Symlink this file to restrict access to local networks only + +allow 192.168.1.0/24; +allow 172.16.0.0/12; +# allow 162.10.130.22; # Netskope - uncomment if needed for corporate VPN +deny all; diff --git a/nginx-proxy-acme/conf/vhost.d/qbto.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/qbto.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/qbto.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/qbtv.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/qbtv.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/qbtv.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/ridge-resources.org b/nginx-proxy-acme/conf/vhost.d/ridge-resources.org new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/ridge-resources.org @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/nginx-proxy-acme/conf/vhost.d/rmstsa.org b/nginx-proxy-acme/conf/vhost.d/rmstsa.org new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/rmstsa.org @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/nginx-proxy-acme/conf/vhost.d/share.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/share.kolpacksoftware.com new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/share.kolpacksoftware.com @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/nginx-proxy-acme/conf/vhost.d/syncthing.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/syncthing.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/syncthing.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/vikunja.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/vikunja.kolpacksoftware.com new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/vikunja.kolpacksoftware.com @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/nginx-proxy-acme/conf/vhost.d/www.kolpacksoftware.com b/nginx-proxy-acme/conf/vhost.d/www.kolpacksoftware.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/www.kolpacksoftware.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/www.popcyclical.com b/nginx-proxy-acme/conf/vhost.d/www.popcyclical.com new file mode 100644 index 0000000..a04a897 --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/www.popcyclical.com @@ -0,0 +1 @@ +include /etc/nginx/vhost.d/private; diff --git a/nginx-proxy-acme/conf/vhost.d/www.rmstsa.org b/nginx-proxy-acme/conf/vhost.d/www.rmstsa.org new file mode 120000 index 0000000..d70ebaa --- /dev/null +++ b/nginx-proxy-acme/conf/vhost.d/www.rmstsa.org @@ -0,0 +1 @@ +public \ No newline at end of file diff --git a/uptime-kuma/docker-compose.yaml b/uptime-kuma/docker-compose.yaml new file mode 100644 index 0000000..b1bead7 --- /dev/null +++ b/uptime-kuma/docker-compose.yaml @@ -0,0 +1,18 @@ +services: + uptime-kuma: + image: louislam/uptime-kuma:1 + container_name: uptime-kuma + restart: unless-stopped + volumes: + - /srv/uptime-kuma/data:/app/data + environment: + - TZ=America/New_York + - VIRTUAL_HOST=uptime.kolpacksoftware.com + - VIRTUAL_PORT=3001 + - LETSENCRYPT_HOST=uptime.kolpacksoftware.com + networks: + - npm-network + +networks: + npm-network: + external: true