Created
June 17, 2021 08:53
-
-
Save regilero/8c18e3cd3184e6d9e244b39cd1441f6a to your computer and use it in GitHub Desktop.
docker-compose stack for security courses
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version: '3' | |
# Fichier docker-compose.yml | |
# TP Sécurité Web | |
# -------------- | |
# * DVWA: Damn Vulnerable Web Application (apache/php5.6/MySQL) | |
# * Varnish: Serveur Reverse Proxy mis en place devant Nodegoat | |
# * NodeGoat: Application NodeJs+MongoDb Vulnerable | |
# | |
# local |docker-compose, réseau interne | |
# | | |
# localhost:8000 | +---------+ +----------+ +-----------+ | |
# | [8000]| | varnish | | nodegoat | | mongodb | | |
# \------------|----+[80] +---+[4000] +---+[27017] | | |
# | | | | (nodeJs) | | | | |
# | | 264MB | | 522MB | | 419MB | | |
# | +---------+ +----------+ +-----------+ | |
# | | |
# localhost:8021 | +-----------------+ +-----------+ | |
# | [8021]| | dvwa | | db | | |
# \------------|----+[80] +----------+[3306] | | |
# | | (Apache + php5) | | (MySQL) | | |
# | | 419MB | | 448MB | | |
# | +-----------------+ +-----------+ | |
# | |
# # Pré-requis | |
# -------------- | |
# - docker | |
# - docker-compose | |
# - nous allons essayer de prendre les ports TCP/IP 8000 et 8021 de votre | |
# machine, vérifiez donc qu'ils ne soit pas déjà pris par un autre service | |
# (par exemple un Nginx, Apache ou autre qui serait réglé par le plus grand | |
# des hasards sur ces mêmes ports). | |
# Pour installer docker c'est très facile sur un Linux (regardez dans google) | |
# Sur windows il faut installer Docker Desktop ou bien utiliser le linux caché | |
# dans les nouveaux windows (WSL2) -- ce dernier étant la melleure solution --. | |
# Installez git-bash aussi si vous ne l'avez pas encore. | |
# - https://docs.docker.com/docker-for-windows/install/ | |
# - https://docs.docker.com/docker-for-windows/wsl/ | |
# Si vous n'arrivez pas à installer docker-desktop sur Windows | |
# - https://chocolatey.org/install | |
# - https://stefanscherer.github.io/get-started-with-docker-on-windows-using-chocolatey/ | |
# | |
# | |
# # Utilisation | |
# -------------- | |
# - Mettez ce fichier dans un dossier vide destiné à héberger le projet | |
# - Allez dans ce dossier avec une console (un shell), c'est à partir de | |
# ce dossier que vous pourrez lancer les commandes docker-compse | |
# - Lancez le projet: | |
# * soit avec: | |
# | |
# docker-compose up | |
# | |
# * soit avec: | |
# | |
# docker-compose up -d | |
# | |
# La première commande garde l'ensemble des dockers attachés à l'écran, et | |
# permet d'avoir le log de chaque service en direct. Mais il faut ouvrir | |
# d'autres sessions de console pour pouvoir taper d'autres commandes. On sort | |
# avec CONTROl+C. | |
# La deuxième avec le '-d' permet de le mode 'détaché'. Où l'ensemble des services | |
# tourne en tâche de fond sans que la sortie ne soit attachée à votre session. | |
# La première fois qu'on utilise ce 'cluster' les images de base sont | |
# téléchargées et donc c'est un peu long. Mais les fois suivantes ce sera très | |
# rapide. | |
# | |
# Une fois le cluster lancé voici les commandes utiles: | |
# | |
# * lister l'état du cluster | |
# | |
# docker-compose ps | |
# | |
# ce qui donne à peu près: | |
# zorg@rickroll:~/foobar$ docker-compose ps | |
# Name Command State Ports | |
# ---------------------------------------------------------------------------------- | |
# foobar_db_1 docker-entrypoint.sh --def ... Up 3306/tcp, 33060/tcp | |
# foobar_dvwa_1 apachectl -D FOREGROUND Up 0.0.0.0:8021->80/tcp | |
# foobar_mongodb_1 docker-entrypoint.sh --wir ... Up 27017/tcp | |
# foobar_nodegoat_1 sh -c sleep 15 && /init.sh ... Up | |
# foobar_varnish_1 /start.sh Up 0.0.0.0:8000->80/tcp | |
# | |
# | |
# * arrêter le cluster | |
# | |
# docker-compose stop | |
# # ou | |
# docker-compose down | |
# | |
# * voir les logs d'un des services: dans le 'ps' ci-dessus je vois que le service | |
# 'nodegoat' se nomme en fait 'foobar_nodegoat_1'. Ce nom long est le nom du docker, et je peux donc le logger ainsi: | |
# | |
# docker logs foobar_nodegoat_1 | |
# # ou | |
# docker logs -f foobar_nodegoat_1 | |
# | |
# | |
# * Se connecter en shell dans un des services (dvwa, nodegoat, varnish, db ou mongodb) | |
# ici par exemple sur dvwa (notez qu'il n'y a donc pas besoin de ssh ni de taper | |
# les horribles commandes docker du type docker run --rm -it kekchose /bin/bash) | |
# | |
# docker-compose exec dvwa /bin/bash | |
# # Si vous utilisez git-bash sous windows il faut parfois faire ceci plutôt: | |
# docker-compose exec dvwa //bin/bash | |
# # Ou si vous avez des messages d'erreur à propos d'un tty manquant: | |
# winpty docker-compose exec dvwa //bin/bash | |
# | |
# * Lancer une commande sur un des services (ici par exemple un ls sur le docker nodegoat) | |
# | |
# docker-compose exec nodegoat 'ls -alh /home/user/project' | |
# # ou : | |
# winpty docker-compose exec nodegoat 'ls -alh /home/user/project' | |
# | |
# # Accéder aux services | |
# ---------------------- | |
# | |
# Tant que le docker-compose toune vous avez normalement accès aux services sur | |
# ces deux URL: | |
# | |
# * http://localhost:8000 | |
# * http://localhost:8021 | |
# | |
# # Utilisation avancée: DVWA | |
# --------------------------- | |
# | |
# http://dvwa.example.com:8021/setup.php (reset de la base) | |
# | |
# le projet dvwa fournit un service apache qui réponds effectivement sur le nom | |
# 'localhost', mais avec quelque chose qui n'est pas très utile. | |
# Il y a plusieurs 'VirtualHosts par nom' dans ce service, et il s'attends en | |
# fait à être interrogé sur les noms de domaine: | |
# * www.example.com | |
# * dvwa.example.com | |
# Hors vous ne possédez pas, à priori, le droit de faire pointer ces enregistrements | |
# vers 127.0.0.1 dans un serveur DNS officiel. | |
# il faut donc jouer avec votre fichier local 'hosts' (/etc/hosts sous Linux et | |
# quelque part caché dans /C:\Windows\System32\drivers sour Windows de mémoire) | |
# et ajouter ces 2 faux enregistrements DNS: | |
# ------- | |
# 127.0.0.1 www.example.com | |
# 127.0.0.1 dvwa.example.com | |
# ------- | |
# Après cela vous pourrez accéder à : | |
# * http://www.example.com:8021 | |
# * http://dvwa.example.com:8021 | |
# * http://www.example.com:8000 | |
# | |
# La base MySQL s'initialise sur | |
# * http://dvwa.example.com:8021/config/ | |
# | |
# # Utilisation avancée: NodeGoat | |
# ------------------------------- | |
# | |
# La base mongodb est réinitialisée à chaque down/up mais vous pouvez le faire | |
# à tout moment avec cette commande, qui donne des détails sur les lignes | |
# injectées en base, et donc par exemple des comptes utilisateur | |
# | |
# docker-compose exec nodegoat /init.sh | |
# Nodegoat est sur http://www.example.com:8000 | |
# l'aide de NoGoat est sur http://www.example.com:8000/tutorial | |
# | |
services: | |
db: | |
image: mysql:5.7 | |
command: --default-authentication-plugin=mysql_native_password | |
restart: unless-stopped | |
environment: | |
MYSQL_ROOT_PASSWORD: "insecure" | |
MYSQL_DATABASE: "dvwa" | |
MYSQL_USER: "dvwa" | |
MYSQL_PASSWORD: "p@ssw0rd" | |
volumes: | |
- db_data:/var/lib/mysql | |
dvwa: | |
image: regilero/insecure:dvwa1.0 | |
restart: unless-stopped | |
tty: true | |
depends_on: | |
- db | |
links: | |
- db:db | |
ports: | |
- 8021:80 | |
nodegoat: | |
image: regilero/insecure:nodegoat1.0 | |
tty: true | |
depends_on: | |
- mongodb | |
links: | |
- mongodb:mongodb | |
# that sleep 15 is ugly, a real production stuff would use 'dockerize' | |
command: ["sh", "-c", "sleep 15 && /init.sh && /start.sh"] | |
environment: | |
MONGODB_URL: "mongodb://mongodb:27017/nodegoat" | |
NODE_ENV: "production" | |
HOSTNAME: "localhost:8000" | |
mongodb: | |
image: mongo:4.0-xenial | |
restart: unless-stopped | |
environment: | |
DATABASE_AUTHENTICATION: "false" | |
command: --wiredTigerCacheSizeGB 0.2 | |
volumes: | |
- mongodb_data:/data/db | |
varnish: | |
image: regilero/insecure:varnish1.0 | |
restart: unless-stopped | |
depends_on: | |
- nodegoat | |
- mongodb | |
links: | |
- nodegoat:nodegoat | |
ports: | |
- 8000:80 | |
volumes: | |
db_data: | |
mongodb_data: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment