Initial commit
This commit is contained in:
12
README.md
Normal file
12
README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# DVWA Proxy Project
|
||||
|
||||
Run `ansible-playbook tasks/main.yml` to start the install process.
|
||||
This project makes the assumption that any host setup within the inventory file, will be deployed to.
|
||||
|
||||
Normal reverse proxy will open on the hosts port 80 (HTTP) and 443 (HTTPS), as well as (8080) with a WAF proxy.
|
||||
HTTPS certificates will be generated at deployment; these certificates are self-signed.
|
||||
|
||||
Current tested distros:
|
||||
- CentOS 8 Stream
|
||||
- Ubuntu 20.04
|
||||
|
||||
0
files/default.conf
Normal file
0
files/default.conf
Normal file
20
files/dvwa-proxy.conf
Normal file
20
files/dvwa-proxy.conf
Normal file
@@ -0,0 +1,20 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
location / {
|
||||
proxy_pass http://dvwa;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
ssl_certificate /etc/ssl/cert.crt;
|
||||
ssl_certificate_key /etc/ssl/private/key.priv;
|
||||
|
||||
server_name _;
|
||||
|
||||
location / {
|
||||
proxy_pass http://dvwa;
|
||||
}
|
||||
}
|
||||
12
handlers/main.yml
Normal file
12
handlers/main.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
- name: Init Docker
|
||||
service:
|
||||
name: docker
|
||||
state: started
|
||||
enabled: "true"
|
||||
|
||||
- name: Restart Docker DVWA
|
||||
service:
|
||||
name: dvwa-docker
|
||||
state: restarted
|
||||
...
|
||||
4
tasks/Install-Docker-Debian18.yml
Normal file
4
tasks/Install-Docker-Debian18.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
- name: Include Ubuntu20 Tasks
|
||||
include_tasks: ./Install-Docker-Debian20.yml
|
||||
...
|
||||
12
tasks/Install-Docker-Debian20.yml
Normal file
12
tasks/Install-Docker-Debian20.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
- name: Install Docker and Docker Compose (and Pip)
|
||||
package:
|
||||
name: "{{ package_name }}"
|
||||
state: present
|
||||
loop:
|
||||
- docker
|
||||
- docker-compose
|
||||
- python3-pip
|
||||
loop_control:
|
||||
loop_var: package_name
|
||||
...
|
||||
19
tasks/Install-Docker-RedHat8.yml
Normal file
19
tasks/Install-Docker-RedHat8.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
- name: Download Docker CE Repository Defs
|
||||
get_url:
|
||||
url: https://download.docker.com/linux/centos/docker-ce.repo
|
||||
dest: /etc/yum.repos.d/docker-ce.repo
|
||||
|
||||
- name: Install Docker
|
||||
package:
|
||||
name: docker-ce
|
||||
state: present
|
||||
notify:
|
||||
- Init Docker
|
||||
|
||||
- name: Install Docker Compose from GitHub Repo
|
||||
get_url:
|
||||
url: "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-{{ ansible_system }}-{{ ansible_architecture }}"
|
||||
dest: /usr/bin/docker-compose
|
||||
mode: "0755"
|
||||
...
|
||||
30
tasks/Setup-Certs.yml
Normal file
30
tasks/Setup-Certs.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
- name: Create DVWA Certs Directory
|
||||
file:
|
||||
path: /opt/dvwa-docker/certs
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0700"
|
||||
|
||||
- name: Generate OpenSSL Priv Key
|
||||
openssl_privatekey:
|
||||
path: /opt/dvwa-docker/certs/key.priv
|
||||
size: 4096
|
||||
type: RSA
|
||||
|
||||
- name: Generate OpenSSL CSR
|
||||
openssl_csr:
|
||||
path: /opt/dvwa-docker/certs/cert.csr
|
||||
privatekey_path: /opt/dvwa-docker/certs/key.priv
|
||||
country_name: US
|
||||
organization_name: ACME
|
||||
common_name: localhost
|
||||
|
||||
- name: Generate Self Signed Cert
|
||||
openssl_certificate:
|
||||
path: /opt/dvwa-docker/certs/cert.crt
|
||||
privatekey_path: /opt/dvwa-docker/certs/key.priv
|
||||
csr_path: /opt/dvwa-docker/certs/cert.csr
|
||||
provider: selfsigned
|
||||
...
|
||||
14
tasks/Setup-DVWA-Docker-Network.yml
Normal file
14
tasks/Setup-DVWA-Docker-Network.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Generate DVWA Network
|
||||
community.docker.docker_network:
|
||||
name: dvwa-net
|
||||
|
||||
- name: Pull DVWA Network Information
|
||||
community.docker.docker_network_info:
|
||||
name: dvwa-net
|
||||
register: docker_network_stdout
|
||||
|
||||
- set_fact:
|
||||
docker_network_base: '{{ docker_network_stdout.network.IPAM.Config[0].Subnet | regex_replace("^(.*)\.[0-9]{1,3}/[0-9]{2}$", "\1") }}'
|
||||
docker_network_prefix: '{{ docker_network_stdout.network.IPAM.Config[0].Subnet | regex_replace("^.*\.[0-9]{1,3}/([0-9]{2})$", "\1") }}'
|
||||
...
|
||||
64
tasks/Setup-Docker-Env.yml
Normal file
64
tasks/Setup-Docker-Env.yml
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
- name: Pull Docker Images
|
||||
community.docker.docker_image:
|
||||
name: "{{ docker_image_name }}"
|
||||
source: pull
|
||||
loop:
|
||||
- nginx:latest
|
||||
- httpd:latest
|
||||
- sagikazarmark/dvwa:latest
|
||||
- owasp/modsecurity-crs:apache
|
||||
loop_control:
|
||||
loop_var: docker_image_name
|
||||
|
||||
- name: Create DVWA Docker Service Directory
|
||||
file:
|
||||
path: /opt/dvwa-docker
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0700"
|
||||
|
||||
- name: Create Nginx Conf Directory
|
||||
file:
|
||||
path: /opt/dvwa-docker/nginx
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0700"
|
||||
|
||||
- name:
|
||||
include_tasks: Setup-Certs.yml
|
||||
|
||||
- name: Copy Compose File
|
||||
template:
|
||||
src: ../templates/docker-compose.yml.j2
|
||||
dest: /opt/dvwa-docker/docker-compose.yml
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0600"
|
||||
notify: Restart Docker DVWA
|
||||
|
||||
- name: Copy Docker Compose Service File
|
||||
template:
|
||||
src: ../templates/docker-compose.service.j2
|
||||
dest: /usr/lib/systemd/system/dvwa-docker.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: Restart Docker DVWA
|
||||
|
||||
- name: Copy Nginx Config Files
|
||||
copy:
|
||||
src: "../files/{{ nginx_conf_files }}"
|
||||
dest: "/opt/dvwa-docker/nginx/{{ nginx_conf_files }}.template"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
loop:
|
||||
- dvwa-proxy.conf
|
||||
- default.conf
|
||||
loop_control:
|
||||
loop_var: nginx_conf_files
|
||||
notify: Restart Docker DVWA
|
||||
...
|
||||
45
tasks/main.yml
Normal file
45
tasks/main.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
- name: DVWA Harden Project
|
||||
hosts: all
|
||||
become: "true"
|
||||
handlers:
|
||||
- import_tasks: ../handlers/main.yml
|
||||
tasks:
|
||||
- name: Include OS Specific Docker Install
|
||||
include_tasks: "Install-Docker-{{ ansible_os_family }}{{ ansible_distribution_major_version }}.yml"
|
||||
|
||||
- name: Flush handlers to Start Docker if Changed
|
||||
meta: flush_handlers
|
||||
|
||||
- name: Ensure Docker Is Running
|
||||
service:
|
||||
name: docker
|
||||
state: started
|
||||
|
||||
- name: Grab docker-compose Install Location
|
||||
command: which docker-compose
|
||||
register: dockercomposeshellstdout
|
||||
|
||||
- set_fact:
|
||||
dockercompose_location: "{{ dockercomposeshellstdout.stdout }}"
|
||||
|
||||
- name: Upgrade Pip
|
||||
pip:
|
||||
name: pip
|
||||
state: latest
|
||||
|
||||
- name: Install Docker Pip Packages (Needed for docker module)
|
||||
pip:
|
||||
name: "{{ pip_package }}"
|
||||
loop:
|
||||
- docker>4.4.4
|
||||
- cryptography>=1.2.3
|
||||
loop_control:
|
||||
loop_var: pip_package
|
||||
|
||||
- name: Setup DVWA Docker ENV
|
||||
include_tasks: Setup-DVWA-Docker-Network.yml
|
||||
|
||||
- name: Setup Docker ENV
|
||||
include_tasks: Setup-Docker-Env.yml
|
||||
...
|
||||
16
templates/docker-compose.service.j2
Normal file
16
templates/docker-compose.service.j2
Normal file
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Docker DVWA Hardened Service
|
||||
Requires=docker.service
|
||||
After=docker.service
|
||||
|
||||
[Service]
|
||||
Restart=always
|
||||
User=root
|
||||
Group=docker
|
||||
WorkingDirectory=/opt/dvwa-docker
|
||||
ExecStartPre={{ dockercompose_location }} -f docker-compose.yml down
|
||||
ExecStart={{ dockercompose_location }} -f docker-compose.yml up
|
||||
ExecStop={{ dockercompose_location }} -f docker-compose.yml down
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
31
templates/docker-compose.yml.j2
Normal file
31
templates/docker-compose.yml.j2
Normal file
@@ -0,0 +1,31 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:latest
|
||||
volumes:
|
||||
- /opt/dvwa-docker/nginx:/etc/nginx/templates
|
||||
- /opt/dvwa-docker/certs/cert.crt:/etc/ssl/cert.crt
|
||||
- /opt/dvwa-docker/certs/key.priv:/etc/ssl/private/key.priv
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
depends_on:
|
||||
- dvwa
|
||||
|
||||
modsec:
|
||||
image: owasp/modsecurity-crs:apache
|
||||
environment:
|
||||
- BACKEND=http://dvwa
|
||||
ports:
|
||||
- "8080:80"
|
||||
depends_on:
|
||||
- dvwa
|
||||
|
||||
dvwa:
|
||||
image: sagikazarmark/dvwa:latest
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: dvwa-net
|
||||
Reference in New Issue
Block a user