Compare commits

33 Commits

Author SHA1 Message Date
113e72401e Licensing 2024-08-09 14:57:22 +02:00
23ad0ff277 Added loopback iptables rule 2024-08-02 11:12:46 +02:00
ee8242d842 Iptables persistence finally working 2024-08-02 10:38:36 +02:00
9ad7e73946 Removed login from usertwist 2024-08-02 10:10:40 +02:00
61705dd02f Fixed persistence (maybe...) 2024-08-02 09:59:26 +02:00
95d216ccd5 Added iptables folder 2024-08-02 09:45:14 +02:00
d41bfb5aad Fixed error on iptables_state package 2024-08-02 09:31:45 +02:00
daa4a1c745 Hardened usertwist service + Saved iptables rules 2024-08-02 09:27:48 +02:00
deabcf2f69 Merge pull request 'Usertwist update' (#6) from main into dev
Reviewed-on: #6
2024-07-30 12:54:52 +00:00
a5a4c6ab90 usertwist executable 2024-07-30 14:53:12 +02:00
8336445ae8 New version of usertwist 2024-07-30 14:51:51 +02:00
82151639ab Bootstrap get dev branch instead of main 2024-07-30 14:50:57 +02:00
2082ccb5b5 Hardened systemd unit (4.8 score) 2024-07-30 14:44:15 +02:00
5ebad367b4 Convert setup_iptables to ansible role + Fix usertwist group don't exist error 2024-07-30 14:06:48 +02:00
18f2d62a24 revert d84517026d
revert Added usertwist group
2024-07-30 12:02:42 +00:00
f1fea14b41 revert 46f876f5a4
revert Edit usertwist port
2024-07-30 12:02:30 +00:00
e136006c1c revert 70d8e574b9
revert Merge branch 'main' of git.athelas-conseils.fr:Stage/ansible_playbooks
2024-07-30 12:02:16 +00:00
70d8e574b9 Merge branch 'main' of git.athelas-conseils.fr:Stage/ansible_playbooks 2024-07-30 14:00:18 +02:00
46f876f5a4 Edit usertwist port 2024-07-30 14:00:15 +02:00
d84517026d Added usertwist group 2024-07-30 13:46:11 +02:00
cb3785236d Moved roles 2024-07-30 13:40:14 +02:00
98f646a3e6 Roles test 2024-07-30 13:37:30 +02:00
e51d53adbf Edit usertwist port 2024-07-25 16:59:44 +02:00
7a237d6ac9 Merge branch 'main' of git.athelas-conseils.fr:Stage/ansible_playbooks 2024-07-25 14:00:12 +02:00
4a4e754f14 Usertwist has his own user 2024-07-25 14:00:06 +02:00
54228104d7 updated binary 2024-07-25 07:45:28 +02:00
f1dba7be06 Simple error handling with caddy 2024-07-23 14:18:32 +02:00
4609a4e033 Fix iptables config 2024-07-23 13:56:51 +02:00
4269908f8f Setup Git LFS 2024-07-23 13:41:01 +02:00
102c301149 Added gitattributes 2024-07-23 11:55:17 +02:00
9290be8110 Fixed path error for templates 2024-07-23 10:53:34 +02:00
5e7397d7be Removed absolute paths 2024-07-23 10:46:14 +02:00
147b80fd4a Updated bootstrap 2024-07-19 13:40:47 +02:00
11 changed files with 159 additions and 38 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
usertwist filter=lfs diff=lfs merge=lfs -text
files/usertwist filter=lfs diff=lfs merge=lfs -text

View File

@@ -1,28 +1,30 @@
#!/bin/sh
read -p "Enter root password" password
read -p "Enter root password : " password
# Update APT repos
sudo apt update
# Make sure python is installed
sudo apt install python3 python3-pip
sudo apt install python3 python3-pip -y
# Install pipx
sudo apt install pipx
sudo apt install pipx -y
pipx ensurepath
# Install Ansible
pipx install --include-deps ansible
# Install passlib (for ssh password connection)
sudo apt install python3-passlib
# Install sshpass (for ssh password connection) & passlib (for password encryption)
sudo apt install python3-passlib sshpass
pipx inject ansible passlib
# Make sure git is installed
sudo apt install git
# Make sure git & git-lfs are installed and configured
sudo apt install git git-lfs -y
git lfs install
# Clone ansible_playbooks repo
git clone https://git.athelas-conseils.fr/Stage/ansible_playbooks.git
git clone -b dev https://git.athelas-conseils.fr/Stage/ansible_playbooks.git
ansible-playbook ansible-playbook ansible_playbooks/tasks/full_setup.yml -i ansible_playbooks/inventory.ini
~/.local/bin/ansible-playbook ansible_playbooks/tasks/full_setup.yml -i ansible_playbooks/inventory.ini --extra-vars "ansible_ssh_pass=$password ansible_ssh_common_args='-o StrictHostKeyChecking=no'"

BIN
files/usertwist (Stored with Git LFS)

Binary file not shown.

View File

@@ -2,9 +2,20 @@
Description=Simple Web Service
[Service]
User=caddy
Group=caddy
User=usertwist
Group=usertwist
ExecStart=/usr/local/bin/usertwist
PrivateTmp=yes
NoNewPrivileges=true
RestrictNamespaces=uts ipc pid user cgroup
ProtectSystem=strict
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
PrivateDevices=yes
RestrictSUIDSGID=true
ProtectHome=true
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target

View File

@@ -26,12 +26,23 @@
- name: Editing Caddyfile to setup the reverse_proxy
ansible.builtin.template:
src: ~/ansible/templates/Caddyfile.j2
src: ../templates/Caddyfile.j2
dest: /etc/caddy/Caddyfile
- name: Create the usertwist group
ansible.builtin.group:
name: usertwist
- name: Create the usertwist user
ansible.builtin.user:
name: usertwist
group: usertwist
system: true
shell: /usr/sbin/nologin
- name: Put the service binary on the remote server
ansible.builtin.copy:
src: ~/ansible/files/usertwist
src: ../files/usertwist
dest: /usr/local/bin
owner: root
group: root
@@ -39,7 +50,7 @@
- name: Put the service systemd file on the remote server
ansible.builtin.copy:
src: ~/ansible/files/usertwist.service
src: ../files/usertwist.service
dest: /etc/systemd/system
owner: root
group: root

View File

@@ -0,0 +1,22 @@
Setup IPTables
=========
Create iptables rules on the remote server to allow connection on WEB and SSH ports only
Example Playbook
----------------
- hosts: servers
roles:
- setup_iptables
License
-------
BSD
Author Information
------------------
Motysten
E-Mail : mdm@athelas.fr

View File

@@ -0,0 +1,34 @@
galaxy_info:
author: Motysten
description: Dev
company: Athelas
# If the issue tracker for your role is not on github, uncomment the
# next line and provide a value
# issue_tracker_url: http://example.com/issue/tracker
# Choose a valid license ID from https://spdx.org - some suggested licenses:
# - BSD-3-Clause (default)
# - MIT
# - GPL-2.0-or-later
# - GPL-3.0-only
# - Apache-2.0
# - CC-BY-4.0
license: MIT
min_ansible_version: 2.1
# If this a Container Enabled role, provide the minimum Ansible Container version.
# min_ansible_container_version:
galaxy_tags: []
# List tags for your role here, one per line. A tag is a keyword that describes
# and categorizes the role. Users find roles by searching for tags. Be sure to
# remove the '[]' above, if you add tags to this list.
#
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
# Maximum 20 tags per role.
dependencies: []
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
# if you add dependencies to this list.

View File

@@ -0,0 +1,45 @@
---
# tasks file for setup_iptables
- name: Open needed ports
ansible.builtin.iptables:
chain: INPUT
protocol: tcp
in_interface: eth0
jump: ACCEPT
destination_ports:
- "22"
- "443"
- "80"
- name: Accept connection on lo (for Caddy <-> usertwist communication)
ansible.builtin.iptables:
chain: INPUT
protocol: tcp
in_interface: lo
jump: ACCEPT
- name: Set INPUT policy to DROP
ansible.builtin.iptables:
chain: INPUT
policy: DROP
- name: Create iptables folder in /etc
ansible.builtin.file:
path: /etc/ansible
state: directory
mode: '0755'
- name: Install iptables-persistent for rules persistence
ansible.builtin.package:
name: iptables-persistent
update_cache: true
- name: Save IPv4 rules to keep them on reboot
community.general.iptables_state:
state: saved
path: /etc/iptables/rules.v4
- name: Save IPv6 rules to keep them on reboot
community.general.iptables_state:
state: saved
path: /etc/iptables/rules.v6

View File

@@ -1,20 +1,6 @@
- name: Edit iptables settings
hosts: athelas
become: true
tasks:
- name: Open needed ports
ansible.builtin.iptables:
chain: INPUT
protocol: tcp
in_interface: eth0
jump: ACCEPT
destination_ports:
- "22"
- "8081"
- "80"
- name: Set INPUT policy to DROP
ansible.builtin.iptables:
chain: INPUT
policy: DROP
roles:
- setup_iptables

View File

@@ -9,19 +9,19 @@
- name: Get SSH Private Key
ansible.builtin.fetch:
dest: "~/ansible/keys/"
dest: "../keys/"
src: "~/ssh_key"
flat: true
- name: Get SSH Public Key
ansible.builtin.fetch:
dest: "~/ansible/keys/"
dest: "../keys/"
src: "~/ssh_key.pub"
flat: true
- name: Copy new SSH configuration
ansible.builtin.template:
src: "~/ansible/templates/sshd_config.j2"
src: "../templates/sshd_config.j2"
dest: "/etc/ssh/sshd_config"
- name: Create new user
@@ -40,7 +40,7 @@
- name: Add SSH public key to remote host
ansible.builtin.authorized_key:
user: "motysten"
key: "{{ lookup('file', '~/ansible/keys/ssh_key.pub') }}"
key: "{{ lookup('file', '../keys/ssh_key.pub') }}"
become: true
- name: Restart SSH Services

View File

@@ -18,6 +18,14 @@ poc.athelas.fr {
ca https://acme-staging-v02.api.letsencrypt.org/directory
}
handle_errors {
rewrite * /{err.status_code}
reverse_proxy https://http.cat {
header_up Host {upstream_hostport}
replace_status {err.status_code}
}
}
}
# Refer to the Caddy docs for more information: