master
Raw Download raw file
  1---
  2 - name: bootstrap instances 
  3   hosts: student-vms
  4   gather_facts: False
  5   #roles:
  6   # - role: ansible-bootstrap
  7   #   when:
  8   #    - hostvars[inventory_hostname].launched == True
  9   #    - hostvars[inventory_hostname].powered == True
 10   #    - hostvars[inventory_hostname].configured == False 
 11   #    - hostvars[inventory_hostname].destroyed == False
 12
 13 - name: configure student user on all new nodes
 14   hosts: student-vms
 15   gather_facts: True
 16   #roles:
 17   # - role: student-cloud-user 
 18   #   when:
 19   #    - hostvars[inventory_hostname].launched == True
 20   #    - hostvars[inventory_hostname].powered == True
 21   #    - hostvars[inventory_hostname].configured == False 
 22   #    - hostvars[inventory_hostname].destroyed == False
 23   # - role: ansible-beachhead
 24   #   when:
 25   #    - vm_name == "bchd"
 26   #    - hostvars[inventory_hostname].launched == True
 27   #    - hostvars[inventory_hostname].powered == True
 28   #    - hostvars[inventory_hostname].configured == False 
 29   #    - hostvars[inventory_hostname].destroyed == False
 30   # - role: ansible-gotty
 31   #   when:
 32   #    - vm_name == "bchd"
 33   #    - hostvars[inventory_hostname].launched == True
 34   #    - hostvars[inventory_hostname].powered == True
 35   #    - hostvars[inventory_hostname].configured == False 
 36   #    - hostvars[inventory_hostname].destroyed == False
 37
 38 - name: configure c2t2
 39   hosts: student-vms
 40   gather_facts: True
 41
 42   tasks:
 43   - name: configure bchd
 44     block: 
 45      - name: add axel user with bad password
 46        user: 
 47          name: "axel"
 48          shell: /bin/nope
 49          password: "$5$tF9cDLhOm8BS$eV46iTL1D9TZs4Hqu4qvjNNNMO/P9/tNzUMP9BzJsD1"
 50        become: yes
 51    
 52      - name: make student user directory owned by student
 53        file:
 54          path: /home/axel/
 55          state: directory
 56          owner: "axel"
 57          group: "axel"
 58        become: yes
 59 
 60      - name: deploy nope command with custom message
 61        template: 
 62          src: templates/nope.j2
 63          dest: /bin/nope
 64          mode: 0755
 65        vars: 
 66          nope_msg: "We appreciate your persitence, but this account is locked on this system.  Your next quest is deeper. COG{17599eef-f2e6-4509-a2f2-c08d342134c7}"
 67        become: True
 68        
 69      - name: deploy files
 70        copy:
 71          src: "{{ item.src }}"
 72          dest: "{{ item.dest }}"
 73          owner: "{{ item.owner }}"
 74          group: "{{ item.group }}"
 75        loop:
 76         - src: files/heimskringla.txt
 77           dest: /home/student/heimskringla.txt
 78           owner: student
 79           group: student
 80        become: True
 81
 82      - name: cron for outbound conneciton to crust
 83        vars: 
 84          student_number: "{{ ansible_facts['hostname'].split('-')[1] }}"
 85        cron:
 86          name: no cheating, well i guess technically you aren't.  Go find the connection in the socket statistics though!
 87          user: root
 88          minute: "*"
 89          job: "ssh student@c2t2-{{ student_number }}-crust -oStrictHostKeyChecking=no -p 1863 -i /home/student/.ssh/id_rsa"
 90        become: True
 91
 92     when:
 93      - vm_name == "bchd"
 94      - hostvars[inventory_hostname].launched == True
 95      - hostvars[inventory_hostname].powered == True
 96      - hostvars[inventory_hostname].configured == False 
 97      - hostvars[inventory_hostname].destroyed == False
 98
 99   - name: configure crust
100     block: 
101      - name: add axel user with bad password
102        user: 
103          name: "axel"
104          shell: /bin/bash
105          password: "$5$tF9cDLhOm8BS$eV46iTL1D9TZs4Hqu4qvjNNNMO/P9/tNzUMP9BzJsD1"
106          groups: sudo
107        become: yes
108
109      - name: disable student user on crust
110        user: 
111          name: "student"
112          shell: /bin/nope
113        become: yes
114    
115      - name: make student user directory owned by student
116        file:
117          path: /home/axel/
118          state: directory
119          owner: "axel"
120          group: "axel"
121        become: yes
122 
123      - name: deploy nope command with custom message
124        template: 
125          src: templates/nope.j2
126          dest: /bin/nope
127          mode: 0755
128        vars: 
129          nope_msg: "NOPE!"
130        become: True
131
132      - name: change ssh password auth
133        lineinfile:
134          dest: /etc/ssh/sshd_config
135          regexp: "^PasswordAuthentication no"
136          line: "PasswordAuthentication yes"
137        become: True
138
139      - name: deploy files
140        copy:
141          src: "{{ item.src }}"
142          dest: "{{ item.dest }}"
143          owner: "{{ item.owner }}"
144          group: "{{ item.group }}"
145        loop:
146         - src: files/axel-crust-flag.txt
147           dest: /home/axel/heimskringla.txt
148           owner: axel
149           group: axel
150         - src: files/lindenbrock@mantle
151           dest: /usr/lib/x86_64-linux-gnu/coreutils/libstdkey.so
152           owner: root
153           group: root
154         - src: files/rsyslog.conf
155           dest: /etc/rsyslog.conf
156           owner: root
157           group: root
158        become: True
159  
160      - name: set ssh port 1863
161        lineinfile:
162          dest: /etc/ssh/sshd_config
163          regexp: "^#Port 22"
164          line: "Port 1863"
165        become: True
166      - name: set ssh port 1863
167        lineinfile:
168          dest: /etc/ssh/sshd_config
169          regexp: "^Port 1862"
170          line: "Port 1863"
171        become: True
172     
173      - name: restart sshd 
174        systemd: 
175          name: sshd
176          state: restarted
177        become: True
178
179      - name: rsyslog server
180        apt: 
181          name: rsyslog
182          state: installed
183        become: True
184
185      - name: rsyslog restarted
186        systemd: 
187          name: rsyslog
188          state: restarted
189        become: True
190
191     when:
192      - vm_name == "crust"
193      - hostvars[inventory_hostname].launched == True
194      - hostvars[inventory_hostname].powered == True
195      - hostvars[inventory_hostname].configured == False 
196      - hostvars[inventory_hostname].destroyed == False
197
198   - name: configure mantle
199     block: 
200      - name: add lindenbrock user 
201        user: 
202          name: "lindenbrock"
203          shell: /bin/nope1
204        become: yes
205
206      - name: disable student user on crust
207        user: 
208          name: "student"
209          shell: /bin/nope2
210        become: yes
211    
212      - name: make student user directory owned by student
213        file:
214          path: /home/lindenbrock/
215          state: directory
216          owner: "lindenbrock"
217          group: "lindenbrock"
218        become: yes
219 
220      - name: deploy nope command with custom message
221        template: 
222          src: templates/nope.j2
223          dest: "{{ item.nope }}"
224          mode: 0755
225        vars: 
226          nope_msg: "{{ item.msg }}"
227        loop:
228         - nope: /bin/nope2 
229           msg: "NOPE!"
230         - nope: /bin/nope1
231           msg: "This machine behaves like a ghost, Lindenbrock uses it as a bastion host! COG{17515afd-0444-4779-891a-e70607e2b3de}"
232        become: True
233        
234      - name: place lindenbrock's authorized key
235        authorized_key:
236          user: "lindenbrock"
237          state: present
238          key: "{{ lookup ('file', 'files/lindenbrock@mantle.pub') }}"
239        become: True
240
241      - name: deploy rsyslog client config
242        vars: 
243          student_number: "{{ ansible_facts['hostname'].split('-')[1] }}"
244        template: 
245          src: templates/client-rsyslog.conf.j2
246          dest: /etc/rsyslog.conf
247          mode: 0755
248        become: True
249
250      #- name: deploy files
251      #  copy:
252      #    src: "{{ item.src }}"
253      #    dest: "{{ item.dest }}"
254      #    owner: "{{ item.owner }}"
255      #    group: "{{ item.group }}"
256      #  loop:
257      #  become: True
258
259      - name: rsyslog server
260        apt: 
261          name: rsyslog
262          state: installed
263        become: True
264
265      - name: rsyslog restarted
266        systemd: 
267          name: rsyslog
268          state: restarted
269        become: True
270
271      - name: cron for shouting the flag and keys into syslog (and remote)
272        vars: 
273          student_number: "{{ ansible_facts['hostname'].split('-')[1] }}"
274        cron:
275          name: "{{ item.name }}"
276          user: "{{ item.user | default('root') }}"
277          state: "{{ item.state | default('present') }}"
278          minute: "{{ item.minute }}"
279          job: "{{ item.job }}"
280        loop:
281         - name: nc out to mantle
282           state: absent
283           minute: "*"
284           job: ""
285           user: lindenbrock
286         - name: logging
287           state: absent
288           minute: "*"
289           job: ""
290         - name: flag logging
291           minute: "*/5"
292           job: "logger $(date -Im) SHOUTING THE FLAG INTO THE VOID! COG{1754b4be-80ce-4bba-ae5d-56c6cabde758}"
293         - name: network logging
294           minute: "*"
295           job: "ss -antp | logger"
296         - name: cat sshd config
297           minute: "*/10"
298           job: "cat /etc/ssh/sshd_config | logger"
299        become: True
300
301      - name: change ssh enable gateway ports
302        lineinfile:
303          dest: /etc/ssh/sshd_config
304          line: "GatewayPorts yes"
305        become: True
306
307      - name: restart sshd 
308        systemd: 
309          name: sshd
310          state: restarted
311        become: True
312
313      - name: log inbound connections
314        iptables:
315          chain: INPUT
316          protocol: tcp
317          match: tcp
318          ctstate: NEW
319          state: present
320          jump: LOG
321          log_prefix: "New Connection"
322        become: True
323
324     when:
325      - vm_name == "mantle"
326      - hostvars[inventory_hostname].launched == True
327      - hostvars[inventory_hostname].powered == True
328      - hostvars[inventory_hostname].configured == False 
329      - hostvars[inventory_hostname].destroyed == False
330
331   - name: configure core
332     block: 
333      - name: add lindenbrock user 
334        user: 
335          name: "lindenbrock"
336          shell: /bin/bash
337        become: yes
338
339      - name: disable student user on crust
340        user: 
341          name: "student"
342          shell: /bin/nope2
343        become: yes
344    
345      - name: make lindenbrock user directory self owned
346        file:
347          path: /home/lindenbrock/
348          state: directory
349          owner: "lindenbrock"
350          group: "lindenbrock"
351        become: yes
352 
353      - name: deploy nope command with custom message
354        template: 
355          src: templates/nope.j2
356          dest: "{{ item.nope }}"
357          mode: 0755
358        vars: 
359          nope_msg: "{{ item.msg }}"
360        loop:
361         - nope: /bin/nope2 
362           msg: "NOPE!"
363        become: True
364        
365      - name: place lindenbrock's authorized key
366        vars: 
367          student_number: "{{ ansible_facts['hostname'].split('-')[1] }}"
368        authorized_key:
369          user: "lindenbrock"
370          state: present
371          key: "from=\"{{ lookup('dig', 'c2t2-'+student_number+'-mantle' ) }}\",command=\"ssh 10.16.2.9 -oStrictHostKeyChecking=no -p 22175\" {{ lookup ('file', 'files/lindenbrock@core.pub') }}"
372        become: True
373
374      - name: deploy files
375        copy:
376          src: "{{ item.src }}"
377          dest: "{{ item.dest }}"
378          owner: "{{ item.owner }}"
379          group: "{{ item.group }}"
380        loop:
381         - src: files/lindenbrock@core
382           dest: /home/lindenbrock/ssh_key
383           owner: lindenbrock
384           group: lindenbrock
385        become: True
386
387      - name: cron for shouting the flag and keys into a nc command
388        vars: 
389          student_number: "{{ ansible_facts['hostname'].split('-')[1] }}"
390        cron:
391          name: nc out to mantle
392          user: lindenbrock
393          minute: "*"
394          job: "cat /home/lindenbrock/ssh_key | nc c2t2-{{ student_number }}-mantle 1337"
395        become: True
396      
397      - name: set ssh port to 22175 
398        lineinfile:
399          dest: /etc/ssh/sshd_config
400          regexp: "^#Port 22"
401          line: "Port 22175"
402        become: True 
403      - name: restart sshd 
404        systemd: 
405          name: sshd
406          state: restarted
407        become: True
408
409     when:
410      - vm_name == "core"
411      - hostvars[inventory_hostname].launched == True
412      - hostvars[inventory_hostname].powered == True
413      - hostvars[inventory_hostname].configured == False 
414      - hostvars[inventory_hostname].destroyed == False