Files
CoM-c2itall/common/tasks/initial-infrastructure.yml
T
2025-07-04 23:48:04 -04:00

85 lines
3.3 KiB
YAML

---
# Linode/initial-infrastructure.yml
# This playbook only creates the Linode instances without trying to configure them
# This separation makes the deployment more reliable
- name: Create Linode infrastructure
hosts: localhost
gather_facts: false
connection: local
vars_files:
- vars.yaml
vars:
# Default values if not provided
ssh_user: "{{ ssh_user | default('root') }}"
linode_region: "{{ linode_region | default(region_choices | random) }}"
plan: "{{ plan | default('g6-standard-2') }}"
image: "{{ image | default('linode/kali') }}"
# Determine what to deploy based on configuration
deploy_redirector: "{{ not (c2_only | default(false)) }}"
deploy_c2: "{{ not (redirector_only | default(false)) }}"
# Generate random names if not provided
redirector_name: "{{ redirector_name | default('srv-' + 100000000 | random | to_uuid | hash('md5') | truncate(8, True, '')) }}"
c2_name: "{{ c2_name | default('node-' + 100000000 | random | to_uuid | hash('md5') | truncate(8, True, '')) }}"
tasks:
- name: Validate required Linode token
assert:
that:
- linode_token is defined and linode_token != ""
fail_msg: "Linode API token is required. Set linode_token in vars.yaml or via --linode-token."
- name: Create redirector Linode instance
community.general.linode_v4:
access_token: "{{ linode_token }}"
label: "{{ redirector_name }}"
type: "{{ plan }}"
region: "{{ linode_region }}"
image: "{{ image }}"
root_pass: "{{ lookup('password', '/dev/null length=24 chars=ascii_letters,digits') }}"
authorized_keys:
- "{{ lookup('file', ssh_key_path) }}"
state: present
register: redirector_instance
when: deploy_redirector
- name: Set redirector_ip for later use
set_fact:
redirector_instance_id: "{{ redirector_instance.instance.id }}"
redirector_ip: "{{ redirector_instance.instance.ipv4[0] }}"
when: deploy_redirector and redirector_instance is defined
- name: Create C2 Linode instance
community.general.linode_v4:
access_token: "{{ linode_token }}"
label: "{{ c2_name }}"
type: "{{ plan }}"
region: "{{ linode_region }}"
image: "{{ image }}"
root_pass: "{{ lookup('password', '/dev/null length=24 chars=ascii_letters,digits') }}"
authorized_keys:
- "{{ lookup('file', ssh_key_path) }}"
state: present
register: c2_instance
when: deploy_c2
- name: Set c2_ip for later use
set_fact:
c2_instance_id: "{{ c2_instance.instance.id }}"
c2_ip: "{{ c2_instance.instance.ipv4[0] }}"
when: deploy_c2 and c2_instance is defined
- name: Display instance information
debug:
msg:
- "Linode instances created successfully!"
- "Waiting for instances to initialize..."
- "{{ 'Redirector IP: ' + redirector_ip if redirector_ip is defined else 'No redirector deployed' }}"
- "{{ 'C2 Server IP: ' + c2_ip if c2_ip is defined else 'No C2 server deployed' }}"
- name: Wait for instances to initialize (30 seconds)
pause:
seconds: 30
when: (deploy_redirector and redirector_instance is defined) or (deploy_c2 and c2_instance is defined)