diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..55080fa9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +fickit-backend-cmdline +fickit-backend-initrd.img +fickit-backend-kernel +fickit-frontend-cmdline +fickit-frontend-initrd.img +fickit-frontend-kernel diff --git a/configs/authorized_keys b/configs/authorized_keys new file mode 100644 index 00000000..9e402506 --- /dev/null +++ b/configs/authorized_keys @@ -0,0 +1,6 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDO/3qKhSUbGYZBVraFo68oScJahRDNQfG+uwDQlLv7g nemunaire@khonsou +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqEniilVnT/hKEpxe59KvbUoCdGvEUMoVLzwkwpzSr2MIFTddQHXDcxL7+YQhiKrd3veZgR8IWGsuCDy8lEZumpY60omgaQYbpFQHeybC/tFefsMWoHqEeV69CmriNBtVoBPQyLRWZCt0exvJ269POHfyWOJixI3yf9J1En9JV1TzEvU6J7+GV6bLXEd5WghuXxcwRVQHzwnBFXOXOkiGuOqnDix0F5WZTxo5BsM2tbK6kbsT9k4TyfBYl1gA2dqB+swrKk83F9skbPTWZAX7Z5dmJ/ZBV7u+t4lk6vbjVhjSpcD3LhoqgIVb6HfM3Pidkm5E/tA0TxCubLb+k/hZL nico.chari@gmail.com +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDmSDalpcOjMVeQhhs8TOBbE36gkADj30lNMvmHncVzGZMQOjcLDC6dnkCuwLyEo+Ne/OAyeLLvv8YyCQpj4Ib2nqARdZYOeh622pwkUfEqlKT9umeju+TQrFNBUhkqN49vbTEbgmpxCsoRonPFgFgRncldQFD7vsNdnkGmf1KcRk5UbGI4AYWPDRJ+0uEOKjxY+GAL+r1DyeII53OXaFp+AOqGtDqaS6JrmUVk1Zj/7hX+3WZ3F1xcpYnUr6bnyU1rh7cbU+3ZEU/CYYVSJGLzm6V3ymgLas/mAAFlopXwjhiYRQgwcXKRCnijEeHwOUlDShKIYfLoMh/he0xi/R8eVLfH0HV5JDhnf2n3UxDQ5Mfl1Mbsjt2OTl4Gmd01rhQHAoWmhjPDDlGPQoGOSTdOYS5HDlv4yhfxq0QAMsTcT6uOT1gajEmbv/36KTOWc7EyT1rdg/qxHVF7UVz9EYo/gIaeMZfLaqX2gkRndFStIWVQ+kJLPZmveqIH2MVtPc0YuDvd3H6TLNrHZzMvX6+YbeP0NDU726hjwFQSeBtjEfVHib+EffVNUHRNoKhzq6IVh7/7pTILrh4dnjUvEUiZg6XEa97VYO9/ixe8ci6qBeO2HtovZh4IX1zaXSKJqcXeOBOXfhyA2BXDD/XXzLIWyV2JoojGMBiRMThs8jCYKw== panev_s@epita.fr +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsi6Kpm8hpYxqDlfyjjs/iWfegzXJuJUecJ+Dpl+8ZWYvKjoyU+vwSx4cqOOlduMQF4pYOgf35OywgeUXS/GuwZo86hAr1yzRBl6/SzC+K+vkQ7Ye/0E6eRUDHqq4t6eqWHqsCafm11PhCj53ibyTH6NYNBRS85Z3DKFj4SwMuIhFX6tpLoXCQFLY0zB3JzQymaX/FK48Am5rZ9BLoZFM+9jbr5yvb4u/nijdfYmcFNom0AjZOzYE3RVGAil63LyvibVHkfbJj/DAvCCtkU7B6q8YpwjFm1kbGcb4sORLAzBNv/ayJOYVxAKK3kHDxR5MBYZQ9DsYB5Tn4qU+VtRSd sysy@archlinux +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDFyNF5TSmgyQLopCFs1+PvGnQM2P9GaERC087gbWueBvEP0s5NkPW5u10fhBHk+eUo2M/yXSgjG9+vtETddSITzoRABoXTEXnSP1REcjAeWbp3oS6+QrJQ6Fy4CR/9V5pd74d86NZ+f0nldFXgHOLk4Y2XxAOnxZZCzQPOXL8ChBEmb9vK/MxyOq4sWEPjJLQIzn/Bj/BHqBpoDmKfzq3sp9mxjXTYCcH9FDwDU0vvtPZ25r6EKtRQuVbFviTAkSawvLJtj25NEX1hrGE7oZSahbng4oSgkd/gCjsivptE5DeFLQRTqvdv6H9QyIRvT+mq1KNCBsuaCBjGwdDgWxe8nRyWAe3bUbha87rpkGRz5/+HaokKVt0cnXD1wjapByvTQDwAYVLEfpsodruGuZl26nEJqkKRH7Oxp9YxBGUO9xGJHoXJTCZUdCuKDH8QuPHYiAXZH8aqKD8EmgwTrvgFvKzDE6zF88Eb9WBPbr5MpLX2nj5UpZEyb2KDOtYAz9379dRD3jgBl7EY0OdqrfRitk3sucmgDpMQHV3C1vCW4OdZ6Pydg4LarGSTNz6cUCzRZehfxJh4XoLhHxwtGVdgAEapd9uVFDrIJAVnpW0le778x29SpPLRg0mEFCHBg0VEHLA8N8vct9QIAMf+tR/Tno89/ESNag5x7SPtOlb5Tw== vincae@vincae-Aspire-V5-561G +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEO91xtu/9jLPjEqFChQ7hB8jgDldN07Qh5Du35aqwFIvsKbF5RDsRDom/IxvrX+gVm2faTtxECEu+xRahw+19OsE7VPSCBr8IfvuuzoiR0zXaiGLubzx1nmAZdHESRuhPO6UqWX1FbcPkKeUDkwfKkCEUThYA600SKrPbYd+2jhFM7zw65OQq6RyLc+57ySodG+O8TjZo999kBGuhsJx+t/U9B6bjP5htDPk35eahReDeDZrAO9BYuFilyYFgd2ckf9LvqS/UHQZgj1kXFAqzZjsA9hVejN1hMJdKo9OrU9CTIiJDqEqKxGSzjguXBYa7MjpYfOcMdvdxwVRuerUl mathilde@debian diff --git a/configs/dhcpd.conf b/configs/dhcpd.conf new file mode 100644 index 00000000..b8520bef --- /dev/null +++ b/configs/dhcpd.conf @@ -0,0 +1,12 @@ +default-lease-time 600; +max-lease-time 7200; +option subnet-mask 255.255.255.0; +option broadcast-address 172.23.42.255; +option routers 172.23.42.254; +option rfc3442-classless-static-routes code 121 = array of integer 8; +option ms-classless-static-routes code 249 = array of integer 8; +option rfc3442-classless-static-routes 32, 163, 5, 55, 58, 172, 23, 42, 1; +option ms-classless-static-routes 32, 163, 5, 55, 58, 172, 23, 42, 1; +subnet 172.23.42.0 netmask 255.255.255.0 { + range 172.23.42.10 172.23.42.254; +} diff --git a/configs/fic-auth.conf b/configs/fic-auth.conf new file mode 100644 index 00000000..773c5619 --- /dev/null +++ b/configs/fic-auth.conf @@ -0,0 +1,6 @@ +if ($ssl_client_verify != "SUCCESS") { + return 401; +} +if ($ssl_client_verify = "SUCCESS") { + set $team "_AUTH_ID_$ssl_client_serial"; +} diff --git a/frontend/nginx-fic-static.conf b/configs/nginx-fic-static.conf similarity index 100% rename from frontend/nginx-fic-static.conf rename to configs/nginx-fic-static.conf diff --git a/frontend/nginx-prod.conf b/configs/nginx-prod.conf similarity index 87% rename from frontend/nginx-prod.conf rename to configs/nginx-prod.conf index b3868c24..b98fa694 100644 --- a/frontend/nginx-prod.conf +++ b/configs/nginx-prod.conf @@ -1,24 +1,25 @@ +proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; +proxy_connect_timeout 1s; + server { listen 80 default; - listen [::]:80 default; rewrite ^ https://$server_name$request_uri permanent; } server { listen 443 default ssl http2; - listen [::]:443 default ssl http2; ssl_protocols TLSv1.2 TLSv1.3; - #ssl_dhparam ; + ssl_dhparam /etc/nginx/ssl/dhparams-4096.pem; ssl_prefer_server_ciphers on; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; - ssl_trusted_certificate /srv/PKI/cacert.pem; + ssl_client_certificate /srv/PKI/shared/ca.pem; + ssl_trusted_certificate /srv/PKI/shared/ca.pem; ssl_verify_client optional; - ssl_crl /srv/PKI/crl.pem; root /srv/htdocs-frontend/; @@ -51,7 +52,7 @@ server { internal; } - location ~ ^/[0-9] { + location ~ ^/[A-Z] { include fic-auth.conf; rewrite ^/.*$ /index.html; @@ -91,8 +92,8 @@ server { expires epoch; add_header Cache-Control no-cache; } - location /public.json { - root /srv/TEAMS/; + location ~ /public[0-9].json { + root /srv/TEAMS/public/; expires epoch; add_header Cache-Control no-cache; } @@ -108,7 +109,7 @@ server { expires epoch; add_header Cache-Control no-cache; - if (!-f $document_root/../SETTINGS/started) { + if (!-f /srv/startingblock/started) { rewrite ^/.* /wait.json; } } @@ -127,6 +128,11 @@ server { expires epoch; add_header Cache-Control no-cache; } + location = /settings.json { + root /srv/SETTINGS/; + expires epoch; + add_header Cache-Control no-cache; + } location /submit/ { include fic-auth.conf; diff --git a/fickit-backend.yml b/fickit-backend.yml new file mode 100644 index 00000000..57403668 --- /dev/null +++ b/fickit-backend.yml @@ -0,0 +1,277 @@ +kernel: + image: nemunaire/kernel:4.9.77 + cmdline: "console=tty0" + +init: + - linuxkit/init:be8756f0a6005279d2409a8790b4dd8b2ac11df9 + - linuxkit/runc:7b15b00b4e3507d62e3ed8d44dfe650561cd35ff + - linuxkit/containerd:78706a05d00a7385ff2b6b7db280041338e4b34a + - linuxkit/ca-certificates:de21b84d9b055ad9dcecc57965b654a7a24ef8e0 + - linuxkit/getty:22e27189b6b354e1d5d38fc0536a5af3f2adb79f + - nemunaire/mdadm:0ac2a0d3e7be84f1aad852c906d54cbff4d1668f + +onboot: + - name: sysctl + image: linuxkit/sysctl:4c1ef93bb5eb1a877318db4b2daa6768ed002e21 + - name: sysctl + image: linuxkit/sysctl:4c1ef93bb5eb1a877318db4b2daa6768ed002e21 + command: ["/usr/bin/sysctl", "-w", "net.ipv6.conf.all.disable_ipv6=1"] + + # Filesystem + - name: swap + image: linuxkit/swap:b3d5db11b14168874a01b5ea4398186321be836f + command: ["/sbin/swapon", "/dev/sda3", "/dev/sdb3"] + - name: mount + image: linuxkit/mount:b346ec277b7074e5c9986128a879c10a1d18742b + command: ["/usr/bin/mountie", "-device", "/dev/md127", "/var/lib/fic" ] + + # Network +# - name: dhcpcd +# image: linuxkit/dhcpcd:0d59a6cc03412289ef4313f2491ec666c1715cc9 +# command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"] +# - name: ntp +# image: linuxkit/openntpd:536e5947607c9e6a6771957c2ff817230cba0d3c + - name: synchro-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 10.10.10.1/29 dev eth0; ip link set eth0 up;" ] + net: new + runtime: + interfaces: + - name: eth0 + bindNS: + net: /run/netns/synchro + - name: admin-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 192.168.0.1/24 dev eth1; ip link set eth1 up; ip a add 172.17.0.2/24 dev vethin-admin; ip link set vethin-admin up;" ] + net: new + runtime: + interfaces: + - name: eth1 + - name: vethin-admin + add: veth + peer: veth-admin + bindNS: + net: /run/netns/fic-admin + - name: backend-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 172.17.0.3/24 dev vethin-backend; ip link set vethin-backend up;" ] + net: new + runtime: + interfaces: + - name: vethin-backend + add: veth + peer: veth-backend + bindNS: + net: /run/netns/fic-backend + - name: mysql-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 172.17.0.4/24 dev vethin-db; ip link set vethin-db up;" ] + net: new + runtime: + interfaces: + - name: vethin-db + add: veth + peer: veth-db + bindNS: + net: /run/netns/db + - name: bridge-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 172.17.0.1/24 dev br0; ip link set veth-admin master br0; ip link set veth-backend master br0; ip link set veth-db master br0; ip link set br0 up; ip link set veth-admin up; ip link set veth-backend up; ip link set veth-db up;" ] + runtime: + interfaces: + - name: br0 + add: bridge + + - name: firewall-synchro + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/bash", "-c", "/sbin/iptables-restore < /etc/iptables/rules-synchro.v4; /sbin/ip6tables-restore < /etc/iptables/rules.v6" ] + binds: + - /etc/iptables/rules-synchro.v4:/etc/iptables/rules-synchro.v4:ro + - /etc/iptables/rules.v6:/etc/iptables/rules.v6:ro + net: /run/netns/synchro + runtime: + mkdir: + - /var/lib/fic/teams + - name: firewall-admin + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/bash", "-c", "/sbin/iptables-restore < /etc/iptables/rules-admin.v4; /sbin/ip6tables-restore < /etc/iptables/rules.v6" ] + binds: + - /etc/iptables/rules-admin.v4:/etc/iptables/rules-admin.v4:ro + - /etc/iptables/rules.v6:/etc/iptables/rules.v6:ro + net: /run/netns/fic-admin + +services: + - name: rngd + image: linuxkit/rngd:94e01a4b16fadb053455cdc2269c4eb0b39199cd + - name: db + image: mariadb:latest + command: ["/bin/bash", "/usr/local/bin/docker-entrypoint.sh", "mysqld"] + capabilities: + - CAP_CHOWN + - CAP_SETUID + - CAP_SETGID + - CAP_DAC_OVERRIDE + env: + - MYSQL_DATABASE=fic + - MYSQL_USER=fic + - MYSQL_PASSWORD=fic + - MYSQL_RANDOM_ROOT_PASSWORD=yes + binds: + - /etc/hosts:/etc/hosts:ro + - /var/lib/fic/mysql:/var/lib/mysql + net: /run/netns/db + pid: new + ipc: new + uts: new + runtime: + mkdir: + - /var/lib/fic/mysql + - name: fic-admin + image: nemunaire/fic-admin:latest + command: ["/srv/admin", "-bind=:8081", "-baseurl=/admin/", "-localimport=/mnt/fic"] + env: + - MYSQL_HOST=tcp(db:3306) + - FICCA_PASS=jee8AhloAith1aesCeQu5ahgIegaeM4K + binds: + - /etc/hosts:/etc/hosts:ro + - /var/lib/fic/files:/srv/FILES + - /var/lib/fic/raw_files:/mnt/fic + - /var/lib/fic/pki:/srv/PKI + - /var/lib/fic/settings:/srv/SETTINGS + - /var/lib/fic/teams:/srv/TEAMS + net: /run/netns/fic-admin + pid: new + ipc: new + uts: new + runtime: + mkdir: + - /var/lib/fic/files + - /var/lib/fic/raw_files + - /var/lib/fic/pki + - /var/lib/fic/settings + - /var/lib/fic/teams + - name: fic-backend + image: nemunaire/fic-backend:latest + env: + - MYSQL_HOST=tcp(db:3306) + binds: + - /etc/hosts:/etc/hosts:ro + - /var/lib/fic/settings:/srv/SETTINGS:ro + - /var/lib/fic/submissions:/srv/submissions + - /var/lib/fic/teams:/srv/TEAMS + net: /run/netns/fic-backend + pid: new + ipc: new + uts: new + runtime: + mkdir: + - /var/lib/fic/settings + - /var/lib/fic/submissions + - /var/lib/fic/teams + - name: fic-synchro + image: nemunaire/rsync:f8a6d2b0b1064ea3cb3601a159bb886c47a76ce3 + command: ["/bin/ash", "/root/synchro.sh"] + binds: + - /etc/hosts:/etc/hosts:ro + - /root/.ssh/id_ed25519:/root/.ssh/id_ed25519:ro + - /root/synchro.sh:/root/synchro.sh:ro + - /var/lib/fic/files:/srv/FILES:ro + - /var/lib/fic/pki/ca.key:/srv/PKI/ca.key:ro + - /var/lib/fic/pki/shared:/srv/PKI/shared:ro + - /var/lib/fic/settings:/srv/SETTINGS:ro + - /var/lib/fic/submissions:/srv/submissions + - /var/lib/fic/teams:/srv/TEAMS:ro + net: /run/netns/synchro + pid: new + ipc: new + uts: new + runtime: + mkdir: + - /var/lib/fic/files + - /var/lib/fic/pki/shared + - /var/lib/fic/settings + - /var/lib/fic/submissions + - /var/lib/fic/teams + - name: sshd + image: nemunaire/rsync:f8a6d2b0b1064ea3cb3601a159bb886c47a76ce3 + binds: + - /etc/hosts:/etc/hosts:ro + - /root/.ssh/authorized_keys:/root/.ssh/authorized_keys:ro + - /var/lib/fic/outofsync:/var/lib/fic/outofsync + net: /run/netns/fic-admin + runtime: + mkdir: + - /var/lib/fic/outofsync + +files: + - path: root/synchro.sh + source: configs/synchro.sh + mode: "0755" + - path: etc/hosts + source: configs/hosts + mode: "0644" + - path: root/.ssh/authorized_keys + source: configs/authorized_keys + mode: "0400" + - path: root/.ssh/id_ed25519 + source: configs/id_ed25519 + mode: "0400" + + - path: etc/iptables/rules.v6 + contents: | + *filter + :INPUT DROP [0:0] + :FORWARD DROP [0:0] + :OUTPUT DROP [0:0] + COMMIT + mode: "0440" + - path: etc/iptables/rules-admin.v4 + contents: | + *filter + :INPUT DROP [0:0] + :FORWARD DROP [0:0] + :OUTPUT DROP [0:0] + [0:0] -A INPUT -i lo -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate INVALID -j DROP + [0:0] -A INPUT -p icmp -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A INPUT -i eth1 -s 192.168.0.0/24 -p tcp -m conntrack --ctstate NEW -m tcp --dport ssh -j ACCEPT + [0:0] -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 8081 -j ACCEPT + [0:0] -A INPUT -i vethin-admin -s 172.17.0.0/24 -p tcp -m conntrack --ctstate NEW -j ACCEPT + [0:0] -A INPUT -j LOG + [0:0] -A FORWARD -j LOG + [0:0] -A OUTPUT -o lo -j ACCEPT + [0:0] -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A OUTPUT -p icmp -j ACCEPT + [0:0] -A OUTPUT -o vethin-admin -d 172.17.0.0/24 -p tcp -m conntrack --ctstate NEW -j ACCEPT + [0:0] -A OUTPUT -j LOG + [0:0] -A OUTPUT -j REJECT + COMMIT + mode: "0440" + - path: etc/iptables/rules-synchro.v4 + contents: | + *filter + :INPUT DROP [0:0] + :FORWARD DROP [0:0] + :OUTPUT DROP [0:0] + [0:0] -A INPUT -i lo -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate INVALID -j DROP + [0:0] -A INPUT -p icmp --icmp-type 8 -j ACCEPT + [0:0] -A INPUT -p icmp --icmp-type 0 -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A INPUT -j LOG + [0:0] -A FORWARD -j LOG + [0:0] -A OUTPUT -o lo -j ACCEPT + [0:0] -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT + [0:0] -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT + [0:0] -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A OUTPUT -o eth0 -d 10.10.10.2 -p tcp -m conntrack --ctstate NEW -m tcp --dport ssh -j ACCEPT + [0:0] -A OUTPUT -j LOG + [0:0] -A OUTPUT -j REJECT + COMMIT + mode: "0440" + +trust: + org: + - linuxkit + - library diff --git a/fickit-frontend.yml b/fickit-frontend.yml new file mode 100644 index 00000000..6029dbf8 --- /dev/null +++ b/fickit-frontend.yml @@ -0,0 +1,403 @@ +kernel: + image: nemunaire/kernel:4.9.77 + cmdline: "console=tty0" + +init: + - linuxkit/init:be8756f0a6005279d2409a8790b4dd8b2ac11df9 + - linuxkit/runc:7b15b00b4e3507d62e3ed8d44dfe650561cd35ff + - linuxkit/containerd:78706a05d00a7385ff2b6b7db280041338e4b34a + - linuxkit/ca-certificates:de21b84d9b055ad9dcecc57965b654a7a24ef8e0 + - linuxkit/getty:22e27189b6b354e1d5d38fc0536a5af3f2adb79f + - nemunaire/mdadm:0ac2a0d3e7be84f1aad852c906d54cbff4d1668f + +onboot: + - name: sysctl + image: linuxkit/sysctl:4c1ef93bb5eb1a877318db4b2daa6768ed002e21 + + # Filesystem + - name: swap + image: linuxkit/swap:b3d5db11b14168874a01b5ea4398186321be836f + command: ["/sbin/swapon", "/dev/sda3", "/dev/sdb3"] + - name: mount + image: linuxkit/mount:b346ec277b7074e5c9986128a879c10a1d18742b + command: ["/usr/bin/mountie", "-device", "/dev/md127", "/var/lib/fic" ] + + # Network +# - name: dhcpcd +# image: linuxkit/dhcpcd:0d59a6cc03412289ef4313f2491ec666c1715cc9 +# command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"] +# - name: ntp +# image: linuxkit/openntpd:536e5947607c9e6a6771957c2ff817230cba0d3c + - name: nginx-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 172.17.1.2/24 dev vethin-nginx; ip link set vethin-nginx up;" ] + net: new + runtime: + interfaces: + - name: vethin-nginx + add: veth + peer: veth-nginx + bindNS: + net: /run/netns/nginx + - name: frontal-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip link set bond-frontal up; ifenslave bond-frontal eth1 eth2 eth3; ip a add 172.23.42.1/24 dev bond-frontal; ip a add 163.5.55.58/32 dev bond-frontal;" ] + net: /run/netns/nginx + runtime: + interfaces: + - name: eth1 + - name: eth2 + - name: eth3 + - name: bond-frontal + add: bond + - name: frontend-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 172.17.1.3/24 dev vethin-frontend; ip link set vethin-frontend up;" ] + net: new + runtime: + interfaces: + - name: vethin-frontend + add: veth + peer: veth-frontend + bindNS: + net: /run/netns/fic-frontend + - name: sshd-ip-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 10.10.10.2/29 dev eth0; ip link set eth0 up;" ] + net: new + runtime: + interfaces: + - name: eth0 + bindNS: + net: /run/netns/sshd + - name: bridge-setup + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/sh", "-c", "ip a add 172.17.1.1/24 dev br0; ip link set veth-nginx master br0; ip link set veth-frontend master br0; ip link set br0 up; ip link set veth-nginx up; ip link set veth-frontend up;" ] + runtime: + interfaces: + - name: br0 + add: bridge + + - name: firewall-frontal + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/bash", "-c", "/sbin/iptables-restore < /etc/iptables/rules-frontal.v4; /sbin/ip6tables-restore < /etc/iptables/rules.v6" ] + binds: + - /etc/iptables/rules-frontal.v4:/etc/iptables/rules-frontal.v4:ro + - /etc/iptables/rules.v6:/etc/iptables/rules.v6:ro + net: /run/netns/nginx + - name: firewall-sshd + image: linuxkit/ip:284c21791d8c05c49eccbd8e8cc2fb97bbd61842 + command: ["/bin/bash", "-c", "/sbin/iptables-restore < /etc/iptables/rules-sshd.v4; /sbin/ip6tables-restore < /etc/iptables/rules.v6" ] + binds: + - /etc/iptables/rules-sshd.v4:/etc/iptables/rules-sshd.v4:ro + - /etc/iptables/rules.v6:/etc/iptables/rules.v6:ro + net: /run/netns/sshd + +services: + - name: rngd + image: linuxkit/rngd:94e01a4b16fadb053455cdc2269c4eb0b39199cd + - name: nginx + image: nginx:alpine + capabilities: + - CAP_NET_BIND_SERVICE + - CAP_CHOWN + - CAP_SETUID + - CAP_SETGID + - CAP_DAC_OVERRIDE + binds: + - /etc/hosts:/etc/hosts:ro + - /etc/resolv.conf:/etc/resolv.conf:ro + - /etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro + - /etc/nginx/ssl/:/etc/nginx/ssl/:ro + - /etc/nginx/fic-auth.conf:/etc/nginx/fic-auth.conf:ro + - /www/htdocs-frontend:/srv/htdocs-frontend:ro + - /var/lib/fic/files:/srv/FILES:ro + - /var/lib/fic/pki:/srv/PKI:ro + - /var/lib/fic/settings:/srv/SETTINGS:ro + - /var/lib/fic/startingblock:/srv/startingblock:ro + - /var/lib/fic/teams:/srv/TEAMS:ro + net: /run/netns/nginx + pid: new + ipc: new + uts: new + runtime: + mkdir: + - /var/lib/fic/files + - /var/lib/fic/pki + - /var/lib/fic/startingblock + - /var/lib/fic/teams + - name: fic-frontend + image: nemunaire/fic-frontend:latest + command: ["/srv/frontend", "-bind=:8080", "-startedFile=/srv/startingblock/started"] + binds: + - /etc/hosts:/etc/hosts:ro + - /var/lib/fic/files:/srv/FILES:ro + - /var/lib/fic/settings:/srv/SETTINGS:ro + - /var/lib/fic/startingblock:/srv/startingblock + - /var/lib/fic/submissions:/srv/submissions + - /var/lib/fic/teams:/srv/TEAMS:ro + net: /run/netns/fic-frontend + runtime: + mkdir: + - /var/lib/fic/files + - /var/lib/fic/settings + - /var/lib/fic/startingblock + - /var/lib/fic/submissions + - /var/lib/fic/teams + - name: sshd + image: nemunaire/rsync:f66273f042b8a2976fe4af2425943df913b18088 + binds: + - /etc/hosts:/etc/hosts:ro + - /root/.ssh/id_synchro.pub:/root/.ssh/authorized_keys:ro + - /var/lib/fic/files:/srv/FILES + - /var/lib/fic/pki:/srv/PKI + - /var/lib/fic/settings:/srv/SETTINGS + - /var/lib/fic/submissions:/srv/submissions + - /var/lib/fic/teams:/srv/TEAMS + net: /run/netns/sshd + pid: new + ipc: new + uts: new + runtime: + mkdir: + - /var/lib/fic/files + - /var/lib/fic/pki + - /var/lib/fic/settings + - /var/lib/fic/submissions + - /var/lib/fic/teams + + - name: dhcp-server + image: joebiellik/dhcpd + binds: + - /etc/dhcp/dhcpd.conf:/etc/dhcp/dhcpd.conf:ro + capabilities: + - CAP_NET_BIND_SERVICE + - CAP_NET_RAW + - CAP_DAC_OVERRIDE + net: /run/netns/nginx + pid: new + ipc: new + uts: new + - name: dns-server + image: sapcc/unbound + binds: + - /etc/unbound/unbound.conf:/etc/unbound/unbound.conf:ro + capabilities: + - CAP_NET_BIND_SERVICE + net: /run/netns/nginx + pid: new + ipc: new + uts: new + + +files: + - path: etc/nginx/ssl/dhparams-4096.pem + source: configs/dhparams-4096.pem + mode: "0444" + - path: etc/nginx/ssl/fullchain.pem + source: configs/fic.srs.epita.fr/fullchain.pem + mode: "0444" + - path: etc/nginx/ssl/privkey.pem + source: configs/fic.srs.epita.fr/privkey.pem + mode: "0440" + + - path: etc/hosts + source: configs/hosts + mode: "0644" + - path: root/.ssh/authorized_keys + source: configs/authorized_keys + mode: "0400" + - path: root/.ssh/id_synchro.pub + source: configs/id_ed25519.pub + mode: "0400" + + - path: etc/dhcp/dhcpd.conf + source: configs/dhcpd.conf + mode: "0400" + - path: etc/nginx/conf.d/default.conf + source: configs/nginx-prod.conf + mode: "0400" + - path: etc/nginx/fic-auth.conf + source: configs/fic-auth.conf + mode: "0400" + + - path: www/htdocs-frontend + directory: true + mode: "0755" + - path: www/htdocs-frontend/e500.html + source: frontend/static/e500.html + mode: "0644" + - path: www/htdocs-frontend/img/srs.png + source: frontend/static/img/srs.png + mode: "0644" + - path: www/htdocs-frontend/img/fic.png + source: frontend/static/img/fic.png + mode: "0644" + - path: www/htdocs-frontend/img/logo-epita-bw.png + source: frontend/static/img/logo-epita-bw.png + mode: "0644" + - path: www/htdocs-frontend/img/epita.png + source: frontend/static/img/epita.png + mode: "0644" + - path: www/htdocs-frontend/img/rcc.png + source: frontend/static/img/rcc.png + mode: "0644" + - path: www/htdocs-frontend/favicon.ico + source: frontend/static/favicon.ico + mode: "0644" + - path: www/htdocs-frontend/e404.html + source: frontend/static/e404.html + mode: "0644" + - path: www/htdocs-frontend/css/bootstrap.min.css + source: frontend/static/css/bootstrap.min.css + mode: "0644" + - path: www/htdocs-frontend/css/fic.css + source: frontend/static/css/fic.css + mode: "0644" + - path: www/htdocs-frontend/css/glyphicon.css + source: frontend/static/css/glyphicon.css + mode: "0644" + - path: www/htdocs-frontend/js/i18n/angular-locale_fr-fr.js + source: frontend/static/js/i18n/angular-locale_fr-fr.js + mode: "0644" + - path: www/htdocs-frontend/js/angular-sanitize.min.js + source: frontend/static/js/angular-sanitize.min.js + mode: "0644" + - path: www/htdocs-frontend/js/d3.v3.min.js + source: frontend/static/js/d3.v3.min.js + mode: "0644" + - path: www/htdocs-frontend/js/common.js + source: frontend/static/js/common.js + mode: "0644" + - path: www/htdocs-frontend/js/angular.min.js + source: frontend/static/js/angular.min.js + mode: "0644" + - path: www/htdocs-frontend/js/challenge.js + source: frontend/static/js/challenge.js + mode: "0644" + - path: www/htdocs-frontend/js/public.js + source: frontend/static/js/public.js + mode: "0644" + - path: www/htdocs-frontend/js/bootstrap.min.js + source: frontend/static/js/bootstrap.min.js + mode: "0644" + - path: www/htdocs-frontend/js/popper.min.js + source: frontend/static/js/popper.min.js + mode: "0644" + - path: www/htdocs-frontend/js/jquery.min.js + source: frontend/static/js/jquery.min.js + mode: "0644" + - path: www/htdocs-frontend/js/angular-animate.min.js + source: frontend/static/js/angular-animate.min.js + mode: "0644" + - path: www/htdocs-frontend/js/angular-route.min.js + source: frontend/static/js/angular-route.min.js + mode: "0644" + - path: www/htdocs-frontend/e413.html + source: frontend/static/e413.html + mode: "0644" + - path: www/htdocs-frontend/fonts/glyphicons-halflings-regular.woff2 + source: frontend/static/fonts/glyphicons-halflings-regular.woff2 + mode: "0644" + - path: www/htdocs-frontend/fonts/glyphicons-halflings-regular.woff + source: frontend/static/fonts/glyphicons-halflings-regular.woff + mode: "0644" + - path: www/htdocs-frontend/fonts/glyphicons-halflings-regular.eot + source: frontend/static/fonts/glyphicons-halflings-regular.eot + mode: "0644" + - path: www/htdocs-frontend/fonts/glyphicons-halflings-regular.ttf + source: frontend/static/fonts/glyphicons-halflings-regular.ttf + mode: "0644" + - path: www/htdocs-frontend/fonts/glyphicons-halflings-regular.svg + source: frontend/static/fonts/glyphicons-halflings-regular.svg + mode: "0644" + - path: www/htdocs-frontend/welcome.html + source: frontend/static/welcome.html + mode: "0644" + - path: www/htdocs-frontend/public.html + source: frontend/static/public.html + mode: "0644" + - path: www/htdocs-frontend/index.html + source: frontend/static/index.html + mode: "0644" + - path: www/htdocs-frontend/views/videos.html + source: frontend/static/views/videos.html + mode: "0644" + - path: www/htdocs-frontend/views/home.html + source: frontend/static/views/home.html + mode: "0644" + - path: www/htdocs-frontend/views/theme.html + source: frontend/static/views/theme.html + mode: "0644" + - path: www/htdocs-frontend/views/rank.html + source: frontend/static/views/rank.html + mode: "0644" + - path: www/htdocs-frontend/views/register.html + source: frontend/static/views/register.html + mode: "0644" + - path: www/htdocs-frontend/views/rules.html + source: frontend/static/views/rules.html + mode: "0644" + - path: www/htdocs-frontend/views/team-edit.html + source: frontend/static/views/team-edit.html + mode: "0644" + - path: www/htdocs-frontend/robots.txt + source: frontend/static/robots.txt + mode: "0644" + + - path: etc/iptables/rules.v6 + contents: | + *filter + :INPUT DROP [0:0] + :FORWARD DROP [0:0] + :OUTPUT DROP [0:0] + COMMIT + mode: "0440" + - path: etc/iptables/rules-sshd.v4 + contents: | + *filter + :INPUT DROP [0:0] + :FORWARD DROP [0:0] + :OUTPUT DROP [0:0] + [0:0] -A INPUT -i lo -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate INVALID -j DROP + [0:0] -A INPUT -p icmp -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A INPUT -i eth0 -s 10.10.10.0/29 -p tcp -m conntrack --ctstate NEW -m tcp --dport ssh -j ACCEPT + [0:0] -A INPUT -j LOG + [0:0] -A FORWARD -j LOG + [0:0] -A OUTPUT -o lo -j ACCEPT + [0:0] -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A OUTPUT -j LOG + [0:0] -A OUTPUT -j REJECT + COMMIT + mode: "0440" + - path: etc/iptables/rules-frontal.v4 + contents: | + *filter + :INPUT DROP [0:0] + :FORWARD DROP [0:0] + :OUTPUT DROP [0:0] + [0:0] -A INPUT -i lo -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate INVALID -j DROP + [0:0] -A INPUT -p icmp --icmp-type 8 -j ACCEPT + [0:0] -A INPUT -p icmp --icmp-type 0 -j ACCEPT + [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A INPUT -i bond-frontal -p tcp -m conntrack --ctstate NEW -m tcp --dport http -j ACCEPT + [0:0] -A INPUT -i bond-frontal -p tcp -m conntrack --ctstate NEW -m tcp --dport https -j ACCEPT + [0:0] -A INPUT -j LOG + [0:0] -A FORWARD -j LOG + [0:0] -A OUTPUT -o lo -j ACCEPT + [0:0] -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT + [0:0] -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT + [0:0] -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + [0:0] -A OUTPUT -i vethin-nginx -d 172.17.1.3 -p tcp -m conntrack --ctstate NEW -m tcp --dport 8080 -j ACCEPT + [0:0] -A OUTPUT -j LOG + [0:0] -A OUTPUT -j REJECT + COMMIT + mode: "0440" + +trust: + org: + - linuxkit + - library