segfault/docker-compose.yml
2022-08-09 20:29:11 +01:00

285 lines
7.2 KiB
YAML

version: "3.7"
services:
# EncFS for /onion
sf-encfs-www:
build: encfs
image: sf-encfs
restart: ${SF_RESTART:-on-failure}
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfined
environment:
- SF_SEED
- SF_DEBUG
command: ["/mount.sh", "server", "www"]
network_mode: none
devices:
- "/dev/fuse:/dev/fuse"
volumes:
- "${SF_BASEDIR:-.}/config/etc/seed:/config/etc/seed"
- "${SF_BASEDIR:-.}/data/www-root:/raw"
- "${SF_SHMDIR:-/dev/shm/sf}/encfs-sec/www-root:/sec:shared"
# EncFS for /everyone
sf-encfs-everyone:
build: encfs
image: sf-encfs
restart: ${SF_RESTART:-on-failure}
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfined
environment:
- SF_SEED
- SF_DEBUG
command: ["/mount.sh", "server", "everyone"]
network_mode: none
devices:
- "/dev/fuse:/dev/fuse"
volumes:
- "${SF_BASEDIR:-.}/config/etc/seed:/config/etc/seed"
- "${SF_BASEDIR:-.}/data/everyone-root:/raw"
- "${SF_SHMDIR:-/dev/shm/sf}/encfs-sec/everyone-root:/sec:shared"
dns-doh:
image: crazymax/cloudflared
restart: ${SF_RESTART:-on-failure}
networks:
dns-doh-net:
ipv4_address: 172.23.0.2
dnsmasq:
image: 4km3/dnsmasq:2.85-r2
cap_add:
- NET_ADMIN
command: ["--no-resolv", "--domain-needed", "--server=172.23.0.2#5053", "--server=/onion/172.20.0.111#5353"]
networks:
vpn-net:
ipv4_address: 172.20.0.252
dns-doh-net:
ipv4_address: 172.23.0.252
guest-net:
ipv4_address: 10.11.255.252
access-net:
ipv4_address: 172.22.0.252
restart: ${SF_RESTART:-on-failure}
depends_on:
- dns-doh
nordlynx:
# image: ghcr.io/bubuntux/nordlynx
build: nordvpn
image: sf-nordvpn
depends_on:
- dnsmasq
dns: 172.20.0.252
cap_add:
- NET_ADMIN #required
environment:
- PRIVATE_KEY=${SF_NORDVPN_PRIVATE_KEY:-}
- POST_UP=/sf/bin/vpn_wg2status.sh /sf/run/vpn/status-nordlynx.log post_up %i
- POST_DOWN=/sf/bin/vpn_wg2status.sh /sf/run/vpn/status-nordlynx.log post_down %i
- RECONNECT=604800 # Re-Connect every 7 days
networks:
vpn-net:
ipv4_address: 172.20.0.254
# dns-doh-net:
# ipv4_address: 172.23.0.254
sysctls:
- net.ipv6.conf.all.disable_ipv6=1
# - net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1
restart: ${SF_RESTART:-on-failure}
volumes:
- "${SF_SHMDIR:-/dev/shm/sf}/run/vpn:/sf/run/vpn"
router:
build: router
image: sf-router
depends_on:
- router-fix-network
networks:
incoming-net:
ipv4_address: 172.28.0.2
vpn-net:
ipv4_address: 172.20.0.2
guest-net:
ipv4_address: 10.11.255.253 # Will be replaced by init.sh with 10.11.0.1
access-net:
ipv4_address: 172.22.0.254
dmz-net:
ipv4_address: 172.20.1.254
cap_add:
- NET_ADMIN
sysctls:
- net.ipv4.conf.all.src_valid_mark=1 # SNAT
ports:
- "${SF_SSH_PORT:-22}:22"
environment:
- SF_DEBUG
- SF_MAXOUT
- SF_MAXIN
restart: ${SF_RESTART:-on-failure}
volumes:
- "${SF_SHMDIR:-/dev/shm/sf}/run/vpn:/sf/run/vpn"
- "${SF_BASEDIR:-.}/config/etc/tc:/config/tc:ro"
entrypoint: ["/init.sh"]
router-fix-network:
build: router
image: sf-router
network_mode: host # host's stack
cap_add:
- NET_ADMIN
environment:
- SF_DEBUG
restart: ${SF_RESTART:-on-failure}:1
entrypoint: ["/fix-network.sh"]
tor:
build: tor
image: sf-tor
networks:
vpn-net:
ipv4_address: 172.20.0.111
cap_add:
- NET_ADMIN
restart: ${SF_RESTART:-on-failure}
dns: 172.20.0.252
depends_on:
- dnsmasq
- nginx
volumes:
- "${SF_BASEDIR:-.}/config/${SF_FQDN:-SF_FQDN-NOT-SET.hack.segfault.net}/tor/hidden:/var/lib/tor/hidden"
- "${SF_BASEDIR:-.}/config/etc/tor:/config/tor:ro"
gsnc:
build: gsnc
image: sf-gsnc
networks:
access-net:
ipv4_address: 172.22.0.21
dns: 172.22.0.252
cap_add:
- NET_ADMIN # need to set default route
depends_on:
- dnsmasq
- router
restart: ${SF_RESTART:-on-failure}
environment:
- SF_SSH_PORT=${SF_SSH_PORT:-22}
- SF_FQDN=${SF_FQDN:-SF_FQDN-NOT-SET.hack.segfault.net}
- SF_DEBUG
- SF_SEED
volumes:
- "${SF_SHMDIR:-/dev/shm/sf}/run/gsnc:/sf/run/gsnc"
- "${SF_BASEDIR:-.}/config/etc/seed:/config/etc/seed"
entrypoint: ["/sf-gsnc.sh", "172.22.0.22"]
segfault:
build: host
image: sf-host
# /bin/segfaultsh need to know the container name; set it to sf-host statically
container_name: sf-host
networks:
access-net:
ipv4_address: 172.22.0.22
dns: 172.22.0.252
cap_add:
- NET_ADMIN # need to set default route
depends_on:
- dnsmasq
- router
- sf-encfs-everyone
restart: ${SF_RESTART:-on-failure}
init: true
# SSHD clears all environment variables before spwaning a shell (segfaultsh).
# Add any variables to docker_sshd.sh as well.
environment:
- SF_DNS=10.11.255.252
- SF_TOR=172.20.0.111
- SF_BASEDIR=${SF_BASEDIR}
- SF_SHMDIR=${SF_SHMDIR:-/dev/shm/sf}
- SF_USER=${SF_USER:-root}
- SF_USER_PASSWORD=${SF_USER_PASSWORD:-segfault}
- SF_FQDN=${SF_FQDN:-SF_FQDN-NOT-SET.hack.segfault.net}
- SF_SEED
- SF_DEBUG
volumes:
- "${SF_BASEDIR:-.}/config/etc/ssh:/config/etc/ssh"
- "${SF_BASEDIR:-.}/config/db:/config/db"
- "${SF_BASEDIR:-.}/config/etc/seed:/config/etc/seed"
- "${SF_BASEDIR:-.}/config/etc/info:/config/etc/info:ro"
- "${SF_BASEDIR:-.}/sfbin:/sf/bin:ro"
- "${SF_SHMDIR:-/dev/shm/sf}/encfs-sec/www-root:/sec:slave"
- "/var/run/docker.sock:/var/run/docker.sock"
nginx:
image: nginx
restart: ${SF_RESTART:-on-failure}
depends_on:
- sf-encfs-www
entrypoint: ["/sf/bin/wait_semaphore.sh", "/sec/.IS-ENCRYPTED", "nginx", "-g", "daemon off;"]
networks:
dmz-net:
ipv4_address: 172.20.1.80
dns: 255.255.255.255
cap_add:
- NET_ADMIN # need to set default route
volumes:
- "${SF_BASEDIR:-.}/sfbin/wait_semaphore.sh:/sf/bin/wait_semaphore.sh"
- "${SF_SHMDIR:-/dev/shm/sf}/encfs-sec/www-root:/sec:slave,ro"
- "${SF_BASEDIR:-.}/config/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro"
networks:
vpn-net:
name: sf-vpn
driver: bridge
ipam:
driver: default
config:
- subnet: 172.20.0.0/24
incoming-net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.28.0.0/24
access-net:
name: sf-access
driver: bridge
ipam:
driver: default
config:
- subnet: 172.22.0.0/24
dmz-net:
name: sf-dmz
driver: bridge
ipam:
config:
- subnet: 172.20.1.0/24
dns-doh-net:
name: sf-dns-doh
driver: bridge
ipam:
config:
- subnet: 172.23.0.0/24
# User's shell
guest-net:
name: sf-guest
driver: bridge
ipam:
driver: default
config:
- subnet: 10.11.0.0/16
# default gw is always 10.11.0.1 and is the host side of the bridge (?)